Проблема с записью звонка в WebRTC - PullRequest
0 голосов
/ 28 октября 2018

Я разработал приложение для 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;
    }
}

Я также попытался `recordder.setAudioSource (MediaRecorder.AudioSource.MIC);// Recorder.setAudioSource (MediaRecorder.AudioSource.VOICE_CALL);

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

1 Ответ

0 голосов
/ 12 ноября 2018

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

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

...