isomp4: fragmented mp4 and finalise
isomp4/mux: add a fragment mode for initial moov with data Used by some proprietary software for their fragmented files. Adds some support for multi-stream fragmented files Flow is as follows. 1. The first 'fragment' is written as a self-contained fragmented mdat+moov complete with an edit list and durations, tags, etc. 2. Subsequent fragments are written with a mdat+moof and each stream is interleaved as data arrives (currently ignoring the interleave-* properties). data-offsets in both the traf and the trun ensure data is read from the correct place on demuxing. Data/chunk offsets are also kept for writing out the final moov. 3. On finalisation, the initial moov is invalidated to a hoov and the size of the first mdat is extended to cover the entire file contents. Then a moov is written as regularly would in moov-at-end mode (the default). This results in a file that is playable throughout while leaving a finalised file on completion for players that do not understand fragmented mp4.
qtdemux: increase some logging on streams and sample parsing
qtdemux: bail out when encountering an atom with a size of 0 A size 0 atom means the atom extends to the end of the file. No further valid atoms will ever follow. Avoids a subsequent scan for an atom from one byte earlier after encountering a size 0 atom.
qtdemux: fix subsequent moof parsing after moov with valid samples reset the moof_offset back to its original value like is done in the error case just before. Fixes subsequent parsing of a moof following a moov that contains valid samples in a non-streaming fragmented mp4.
qtdemux: extend edit list when fragmented When we are fragmented, the edit list may only refer to the portion of the media that is in the moov. Extend the edit list stop time when we if there is only one qt segment and we are reading a fragmented file. Fixes playback of some fragmented mp4 files generated by proprietary programs.