[FFmpeg-devel] [PATCH] avformat/concatdec: get bit_rate from internal format

Nicolas George george at nsup.org
Mon Jan 4 19:12:20 CET 2016

Le quintidi 15 nivôse, an CCXXIV, Zhang Rui a écrit :
> Actually, I use custom IO in my own application to prefetch data via HTTP.
> I'm trying to calculate duration from bytes with bit_rate, for:
> 1. Calculate necessary download speed.
> 2. Adjust prefetch buffer size.
> 3. Show prefetched duration in progress bar.
> I thought AVFormatContext.bit_rate is a convenient alias.
> Is AVCodecContext.bit_rate more suitable for these purpose?

I see. At first glance it makes sense, but I do not think you are on the
right track, for two reasons.

First, you will have trouble using custom I/O with the concat demuxer, it is
not really meant for programmatic use. All it does is read packets from the
underlying demuxers and adjust timestamps: in an application, you can easily
do the same directly with more control. Then you have access to the
properties of each file, including bit_rate.

Second, the bit_rate is only an average. With VFR content, you would end up
buffering way more than necessary for still scenes (not really a problem if
memory is cheap), and then under-run very fast as soon as there is water or
foliage visible.

To handle VFR content, you need to adjust dynamically. IMHO, the best way of
doing that is to buffer packets after the demuxer, not octets before it.
Demuxing is fast, and the memory use is roughly the same, mostly the
payload, so it does not change anything. But if you buffer after the
demuxer, you have access to the timestamps of the packets: you can decide
you want to buffer 20 seconds of movie, you just have to demux until the
timestamp is right, you do not need to estimate how many octets it makes.

Hope this helps.


  Nicolas George
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160104/fb09cab7/attachment.sig>

More information about the ffmpeg-devel mailing list