html5 video tag codecs attribute
Asked Answered
F

4

54

I am trying to specify a specific video/audio codec in the video tag using

<video poster="movie.jpg" controls>
    <source src="movie.mp4" type='video/mp4; codecs="avc1.4D401E, mp4a.40.2"'/>
    <p>This is fallback content</p>
</video>

but can't find the right codecs statement to play the video , i have downloaded a video analyser and can see that its an avc1 and can see that the audio map.40.2 but can work out the rest of the codec, what does the 4d401e mean in the above ?

Cheers Toby

Facing answered 3/5, 2013 at 16:3 Comment(0)
W
130

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:

  1. profile_idc
  2. the byte containing the constraint_set flags (currently constraint_set0_flag through constraint_set5_flag, and the reserved_zero_2bits)
  3. 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)
...
Wooden answered 3/5, 2013 at 18:37 Comment(2)
Amazing answer. I have spent hours looking for this information. Thank you!Sextillion
@Wooden How to do this using ffmpeg or ffprobe to get information from any video format. Ex: mp4 & webpWanyen
A
20

You can use MP4Box tool to find out codec strings in RFC6381 format. Still you have to join them with commas.

You can use this command:

MP4Box -info big.mp4 2>&1 | grep RFC6381 | awk '{print $4}' | paste -sd , -

Ardolino answered 26/2, 2018 at 14:44 Comment(3)
In Debian / Ubuntu the package to install this tool is called "gpac".Brant
This was the solution that worked for me using OSX/homebrew.Conan
$ brew install mp4box installs gpac for me, so you're both right :)Carillonneur
E
16

mark4o gives by far the best explanation I've seen of how to decipher codec information. Excellent.

One piece which may require a little more detail is how to break out the specific audio object type from the decSpecificInfo value. Finding the "mp4a.40" part is very clear, the ".2" section can be a little tricky.

We start with a sequence of single byte hexadecimal values: "11 90" in mark4o’s example or "12 08" in my case. Both of those are a total of 2 bytes... there may be more values but only the first 2 matter for finding the object type (and usually only the first byte). We're looking for individual bits so convert each digit in the hexadecimal values to binary; there should be 4 binary digits for each hexadecimal digit. Take the first 5 binary digits — 4 from the first hex digit, 1 from the next — and convert that binary value to decimal. Here are the steps:

Example 1 (11 90):
Starting value:                     11                90
Separate the hex digits:         1      1          9      0
Convert each digit to binary:   0001   0001       1001   0000
Take the first 5 bits:          0001   0
Combine into binary value:      00010
Convert to decimal:             2


Example 2 (12 08):
Starting value:                     12                08
Separate the hex digits:         1      2          0      8
Convert each digit to binary:   0001   0010       0000   1000
Take the first 5 bits:          0001   0
Combine into binary value:      00010
Convert to decimal:             2   

They are the same object type in spite of having different decSpecificInfo values.

Enrol answered 7/3, 2014 at 18:18 Comment(0)
S
0

You could also simply do this to find the right codec infor:

go to the folder containing your video file, lets assume the file is called movie.mp4, The run the command:

vlc movie.mp4

assuming you have vlc installed, if the video plays vlc will have the correct codec information, enter image description here

Click on the tools menu above, a drop down list will be displayed with an option to view the codec information as below.

enter image description here

Shove answered 3/7, 2022 at 19:0 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.