Mp4格式分析:Adobe的sample1_1500kbps.f4v文件格式之二:moov分析
2012-11-16 18:50
435 查看
MOOV的stbl(SampleTable)包含了关于Sample(Audio/Video)如何组织的。
每个audio/video track box都有个stbl,描述了chunk和sample的对应关系。
Mp4把mdat(存放媒体数据的box)分为Chunk,每个Chunk包含Sample,Sample即为视频的帧或音频数据。
mdatt的结构如下:
下面结合数据说明对应关系,数据可以参考“Mp4格式分析:Adobe的sample1_1500kbps.f4v文件格式之一,文件结构”和“f4v-moov.log下载”。
video track,视频的chunk的offset信息:
box(F4vChunkOffsetStcoBox,"stco",0x7374636F):
header:
total_size:172(0x000000AC)
box_type:1937007471(0x7374636F)
payload:
version:0(0x00)
flags:0(0x000000)
offset_count:39(0x00000027)
offsets:
chunk_offset:53932(0x0000D2AC)
chunk_offset:359182(0x00057B0E)
chunk_offset:931430(0x000E3666)
chunk_offset:1171186(0x0011DEF2)
chunk_offset:1236607(0x0012DE7F)
chunk_offset:1711188(0x001A1C54)
chunk_offset:2283310(0x0022D72E)
chunk_offset:2862003(0x002BABB3)
chunk_offset:3406733(0x0033FB8D)
...........................
chunk_offset:19566362(0x012A8F1A)
如下图所示:
因为VideoChunk之后是个AudioChunk,所以VIdeoChunk0的大小=AudioChunk0Offset-VideoChunk0Offset。
把第二个track,即音频track的信息贴在下面:
chunk_offset:
box(F4vChunkOffsetStcoBox,"stco",0x7374636F):
header:
total_size:172(0x000000AC)
box_type:1937007471(0x7374636F)
payload:
version:0(0x00)
flags:0(0x000000)
offset_count:39(0x00000027)
offsets:
chunk_offset:334724(0x00051B84)
chunk_offset:906122(0x000DD38A)
chunk_offset:1145912(0x00117C38)
chunk_offset:1211243(0x00127B6B)
chunk_offset:1686344(0x0019BB48)
chunk_offset:2257621(0x002272D5)
chunk_offset:2836800(0x002B4940)
chunk_offset:3381618(0x00339972)
chunk_offset:3938809(0x003C19F9)
chunk_offset:4524709(0x00450AA5)
chunk_offset:5085138(0x004D97D2)
...........................
chunk_offset:18975430(0x01218AC6)
chunk_offset:19541106(0x012A2C72)
chunk_offset:19693547(0x012C7FEB)
如下图所示:
即:
VideoChunk0 size = AudioChunk0Offset - VideoChunk0Offset = 334724 - 53932 = 280792字节。
也就是第一个VideoChunk里面包含的Sample总长度为280792。
以视频为例,数据如下:
sample_to_chunk:
box(F4vSampleToChunkBox,"stsc",0x73747363):
header:
total_size:112(0x00000070)
box_type:1937011555(0x73747363)
payload:
version:0(0x00)
flags:0(0x000000)
count:8(0x00000008)
first_chunk:1(0x00000001)
samples_per_chunk:90(0x0000005A)
samples_desc_index:1(0x00000001)
first_chunk:12(0x0000000C)
samples_per_chunk:89(0x00000059)
samples_desc_index:1(0x00000001)
first_chunk:13(0x0000000D)
samples_per_chunk:90(0x0000005A)
samples_desc_index:1(0x00000001)
...........................
first_chunk:39(0x00000027)
samples_per_chunk:18(0x00000012)
samples_desc_index:1(0x00000001)
first_chunk说明开始的chunk,samples_per_chunk说明这个范围的chunk包含多少个samples。如下图所示:
如果知道每个Sample的尺寸,就知道了每个Sample的offset了。
sample_size:
box(F4vSampleSizeBox,"stsz",0x7374737A):
header:
total_size:13760(0x000035C0)
box_type:1937011578(0x7374737A)
payload:
version:0(0x00)
flags:0(0x000000)
constant_size:0(0x00000000)
size_count:3435(0x00000D6B)
size_table:
sample_size:1593(0x00000639)
sample_size:229(0x000000E5)
sample_size:96(0x00000060)
sample_size:95(0x0000005F)
sample_size:718(0x000002CE)
sample_size:152(0x00000098)
sample_size:148(0x00000094)
sample_size:1402(0x0000057A)
sample_size:260(0x00000104)
sample_size:246(0x000000F6)
sample_size:649(0x00000289)
sample_size:95(0x0000005F)
sample_size:111(0x0000006F)
sample_size:2330(0x0000091A)
sample_size:370(0x00000172)
sample_size:696(0x000002B8)
sample_size:7100(0x00001BBC)
sample_size:1890(0x00000762)
sample_size:2101(0x00000835)
...........................
sample_size:2520(0x000009D8)
sample_size:2838(0x00000B16)
sample_size:1995(0x000007CB)
把前90个的尺寸加起来,正好是第一个VideoChunk0的长度:280792B。
图汇总:
每个audio/video track box都有个stbl,描述了chunk和sample的对应关系。
stbl的结构
stbl的结构如下:Mp4把mdat(存放媒体数据的box)分为Chunk,每个Chunk包含Sample,Sample即为视频的帧或音频数据。
mdatt的结构如下:
下面结合数据说明对应关系,数据可以参考“Mp4格式分析:Adobe的sample1_1500kbps.f4v文件格式之一,文件结构”和“f4v-moov.log下载”。
Chunk的Offset
首先,说明各个chunk的offset,是在stco(Chunk Offset stco)中定义的,每个track都有一个,譬如:video track,视频的chunk的offset信息:
box(F4vChunkOffsetStcoBox,"stco",0x7374636F):
header:
total_size:172(0x000000AC)
box_type:1937007471(0x7374636F)
payload:
version:0(0x00)
flags:0(0x000000)
offset_count:39(0x00000027)
offsets:
chunk_offset:53932(0x0000D2AC)
chunk_offset:359182(0x00057B0E)
chunk_offset:931430(0x000E3666)
chunk_offset:1171186(0x0011DEF2)
chunk_offset:1236607(0x0012DE7F)
chunk_offset:1711188(0x001A1C54)
chunk_offset:2283310(0x0022D72E)
chunk_offset:2862003(0x002BABB3)
chunk_offset:3406733(0x0033FB8D)
...........................
chunk_offset:19566362(0x012A8F1A)
如下图所示:
因为VideoChunk之后是个AudioChunk,所以VIdeoChunk0的大小=AudioChunk0Offset-VideoChunk0Offset。
把第二个track,即音频track的信息贴在下面:
chunk_offset:
box(F4vChunkOffsetStcoBox,"stco",0x7374636F):
header:
total_size:172(0x000000AC)
box_type:1937007471(0x7374636F)
payload:
version:0(0x00)
flags:0(0x000000)
offset_count:39(0x00000027)
offsets:
chunk_offset:334724(0x00051B84)
chunk_offset:906122(0x000DD38A)
chunk_offset:1145912(0x00117C38)
chunk_offset:1211243(0x00127B6B)
chunk_offset:1686344(0x0019BB48)
chunk_offset:2257621(0x002272D5)
chunk_offset:2836800(0x002B4940)
chunk_offset:3381618(0x00339972)
chunk_offset:3938809(0x003C19F9)
chunk_offset:4524709(0x00450AA5)
chunk_offset:5085138(0x004D97D2)
...........................
chunk_offset:18975430(0x01218AC6)
chunk_offset:19541106(0x012A2C72)
chunk_offset:19693547(0x012C7FEB)
如下图所示:
即:
VideoChunk0 size = AudioChunk0Offset - VideoChunk0Offset = 334724 - 53932 = 280792字节。
也就是第一个VideoChunk里面包含的Sample总长度为280792。
Chunk包含多少个Sample
某个Chunk包含多少个Sample呢?定义在stsc(sample to chunk)结构里面。以视频为例,数据如下:
sample_to_chunk:
box(F4vSampleToChunkBox,"stsc",0x73747363):
header:
total_size:112(0x00000070)
box_type:1937011555(0x73747363)
payload:
version:0(0x00)
flags:0(0x000000)
count:8(0x00000008)
first_chunk:1(0x00000001)
samples_per_chunk:90(0x0000005A)
samples_desc_index:1(0x00000001)
first_chunk:12(0x0000000C)
samples_per_chunk:89(0x00000059)
samples_desc_index:1(0x00000001)
first_chunk:13(0x0000000D)
samples_per_chunk:90(0x0000005A)
samples_desc_index:1(0x00000001)
...........................
first_chunk:39(0x00000027)
samples_per_chunk:18(0x00000012)
samples_desc_index:1(0x00000001)
first_chunk说明开始的chunk,samples_per_chunk说明这个范围的chunk包含多少个samples。如下图所示:
如果知道每个Sample的尺寸,就知道了每个Sample的offset了。
Sample的尺寸
Sample的尺寸定义在stsz(SampleSize)box中,以Video track为例,数据如下:sample_size:
box(F4vSampleSizeBox,"stsz",0x7374737A):
header:
total_size:13760(0x000035C0)
box_type:1937011578(0x7374737A)
payload:
version:0(0x00)
flags:0(0x000000)
constant_size:0(0x00000000)
size_count:3435(0x00000D6B)
size_table:
sample_size:1593(0x00000639)
sample_size:229(0x000000E5)
sample_size:96(0x00000060)
sample_size:95(0x0000005F)
sample_size:718(0x000002CE)
sample_size:152(0x00000098)
sample_size:148(0x00000094)
sample_size:1402(0x0000057A)
sample_size:260(0x00000104)
sample_size:246(0x000000F6)
sample_size:649(0x00000289)
sample_size:95(0x0000005F)
sample_size:111(0x0000006F)
sample_size:2330(0x0000091A)
sample_size:370(0x00000172)
sample_size:696(0x000002B8)
sample_size:7100(0x00001BBC)
sample_size:1890(0x00000762)
sample_size:2101(0x00000835)
...........................
sample_size:2520(0x000009D8)
sample_size:2838(0x00000B16)
sample_size:1995(0x000007CB)
把前90个的尺寸加起来,正好是第一个VideoChunk0的长度:280792B。
图汇总:
相关文章推荐
- Mp4格式分析:Adobe的sample1_1500kbps.f4v文件格式之一,文件结构
- Mp4格式分析:Adobe的sample1_1500kbps.f4v文件格式之三:mp4 to rtmp packets
- 樱花大战资源分析之二 SPR文件格式不完全分析
- Mov文件格式对mdat和moov的分析
- HTTP POST请求报文格式分析与Java实现文件上传
- Linux ELF文件格式分析
- nk.bin和nk.nb0文件格式分析
- Nutch爬虫工作流程及文件格式详细分析
- pcap文件格式分析
- UNIX/LINUX 平台可执行文件格式分析
- sqlite浅析2-SQLITE存储分析-SQLITE文件格式分析
- 以一个wav文件为实例分析wav文件格式
- wav文件格式分析详解
- AMR音频编码器概述及文件格式分析
- sap 如何实现打印输出到Adobe PDF格式文件
- AMR音频编码器概述及文件格式分析
- PNG头文件格式分析
- Linux/Unix平台可执行文件格式分析
- AMR音频文件格式分析
- 梦幻西游 WSG 文件格式分析