tsdemux doesn't handle streams without PTS/DTS timestamps, on iOS

Edward Hervey bilboed at bilboed.com
Mon Jul 27 07:04:38 PDT 2015


Hi,

  No idea why you think there's no PTS in the PES header. There are.
It's just that the PCR PID reported by the PMT is invalid (0x1fff, the
PID reserved for NULL/padding packets).

  => The problem is lack of PCR values, not lack of PTS/DTS

  Can you file a bug with all this information here : 
https://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer

On Mon, 2015-07-27 at 11:49 +0200, Dmytro Kabyshev wrote:
> Hi,
> 
> I'm trying to make GoPro 4 live preview (mpegts stream) to work with 
> GStreamer and faced with an issue, that tsdemux doesn't push packet 
> further, because it expects PTS/DTS timestamps. On iOS.
> The problem is, GoPro 4 doesn't set those in PES header. I'm not 
> quite sure why or whether it is correct behaviour for mpeg ts stream 
> broadcaster. But the thing is, I was able to play this stream with 
> ffplay. I dind't go further in comparing ffmpeg mpegts demux with 
> tsdemux. Maybe there's some well know limitation in GStreamer.  
> I would really appriciate any help on this. I'll attach everything I 
> have:
> 
> 1. gopro.pcap - mpegts UDP steam from GoPro Hero 4 Silver
> https://www.dropbox.com/s/fskjgnuxx496ako/gopro.pcap?dl=0
> 2. gopro_stream_conf - mpegst stream config (from ffprobe)
> https://www.dropbox.com/s/vjrsiapwq4goyqk/gopro_stream_conf?dl=0
> 3. gopro_gst_log - filtered debug log for tsdemux and mpegtsbase
> https://www.dropbox.com/s/4e9r5hiziim4sb5/gopro_gst_log?dl=0
> 
> As for Pipeline, it doesn't really matter, I was testing the 
> simpliest:
> 
> udpsrc port=8554 buffer-size=5000 ! tsdemux name=demux 
> demux.video_1011 ! queue ! decodebin ! autovideosink demux.video_0200 
> ! fakesink demux.audio_1100 ! fakesink
> 
> How to simulate GoPro mpegts:
> 
> 1. Install http://tcpreplay.synfin.net/
> 2. Download gopro.pcap
> 3. Get sMAC of source (machine which is going to stream) and 
> destination dMAC (who's going to receive stream). For test purpose it 
> is going to be the same machine (loopback test):
> > tcprewrite --enet-smac=e4:ce:8f:3c:63:b2 --enet
> -dmac=e4:ce:8f:3c:63:b2 --infile=gopro.pcap --outfile=output.pcap
> --enet-smac our sMAC
> --enet-dmac our dMAC
> 
> 4. Generate cache:
> > tcpprep --auto=bridge --pcap=output.pcap --cachefile=input.cache
> 
> 5. Replays IPs. Again we need sIP (machine which is going to stream) 
> and dIP who's going to receive stream. For test purpose it is going 
> to be the same machine (loopback test):
> > tcprewrite --endpoints=192.168.14.137:192.168.14.137 -
> -cachefile=input.cache --infile=output.pcap --outfile=output2.pcap -
> -skipbroadcast
> formats for IPs: sIP:dIP
> 
> 6. Now we have output2.pcap which is ready to playback
> 
> 7. sudo tcpreplay --intf1=en1 output2.pcap
> en1 - network interface
> 
> 8. Finaly. You could verify the stream with: ffplay udp://:8554
> 
> Regards, 
> Dmytro Kabyshev
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
-- 
Edward Hervey
bilboed at bilboed.com



More information about the gstreamer-devel mailing list