Подтвердить что ты не робот

Атрибут кодека видеотекста html5

Я пытаюсь указать конкретный видео/аудио кодек в теге видео с помощью

<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>

но не могу найти правильную инструкцию кодека для воспроизведения видео, я загрузил видеоанализ и вижу, что его avc1 и может видеть, что звуковая карта .40.2, но может работать с остальной частью кодека, что означает ли значение 4d401e в приведенном выше?

Приветствия Тоби

4b9b3361

Ответ 1

Параметр codecs указан RFC 6381. В частности, см. раздел 3.3 для значений значений avc1 и mp4a.

В случае avc1.4D401E, avc1 указывает видео H.264, за которым следует точка и три двухзначных шестнадцатеричных числа, определяемые стандарт H.264:

  • profile_idc
  • байт, содержащий флаги constraint_set (в настоящее время constraint_set0_flag через constraint_set5_flag и reserved_zero_2bits)
  • level_idc

Некоторые примеры:

  • avc1.42E01E: H.264 Ограниченный базовый уровень профиля 3
  • avc1.4D401E: Основной уровень профиля H.264
  • avc1.64001E: Высокий профиль H.264 3

Это также второй, третий и четвертый байты набора параметров последовательности и блока конфигурации AVC в файле MP4. Вы можете сбрасывать эти байты с помощью такой программы, как mp4file: mp4file --dump movie.mp4. Найдите блок avcC (AVC Configuration) и шестнадцатеричные значения для AVCProfileIndication, profile_compatibility и AVCLevelIndication.

Что касается mp4a.40.2, mp4a указывает звук MPEG-4. За ним следует точка и шестнадцатеричный вывод ObjectTypeIndication (objectTypeId in mp4file), который можно найти на сайте регистрации MPEG4. Если это шестнадцатеричное значение 40 (ISO/IEC 14496-3 Audio), за ним следует еще одна точка и тип аудио объекта в десятичной системе. Они перечислены в стандарте ISO/IEC 14496-3 и Wikipedia и соответствуют первым 5 битам DecoderSpecificInfo (decSpecificInfo) (если эти биты не равны 31, и в этом случае добавить 32 к следующим 6 битам). mp4a.40.2 указывает звук AAC LC, который обычно используется с видео H.264 HTML5.

Например, codecs="avc1.42E01E, mp4a.40.2" будет правильным для фильма ниже:

$ 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)
...

Ответ 2

mark4o дает самое лучшее объяснение, которое я видел о том, как расшифровать информацию о кодеках. Отлично.

Одна деталь, которая может потребовать немного больше деталей, - это разбить конкретный тип аудио объекта из значения decSpecificInfo. Поиск части "mp4a.40" очень ясен, раздел ".2" может быть немного сложным.

Начнем с последовательности однобайтовых шестнадцатеричных значений: "11 90" в примере mark4os или "12 08" в моем случае. Оба они составляют в общей сложности 2 байта... может быть больше значений, но только первые 2 вопроса для поиска типа объекта (и обычно только первый байт). Мы ищем отдельные биты, чтобы преобразовать каждую цифру в шестнадцатеричные значения в двоичные; должно быть 4 двоичных цифры для каждой шестнадцатеричной цифры. Возьмите первые 5 двоичных цифр - 4 из первой шестнадцатеричной цифры, 1 из следующей - и преобразуйте это двоичное значение в десятичное. Вот шаги:

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   

Они представляют собой один и тот же тип объекта, несмотря на разные значения decSpecificInfo.

Ответ 3

Вы можете использовать инструмент MP4Box для поиска строк кодеков в формате RFC6381. Все же вы должны присоединиться к ним с запятыми.

Вы можете использовать эту команду:

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