我希望构建一个同时进行 rtp 音频发送和接收的 gstreamer 管道。
根据我发现的示例(虽然很少),这是我几乎可以工作的代码。
(该程序是用 Rexx 编写的,但我认为发生的事情很明显。在这里,它看起来很像 bash!)。连线字符是逗号。"", 位只是为了可读性插入空行。
rtp_recv_port = 8554
rtp_send_port = 8555
pipeline = "gst-launch -e",
"",
"gstrtpbin",
" name=rtpbin",
"",
"udpsrc port="rtp_recv_port, -- do-timestamp=true
' ! "application/x-rtp,media=audio,payload=8,clock-rate=8000,encoding-name=PCMA,channels=1" ',
" ! rtpbin.recv_rtp_sink_0",
"",
"rtpbin. ",
" ! rtppcmadepay",
" ! decodebin ",
' ! "audio/x-raw-int, width=16, depth=16, rate=8000, channels=1" ',
" ! volume volume=5.0 ",
" ! autoaudiosink sync=false",
"",
"autoaudiosrc ",
" ! audioconvert ",
' ! "audio/x-raw-int,width=16,depth=16,rate=8000,channels=1" ',
" ! alawenc ",
" ! rtppcmapay perfect-rtptime=true mtu=2000",
" ! rtpbin.send_rtp_sink_1",
"",
"rtpbin.send_rtp_src_1 ",
" ! audioconvert",
" ! audioresample",
" ! udpsink port="rtp_send_port "host="ipaddr
pipeline "> pipe.out"
如果我注释掉之后的行
" ! autoaudiosink sync=false",
仅接收部分工作得很好。但是,如果我将这些行留在原处,我会收到此错误:
ERROR: from element /GstPipeline:pipeline0/GstUDPSrc:udpsrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2582): gst_base_src_loop (): /GstPipeline:pipeline0/GstUDPSrc:udpsrc0:
streaming task paused, reason not-linked (-1)
那么,什么突然变得没有联系了?我会理解错误是否在 autoaudiosrc 部分,但突然出现在 udpsrc 部分?
帮助的建议,有人吗?
(FWIW)在我完成这部分工作后,我将返回并添加 rtcp 部分或管道。