播放mp4文件时,需要支持seek功能。mp4的帧信息分别记录在不同的box中,本文简单介绍了一下,给定时间,找出对应帧在mp4文件中的位置的计算方法。
术语解释:
- sample表示帧。
- chunk表示组,里面有1个或多个sample。
- pts为Presentation Time Stamp的缩写,表示显示时间戳。
- stts、ctts、elst、stsc、stsz、stco分别为mp4文件中的box。
步骤如下:
一句话描述:由时间得到sample的索引,再由索引得到文件位置。
详细描述:
1. stts记录了每个sample对应的duration的信息,根据这个表可以计算出每个sample对应的pts。该pts需要使用ctts,elst中的信息进行修正。所以给定pts,即可得到其对应的帧索引。
2. stsc记录了每个chunk里面sample的数目,根据这个表可以计算出每个sample对应的chunk。
3. stsz记录了每个sample的大小,结合stsc的内容,可以得到每个sample在其对应的chunk中的相对位置。
4. stco记录了每个chunk在文件中的绝对位置。
5. 根据chunk在文件中的绝对位置及sample在chunk中的相对位置,即可计算出sample在文件中的绝对位置。
流程图如下:
seek in mp4
在实际应用中,一般先根据mp4的头部信息,解析出各帧的属性并存储到表格中,方便后续使用。
网友评论