We've been wrestling trying to multiplex RTP and RTCP together, or preferably
multicast and multiplex RTP streams with different SSRC files on one port, and the related RTCP streams on another.. In all cases, if we send the RTCP out directly to the udpsink, it works (although we can't multiplex RTCP on the same port, as using the same host:port with udpsink on each, creates a conflict). We've narrowed down the problem to rtpfunnel, which apparently does not handle rtcp properly (we don't know why, we think it's a timing thing related to when the rtpbin.send_rtcp_sink_x is available...and so the pad doesn't exist when the rtpfunnel wants it..but not sure.. Here is a simple test case scenario.. We're declaring two funnels, f and g, f we use for rtp traffic, g we use for rtcp traffic If we send rtcp out directly to udpsink, this works, doesn't stall, and we see RTCP over wireshark.. However, if we send rtcp out through a funnel, it does not work, the rtcp never sends onto the network. This works.. gst-launch-1.0 rtpbin name=rtpbin rtpfunnel name=g rtpfunnel name=f videotestsrc ! videoconvert ! x264enc ! rtph264pay ! rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! f. rtpbin.send_rtcp_src_0 ! udpsink host=127.0.0.1 port=5002 sync=false async=false g. ! udpsink host=127.0.0.1 port=5001 sync=false async=false f. ! udpsink host=127.0.0.1 port=5000 sync=true This does not.. GST_DEBUG=5 gst-launch-1.0 rtpbin name=rtpbin rtpfunnel name=g rtpfunnel name=f videotestsrc ! videoconvert ! x264enc ! rtph264pay ! rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! f. rtpbin.send_rtcp_src_0 ! g. g. ! udpsink host=127.0.0.1 port=5001 sync=false async=false f. ! udpsink host=127.0.0.1 port=5000 sync=true The only difference is us piping RTCP out through rtpfunnel. This was noted as an issue with another user recently, but received no response. I believe the issue lies within rtpfunnel, however, we're open to coming up with another approach if viable.. We ultimately want to mux multiple RTP streams on one port and mux the related RTCP streams onto another port... all from the same clock. Using rtpfunnel hangs us up when we push rtcp through the funnel. -- Sent from: http://gstreamer-devel.966125.n4.nabble.com/ _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
The rtpfunnel element is not really designed for funnelling RTCP
packets. The rtpfunnel element is explicitly for funnelling rtp data and is generally placed before rtpbin on the sending side for sending over a single RTP session. Something like: rtpfunnel name=f ! rtpbin.send_rtp_sink_0 rtpxxxpay ! f. rtpxxxpay ! f. Cheers -Matt On 27/10/20 4:08 am, breakthrough wrote: > We've been wrestling trying to multiplex RTP and RTCP together, or preferably > multicast and multiplex RTP streams with different SSRC files on one port, > and the related RTCP streams on another.. > > In all cases, if we send the RTCP out directly to the udpsink, it works > (although we can't multiplex RTCP on the same port, as using the same > host:port with udpsink on each, creates a conflict). > > We've narrowed down the problem to rtpfunnel, which apparently does not > handle rtcp properly (we don't know why, we think it's a timing thing > related to when the rtpbin.send_rtcp_sink_x is available...and so the pad > doesn't exist when the rtpfunnel wants it..but not sure.. > > Here is a simple test case scenario.. > > We're declaring two funnels, f and g, f we use for rtp traffic, g we use for > rtcp traffic > If we send rtcp out directly to udpsink, this works, doesn't stall, and we > see RTCP over wireshark.. > However, if we send rtcp out through a funnel, it does not work, the rtcp > never sends onto the network. > > > This works.. > > gst-launch-1.0 rtpbin name=rtpbin rtpfunnel name=g rtpfunnel name=f > videotestsrc ! videoconvert ! x264enc ! rtph264pay ! rtpbin.send_rtp_sink_0 > rtpbin.send_rtp_src_0 ! f. rtpbin.send_rtcp_src_0 ! udpsink host=127.0.0.1 > port=5002 sync=false async=false g. ! udpsink host=127.0.0.1 port=5001 > sync=false async=false f. ! udpsink host=127.0.0.1 port=5000 sync=true > > This does not.. > > GST_DEBUG=5 gst-launch-1.0 rtpbin name=rtpbin rtpfunnel name=g rtpfunnel > name=f videotestsrc ! videoconvert ! x264enc ! rtph264pay ! > rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! f. rtpbin.send_rtcp_src_0 ! > g. g. ! udpsink host=127.0.0.1 port=5001 sync=false async=false f. ! > udpsink host=127.0.0.1 port=5000 sync=true > > The only difference is us piping RTCP out through rtpfunnel. > > This was noted as an issue with another user recently, but received no > response. > > I believe the issue lies within rtpfunnel, however, we're open to coming up > with another approach if viable.. > > We ultimately want to mux multiple RTP streams on one port and mux the > related RTCP streams onto another port... all from the same clock. > > Using rtpfunnel hangs us up when we push rtcp through the funnel. > > > > > > -- > Sent from: http://gstreamer-devel.966125.n4.nabble.com/ > _______________________________________________ > gstreamer-devel mailing list > [hidden email] > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel OpenPGP_signature (505 bytes) Download Attachment |
Free forum by Nabble | Edit this page |