Evaluating Fluendo timeshifter

Krzysztof Konopko krzysztof.konopko at youview.com
Wed Nov 7 09:18:20 PST 2012


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


More information about the gstreamer-devel mailing list