Я использую медиа-рекордер для записи экрана, и мне интересно, могу ли я использовать AudioPlaybackCapture API для потоковой передачи системного звука? Я знаю, что mediarecorder - это API-интерфейс высокого уровня, и MediaMuxer дал бы мне больше контроля, но приложение уже использует много API-интерфейсов mediarecorder, и нет никакого способа вернуться назад.
Я попытался настроить AudioRecord
и используйте getAudioSource()
для установки источника звука в медиа-рекордере, как показано ниже, но это не удалось, и getAudioSource () возвращает идентификатор r_submix, который требует, чтобы приложение было системным приложением.
int bufferSize = AudioRecord.getMinBufferSize(32000,
AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT) * 2;
AudioPlaybackCaptureConfiguration audioConfig =
new AudioPlaybackCaptureConfiguration.Builder(mMediaProjection)
.addMatchingUsage(AudioAttributes.USAGE_MEDIA)
.addMatchingUsage(AudioAttributes.USAGE_UNKNOWN)
.addMatchingUsage(AudioAttributes.USAGE_GAME)
.build();
AudioFormat audioFormat = new AudioFormat.Builder()
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setSampleRate(32000)
.setChannelMask(AudioFormat.CHANNEL_IN_STEREO)
.build();
AudioRecord recorder = new AudioRecord.Builder()
.setAudioPlaybackCaptureConfig(audioConfig)
.setAudioFormat(audioFormat)
.setBufferSizeInBytes(bufferSize)
.build();
mMediaRecorder.setAudioSource(recorder.getAudioSource());
tl; dr: Я ищу решение для использования AudioPlaybackCapture API вместе с медиа-рекордером для захвата внутреннего звука.