2013-05-03 2 views
30

Я пытаюсь указать конкретный видео/аудио кодек в тег видео с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 в приведенном выше?

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

ответ

66

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

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

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

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

  • avc1.42E01E: H.264 базовый профиль Constrained Уровень 3
  • avc1.4D401E: H.264 Main Profile Level 3
  • avc1.64001E: H.264 High Profile Level 3

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

Что касается mp4a.40.2, mp4a указывает звук MPEG-4. Затем следует точка и шестнадцатеричный ObjectTypeIndication (objectTypeId в mp4file выход), который можно посмотреть на the MPEG4 registration site. Если это шестнадцатеричное значение равно 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) 
... 
+1

Спасибо за информацию - очень полезный – user2302694

+0

Удивительный ответ. Я потратил часы на поиск этой информации. Спасибо! – nbz

12

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

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

Начнем с последовательности однобайтовых шестнадцатеричных значений: «11 90» в примере mark4o или «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.

0

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

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

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

Смежные вопросы