您的位置:首页 > 其它

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的对应关系。

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。

图汇总:





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: