From 9dc5cb34aeff9b8d6e468ec4be957a647d2e87c0 Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Thu, 19 Aug 2021 16:02:47 +1000 Subject: [PATCH] isomp4/mux: don't overwrite with a bigger moov when fragmenting When outputting fragmented mp4, with a seekable downstream, we rewrite the moov to maybe add a duration to the mvex. If we start by not writing the initial moov->mvex->mhed duration and then overwrite with a moov containing mhed atom, the moov's will have different sizes and could overwrite subsequent data and result in an unplayable file. e.g. The initial moov would be of size 842 and the final moov would have a size of 862. Fix by always pushing out the mhed duration in the moov when fragmenting. Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/898 Part-of: --- gst/isomp4/atoms.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/gst/isomp4/atoms.c b/gst/isomp4/atoms.c index cc191ed..290d1fd 100644 --- a/gst/isomp4/atoms.c +++ b/gst/isomp4/atoms.c @@ -2970,11 +2970,9 @@ atom_mvex_copy_data (AtomMVEX * mvex, guint8 ** buffer, guint64 * size, return 0; } - if (mvex->mehd.fragment_duration > 0) { - /* only write mehd if we have anything extra to add */ - if (!atom_mehd_copy_data (&mvex->mehd, buffer, size, offset)) { - return 0; - } + /* only write mehd if we have anything extra to add */ + if (!atom_mehd_copy_data (&mvex->mehd, buffer, size, offset)) { + return 0; } walker = g_list_first (mvex->trexs); -- 2.7.4