1、stbl与mdat的对应关系
MP4的媒体信息和数据是分开存放的。就是你想获得数据之前必须要解析出每个帧数据所有的位置。mp4存放这个帧信息的是放在stbl这个box里。而真实的数据放在mdat中。
Sample Table Box(stbl)
- stts:Decoding Time to Sample Box 时间戳和Sample映射表
- stsd:Sample Description Box
- stsz, stz2:Sample Size Boxes 每个Sample大小的表
- stsc:Sample to chunk 的映射表
- ‘stco’, ‘co64’:Chunk位置偏移表
- stss:关键帧index
2、解析stsc还原Sample与chunk的映射表
Sample 是存储的最基本单元,mp4把Sample 存在chunk中。chunk的长度、chunk的大小、chunk中Sample的数量及大小都是不定的。通过解析这部分box来还原这个映射表。
3、解析‘stco’, ‘co64’
“stco”定义了每个thunk在媒体流中的位置。位置有两种可能,32位的和64位的,后者对非常大的电影很有用。从这个box我们就可以获得 chunk 的总数量,entry_count。
4、解析过程
- 解析‘stco’, ‘co64’我们有了chunk 表,知道了chunk 的总数及每个chunk所在文件的位置;
- 解析stsc 配合着上面的chunk表,我们就能得到Sample与chunk的关系表。我们也就能获得每个Sample的位置信息;
- 配合上面的stts 时间表和解码器信息等,就可以搞出ES流了;
- 想获得关键帧的index,需要解析stss