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

Dmytro Kabyshev dkabyshev at gmail.com
Mon Jul 27 02:49:23 PDT 2015


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20150727/04e92e12/attachment.html>


More information about the gstreamer-devel mailing list