[Bug 752843] New: tsdemux doesn't handle streams without PTS/DTS timestamps, on iOS

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Fri Jul 24 14:32:35 PDT 2015


https://bugzilla.gnome.org/show_bug.cgi?id=752843

            Bug ID: 752843
           Summary: tsdemux doesn't handle streams without PTS/DTS
                    timestamps, on iOS
    Classification: Platform
           Product: GStreamer
           Version: 1.5.2
                OS: Mac OS
            Status: NEW
          Severity: critical
          Priority: Normal
         Component: gst-plugins-bad
          Assignee: gstreamer-bugs at lists.freedesktop.org
          Reporter: dkabyshev at gmail.com
        QA Contact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---

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
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

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list