Webrtc 回音消除 一

时间:2024-03-31 08:20:51

Webrtc 回音消除 一

2017-03-28 18:09 4062人阅读 评论(8) 收藏 举报
Webrtc 回音消除 一 分类:

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)

//*********************************************************************************//



Webrtc 回音消除 一