当前位置: 首页 > 知识库问答 >
问题:

WebRTC中的呼叫记录问题

古明煦
2023-03-14

我已经开发了一个用于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;
    }
}

我也尝试过“录音机”音频源(媒体记录器,音频源.MIC);录音机音频源(MediaRecorder.AudioSource.VOICE_CALL);

我如何在WebRTC通话期间录制音频?非常感谢任何帮助。谢谢。

共有2个答案

鲜于岳
2023-03-14

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

羊丰茂
2023-03-14

查看RecordedAudioToFileController类。它能够以PCM格式将音频流记录到文件中。

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

 类似资料:
  • 使用AudioSource VOICE_UPLINK和Voice_Downlink成功录制的任何一个呼叫。 还有一个问题:-当音频源VOICE_CALL不工作时,它有什么用? 谢谢你。

  • 更新:任何人都知道如何强迫另一个流到麦克风音频源。这需要原生android代码。请在这方面帮助我,请参考这个问题,以获得更多关于路由音频的详细信息

  • 我正在开发一个Android应用程序,用于使用媒体记录器录制通话,它适用于某些设备,但不能在7.1.1及更高版本的设备上录制其他人的声音,特别是在moto g设备上。 这是我的媒体记录器代码。 有没有办法实现这一点,请建议

  • 如何获得呼叫的位置?不是全部地点,只是一个地区?也许android有一些API?未找到内容解析程序和Calllog.calls.content_uri

  • 在Android 10(Pixel 3A)中,通话记录器在持续时间内录制空白。它适用于所有手机,直到Android 8和Android 9,大多数手机只录制一侧语音(但在像素3A中工作正常) 有没有办法在Android10中录制通话? 下面的代码似乎不再工作了。 如果使用SDK 28或更低版本,则会在整个过程中进行通话录音,但没有任何语音。如果使用SDK 29,则通话录音开始时失败,提示检查回调中

  • 问题内容: 我正在重新整理用golang编写的小型Web应用程序的日志记录。由于外部需求,日志记录已被隔离在一个地方,因此我们以后可能会切换到 日志记录服务器 。(不是我的主意- 我保证…。)尽管如此,我们现在基本上可以使用标准库的一部分以及我们正在传递的用户/会话结构来记录日期/时间,行号,用户和消息等常见信息周围。 但是-随之而来的问题是- 在较低级别的方法中,仅为了获取日志而仅为了获取用户名