Использование AudioPlaybackCapture API в MediaRecorder - PullRequest
0 голосов
/ 19 апреля 2020

Я использую медиа-рекордер для записи экрана, и мне интересно, могу ли я использовать 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 вместе с медиа-рекордером для захвата внутреннего звука.

...