Thanks a lot Wim. The stuff worked.<br>
<br>
Deeptendu<br><br><div><span class="gmail_quote">On 8/11/06, <b class="gmail_sendername">Wim Taymans</b> &lt;<a href="mailto:wim@fluendo.com">wim@fluendo.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On Fri, 2006-08-11 at 11:25 +0530, Deeptendu Bikash wrote:<br>Hi,<br><br>&gt; Problem 1)<br>&gt; I am trying to stream MPEG-4 video (MP4V-ES) using RTP. On the sender<br>&gt; side I give:<br>&gt; gst-launch videotestsrc ! ffenc_mpeg4 ! rtpmp4vpay ! udpsink port =
<br>&gt; 1234<br>&gt; This is producing packets as can be seen from Ethereal packet capture.<br>&gt; On decoding the packet as RTP, I can see the payload typ as 96.<br>&gt;<br>&gt; On the sender side I type:<br>&gt; gst-launch udpsrc port=1234 !
<br>&gt; application/x-rtp,clock-rate=90000,pt=96 ! rtpmp4vdepay !<br>&gt; ffdec_mpeg4 ! xvimagesink<br>&lt;snip&gt;<br><br>This should becoma FAQ. For RTP streaming there is a lot of info that<br>needs to be passed to the receiver using some out-of-band mechanism such
<br>as SDP. In GStreamer there is a mapping from SDP to GstCaps defined. The<br>proper procedure to set up an RTP streaming session is:<br><br>On the sender:<br><br>&nbsp;&nbsp;gst-launch -v videotestsrc ! ffenc_mpeg4 ! rtpmp4vpay ! udpsink port =
<br>1234<br><br>You need the -v option so that you can see the caps set on the sinkp pad<br>of udpsink. This will then result in output like this:<br><br>Setting pipeline to PAUSED ...<br>/pipeline0/videotestsrc0.src: caps = video/x-raw-yuv,
<br>format=(fourcc)I420, width=(int)320, height=(int)240,<br>framerate=(fraction)30/1<br>Pipeline is PREROLLING ...<br>/pipeline0/ffenc_mpeg40.src: caps = video/mpeg, width=(int)320,<br>height=(int)240, framerate=(fraction)30/1, mpegversion=(int)4,
<br>systemstream=(boolean)false<br>/pipeline0/ffenc_mpeg40.sink: caps = video/x-raw-yuv,<br>format=(fourcc)I420, width=(int)320, height=(int)240,<br>framerate=(fraction)30/1<br>/pipeline0/rtpmp4vpay0.sink: caps = video/mpeg, width=(int)320,
<br>height=(int)240, framerate=(fraction)30/1, mpegversion=(int)4,<br>systemstream=(boolean)false<br>/pipeline0/rtpmp4vpay0.src: caps = application/x-rtp,<br>media=(string)video, payload=(int)96, clock-rate=(int)90000,<br>
encoding-name=(string)MP4V-ES, ssrc=(guint)3197754544,<br>clock-base=(guint)1459048008, seqnum-base=(guint)46431,<br>profile-level-id=(string)1,<br>config=(string)000001b001000001b58913000001000000012000c48d8800f6185020f0a21f000001b24c61766335312e392e30
<br>/pipeline0/udpsink0.sink: caps = application/x-rtp, media=(string)video,<br>payload=(int)96, clock-rate=(int)90000, encoding-name=(string)MP4V-ES,<br>ssrc=(guint)3197754544, clock-base=(guint)1459048008,<br>seqnum-base=(guint)46431, profile-level-id=(string)1,
<br>config=(string)000001b001000001b58913000001000000012000c48d8800f6185020f0a21f000001b24c61766335312e392e30<br>Pipeline is PREROLLED ...<br>Setting pipeline to PLAYING ...<br>New clock: GstSystemClock<br><br>Now look at the caps set on /pipeline0/udpsink0.sink. These caps are
<br>typically converted to an SDP message and send to the receiver when a<br>connection is made. We are not doing any session setup here, just<br>connecting to the raw RTP stream so we need another way of getting this<br>
info to the receiver. We simply copy the caps over.<br><br>Then on the receiver you do:<br><br>gst-launch udpsrc port=1234 caps=&quot;application/x-rtp,<br>media=(string)video, payload=(int)96, clock-rate=(int)90000,<br>encoding-name=(string)MP4V-ES, ssrc=(guint)3197754544,
<br>clock-base=(guint)1459048008, seqnum-base=(guint)46431,<br>profile-level-id=(string)1,<br>config=(string)000001b001000001b58913000001000000012000c48d8800f6185020f0a21f000001b24c61766335312e392e30&quot; ! rtpmp4vdepay ! ffdec_mpeg4 ! xvimagesink
<br><br>This will then stream the video.<br><br>Notice how you need to inform the receiver of the required properties as<br>defined by RFC 3016 by using the same GstCaps as seen on the sender.<br><br><br>&gt; -----------------------
<br>&gt; Problem 2)<br>&gt; Instead of using the videotestsrc, I am trying to use an existing<br>&gt; MPEG-4 video elementary stream. Here I get a problem on the sender<br>&gt; side itself. My command is:<br>&gt; gst-launch filesrc location= 
test.m4v ! rtpmp4vpay !<br>&gt; application/x-rtp,clock-rate=90000 ! udpsink port = 1234<br>&gt; Setting pipeline to PAUSED ...<br>&gt; Pipeline is PREROLLING ...<br>&gt; ERROR: from element /pipeline0/rtpmp4vpay0: Element doesn't implement
<br>&gt; handling of this stream. Please file a bug.<br>&gt; Additional debug info:<br>&gt; gstbasertppayload.c(420): gst_basertppayload_push<br>&gt; (): /pipeline0/rtpmp4vpay0:<br>&gt; subclass did not specify clock_rate
<br>&gt; ERROR: pipeline doesn't want to preroll.<br>&gt; Setting pipeline to NULL ...<br>&gt; FREEING pipeline ...<br><br>I have no idea what that test.m4v is. We currently don't handle parsing<br>of arbitrary elementary mpeg4 video streams, though. For streaming of
<br>MPEG4 video in an ISO container you would do the following:<br><br>gst-launch -v filesrc location=~/data/sincity.mp4 ! qtdemux !<br>rtpmp4vpay ! udpsink port = 1234<br><br>then grab the caps set on the udpsink and start the receiver with the
<br>same caps as in the first example.<br><br>Hope this helps.<br><br>Wim<br><br>&gt;<br>&gt; Can you please help me out?<br>&gt;<br>&gt; Thanks,<br>&gt; Deeptendu.<br></blockquote></div><br>