今年4月时,我们一个利用WEBRTC开发的单人及多人语音功能需要新增一个录音功能,由此又开始一段艰苦的WEBRTC研究之旅。
最开始时,记得WEBRTC中好像提供了录音功能,兴冲冲一试,成了,可以录,还提供了录制文件格式的转换功能(ILBC2PCM等),太好了,立即应用于产品中。
不过好景不长,一经测试,居然没有自己的声音,只有对方或多人语音会议中其它人的声音,原来WEBRTC只能录制麦克风输入或音箱输出的声音,不能同时录制二者的声音。怎么办呢?经过多方查找,网络询问,没有任何人有办法。最后无法,上WEBRTC在google的讨论组,直接问开发人员吧。开发小组的回答如下:
===================================================
webrtc@googlecode.com 通过“codesite.bounces.google.com”发送至 我
Updates:
Status: WontFix
Owner: braveyao@webrtc.org
Comment #1 on issue 1567 by braveyao@webrtc.org: How to record mixed(speaker+mic) signal to file
http://code.google.com/p/webrtc/issues/detail?id=1567
True. We abandoned that functionality in WebRTC. Also File is not our focusing any more. Sorry about that.
===================================================
居然是不支持该功能,以后也不会支持。
这下傻眼了吧。
OK,WEBRTC不支持该功能,我该怎么办呢,有源码在手,我还怕没办法?!!
经过多日研究,发现WEBRTC的语音引擎中关于语音录制功能主要在VoEFile及其实现类(VoEFileImpl)中实现,音箱输出的录制主要是通过 OutputMixer* _outputMixerPtr; 这个声明在SharedData类中的成员变量来实现,麦克风声音的录制主要是通过 TransmitMixer* _transmitMixerPtr; 这个成员变量来录制。这两个变量其实就是一个混淆器,通过监控混淆器中的每一帻,实现将语音数据记录至文件流中。
研究到这,就有一个想法出现,如果我将这两个混淆器输出的每一帻再合在一起混淆一次,并输出至一个文件流中,不就实现我所需要的录音功能了吗?
1、首先在VoEFile中增加一对public方法,用来开始及结束录音
//for Record speaker+mic
// Starts recording the mixed playout audio and mic.
virtual int StartRecordingPlayoutAndMic(const char* fileNameUTF8,
最开始时,记得WEBRTC中好像提供了录音功能,兴冲冲一试,成了,可以录,还提供了录制文件格式的转换功能(ILBC2PCM等),太好了,立即应用于产品中。
不过好景不长,一经测试,居然没有自己的声音,只有对方或多人语音会议中其它人的声音,原来WEBRTC只能录制麦克风输入或音箱输出的声音,不能同时录制二者的声音。怎么办呢?经过多方查找,网络询问,没有任何人有办法。最后无法,上WEBRTC在google的讨论组,直接问开发人员吧。开发小组的回答如下:
===================================================
webrtc@googlecode.com 通过“codesite.bounces.google.com”发送至 我
Updates:
Status: WontFix
Owner: braveyao@webrtc.org
Comment #1 on issue 1567 by braveyao@webrtc.org: How to record mixed(speaker+mic) signal to file
http://code.google.com/p/webrtc/issues/detail?id=1567
True. We abandoned that functionality in WebRTC. Also File is not our focusing any more. Sorry about that.
===================================================
居然是不支持该功能,以后也不会支持。
这下傻眼了吧。
OK,WEBRTC不支持该功能,我该怎么办呢,有源码在手,我还怕没办法?!!
经过多日研究,发现WEBRTC的语音引擎中关于语音录制功能主要在VoEFile及其实现类(VoEFileImpl)中实现,音箱输出的录制主要是通过 OutputMixer* _outputMixerPtr; 这个声明在SharedData类中的成员变量来实现,麦克风声音的录制主要是通过 TransmitMixer* _transmitMixerPtr; 这个成员变量来录制。这两个变量其实就是一个混淆器,通过监控混淆器中的每一帻,实现将语音数据记录至文件流中。
研究到这,就有一个想法出现,如果我将这两个混淆器输出的每一帻再合在一起混淆一次,并输出至一个文件流中,不就实现我所需要的录音功能了吗?
1、首先在VoEFile中增加一对public方法,用来开始及结束录音
//for Record speaker+mic
// Starts recording the mixed playout audio and mic.
virtual int StartRecordingPlayoutAndMic(const char* fileNameUTF8,

本文讲述了在WEBRTC中遇到的录音问题,官方不支持同时录制麦克风和音箱输出。作者通过深入研究源码,实现了在VoEFile中增加混音录音功能,通过合并OutputMixer和TransmitMixer的输出,成功录制混合音频。
最低0.47元/天 解锁文章
677

被折叠的 条评论
为什么被折叠?



