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