我正在使用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吗?
感谢
答案 0 :(得分:1)
现在上游GStreamer中包含一个回声消除器。它将与GStreamer 1.10一起发货。它使用的是WebRTC项目中的DSP模块,它比speex好得多。我建议使用它。在echo循环上使用简单:
gst-launch-1.0 autoaudiosrc ! webrtcdsp ! webrtcechoprobe ! autoaudiosink
有关详细信息,请参阅http://ndufresne.ca/2016/06/gstreamer-echo-canceller/。
答案 1 :(得分:0)
您不需要“扬声器的输出”,您需要发送到扬声器的音频。