版权声明:本文为博主原创文章,未经博主允许不得转载。
Webrtc的Aec模块调试回音消除已经快一个月了,今天有了一个小的突破,终于Demo可以成功消除回音了!!!
步奏:
//*********************************************************************************//
1、首先下载webrtc源码提取Aec模块,编写Android.mk或Makefile编译不多说
//*********************************************************************************//
//*********************************************************************************//
2、编写Demo程序单独调试Aec接口。
a:可以验证接口
b:有了成功的Demo做样板再往设备移植不会出现茫然的调试
//*********************************************************************************//
//*********************************************************************************//
3、Demo程序调试成功,往真实设备移植
a:要考虑真实设备的speaker和mic数据延时(延时值是AEC的核心,移动端最重要的值就是这个aecdelay)
b:要考虑speaker和mic线程的同步
c:要考虑speaker和mic存储队列要对齐(这个队列也是很有讲究的,维护队列长度是个调试值,大于此维护长度干嘛,小于此维护长干嘛)
d:要考虑到数据类型转换(char、float和short)
e:要考虑网络传输而来的speaker数据质量差的问题(这是一个很难得攻克点,需要添加队列通过算法排序speaker数据)
//*********************************************************************************//
下面记录一下近期调试的一些心得
//*********************************************************************************//
AEC函数描述:
//*********************************************************************************//
//储存远端数据即speak数据,也可以成为回声的原始数据(far_frame)
EWebRtcAEC_BufferFarend(handleAec, far_frame, NN)
//*********************************************************************************//
//*********************************************************************************//
//回声消除,near_frame为mic数据(double talk包含回声和录入声音)aecout_frame为输出数据
//near_frame中的回音能量应该远小于far_frame和录入声音的能量,才能正常消除。否则Aec无法精确判断谁是回音谁是录入声音,从而把录入声音一起消除
//aecdelay为speaker和mic的延迟时间
1、当设备为固定硬件平台aecdelay可以为固定值(比如我们的设备端)
2、当设备不固定,则aecdelay需要通过EWebRtcAEC_GetDelayMetrics计算(比如我们的客户端在手机上,手机硬件平台不固定)
EWebRtcAEC_Process(handleAec,near_frame,1, aecout_frame,NN,aecdelay,0);
//*********************************************************************************//
//*********************************************************************************//
//参数描述:median为平均值,std为方差,delay的取值主要来源于median
EWebRtcAEC_GetDelayMetrics(handleAecDelay,median,std,frac)
//*********************************************************************************//