[FFmpeg-devel] [PATCH] libavformat/mov: Speed up fragmented mp4 parsing

Aaron Boushley boushley at gmail.com
Mon Nov 5 21:17:25 EET 2018

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.

Signed-off-by: Aaron Boushley <boushley at gmail.com>
 libavformat/mov.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index ec57a05803..1def594626 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -7344,6 +7344,8 @@ static int mov_read_mfra(MOVContext *c, AVIOContext
         if (ret < 0)
             goto fail;
     } while (!ret);
+    c->frag_index.complete = 1;
     ret = 0;
     seek_ret = avio_seek(f, original_pos, SEEK_SET);

More information about the ffmpeg-devel mailing list