Video streaming GStreamer RTPBIN通过gst启动调用进行前向错误更正

Video streaming GStreamer RTPBIN通过gst启动调用进行前向错误更正,video-streaming,streaming,gstreamer,audio-streaming,http-live-streaming,Video Streaming,Streaming,Gstreamer,Audio Streaming,Http Live Streaming,在这个问题的末尾,我想对通过gst-launch-1.0启动的gstream发送和接收流命令添加前向纠错。 具体来说,我使用的是rtpbin,它公开了两个请求焊盘,以允许连接前向纠错“请求fec解码器”和“请求fec编码器”。 我想使用的前向纠错由“rtpallfecenc”和“rtpallfecdec”提供。 不幸的是,我在网上找不到任何示例来说明如何通过gst启动呼叫将请求板连接到rtpbin。有人知道这是否可能吗?如果是这样的话,任何关于如何做到这一点的提示都将不胜感激,因为我真的不知道

在这个问题的末尾,我想对通过gst-launch-1.0启动的gstream发送和接收流命令添加前向纠错。 具体来说,我使用的是rtpbin,它公开了两个请求焊盘,以允许连接前向纠错“请求fec解码器”和“请求fec编码器”。 我想使用的前向纠错由“rtpallfecenc”和“rtpallfecdec”提供。

不幸的是,我在网上找不到任何示例来说明如何通过gst启动呼叫将请求板连接到rtpbin。有人知道这是否可能吗?如果是这样的话,任何关于如何做到这一点的提示都将不胜感激,因为我真的不知道从哪里开始

rtpbin doc页面说明了需要请求一个辅助流,但在gst启动命令的上下文中,它对我来说没有多大意义

GstRtpBin有信号(#GstRtpBin::request aux sender和GstRtpBin::request aux receiver动态请求可用于创建或合并额外RTP流的元素。需要辅助元素来实现FEC或重传(如RFC 4588)。辅助发送器必须有一个与信号中的sessionid匹配的接收器\uu%u焊盘,并且它应该有一个或多个src \uu焊盘。对于每个src \uu%u焊盘,将进行一次会话(如果需要)并且pad将链接到会话发送\u rtp\u接收器pad。然后,每个会话将在GstRtpBin上将其源pad显示为发送\u rtp\u src\u%u。辅助接收器有1个与信号中的会话ID非常匹配的src\u%u pad和1个或多个接收器\u%u pad。当在上请求相应的recv\u rtp\u接收器\u%u pad时,将为每个接收器\u%u pad创建会话GstRtpBin。GstRtpBin::request jitterbuffer信号可用于提供自定义元素,以执行到达时间平滑、重新排序以及可选的丢包检测和重传请求

下面是我试图将其添加到的命令(仅供参考)

gst-launch-1.0 -v rtpbin name=rtpbin_o \
         rpicamsrc rotation=90 bitrate=800000 preview=1 preview-encoded=1 fullscreen=0 preview-x=20 preview-y=20 preview-w=320 preview-h=190 do-timestamp=1 ! video/x-h264,width=800,height=448,framerate=30/1 ! queue ! h264parse config-interval=1 ! rtph264pay ! rtpbin_o.send_rtp_sink_0 \
                   rtpbin_o.send_rtp_src_0 ! udpsink host=127.0.0.1 port=5000                            \
                   rtpbin_o.send_rtcp_src_0 ! udpsink host=127.0.0.1 port=5001 sync=false async=false    \
         udpsrc port=5005 ! rtpbin_o.recv_rtcp_sink_0                           \
         alsasrc device=hw:2,0 do-timestamp=1 ! queue ! audioconvert ! audio/x-raw,format=S16LE,rate=48000,channels=2 ! opusenc bitrate=96000 ! rtpopuspay ! rtpbin_o.send_rtp_sink_1                   \
                   rtpbin_o.send_rtp_src_1 ! udpsink host=127.0.0.1 port=5002                            \
                   rtpbin_o.send_rtcp_src_1 ! udpsink host=127.0.0.1 port=5003 sync=false async=false    \
         udpsrc port=5007 ! rtpbin_o.recv_rtcp_sink_1
gst-launch-1.0 -v rtpbin name=rtpbin_i                                          \
     udpsrc caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264" port=5000 ! rtpbin_i.recv_rtp_sink_0 rtpbin_i. ! rtph264depay ! h264parse ! v4l2h264dec capture-io-mode=4 ! xvimagesink \
     udpsrc port=5001 ! rtpbin_i.recv_rtcp_sink_0 rtpbin_i.send_rtcp_src_0 ! udpsink host=127.0.0.1 port=5005 sync=false async=false        \
     udpsrc caps="application/x-rtp,media=(string)audio,clock-rate=(int)48000,encoding-name=(string)OPUS" port=5002 ! rtpbin_i.recv_rtp_sink_1 rtpbin_i. ! rtpopusdepay ! opusdec ! alsasink device=hw:1,0 \
     udpsrc port=5003 ! rtpbin_i.recv_rtcp_sink_1 rtpbin_i.send_rtcp_src_1 ! udpsink host=127.0.0.1 port=5007 sync=false async=false