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