关于Sample的分析报告

首先,这是一个典型的sample Table box:

 

一、      Stbl box中常见的子box:

stts:Decoding Time to Sample Box时间戳和Sample映射表。通过这个box可以实现时间到sample number的映射。

stsd:Sample Description,主要描述当前track有关的编码信息,以及用于初始化解码的附加信息。

stsz,stz2:Sample Size Boxes每个Sample大小的表。

stsc:Sample to chunk的映射表。

stco,co64:Chunk位置偏移表。

Stss关键帧index。

二、对主要的子box进行解析:

(1)解析stsd可获得coding型、视频宽高、音频samplesize、channelcount这些和解码器有关信息。

(2)解析stsz box 可以获得一个sample size的表。

 

Filed name

type

Size(bits)

FullBox Header

---

---

sample_size

uint32

32

sample_count

uint32

32

entry_size

uint32[]

varies

 

sample_size中表示sample长度,如果是0表示每个sample长度不定,会记录在entry_size中;否则每个sample长度一样,并且entry_size域不存在。

'stz2' box中的entry_size是compact的,长度由特定字段指定。

 (3)解析stsc 还原Sample 与chunk的映射表 ,记录了每个chunk中包含多少sample,其结构定义如下:

 

Filed name

type

Size(bits)

FullBox Header

---

---

entry_cout

uint32

32

chunk_entry

uint32[3]

varies

chunk_entry包含三个字段:

first_chunk: uint32

samples_per_chunk: uint32

sample_description_index: uint32

每个entry表示从first_chunk开始的每个chunk都包含samples_per_chunk个samples,这些sample都可以用使用sample_description_index信息解码。通过这个box,可以构建出当前track的chunk结构,及其包含的sample。

Sample 是存储的最基本单元,mp4把Sample 存在chunk中。chunk的长度、chunk的大小、chunk中Sample的数量及大小都是不定的。通过解析这部分box来还原这个映射表。

(4) “stco”这个box记录了chunk对应的offset,只是包含字段一个是32为('stco'),一个是64位('co64')。

chunk offset box中记录都是相对文件的偏移量,可以直接通过这些信息读取。

三、小结

由于'mdat' box中的多媒体数据是没有结构的,只能参考moov的trak box解析。反过头来。我们看一下针对单个track中的media信息存储应该是下面的结构

|chunk #0| chunk#1| ... | chunk #n|

每个chunk的构成是下面的结构:

|sample #0|sample #1| ... | sample #n|

从trak box中的minf中可以看出,每个chunk的长度不定,其所包含的sample数目不同,每个sample的长度也不完全相同。

 

转载于:https://www.cnblogs.com/xizhu/p/9502723.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值