[FFmpeg-devel] [PATCH] rtsp: Handling of dynamic rate aka Instant-On aka overbuffering

Martin Storsjö martin
Sun Jan 2 19:40:41 CET 2011


On Sun, 2 Jan 2011, Michael Niedermayer wrote:

> On Sun, Jan 02, 2011 at 03:49:42PM +0200, Martin Storsj? wrote:
> > Hi,
> > 
> > DSS has the feature "dynamic rate" aka Instant-On aka overbuffering, for 
> > feeding packets faster than realtime, for starting playback faster.
> > 
> > This is enabled automatically without explicitly requesting, if using 
> > something named "Reliable RTP", or if using TCP interleaving.
> > 
> > The issue with it being enabled automatically is that it screws with 
> > timestamps based on RTCP NTP (which is the only official way of syncing 
> > streams afaik). When serving packets faster than realtime, DSS still sends 
> > RTCP packets with the current realtime NTP timestamp, but with the current 
> > RTP stream timestamp.
> > 
> > In practice, this leads to emitted timestamps jumping backwards at each 
> > RTCP packet. To test it, try this and watch the time counter:
> > 
> > ffplay rtsp://albin.abo.fi:8554/sample_100kbit.mp4?tcp
> > 
> > First the timestamps go from 0 to about 14, then jumps back to about 7. 
> > This, since the second RTCP packet is sent 7 seconds in the stream, after 
> > the server has sent about 14 seconds worth of RTP data.
> > 
> > I'm not sure how to best fix the RTP timestamping code to cope with this - 
> > I'm not sure how to use RTCP at all in this setup, and without RTCP, 
> > there's no proper way of syncing the streams together.
> 
> how does the official code handle syncing with this?

This is a QuickTime specific extension (of which only the server is 
opensourced), so I'm not aware of any official reference player actually 
dealing with it.

I could try to check other open source code bases such as live555 and 
gstreamer to see if they handle it sensibly.

> > The attached patchset requests the server to disable it, since we're not 
> > really ready to cope with it currently.
> 
> this isnt a very nice solution

Nope, but unless we figure out a good way of dealing with it, it's the 
best compromise I think.

Also, I'm not sure how to detect it - if we don't explicitly request it 
enabled or disabled, the server might enable it for TCP, but doesn't tell 
us that it did.

But I'll look into what others do.

// Martin



More information about the ffmpeg-devel mailing list