Evaluating Fluendo timeshifter

Krzysztof Konopko krzysztof.konopko at youview.com
Mon Nov 12 08:56:27 PST 2012


Thanks Josep.

I can confirm that both tsmuxer and tsdemuxer were not "helping" the
timeshifter. So far I removed tsmuxer from my pipeline. I get a TS
stream from the genuine DVB source (dvbsrc) which is supposed to be a
properly formed, "pristine" TS stream source. The timeshifter behaves
much better, i. e. the rendered video is smooth now.

When I start sending seek events though it looks like the tsdemuxer
behaves incorrectly when it receives a resulting flush event. This time
poor timeshifter is hampered by the other side of the pipe :)

I found that there's some work in this area tracked with [1]. Can the
tsdemuxer flush misbehaviour result in memory corruption/crashes?

[1] https://bugzilla.gnome.org/show_bug.cgi?id=688091

Cheers,
Kris

On 08/11/12 05:51, Josep Torra wrote:
> Dear Kris,
> 
> The timestamps I'm referring to are does encoded as PTS/DTS in the
> mpegts stream.
> 
> When I did my first tests with 1.0 port I've noticed that tsddemux
> wasn't pushing buffers with timestamped data.
> 
> Maybe there's something else that needs to be fixed in the timeshift
> element for 1.0 but I couldn't run real tests due the tsdemux issue.
> 
> I would suggest you try timeshift in 0.10 paired with flutsdemux until
> the issues 1.0 were fixed. There's also the pvr.py [1] example app
> which only works in 0.10 for now which will show you a complete ussage
> of the timeshift element.
> 
> Just in case you don't have it, here [2] is my talk on timeshifting.
> 
> Please ping me at #gstreamer, my nickname is ad-n770.
> 
> [1] https://core.fluendo.com/gstreamer/trac/browser/trunk/gst-fluendo-timeshift/examples/pvr.py
> [2] http://gstconf.ubicast.tv/videos/time-shifting-with-gstreamer/
> 
> Best regards,
> 
> Josep
> 
> On 7 November 2012 19:20, Krzysztof Konopko
> <krzysztof.konopko at youview.com> wrote:
>> Thanks Josep,
>>
>> That's reasurring I'm not constructing utterly spurious pipes.
>>
>> I don't understand though how [1] is related. What do you mean by saying
>> "tsdemux doesn't provide timing info when activated in push mode"?
>>
>> I deliberately added do-timestamp=false to my udpsrc so it looks a bit
>> more like a filesrc when it comes to timestamps but obviously it's still
>> considered by the pipeline a live source.
>>
>> The timeshifter sends GST_FORMAT_BYTES segments and from my logs we can
>> see that the decodebin (tsdemux) extracts reasonable timestamps from the
>> stream.
>>
>> Is it a latency information that's not provided by the tsdemux element
>> so the latency is not calculated properly when going to the PLAYING
>> state? Can you elaborate a bit more on this?
>>
>> Thanks,
>> Kris
>>
>> [1] https://bugzilla.gnome.org/show_bug.cgi?id=687178
>>
>> On 07/11/12 17:43, Josep Torra wrote:
>>> Hi Kris,
>>>
>>> At least you are affected to [1] and it's not possible to do real
>>> testing until it being fixed.
>>>
>>> When I've developed it I've did most of the testing with a Playstation
>>> PlayTV usb DVB-T tuner and few tries with UDP.
>>>
>>> To simulate some sort of constant bitrate producer I've used "... !
>>> identity sleep-time=x ! udpsink" and tuned the sleep time into an
>>> appropriate value looking at file size, duration in time and buffer
>>> sizes.
>>>
>>> I hope this will help you.
>>>
>>> [1] https://bugzilla.gnome.org/show_bug.cgi?id=687178
>>>
>>> Best regards,
>>>
>>> Josep
>>>
>>> On 7 November 2012 18:28, Krzysztof Konopko
>>> <krzysztof.konopko at youview.com> wrote:
>>>> Let me just add that if I use a TS file as a source, then the
>>>> timeshifter sees a burst of 18800 buffers and everyone's happy,
>>>>
>>>> So it seems to me that this is something to do with my udpsrc being slow
>>>> and trickling rather than streaming. Is there any buffering that could
>>>> remedy this situation?
>>>>
>>>> Kris
>>>>
>>>> On 07/11/12 17:18, Krzysztof Konopko wrote:
>>>>> Hi,
>>>>>
>>>>> I'm trying to make some real-life experiments with the Fluendo
>>>>> timeshifter. I stream raw video from my laptop video camera, encode and
>>>>> mux it into MPEG-TS and then stream it as UDP packets from the "server"
>>>>> machine. On the receiver I use the following pipeline:
>>>>>
>>>>> gst-launch-1.0 -v --gst-debug-no-color --gst-debug=flu*:5 \
>>>>>     udpsrc do-timestamp=false port=10000 \
>>>>>
>>>>>
>>> caps='application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T-ES'
>>>>> \
>>>>>     ! queue ! rtpmp2tdepay \
>>>>>     ! tsparse \
>>>>>     ! queue \
>>>>>     ! identity name=probe-before-timeshifter silent=false \
>>>>>     ! flumpegshifter \
>>>>>     ! identity name=probe-after-timeshifter silent=false \
>>>>>     ! decodebin \
>>>>>     ! identity name=probe-after-decoder silent=false \
>>>>>     ! queue ! autovideosink sync=false
>>>>>
>>>>> The problem is that the rendered video is very jerky. The timeshifter
>>>>> collects TS packets until it fills the cache slot (32kB) and than hands
>>>>> over to the decoder:
>>>>>
>>>>> # tsparse
>>>>> (probe-before-timeshifter:sink) (11280 bytes, dts: none, pts:none,
>>>>> duration: none, ... )
>>>>> (probe-before-timeshifter:sink) (2068 bytes, dts: none, pts:none,
>>>>> duration: none, ... )
>>>>> (probe-before-timeshifter:sink) (3008 bytes, dts: none, pts:none,
>>>>> duration: none, ... )
>>>>> ...
>>>>>
>>>>> # timeshifter
>>>>> (probe-after-timeshifter:sink) (32768 bytes, dts: none, pts:none,
>>>>> duration: none, offset: 131072, offset_end:  163840, flags: 00000000 )
>>>>>
>>>>> # decoder
>>>>> (probe-after-decoder:sink) (115200 bytes, dts: 0:00:01.040000000,
>>>>> pts:0:00:01.040000000, duration: 0:00:00.040000000, ... )
>>>>> WARNING: from element ...:autovideosink0-actual-sink-xvimage: A lot of
>>>>> buffers are being dropped.
>>>>> Additional debug info: ...:autovideosink0-actual-sink-xvimage:
>>> There may
>>>>> be a timestamping problem, or this computer is too slow.
>>>>> (probe-after-decoder:sink) (115200 bytes, dts: 0:00:01.080000000,
>>>>> pts:0:00:01.080000000, duration: 0:00:00.040000000, ... )
>>>>> (probe-after-decoder:sink) (115200 bytes, dts: 0:00:01.120000000,
>>>>> pts:0:00:01.120000000, duration: 0:00:00.040000000, ... )
>>>>> (probe-after-decoder:sink) (115200 bytes, dts: 0:00:01.160000000,
>>>>> pts:0:00:01.160000000, duration: 0:00:00.040000000, ... )
>>>>> ...
>>>>>
>>>>> If I remove the timeshifter, I get delayed but smooth video output.
>>>>>
>>>>> gst-launch-1.0 -v --gst-debug-no-color --gst-debug=flu*:5 \
>>>>>     udpsrc do-timestamp=false port=10000 \
>>>>>
>>>>>
>>> caps='application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T-ES'
>>>>> \
>>>>>     ! queue ! rtpmp2tdepay \
>>>>>     ! tsparse \
>>>>>     ! queue \
>>>>>     ! identity name=probe-before-decoder silent=false \
>>>>>     ! decodebin \
>>>>>     ! identity name=probe-after-decoder silent=false \
>>>>>     ! queue ! autovideosink sync=false
>>>>>
>>>>> The tsparse end decoder elements work interchangeably.
>>>>>
>>>>> (probe-before-decoder:sink) (2632 bytes, dts: none, pts:none, duration:
>>>>> none, ... )
>>>>> (probe-after-decoder:sink) (115200 bytes, dts: 0:00:00.731522222,
>>>>> pts:0:00:00.731522222, duration: 0:00:00.040000000, ... )
>>>>> (probe-before-decoder:sink) (2256 bytes, dts: none, pts:none, duration:
>>>>> none, ... )
>>>>> (probe-after-decoder:sink) (115200 bytes, dts: 0:00:00.801255555,
>>>>> pts:0:00:00.801255555, duration: 0:00:00.040000000, ... )
>>>>> (probe-before-decoder:sink) (2632 bytes, dts: none, pts:none, duration:
>>>>> none, ... )
>>>>> (probe-after-decoder:sink) (115200 bytes, dts: 0:00:00.867966666,
>>>>> pts:0:00:00.867966666, duration: 0:00:00.040000000, ... )
>>>>> (probe-before-decoder:sink) (2068 bytes, dts: none, pts:none, duration:
>>>>> none, ... )
>>>>> (probe-after-decoder:sink) (115200 bytes, dts: 0:00:00.933966666,
>>>>> pts:0:00:00.933966666, duration: 0:00:00.040000000, ... )
>>>>> (probe-before-decoder:sink) (2444 bytes, dts: none, pts:none, duration:
>>>>> none, ... )
>>>>> (probe-after-decoder:sink) (115200 bytes, dts: 0:00:00.997777777,
>>>>> pts:0:00:00.997777777, duration: 0:00:00.040000000, ... )
>>>>>
>>>>> Maybe the "real-life" source is too slow/pessimistic? Is there anything
>>>>> else I'm getting wrong?
>>>>> Any ideas/suggestions?
>>>>>
>>>>> Thanks,
>>>>> Kris
>>>>> _______________________________________________
>>>>> gstreamer-devel mailing list
>>>>> gstreamer-devel at lists.freedesktop.org
>>>>> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>>>>
>>>>
>>>> _______________________________________________
>>>> gstreamer-devel mailing list
>>>> gstreamer-devel at lists.freedesktop.org
>>>> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>>
>>
> 



More information about the gstreamer-devel mailing list