Ответ 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)
...