软电话录音单通问题探究

时间:2021-10-08 20:24:28
windows平台下,录音默认只能录制麦克风输入的声音,其他的声音如mp3播放器,网络传输等声音信息采集不到。这就会客服端软件只能录制自己声音,对方的声音根本听不到。自己摸索了下子,目前发现有两种解决办法:
1、设置音量控制器,在屏幕右下角打开音量控制器高级设置,勾选“立体声混音”(系统默认关闭)。这时可以录制除麦克风外的环境声音,但环境声音会干扰软电话正常通话,回音很大。如果用户在通话的同是打开了mp3,对方可以听见用户电脑播放的声音。
2、只录制用户麦克风声音和对方传输过来的数据。先说说录制麦克风声音。不需要另外打开设备,已有设备线程收到麦克风声音数据,除去封装头,接下来就是通过RTP发送媒体流了。在数据发送之前把数据写入文件即可保存用户录音。在rtp接收线程里面,接收到对方媒体数据,先保存到文件,再播放,即可录制对方声音。注意接收和发送操作的必须是同一个录音文件。如下所示:
麦克风录制 waveInUnprepareHeader  (……) //除去数据头部
mmioWrite (hWaveFile) //保存文件
m_pRTPSocket->Send //rtp封装成媒体流数据
接收到数据 时 pack = pRtpSess->GetNextPacket() //有rtp数据来到
DecodeAudio(pack ->GetPayloadData() )   //先解码,还原成pcm格式数据
mmioWrite(hWaveFile,&data)//保存文件
waveOutPrepareHeader (&data) //添加格式头
waveOutWrite(&data)         //最后播放
 还有个问题就是录音质量问题,软电话采集所在运行电脑的数据,声音质量很好由于是本机。但是保存网络传输过来的数据,对方的声音质量就有问题了。网络发送过来的数据流量不稳定,有丢包情况,顺序也不定正确。需要用缓存,排序后把数据均匀写入文件