[pulseaudio-discuss] Need help to enable echo cancel in pulseaudio

Arun Raghavan arun at accosted.net
Wed May 28 22:00:01 PDT 2014


On 29 May 2014 02:59, Puyol <paul9510 at hotmail.fr> wrote:
> I'm implementing a voip application using gstreamer, i use the example of
> the rtp in the plugin-good! i want to implement echo cancellation, i
> couldn't use the speex echo canceller with gstreamer because the input and
> the output are not in the same process. So, i want to use pulse audio to
> make echo cancellation? can any one help me how to deal with? the sender
> voice is
>
> pipeline = gst_pipeline_new (NULL);
>   g_assert (pipeline);
>
>   /* the audio capture and format conversion */
>   audiosrc = gst_element_factory_make (pulsesrc, "audiosrc");
>   g_assert (audiosrc);
>   audioconv = gst_element_factory_make ("audioconvert", "audioconv");
>   g_assert (audioconv);
>   audiores = gst_element_factory_make ("audioresample", "audiores");
>   g_assert (audiores);
>   /* the encoding and payloading */
>   audioenc = gst_element_factory_make (AUDIO_ENC, "audioenc");
>   g_assert (audioenc);
>   audiopay = gst_element_factory_make (AUDIO_PAY, "audiopay");
>   g_assert (audiopay);
>
>   /* add capture and payloading to the pipeline and link */
>   gst_bin_add_many (GST_BIN (pipeline), audiosrc, audioconv, audiores,
>       audioenc, audiopay, NULL);
>
>   if (!gst_element_link_many (audiosrc, audioconv, audiores, audioenc,
>           audiopay, NULL)) {
>     g_error ("Failed to link audiosrc, audioconv, audioresample, "
>         "audio encoder and audio payloader");
>   }
> and the receiver is :
>
> gst_bin_add_many (GST_BIN (pipeline), rtpsrc, rtcpsrc, rtcpsink, NULL);
>
>   /* the depayloading and decoding */
>   audiodepay = gst_element_factory_make (AUDIO_DEPAY, "audiodepay");
>   g_assert (audiodepay);
>   audiodec = gst_element_factory_make (AUDIO_DEC, "audiodec");
>   g_assert (audiodec);
>   /* the audio playback and format conversion */
>   audioconv = gst_element_factory_make ("audioconvert", "audioconv");
>   g_assert (audioconv);
>   audiores = gst_element_factory_make ("audioresample", "audiores");
>   g_assert (audiores);
>   audiosink = gst_element_factory_make (pulsesink, "audiosink");
>   g_assert (audiosink);
>
>   /* add depayloading and playback to the pipeline and link */
>   gst_bin_add_many (GST_BIN (pipeline), audiodepay, audiodec, audioconv,
>       audiores, audiosink, NULL);
>
>   res = gst_element_link_many (audiodepay, audiodec, audioconv, audiores,
>       audiosink, NULL);
>   g_assert (res == TRUE);
>
> i tried to change gstreamer proprietes to pulseaudio server in input and
> output
> and i used "pactl load-module module-echo-cancel aec_method=adrian" but i
> still listen to echo!! any one could help please
> thanks!!

The adrian canceller doesn't work well if at all. Use the webrtc or
speex canceller. If it doesn't work, please post the output of pactl
list while your streams are running.

Cheers,
Arun


More information about the pulseaudio-discuss mailing list