我正在尝试使用
在视频标签中指定特定的视频/音频编解码器<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并且可以看到音频map.40.2但是可以解决其余的编解码器,什么4d401e在上面的意思是什么?
干杯 托比
答案 0 :(得分:88)
codecs
参数由RFC 6381指定。具体而言,请参阅section 3.3了解avc1
和mp4a
值的含义。
在avc1.4D401E
的情况下,avc1
表示H.264视频,后跟一个点和由the H.264 standard定义的三个2位十六进制数字:
profile_idc
constraint_set
标记的字节(当前为constraint_set0_flag
到constraint_set5_flag
,以及reserved_zero_2bits
)level_idc
一些例子:
avc1.42E01E
:H.264约束基线配置文件级别3 avc1.4D401E
:H.264主要配置文件级别3 avc1.64001E
:H.264 High Profile Level 3 这些也是MP4文件中序列参数集和AVC配置框的第二,第三和第四个字节。您可以使用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音频),则后跟另一个点和十进制的音频对象类型。这些列在ISO / IEC 14496-3标准和Wikipedia中,并且对应于DecoderSpecificInfo
(decSpecificInfo
)的前5位(除非这些位等于31,其中case将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 :(得分:14)
可能需要更多细节的一个部分是如何从decSpecificInfo值中分离出特定的音频对象类型。找到“mp4a.40”部分非常清楚,“。2”部分可能有点棘手。
我们从一系列单字节十六进制值开始:在mark4o的例子中为“11 90”或在我的情况下为“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值,它们仍然是相同的对象类型。
答案 2 :(得分:9)