[FFmpeg-devel] [PATCH] Allow using only the mfra info for seeking using the fragment index

Derek Buitenhuis derek.buitenhuis at gmail.com
Sun Oct 4 17:28:41 EEST 2020


From: Justin Ruggles <justin.ruggles at gmail.com>

The mfra has enough information to enable seeking, and reading it is
behind an AVOption flag, so we shouldn't require that sidx information
also be present in order to seek using the fragment index.

Signed-off-by: Derek Buitenhuis <derek.buitenhuis at gmail.com>
---
This is especially important want I/O is networked, since otherwise it will
read essentially the entire file by seeking to every sidx in the file, which
for a live-style FMP4 can be a *lot*.

Dale Curtis is CC'd, as this is probably highly relevant to him.

Note: If a global sidx is present, that information will override the mfra, but
if sidx are before each moof, those will no longer be parsed in mov_read_header
if you set use_mfra_for, which can result in a wrong duration since mfra isn't
used for setting duration while sidx is.
---
 libavformat/mov.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index 4f64e96bc0..7fd43a8fc5 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -7529,6 +7529,7 @@ static int mov_read_mfra(MOVContext *c, AVIOContext *f)
             goto fail;
     } while (!ret);
     ret = 0;
+    c->frag_index.complete = 1;
 fail:
     seek_ret = avio_seek(f, original_pos, SEEK_SET);
     if (seek_ret < 0) {
-- 
2.28.0



More information about the ffmpeg-devel mailing list