WebRTC audio tuning (Echo Cancellation)

3,089 views
Skip to first unread message

Mikael Nylund

unread,
Jan 16, 2014, 8:50:58 AM1/16/14
to discuss...@googlegroups.com
Hi,

I tried to search the posts, but could not find the right answer for my problems that Im facing with audio tuning.

We are creating a product where one peer is native WebRTC application on Android platform and other end is web app running in Chrome.

Everything is working quite nicely, but I have some audio quality issues, especially in Automatic Echo Cancellation (or so I think). The following is my
common man analysis.

* There is too much echo cancellation
       - The audio is not clear enough, it seems that it starts to eat it's own signal. Audio becomes "Wobbly", sometimes you hear what the other person
is saying and sometimes you need to ask them to repeat what they just said.

If I remove completely AEC, the audio is much more clearer (quite much), not "wobbly" anymore, but I introduce echo to the call, which is not OK.

So my question is how I can tune the AEC? Is it even possible? And how are the following parameters interpreted (from: chrome://webrtc-internals):

Are the *EchoCancellation* parameters "tuneable", or is AEC like on/off switch? If those are tuneable, how are the parameters used. Any help is welcome. Thanks!

-Mikael


googEchoCancellationQualityMin1
googEchoCancellationEchoDelayMedian-60
googEchoCancellationEchoDelayStdDev0
googEchoCancellationReturnLoss-100
googEchoCancellationReturnLossEnhancement-100
googCodecNameopus
googTypingNoiseStatefalse
audioOutputLevel38







Bo Xu

unread,
Jan 16, 2014, 9:39:36 AM1/16/14
to discuss...@googlegroups.com
I ever used the APIs in echo_cancellation.h for AEC, for example:
...
int32_t WebRtcAec_BufferFarend(void *aecInst, const int16_t *farend, int16_t nrOfSamples);
int32_t WebRtcAec_Process(void *aecInst, const int16_t *nearend, const int16_t *nearendH, int16_t *out, int16_t *outH, int16_t nrOfSamples, int16_t msInSndCardBuf, int32_t skew);
...

I guess that might be similar with your case, the parameter msInSndCardBuf(Delay estimate for sound card and system buffers) is important for the audio quality, if it is accurate then then AEC quality is quite good, if it not accurate the the echo cannot be removed or the audio quality will be lower. also for some system this parameter might be not a fixed value(like drift), so it is better to adjust it not only in the beginning but also in real-time. also the algorithm might be like PBFDAF with 12-blocks so this delay cannot be too long for removing the echo.

Regards,
Bo Xu
 

Jason Woo

unread,
Jun 26, 2017, 1:09:39 AM6/26/17
to discuss-webrtc
Sorry for posting this message so late.. But I really curious about the delay estimate, how could it be adjusted in real-time? Would you please introduce more detail about the delay tuning? Thank you !

在 2014年1月16日星期四 UTC+8下午10:39:36,Bo Xu写道:

Jason Woo

unread,
Jun 26, 2017, 1:12:47 AM6/26/17
to discuss-webrtc
More precisely, can we obtain echo is cancelled or not from aec? 


在 2014年1月16日星期四 UTC+8下午10:39:36,Bo Xu写道:
I ever used the APIs in echo_cancellation.h for AEC, for example:
Reply all
Reply to author
Forward
0 new messages