我已经为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通话期间如何录制音频?任何帮助将不胜感激。谢谢
答案 0 :(得分:1)
看看RecordedAudioToFileController类。它能够将音频流记录为PCM格式的文件。
如果要在输出中获取常规的压缩音频文件(如3gp,mp3等),则必须手动创建音频容器,对其进行编码和写入编码后的样本。
答案 1 :(得分:1)
您需要添加此文件RecordedAudioToFileController。另外,请记住在此文件PeerConnectionClient中设置setSamplesReadyCallback。