[FFmpeg-devel] MOV Muxer fix to respect the standard

Måns Rullgård mans
Fri May 22 15:45:06 CEST 2009

Larbi Joubala <larbi.joubala at resonate-mp4.com> writes:

> M?ns Rullg?rd a ?crit :
>> "Fran?ois Revol" <revol at free.fr> writes:
>>>> Hi guys,
>>>>     I recently found when I generated a mp4 file that this file
>>>> doesn't totally respect the standard(ISO media file format
>>>> 14496-12) in particulary for the box 'hdlr'. The handler
>>>> description(named in the standard as 'name') must be a
>>>> NULL-terminated string in UTF8 while in the generated file I saw
>>>> that the string is not NULL-terminated and it is preceded by its
>>>> size while it is not specifies by the standard.
>>>>     If you confirm that, I have joined within this mail a patch
>>>> that you can apply.
>>> From what I recall, in many places MOV does use PASCAL strings
>>> (length + non \0), while MP4 changed this to be C strings (\0
>>> terminated), which is about the only significant difference
>>> (sometimes I wondered if it's not just to crash MOV parsers).
>>> I don't have time, but you'll definitely want to check both QT and
>>> MP4 specs for this.
>> ISO 14496-12 says null-terminated string, and QT says "counted
>> string", so they are incompatible.  Of course, any size/termination is
>> unnecessary since the string is the last element of the box and the
>> box size is known.  Fools writing specs again...
> Fortunaletly, the box size is known otherwise any MP4/3GP/MOVdemuxer
> will fail to parse a file. However, There is a problem if the MOV
> backend of libavformat really want to be fully compliant with the
> following standards ISO 14496-12 and MOV.
> What I propose is to generate a correct 'hdlr' box depending on the
> file format: name handler with PASCAL strings for MOV files and C
> strings for 3GP/MP4 files.

I never meant to imply we could ignore this difference. I was merely
pointing at a bad design decision on both variants of the format.

M?ns Rullg?rd
mans at mansr.com

More information about the ffmpeg-devel mailing list