[Bug 767800] New: Introduce a WebRTC Audio Processing based echo canceller for GStreamer

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Fri Jun 17 21:06:08 UTC 2016


https://bugzilla.gnome.org/show_bug.cgi?id=767800

            Bug ID: 767800
           Summary: Introduce a WebRTC Audio Processing based echo
                    canceller for GStreamer
    Classification: Platform
           Product: GStreamer
           Version: git master
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: Normal
         Component: gst-plugins-bad
          Assignee: gstreamer-bugs at lists.freedesktop.org
          Reporter: nicolas at ndufresne.ca
        QA Contact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---

I have written minimal support for echo cancelling using WebRTC Audio
Processing library (v0.2). The design introduces two new element, webrtcdsp and
webrtcechoprobe.

The webrtcdsp is called this way as it's responsible for Noise Supression, Echo
Cancellation, Automatic Gain Control and many more filters. It can also provide
audio level (rms), voice indication and various metrics. This element is
generally placed near the capture.

On the other end, the webrtcechoprobe is a simpler element that keep a short
amount of echo data. The echo data is the data that you are playing back, but
that you want to suppress from your recording. It's generally the audio from
the far end, probed right before the audiosink.

As the WebRTC library only accept 10ms buffers, both dsp and probe uses an
adapter to accumulate and process data. The probe is configured on the DSP
using it's object name. A minimalistic global cache has been created to let the
dsp finds it's probe. Once a probed is used by a dsp, it cannot be used by any
other dsp.

A symbolic pipeline would be:
  far_end_src ! webrtcechoprobe ! audiosink
  audiosrc ! webrtcdsp ! far_end_sink

One can test a single echo loop-back using the following pipeline. Note that
the library is not design for this kind of usage. You will notice the side
effect when sending a monotonic tone to it. But it's good enough for local
testing. Such pipeline is expected to produce a single echo.

  pulsesrc ! webrtcdsp ! webrtcechoprobe ! pulesink

In the following implementation, both element need to reside in the same
pipeline (they need to have the same base_time for proper synchronisation). The
following patch is also a work-in-progress, though I'd like to merge with a
minimal set of features. We can then add more features iteratively. Features
that won't initially be implemented:

  - Beamforming (to use those stereo microphones!)
  - Level/Voice Activity/Metrics
  - Drift Control
  - Mobile Mode
  - Analog Gain Control (we enable it in software atm)

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list