Проблема с записью звонков в WebRTC

Я разработал приложение для Android для видеозвонков WebRTC, которое работает нормально. Теперь необходимо записать звук разговора и сохранить его на внешнем хранилище. Я пробовал MedieRecorder, который записывает звук и сохраняет его, но столкнулся с одной проблемой. когда я начинаю записывать звук, голос останавливается на приемной стороне. Media Recorder не позволял webrtc использовать микрофон.

Я пробовал следующий код.

private boolean startMediaRecorder(){
    recorder = new MediaRecorder();
    try{
        recorder.reset();
        //recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);

        recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);

        recorder.setAudioSamplingRate(8000);
        recorder.setAudioEncodingBitRate(12200);
        //recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
        //recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
       // String fileName = audiofile.getAbsolutePath();

        String fileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" +
                        CreateRandomAudioFileName(5) + "AudioRecording.3gp";
        recorder.setOutputFile(fileName);

        MediaRecorder.OnErrorListener errorListener = new MediaRecorder.OnErrorListener() {
            public void onError(MediaRecorder arg0, int arg1, int arg2) {
                Log.e(TAG, "OnErrorListener " + arg1 + "," + arg2);
               // terminateAndEraseFile();
            }
        };
        recorder.setOnErrorListener(errorListener);

        MediaRecorder.OnInfoListener infoListener = new MediaRecorder.OnInfoListener() {
            public void onInfo(MediaRecorder arg0, int arg1, int arg2) {
                Log.e(TAG, "OnInfoListener " + arg1 + "," + arg2);
                //terminateAndEraseFile();
            }
        };
        recorder.setOnInfoListener(infoListener);


        recorder.prepare();
        // Sometimes prepare takes some time to complete
        Thread.sleep(2000);
        recorder.start();
        isRecordStarted = true;
        return true;
    }catch (Exception e){
        e.getMessage();
        return false;
    }
}

Я также пробовал `Recorder.setAudioSource (MediaRecorder.AudioSource.MIC); // рекордер.setAudioSource (MediaRecorder.AudioSource.VOICE_CALL);

Как я могу записать звук во время звонка WebRTC? Любая помощь будет очень оценена. Благодарность

С какой версией Andriod вы работаете?

Itamar Kerbel 11.11.2018 15:31

Я столкнулся с этой проблемой. stackoverflow.com/questions/62633876/… Помогите решить это?

Gopinathan B 29.06.2020 12:51
1
2
1 066
2

Ответы 2

Посмотрите на класс RecordedAudioToFileController. Он может записывать аудиопоток в файл в формате PCM.

Если вы хотите получить на выходе обычный сжатый аудиофайл, например 3gp, mp3 и т. д., Вам нужно вручную создать аудиоконтейнер, закодировать и записать в него закодированные сэмплы.

Вам нужно добавить этот файл RecordedAudioToFileController. Кроме того, не забудьте установить SamplesReadyCallback в этом файле PeerConnectionClient.

Другие вопросы по теме