Android echo cancellation

Nicolas Dufresne nicolas.dufresne at gmail.com
Thu Nov 3 17:32:26 UTC 2016


Le jeudi 03 novembre 2016 à 04:44 -0700, WS a écrit :
> Hi, I am developing a gstreamer VOIP application for Android with the
> requirement to a) switch between internal and external speakers b)
> using (ideally) the Android provided echo cancellation when using the
> external speakers unfortunately I seem to have opened a can of worms,
> in particular with respect to the android EchoCancellation issue. (I
> managed to solve that particular problem by compiling my own
> libOpenSLES and incorporating a few lines of code from later android
> versions). The basic problem: Android Platform 14 doesn't exposes the
> android echo cancellation feature in its opensles implementation
> (libOpenSLES which is required for android gstreamer builds). Btw, it
> also doesn't expose the AudioManager's session ID - which would be
> sufficient to create echo-cancellation through passing it on to java
> code. Later android platforms allow that (I dont know when it
> happened but 21 should work) - there, android opensles has a feature
> to enable echo cancellation. I have seen no documentation but
> discovered a property somewhere in the android opensles sources,
> which does not exist in platform 14. My attempt for a solution -
> using a higher APP_PLATFORM than 14: 1) compile existing gstreamer-
> sdk with APP_PLATFORM := android-21 that fails. The gstreamer-sdk
> code is not compatible. 2) create a new gstreamer-sdk (cerbero) with
> updated glib, pixman, and other libraries and new android-ndk... That
> task was beyond me. I tried to simply update the version numbers in
> the .recipie files but the code is partially pulled from the
> gstreamer-sdk git for several libraries, (e.g. pixman) where the
> newer versions do not exist. I couldn't yet figure out howto change
> the recipies to pull the source code from the official
> repositories... I am confused and not sure how to best solve the
> problem... Any help about the strategy or pointer in the right
> direction is appreciated

One solution here would be to move to GStreamer 1.10, and use the new
GStreamer echo cancellation elements. This way you will no longer
depend on the platform. Obviously, it means you'll do cancellation in
software always and not let the OS decided between using HW or SW. See:

https://ndufresne.ca/2016/06/gstreamer-echo-canceller/

regards,
Nicolas


More information about the gstreamer-devel mailing list