[FFmpeg-devel] Adding libspeexdsp's AEC to FFmpeg.

Arseniy Skvortsov ettavolt at gmail.com
Tue Sep 4 10:09:22 EEST 2018


I'm trying to add AEC from libspeexdsp to libavfilter.
Target use case: two Android smartphones recording audio, transmitting it  
with RTP to some processor, which cancels echo, adds a delay to sync with  
another video stream, mixes with music and outputs to a stereo system.

First line of the log file attached shows the commandline I use for  
testing. What the filtergraph means: grab mono from USB webcam, pass it as  
'record' to AEC, loopback 'cleaned' output with a frame delay as  
'playback' for AEC, build a stereo output from a 'cleaned' output and a  
channel of silence.
OFFTOPIC: Had to use ALSA directly because pulse demuxer has some weird  
delay problem (https://bbs.archlinux.org/viewtopic.php?id=239893).

So far AEC already does something useful because positive  
self-amplification (or what's the term for this?) starts on a [slightly]  
larger volume then without this filter. ☺
Still, it doesn't remove the effect completely. I suspect, that it may be  
related to warnings
[alsa @ 0x56554d388bc0] ALSA buffer xrun
and FF_FILTER_FORWARD_STATUS_BACK_ALL dropping all queued frames when  
output isn't ready. How do you think, is it true?

I've also explored possibility of adding webrtc-audio-processing's AEC,  
but for that I'd need to build a C/C++ wrapper. Of which I haven't found  
any example in FFmpeg's code. People out there say that it's better than  
libspeexdsp's. Plus Xiph seems to be very insisting on 'one-quartz  
recording & playback', while my use case is definitely nothing like this.  
What do you think about this?

Any suggestions are welcome.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-AEC-filter-from-Speex.patch
Type: application/octet-stream
Size: 12662 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20180904/64d90c8c/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: speexaec.log
Type: application/octet-stream
Size: 10392 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20180904/64d90c8c/attachment-0001.obj>

More information about the ffmpeg-devel mailing list