“stbl”几乎是普通的MP4文件中最复杂的一个box了,首先需要回忆一下sample的概念。sample是媒体数据存储的单位,存储在media的chunk中,chunk和sample的长度均可互不相同。
“stbl”包含了关于track中sample所有时间和位置的信息,以及sample的编解码等信息。利用这个表,可以解释sample的时序、类型、大小以及在各自存储容器中的位置。“stbl”是一个container box,其子box包括:sample description box(stsd)、time to sample box(stts)、sample size box(stsz或stz2)、sample to chunk box(stsc)、chunk offset box(stco或co64)、composition time to sample box(ctts)、sync sample box(stss)等。
sample table box描述sample的所有信息以及一些不同类型的box,media handler可以用这些信息正确的按顺序解析所有的samples,而不需要强迫这些数据按movie的时间顺序存放到实际数据流中。
如果sample table box所在的track引用了数据,那么必须包含以下的子box:sample description, sample size, sample to chunk和chunk offset。所有的子表有相同的sample数目。
“stsd”必不可少,且至少包含一个条目,该box包含了data reference box进行sample数据检索的信息。没有“stsd”就无法计算media sample的存储位置。“stsd”包含了编码的信息,其存储的信息随媒体类型不同而不同。
Sample Description Box(stsd)
box header和version字段后会有一个entry count字段,根据entry的个数,每个entry会有type信息,如“vide”、“sund”等,根据type不同sample description会提供不同的信息,例如对于video track,会有“VisualSampleEntry”类型信息,对于audio track会有“AudioSampleEntry”类型信息。
视频的编码类型、宽高、长度,音频的声道、采样等信息都会出现在这个box中。
根据不同的编码方案和存储数据的文件数目,每个media可以有一个到多个sample description。sample-to-chunk通过这个索引表,找到合适media中每个sample的description。
数据结构表:
字段 |
长度(字节) |
描述 |
尺寸 |
4 |
box大小 |
类型 |
4 |
stsd |
版本 |
1 |
box版本 |
标志 |
3 |