目的
但对m3u8做简单了解后,觉得有必要对m3u8文件格式做一个记录。
m3u8视频 是一种什么样的视频格式?
- m3u8视频 举例
- 维基百科对m3u8的定义
- m3u8 与 MP4 对比
- 提高视频秒开率的一个方案
一、m3u8视频 是一种什么样的视频格式?
m3u8不是一种视频格式,而是一种纯文本文件。
m3u8视频文件格式中存放了视频的基本信息和 分段视频的索引地址 (将一整个视频分成了时长不同的很多小段)。当播放m3u8视频时,就是按顺序下载播放索引列表的视频,从而完成一部完整视频的播放。
以上几句话是我对m3u8视频格式是什么东西的一个总结,可能有用词不当的地方。但想了很长时间,觉得这样说已经是我能表达的最容易理解的说法了。
但只是这样说,可能还是有些抽象,因此下边我会举个例子。
二、m3u8视频 举例
这是一个来自网易公开课的视频播放地址:
http://flv0.bn.netease.com/videolib1/1903/15/9b4wxrd1g/SD/movie_index.m3u8
这个地址可以在mac浏览器上直接播放。
下边我们将这个m3u8文本文件下载到本地,打开:
<span class="hljs-regexp"><span class="hljs-comment">// M3U8文件必须包含的标签,并且必须在文件的第一行</span>
<span class="hljs-comment"><span class="hljs-selector-id">#EXTM3U</span>
// M3U8文件的版本,常见的是<span class="hljs-number">3
<span class="hljs-selector-id">#EXT-X-VERSION</span><span class="hljs-selector-pseudo">:3</span>
// 第一个TS分片的序列号
<span class="hljs-selector-id">#EXT-X-MEDIA-SEQUENCE</span><span class="hljs-selector-pseudo">:0</span>
// 是否允许cache
<span class="hljs-selector-id">#EXT-X-ALLOW-CACHE</span><span class="hljs-selector-pseudo">:YES</span>
// 每个每个媒体段(ts)的最大的时长
<span class="hljs-selector-id">#EXT-X-TARGETDURATION</span><span class="hljs-selector-pseudo">:39</span>
// 每个媒体段(ts)的持续时间
<span class="hljs-selector-id">#EXTINF</span><span class="hljs-selector-pseudo">:1.084422</span>,
/<span class="hljs-selector-tag">videolib1</span>/<span class="hljs-selector-tag">1903</span>/<span class="hljs-selector-tag">15</span>/<span class="hljs-selector-tag">9b4wxrd1g</span>/<span class="hljs-selector-tag">SD</span>/<span class="hljs-selector-tag">9b4wxrd1g-mobile-</span><span class="hljs-selector-tag">0</span><span class="hljs-selector-class">.ts</span>
// 每个媒体段(ts)的持续时间
<span class="hljs-selector-id">#EXTINF</span><span class="hljs-selector-pseudo">:2.002000</span>,
/<span class="hljs-selector-tag">videolib1</span>/<span class="hljs-selector-tag">1903</span>/<span class="hljs-selector-tag">15</span>/<span class="hljs-selector-tag">9b4wxrd1g</span>/<span class="hljs-selector-tag">SD</span>/<span class="hljs-selector-tag">9b4wxrd1g-mobile-</span><span class="hljs-selector-tag">1</span><span class="hljs-selector-class">.ts</span>
// 每个媒体段(ts)的持续时间
<span class="hljs-selector-id">#EXTINF</span><span class="hljs-selector-pseudo">:2.919578</span>,
/<span class="hljs-selector-tag">videolib1</span>/<span class="hljs-selector-tag">1903</span>/<span class="hljs-selector-tag">15</span>/<span class="hljs-selector-tag">9b4wxrd1g</span>/<span class="hljs-selector-tag">SD</span>/<span class="hljs-selector-tag">9b4wxrd1g-mobile-</span><span class="hljs-selector-tag">2</span><span class="hljs-selector-class">.ts</span>
// ... 中间部分省略
/<span class="hljs-selector-tag">videolib1</span>/<span class="hljs-selector-tag">1903</span>/<span class="hljs-selector-tag">15</span>/<span class="hljs-selector-tag">9b4wxrd1g</span>/<span class="hljs-selector-tag">SD</span>/<span class="hljs-selector-tag">9b4wxrd1g-mobile-</span><span class="hljs-selector-tag">130</span><span class="hljs-selector-class">.ts</span>
// 每个媒体段(ts)的持续时间
<span class="hljs-selector-id">#EXTINF</span><span class="hljs-selector-pseudo">:11.386378</span>,
/<span class="hljs-selector-tag">videolib1</span>/<span class="hljs-selector-tag">1903</span>/<span class="hljs-selector-tag">15</span>/<span class="hljs-selector-tag">9b4wxrd1g</span>/<span class="hljs-selector-tag">SD</span>/<span class="hljs-selector-tag">9b4wxrd1g-mobile-</span><span class="hljs-selector-tag">131</span><span class="hljs-selector-class">.ts</span>
// 表示PlayList的末尾了
<span class="hljs-selector-id">#EXT-X-ENDLIST</span>
</span></span></span>
注释说明是我后加的
,为了是让大家了解m3u8文本格式各标签的大概含义- 可以看到这个公开课的完整视频,
被分成了很多小段的 ts 结尾的视频文件
这里我们随意下载一段视频,比如第一段视频
http://flv0.bn.netease.com/videolib1/1903/15/9b4wxrd1g/SD/9b4wxrd1g-mobile-0.ts
到这里其实就看的很清楚了,m3u8视频 就是通过按顺序下载播放一段段时长不同的ts视频,来完成整部视频播放的
。
再把前边我总结的,m3u8视频到底是什么重新读一遍:
m3u8不是一种视频格式,而是一种纯文本文件。m3u8视频文件格式中存放了视频的基本信息 和 分段视频的索引地址 (将一整个视频分成了时长不同的很多小段)。当播放m3u8视频时,就是按顺序下载播放索引列表的视频,从而完成一部完整视频的播放。
三、维基百科对m3u8的定义
了解m3u8时,也参考了维基百科,但其给出的答案并不太让我满意。下边是我在维基百科上查到的内容。当然内容我进行了简单的组合...
- M3U8:
m3u8
是一种纯文本文件,采用UTF-8
编码,是一种Unicode
版本的m3u
文件。 - **M3U : **
m3u
是一种播放多媒体列表的文件格式,可以指定一个或多个多媒体文件的位置,它的设计初衷是为了播放音频文件。比如MP3,但是越来越多的软件现在用来播放视频文件列表。
M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。 - HLS :
m3u
和m3u8
文件都是苹果公司使用的HLS (HTTP Live Streaming)格式
的基础,这种格式可以在iPhone和Macbook等设备播放。
HLS 点播是常见的分段 HTTP 点播,就是将视频流分成不同的片段,客户端不断的去下载该片段,由于片段之间的分段间隔时间非常短,所以看起来是一条完整的播放流
四、m3u8 与 MP4 对比
了解了m3u8的文件格式和播放原理,下边就可以对m3u8 与mp4 做一个简单对比了。
- mp4 对HTML5和flash播放器亲和度都挺好。但是文件头太大,结构复杂,长视频的大文件头影响加载速度的视频体验,所以短视频更常见
- m3u8 采用苹果的HLS协议,目前 ios与android设备均已支持。由于其工作原因是将整个视频流分成一个个小的基于Http的文件进行下载播放,因此
支持视频直播
。
关于mp4与m3u8格式详细对比,曾写过这样一篇文章,可供大家参考:
mp4相比m3u8第一帧加载较慢的原因?
https://xiaxl.blog.csdn.net/article/details/103370511
五、提高视频秒开率的一个方案
A、视频重转码为m3u8
将播放格式由mp4
更换为m3u8
B、m3u8转码规则:
仅仅重转码,还是远远不够的。
必须对m3u8文件切片大小执行一定的限制规则,对m3u8文件切片大小可做如下规定:
- m3u8文件的 第一个ts片段长度为1~3秒
- m3u8文件的 第二个ts片段长度为3~5秒
- m3u8文件的 第三个ts片段长度为10秒左右
- m3u8文件的 第四个ts片段以上长度为30秒左右
- m3u8文件 最长ts片段不超过35秒
根据此规则重转码后,其视频播放秒开率
相较mp4播放格式
,相信会有一个质的提升。
参考
https://zh.wikipedia.org/wiki/HTTP_Live_Streaming
https://www.zhihu.com/question/20256377
https://www.cnblogs.com/renhui/p/10351870.html
https://www.zhihu.com/question/21087379
https://blog.csdn.net/qq_35425276/article/details/79612348
https://www.jianshu.com/p/426425cad08a