RTP payloaders and streaming over UDP/TCP

distran distran.sensors at gmail.com
Thu Nov 21 01:22:45 PST 2013


Yep, I tried it, and with no effect. It seems that for certain frames that
are big enough rtptheorapay cannot handle them. What it seems is that
rtptheorapay expects frames that can fit into one packet and does not map
larger frames into multiple packets automatically (although according to RTP
Theora specification from RFC it should).

Let me show you an example comparing rtptheorapay and rtpjpegpay.

export GST_DEBUG=2

RTPJPEGPAY

Receiving end:
gst-launch-0.10 udpsrc port=5000 caps="application/x-rtp,
media=(string)video, clock-rate=(int)90000, encoding-name=(string)JPEG" !
rtpjpegdepay ! jpegdec ! ffmpegcolorspace ! videoscale ! ximagesink

Sending end:
1. Random images, small (360x240), send with payloader:
gst-launch-0.10 -v videotestsrc horizontal-speed=3 is-live=true pattern=snow
! timeoverlay ! ffmpegcolorspace !
video/x-raw-yuv,width=360,height=240,framerate=\(fraction\)30/1 !
ffmpegcolorspace ! jpegenc ! rtpjpegpay ! udpsink host=127.0.0.1 port=5000

2. Random images, big (640x480), send with payloader:
gst-launch-0.10 -v videotestsrc horizontal-speed=3 is-live=true pattern=snow
! timeoverlay ! ffmpegcolorspace !
video/x-raw-yuv,width=640,height=480,framerate=\(fraction\)30/1 !
ffmpegcolorspace ! jpegenc ! rtpjpegpay ! udpsink host=127.0.0.1 port=5000

In both cases - it works.

RTPTHEORAPAY
Receiving end (start it first so that config is exchanged):
gst-launch-0.10 udpsrc port=5000 caps="application/x-rtp,
media=(string)video, clock-rate=(int)90000, encoding-name=(string)THEORA" !
rtptheoradepay ! theoradec ! ffmpegcolorspace ! videoscale ! ximagesink

Sending end:
1. Random images, small (360x240), send with payloader:
 gst-launch-0.10 -v videotestsrc horizontal-speed=3 is-live=true
pattern=snow ! timeoverlay ! ffmpegcolorspace !
video/x-raw-yuv,width=360,height=240,framerate=\(fraction\)30/1 !
ffmpegcolorspace ! theoraenc ! rtptheorapay config-interval=100 ! udpsink
host=127.0.0.1 port=5000

2. Random images, big (640x480), send with payloader:
gst-launch-0.10 -v videotestsrc horizontal-speed=3 is-live=true pattern=snow
! timeoverlay ! ffmpegcolorspace !
video/x-raw-yuv,width=640,height=480,framerate=\(fraction\)30/1 !
ffmpegcolorspace ! theoraenc ! rtptheorapay config-interval=100 ! udpsink
host=127.0.0.1 port=5000

In the second case nothing gets send - rtptheorapay complaing about too big
size of the packet it received or computed.



These sizes are probably sizes of compressed frames, since similar sizes I
am getting when trying to send jpeg images without rtpjpegpay (so that each
one is directly fitted into UDP payload.

(the same as above, but without rtpjpegpay)
gst-launch-0.10 -v videotestsrc horizontal-speed=3 is-live=true pattern=snow
! timeoverlay ! ffmpegcolorspace !
video/x-raw-yuv,width=640,height=480,framerate=\(fraction\)30/1 !
ffmpegcolorspace ! jpegenc ! udpsink host=127.0.0.1 port=5000



In both cases we have a frame that is around 198000 bytes. What I find
strange is that rtptheorapay cannot deal with such big frames, while
rtpjpegpay (and other payloaders) seem to deal with the issue naturally.

What can be the problem and do anyone knows of some workarounds? Is your
installation of GStreamer reproducing the same behaviour?

Thanks for all your help!

Regards,
Michal







--
View this message in context: http://gstreamer-devel.966125.n4.nabble.com/RTP-payloaders-and-streaming-over-UDP-TCP-tp4663441p4663450.html
Sent from the GStreamer-devel mailing list archive at Nabble.com.


More information about the gstreamer-devel mailing list