WebRTC中的通话记录问题

时间:2018-10-28 08:07:51

标签: android webrtc android-mediarecorder call-recording

我已经为WebRTC视频通话开发了一个Android应用,该应用运行正常。现在的要求是记录通话音频并将其存储在外部存储中。 我已经尝试过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);。            // records.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);

在WebRTC通话期间如何录制音频?任何帮助将不胜感激。谢谢

2 个答案:

答案 0 :(得分:1)

看看RecordedAudioToFileController类。它能够将音频流记录为PCM格式的文​​件。

如果要在输出中获取常规的压缩音频文件(如3gp,mp3等),则必须手动创建音频容器,对其进行编码和写入编码后的样本。

答案 1 :(得分:1)

您需要添加此文件RecordedAudioToFileController。另外,请记住在此文件PeerConnectionClient中设置setSamplesReadyCallback。