After exploring the VLC code, my feeling is VLC retrieves the PCR timestamps properly. But for Live Streams, without first and last PCR (begin and end stream timestamps), it does not push readed PCR (current) to the display layer.<div>
<br></div><div>So, this problem does not lay on the gstreamer stream server generation, but on VLC.<br><br></div><div><br><div class="gmail_quote">2012/10/3 Angel Martin <span dir="ltr"><<a href="mailto:amartin@vicomtech.org" target="_blank">amartin@vicomtech.org</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>Dear all,</div><div><br></div><div>I run VLC playing a RTP + MpegTS + H264 stream (provided by a simple Gstreamer pipeline) represented by an SDP, but the displayed time is always 00:00. (RTSP is an alternative but I need to perform the stream server in Windows where RTSP server is not available)</div>
<div><br></div><div>First of all, I have already test it with different VLC versions. Now I am using VLC 2.0.3 where the issue persists.</div><div><br></div><div>(Another minor issue in Linux is due to the conflict of UDPSINK and VLC-SDP in terms of translation of localhost in IPv6 ::1 and IPv4 127.0.0.1. This means if i use udpsink port=5004 host=127.0.0.1 in linux Gstreamer calls multiudpsink (multicast), I can only use localhost that is translated to ::1 (incompatible with SDP definition))</div>
<div><br></div><div>I am streaming an UDP + MPEGTS + H264 with the following pipeline:</div><div>gst-launch --gst-debug=mpegtsmux:5 videotestsrc do-timestamp=true is-live=true ! video/x-raw-yuv, framerate=(fraction)30/1 ! ffmpegcolorspace ! timeoverlay font-desc="Verdana bold 50px" ! ffmpegcolorspace ! queue ! x264enc byte-stream=true bitrate=500 key-int-max=5 tune=zerolatency ! video/x-h264 ! mpegtsmux name=mux m2ts-mode=false pat-interval=3000 pmt-interval=3000 ! video/mpegts ! video/mpegts ! rtpmp2tpay pt=33 ! udpsink port=5004 host=127.0.0.1 sync=false enable-last-buffer=false</div>
<div><br></div><div>According to the VLC staff "VLC always uses the MPEG-TS PCR when dealing with MPEG-TS, including over RTP, ignoring the RTP timestamp. For normal (elementary) RTP streams, RTP timestamps are correleated with RTCP-SR. Thus, you cannot synchronize MPEG-TS (over RTP) with something else (over RTP)."</div>
<div><br></div><div>So the timing capability lays on the PCR data of the MPEG-TS. I have already checked that the PCR data is inside the stream with "mpegtsmux" pluging of gstreamer. It implements the code described in the following post:</div>
<div><a href="http://stackoverflow.com/questions/6199940/generate-pcr-from-pts" target="_blank">http://stackoverflow.com/questions/6199940/generate-pcr-from-pts</a></div><div><br></div><div>I have also checked that PCR data is properly included in the stream with a MPEG-2 Transport Stream packet analyser (<a href="http://www.pjdaniel.org.uk/mpeg/" target="_blank">http://www.pjdaniel.org.uk/mpeg/</a>)</div>
<div><br></div><div>I checked that the TimeStamps are there with the next pipeline:</div><div>gst-launch --gst-debug=2 udpsrc uri=udp://localhost:5004 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP2T-ES, payload=(int)33" ! gstrtpjitterbuffer latency=200 ! application/x-rtp ! rtpmp2tdepay ! video/mpegts ! mpegtsdemux name=demux ! video/x-h264 ! queue ! decodebin name=dec ! ffmpegcolorspace ! timeoverlay font-desc="Verdana bold 50px" valignment=1 ! directdrawsink</div>
<div><br></div><div>I tried also to send the PCR inside the Adaptation field with the first packet of each new TimeStamp (30fps = TS increments of 3000 for RTP 90000khz) but the time diaplyed is always 00:00.</div><div><br>
</div><div>VLC open the SDP file that contains the following data:</div><div>v=0</div><div>o=- 0 0 IN IP4 127.0.0.1</div><div>s=No Name</div><div>c=IN IP4 127.0.0.1</div><div>t=0 0</div><div>a=tool:GStreamer</div><div>a=type:broadcast</div>
<div>a=range:npt=now-</div><div>m=video 5004 RTP/AVP 33</div><div>a=rtpmap:33 MP2T/90000</div><div>a=control:mpegts-transport</div><div><br></div><div>(Another issue, justo to notice it, when I tried to run RTSP server and VLC in Linux is that RTSP server generate SDP responses with "a=rtpmap:33 MP2T-ES/90000" and MP2T-ES is not recognized by VLC I had to modify RTSP server to provide "a=rtpmap:33 MP2T/90000" in the SDP)</div>
<div><br></div><div>The time is not displayed by the VLC (always 00:00). The expected result is a displayed time equal to the one "watermarked" inside the video. This means if the stream is running for 30seconds when VLC player connects it, the VLC displayed time should be "00:30".</div>
<div><br></div><div>Some idea/tip about what's wrong? / How to fix it?</div><div><br></div><div>Thank you in advance.</div>
</blockquote></div><br></div>