rtpfunnel does not handle rtcp alone or muxed

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

rtpfunnel does not handle rtcp alone or muxed

Breakthrough
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
Reply | Threaded
Open this post in threaded view
|

Re: rtpfunnel does not handle rtcp alone or muxed

Matthew Waters
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