• 短视频秒播优化实践(二)


    之前我们介绍了在线短视频秒播优化的方方面面,从服务器,cdn部署接入,数据连接/获取,客户端缓存,出帧策略,到视频文件I帧位置等。

    今天从视频文件格式的另外一个角度介绍,MP4文件的box排列顺序是如何影响,在线短视频的播放以及秒播优化的。

    • MP4文件中的所有数据都装在box中 (iso-14496-12/14)

    • (QuickTime中为atom)即mp4是由若干个box组成的

    先简单介绍几个重要的box,以便诸位在后续学习时心中有数:

    • 1、 ftyp box,在文件的开始位置,描述的文件的版本、兼容协议等;

    • 2、 moov box,这个box中不包含具体媒体数据,但包含本文件中所有媒体数据的宏观描述信息,moov box下有mvhd和trak box。mvhd中记录了创建时间、修改时间、时间度量标尺、可播放时长等信息。trak中的一系列子box描述了每个媒体轨道的具体信息。

    • 3、 moof box,这个box是视频分片的描述信息。并不是MP4文件必须的部分,但在我们常见的可在线播放的MP4格式文件中(例如Silverlight Smooth Streaming中的ismv文件)确是重中之重。

    • 4、 mdat box,实际媒体数据。我们最终解码播放的数据都在这里面。

    • 5、 mfra box,一般在文件末尾,媒体的索引文件,可通过查询直接定位所需时间点的媒体数据。





    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),影响秒开


    市面上短视频mp4 box排列
    • 抖音,火山等小视频moov排在前边,不用seek;

    • 快手,360等moov排在后边需要seek;

    在线短视频MP4 moov box排在后边的解决方案
    1.修改文件把moov box排在前面,在MP4在设备上生成的时候或传到服务器上后进行,这个方法一劳永逸,还能提升秒开的速度
    工具:

    ffmpeg option faststart
    qt-faststart
    



    原创作者:Walker.Xu,原文链接:https://segmentfault.com/a/1190000014405913

    欢迎关注我的微信公众号「码农突围」,分享Python、Java、大数据、机器学习、人工智能等技术,关注码农技术提升•职场突围•思维跃迁,20万+码农成长充电第一站,陪有梦想的你一起成长。

  • 相关阅读:
    asp.net大文件(视频)分片上传
    numpy.argmin
    python-Numpy学习之(一)ndim、shape、dtype、astype的用法
    matlab设置小数位数
    利用Open3D进行点云可视化
    dell5820参数
    CUDA与cuDNN
    Ubuntu16.04更换cudnn版本
    二进制格式保存文件np.save和np.load-Numpy数组的保存与读取方法
    python pickle存储、读取大数据量列表、字典数据的方法
  • 原文地址:https://www.cnblogs.com/hejunlin/p/12489520.html
Copyright © 2020-2023  润新知