一文分析 mp4对比m3u8 第一帧加载慢的原因

简介: 公司要求对视频的 秒开率(1秒内成功加载的播放数 / 播放总数)、失败率 (播放失败的次数 / 播放总数) 等进行优化。经过线上AB测试发现,`m3u8视频(第一段切片为1~3秒)`在秒开率、失败率等性能指标上均优于`普通mp4视频`。这里探究一下,m3u8视频(第一段切片为1~3秒) 在秒开率上均优于 普通mp4视频 的原因。

工作室正在做的软件,是一个以长视频播放为主的Android与IOS 手机软件。
最近半年,老板要求对视频的 秒开率(1秒内成功加载的播放数 / 播放总数)、失败率 (播放失败的次数 / 播放总数) 等进行优化。经过线上AB测试发现,m3u8视频(第一段切片为1~3秒)在秒开率、失败率等性能指标上均优于普通mp4视频

这里想探究一下,m3u8视频(第一段切片为1~3秒)在秒开率上均优于普通mp4视频的原因。

网络上找到的原因基本是:
mp4 - PC/Apple/Android 通吃,和HTML5和flash播放器亲和度都挺好,但是文件头太大,结构复杂,长视频的大文件头影响加载速度的视频体验, 所以短视频更常见

一、普通MP4

这里从网络上找了一个普通MP4文件的结构图,让我们看一下它的文件结构:

普通MP4文件结构
一眼看去,完全懵逼了,果然结构复杂...

MP4实际代表的含义是 MPEG-4 Part 14。
其文件由若干个box组成,每个box有类型和长度,这里可以将box理解为一个数据对象块。box中还可以包含子box,包含子 box 则称之为container box

这里我从网络上下载了一个普通MP4文件。在Mac平台上,我们用MediaParser软件可以用来大致看一下这个MP4文件的构造。

mp4视频文件举例

1.1、ftyp

一个MP4文件有且只有一个 ftyp ,在MP4文件的开始位置,描述的文件的版本、兼容协议等 ;

1.2、moov

moov(Movie Box)是一个container box ,一般跟随在ftyp之后,有且只有一个。
其不包含具体媒体数据,但包含本文件中所有媒体数据的宏观描述信息(视频创建时间、视频修改时间、播放速率、视频时长、音量大小、视频宽高、字幕语言、声道、视频/音频帧位置 等)。

moov box下,一般包含以下几个box:

  • mvhd 中记录了创建时间、修改时间、时间度量标尺、可播放时长等信息;
  • trak 可以有多个,描述了每个媒体轨道的具体信息;
  • udta user data;

1.3、mdat

mdat(Midia Data Box)MP4文件的媒体数据存放在这里。mdat中的数据帧依次存放,每个帧的位置、时间、长度都由moov中的信息指定。
mdat Box 基本上占据了视频大小的 95% 以上,得益于 mp4 边下边播的效果,浏览器获取到了部分 mdat box,就可以进行播放。

若希望详细了解普通MP4文件结构,可参考文章:
mp4文件格式解析

结论

了解到此,大致可以了解到:
普通MP4文件播放时,ftyp与moov box需同时加载完成后,并下载部分mdat box的帧数据后,才能开始播放
那对于一些长视频,确实存在文件头过大,从而影响第一帧的加载速度问题。
另外,对于不是很规范的文件,例 mp4视频文件举例中moov box基本在文件最后的的MP4文件,还有可能存在视频文件基本下载完成后才能播放的问题。

二、Fragment mp4 (fmp4)

在网络上查找MP4文件结构时,发现一种Fragmented mp4 的文件结构图

fmp4文件结构

fmp4 是基于 MPEG-4 Part 12 的流媒体格式。与普通MP4相比:

  • fmp4不需要一个 moov Box 来进行 initialization
  • fmp4 的 moov Box 只包含了一些 track 信息
  • fmp4 的 视频/音频 metadata 信息与数据都存在一个个 moof、mdat 中,它是一个流式的封装格式

2.1、Fragment

在微软的 Silverlight中的Smooth Streaming文件结构文件分为了多个Fragments,每个Fragment中包含moof和mdat。这样的结构符合渐进式播放需求,mdat及其描述信息逐步传输,收齐一个Fragment便可播放其中的mdat

2.2、moof

这个box并不是MP4文件必须的部分。它是视频分片的描述信息,其为流媒体格式(微软的 Silverlight中的Smooth Streaming)中的重中之重。

三、参考

mp4文件格式解析

什么是「Fragmented mp4(fmp4)」, 它和普通 mp4 格式有什么区别?

= THE END =

文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,可关注我的公众号。
文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,可关注我的公众号。
文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,可关注我的公众号。

目录
相关文章
|
编解码 移动开发 视频直播
一文详解 m3u8 视频格式与分析视频秒开优化
秒开指的是,一秒内成功加载的播放数/播放总数。本意是想对比一下m3u8与mp4视频格式,并了解m3u8格式优缺点,以确定一个大概优化方向。但对m3u8做简单了解后,觉的m3u8可能是一个优化方向。
12574 4
一文详解 m3u8 视频格式与分析视频秒开优化
|
存储 缓存 Java
Infinispan篇(一):一个被遗忘了的分布式集群缓存系统
Infinispan 是一个开源内存数据网格,提供灵活的部署选项和强大的数据存储、管理和处理功能。
2371 0
|
网络协议
用 ipv6 和端口号发起 http 请求
用 ipv6 和端口号发起 http 请求
获取apk的签名信息
在接入第三方功能时,经常要注册提交apk的签名信息 (sha1签名)?,下面列出相关步骤。 获取apk签名信息的步骤: 1)修改apk后缀名为zip,解压得到其中的META-INF文件夹; 2)把META-INF文件夹放到C盘根目录下; 3)在dos面板中,  敲入命令:  keytool -printcert -file C:\META-INF\CERT.
5828 0
|
9月前
|
搜索推荐 数据挖掘 API
拼多多根据ID取商品详情原数据API接口的开发应用与收益
拼多多作为中国知名电商平台,为开发者和企业提供丰富的API接口,助力快速接入平台,实现商品推广、订单管理等功能。其中,根据ID取商品详情原数据的API接口尤为重要,具备高效性、稳定性和安全性,广泛应用于电商数据分析、价格监测、竞品分析、商品推荐系统、移动应用开发及精准营销等领域,为企业带来显著收益。
244 0
activiti 会签多实例任务,设置为候选组或个人任务的总结
activiti 会签多实例任务,设置为候选组或个人任务的总结
1320 0
activiti 会签多实例任务,设置为候选组或个人任务的总结
抖音最近很火的QQ在线价值评估网站源码(qq价值在线评估)
这个源码是很多年以前的了,最近又在抖音刷到别人直播需要刷礼物才能给你评测,所以又找了一下测试了可用,将源码上传后解压,访问可以直接使用。
1552 0
抖音最近很火的QQ在线价值评估网站源码(qq价值在线评估)
|
JSON NoSQL C++
VScode调试C/C++项目调试多个C++程序makefile
VScode调试C/C++项目调试多个C++程序makefile
744 0
|
存储 人工智能 Cloud Native
Diskless:云与互联网数据中心的下一个大变革
Diskless:云与互联网数据中心的下一个大变革
585 0
|
JavaScript 前端开发
使用swiper实现图片轮播功能
使用swiper实现图片轮播功能
246 0