在线短视频秒播优化之视频文件格式之MP4文件Moov box的位置

clipboard.png
以前咱们介绍了在线短视频秒播优化的方方面面,从服务器,cdn部署接入,数据链接/获取,客户端缓存,出帧策略,到视频文件I帧位置等。
今天从视频文件格式的另一个角度介绍,MP4文件的box排列顺序是如何影响,在线短视频的播放以及秒播优化的。
MP4文件中的全部数据都装在box中 (iso-14496-12/14)
(QuickTime中为atom)即mp4是由若干个box组成的
先简单介绍几个重要的box,以便诸位在后续学习时心中有数:
一、 ftyp box,在文件的开始位置,描述的文件的版本、兼容协议等;
二、 moov box,这个box中不包含具体媒体数据,但包含本文件中全部媒体数据的宏观描述信息,moov box下有mvhd和trak box。android

mvhd中记录了建立时间、修改时间、时间度量标尺、可播放时长等信息。
trak中的一系列子box描述了每一个媒体轨道的具体信息。
三、 moof box,这个box是视频分片的描述信息。并非MP4文件必须的部分,但在咱们常见的可在线播放的MP4格式文件中(例如Silverlight Smooth Streaming中的ismv文件)确是重中之重。
四、 mdat box,实际媒体数据。咱们最终解码播放的数据都在这里面。
五、 mfra box,通常在文件末尾,媒体的索引文件,可经过查询直接定位所需时间点的媒体数据。
clipboard.png
clipboard.png
clipboard.png
clipboard.png
clipboard.png
clipboard.png
MP4文件的生成与解析,播放
两个重要的box,moov and mdat
1.生成:先写入mdat后写入moov,所以绝大多数工具都会把moov数据放到mdat后边,好比android的mp4writer,ffmpeg等工具
2.解析:解析播放的时候,先读取moov,才能解析mdat
播放影响
1.本地播放,没有影响,播放软件能够先seek到末尾,读取moov
2.在线播放
(1).须要http服务器支持seek
(2).服务器不支持seek,是个很是不友好的方案,要先把数据下载完成才能播放(不管下载到哪里,新服务器,本地内存或存储)
(3).(1)和(2)多多少少会引入延时,尤为(2),影响秒开
clipboard.png
clipboard.png
clipboard.png
市面上短视频mp4 box排列
抖音,火山等小视频moov排在前边,不用seek;
快手,360等moov排在后边须要seek;
能够看出前者小视频在这方面更专业。
在线短视频MP4 moov box排在后边的解决方案
1.修改文件把moov box排在前面,在MP4在设备上生成的时候或传到服务器上后进行
这个方法一劳永逸,还能提高秒开的速度
工具:
ffmpeg option faststart
qt-faststart
clipboard.png
clipboard.png
clipboard.png
clipboard.png

Thanks缓存

相关文章
相关标签/搜索