[FFmpeg-devel] [PATCH] libavformat/mov: Speed up fragmented mp4 parsing (Take 2)

Aaron Boushley boushley at gmail.com
Wed Nov 14 01:34:28 EET 2018


On Mon, Nov 5, 2018 at 3:48 PM Aaron Boushley <boushley at gmail.com> wrote:
>
> Sorry for the second thread, first one was corrupted with a newline
> because I attempted an inline patch. Hopefully the mime-type will be set
> correctly on this one.
> ---
> When parsing a fragmented MP4 with the use_mfra_for option set so that
> the mfra box is parsed we currently continue to parse all the top level
> boxes in the mp4. We also avoid using the index in mov_seek_fragment
> unless the fragment index is marked as complete, which the mfra parsing
> code never does.
>
> This updates the mfra parsing code to mark the fragment index as
> complete, similar to the way the sidx parsing code does.
>
> With this change in place mov_read_default stops parsing top level boxes
> in a fragmented mp4 and uses the mfra data for mov_seek_fragment calls
> (assuming a use_mfra_for option is passed). When loading the file over a
> network this results in significantly better performance since
> avformat_open_input doesn't require a scan of the entire file.
>
> Aaron

After further investigation this patch can result in the
AVFormatContext duration field being set incorrectly.

Because the mfra box doesn't contain the duration for the fragment we
have no way of knowing the duration from just reading the mfra. I will
investigate a patch where after reading all of the tfra boxes inside
the mfra we then read the moof for the last fragment. This should
allow us to get the duration without needing to scan every moof.

Aaron


More information about the ffmpeg-devel mailing list