gpt4 book ai didi

c - gstreamer 中的声学回声消除

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:35 26 4
gpt4 key购买 nike

我正在使用 gstreamer 开发一个 Voip 应用程序,我使用 gstreamer 中的 rtp 示例创建了应用程序,我将客户端和服务器放在相同的代码中并且每个都在一个进程中,我让它工作但问题在于回声,所以我尝试实现 speex aec,但问题是我只有麦克风的输入,但我无法从扬声器获得输出。

语音发送部分是

 pipeline = gst_pipeline_new (NULL);
g_assert (pipeline);

/* the audio capture and format conversion */
audiosrc = gst_element_factory_make (AUDIO_SRC, "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");
}

和接收语音的部分

    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 (AUDIO_SINK, "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);

我如何使用 speex AEC?谢谢

最佳答案

现在上游 GStreamer 中包含一个回声消除器。它将随 GStreamer 1.10 一起提供。它使用 WebRTC 项目的 DSP 模块,比 speex 好得多。我会推荐使用它。回声循环的简单用法:

gst-launch-1.0 autoaudiosrc ! webrtcdsp ! webrtcechoprobe ! autoaudiosink

参见 http://ndufresne.ca/2016/06/gstreamer-echo-canceller/了解更多详情。

关于c - gstreamer 中的声学回声消除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23810421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com