The codecs
parameter is specified by RFC 6381. Specifically, see section 3.3 for the meaning of avc1
and mp4a
values.
In the case of avc1.4D401E
, avc1
indicates H.264 video, and this is followed by a dot and three 2-digit hexadecimal numbers defined by the H.264 standard:
profile_idc
- the byte containing the
constraint_set
flags (currently constraint_set0_flag
through constraint_set5_flag
, and the reserved_zero_2bits
)
level_idc
Some examples:
avc1.42E01E
: H.264 Constrained Baseline Profile Level 3
avc1.4D401E
: H.264 Main Profile Level 3
avc1.64001E
: H.264 High Profile Level 3
These are also the second, third, and fourth bytes of the Sequence Parameter Set and the AVC Configuration Box in an MP4 file. You can dump these bytes using a program such as mp4file
: mp4file --dump movie.mp4
. Look for the avcC
(AVC Configuration) Box and the hexadecimal values for AVCProfileIndication
, profile_compatibility
, and AVCLevelIndication
.
As for mp4a.40.2
, mp4a
indicates MPEG-4 audio. It is followed by a dot and a hexadecimal ObjectTypeIndication
(objectTypeId
in mp4file
output), which can be looked up on the MPEG4 registration site. If this hexadecimal value is 40
(ISO/IEC 14496-3 Audio), it is followed by another dot and an audio object type in decimal. These are listed in the ISO/IEC 14496-3 standard and on Wikipedia, and correspond to the first 5 bits of the DecoderSpecificInfo
(decSpecificInfo
) (unless these bits equal 31, in which case add 32 to the next 6 bits). mp4a.40.2
indicates AAC LC audio, which is what is usually used with H.264 HTML5 video.
For example, codecs="avc1.42E01E, mp4a.40.2"
would be correct for the movie below:
$ mp4file --dump movie.mp4
...
type avcC (moov.trak.mdia.minf.stbl.stsd.avc1.avcC) ◀━━ avc1
configurationVersion = 1 (0x01)
AVCProfileIndication = 66 (0x42) ◀━━ 42
profile_compatibility = 224 (0xe0) ◀━━ E0
AVCLevelIndication = 30 (0x1e) ◀━━ 1E
...
type esds (moov.trak.mdia.minf.stbl.stsd.mp4a.esds) ◀━━ mp4a
version = 0 (0x00)
flags = 0 (0x000000)
ESID = 2 (0x0002)
streamDependenceFlag = 0 (0x0) <1 bits>
URLFlag = 0 (0x0) <1 bits>
OCRstreamFlag = 0 (0x0) <1 bits>
streamPriority = 0 (0x00) <5 bits>
decConfigDescr
objectTypeId = 64 (0x40) ◀━━ 40
streamType = 5 (0x05) <6 bits>
upStream = 0 (0x0) <1 bits>
reserved = 1 (0x1) <1 bits>
bufferSizeDB = 0 (0x000000) <24 bits>
maxBitrate = 78267 (0x000131bb)
avgBitrate = 78267 (0x000131bb)
decSpecificInfo
info = <2 bytes> 11 90 |..| ◀━━ 2 (first 5 bits in decimal)
...