上一篇,我们讲了,Track是这样一个结构体:
struct Track { Track *next; sp<MetaData> meta; uint32_t timescale; sp<SampleTable> sampleTable; bool includes_expensive_metadata; bool skipTrack; };
sp<MetaData> meta主要用来存一些影片宽高,编码,时间长度等等一些,信息。从这篇开始,我们着重讲sp<SampleTable> sampleTable,这个成员是用来描述MP4的sample(也就是其他容器里的frame)的组织形式。我们都看过胶片电影,都是一帧一帧的播放的,一秒钟放24帧画面,就可以展现连贯的动画。而针对数字媒体时代,我们需要解决的问题是如何在文件中找到我们指定的帧来播放,对mp4,就是要找到指定的sample.在文件中的偏移位置,sample的大小。
//Time-to-Sample Atoms - STTS
该box可以使我们通过时间来计算对应的sampleIndex,所以叫time to sample:
字段 长度 ( 字节 ) 描述 尺寸 4 这个 atom 的字节数 类型