isomp4/mux: don't overwrite with a bigger moov when fragmenting
authorMatthew Waters <matthew@centricular.com>
Thu, 19 Aug 2021 06:02:47 +0000 (16:02 +1000)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Mon, 23 Aug 2021 04:17:36 +0000 (04:17 +0000)
commit9dc5cb34aeff9b8d6e468ec4be957a647d2e87c0
tree072b1b56d312155975c035b7af30117d72f90979
parent0d27e6f86ef9719b816a808709d9accddf11cc9f
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: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1060>
gst/isomp4/atoms.c