一文详解 m3u8 视频格式与分析视频秒开优化

简介: 秒开指的是,一秒内成功加载的播放数/播放总数。本意是想对比一下m3u8与mp4视频格式,并了解m3u8格式优缺点,以确定一个大概优化方向。但对m3u8做简单了解后,觉的m3u8可能是一个优化方向。

公司要求对 视频秒开率 进行优化(一秒内成功加载的播放数/播放总数)。
因此本意是想对比一下m3u8与mp4视频格式,并了解m3u8格式优缺点,以确定一个优化大概方向。
但对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文本文件下载到本地,打开:

// M3U8文件必须包含的标签,并且必须在文件的第一行
#EXTM3U
// M3U8文件的版本,常见的是3
#EXT-X-VERSION:3
// 第一个TS分片的序列号
#EXT-X-MEDIA-SEQUENCE:0
// 是否允许cache
#EXT-X-ALLOW-CACHE:YES
// 每个每个媒体段(ts)的最大的时长
#EXT-X-TARGETDURATION:39
// 每个媒体段(ts)的持续时间
#EXTINF:1.084422,
/videolib1/1903/15/9b4wxrd1g/SD/9b4wxrd1g-mobile-0.ts
// 每个媒体段(ts)的持续时间
#EXTINF:2.002000,
/videolib1/1903/15/9b4wxrd1g/SD/9b4wxrd1g-mobile-1.ts
// 每个媒体段(ts)的持续时间
#EXTINF:2.919578,
/videolib1/1903/15/9b4wxrd1g/SD/9b4wxrd1g-mobile-2.ts

// ... 中间部分省略

/videolib1/1903/15/9b4wxrd1g/SD/9b4wxrd1g-mobile-130.ts
// 每个媒体段(ts)的持续时间
#EXTINF:11.386378,
/videolib1/1903/15/9b4wxrd1g/SD/9b4wxrd1g-mobile-131.ts
// 表示PlayList的末尾了
#EXT-X-ENDLIST
  • 注释说明是我后加的,为了是让大家了解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 :m3um3u8 文件都是苹果公司使用的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

https://blog.csdn.net/DeliaPu/article/details/79013812

https://www.jianshu.com/p/2ce402a485ca

========== THE END ==========

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

目录
相关文章
|
1月前
|
机器学习/深度学习 开发工具 计算机视觉
视觉智能平台常见问题之视频文件较大上传时可以分段上传或者切割视频如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
|
1月前
|
存储 数据处理 API
视觉智能平台常见问题之通用视频生成接口声音和画面对不上如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
|
1月前
|
编解码 网络协议 Unix
相较于ffmpeg我更倾向于使用socket实现推流工作
相较于ffmpeg我更倾向于使用socket实现推流工作
58 0
|
1月前
|
机器学习/深度学习 人工智能 算法
免费背景音人声分离解决方案MVSEP-MDX23,足以和Spleeter分庭抗礼
在音视频领域,把已经发布的混音歌曲或者音频文件逆向分离一直是世界性的课题。音波混合的物理特性导致在没有原始工程文件的情况下,将其还原和分离是一件很有难度的事情。 言及背景音人声分离技术,就不能不提Spleeter,它是一种用于音频源分离(音乐分离)的开源深度学习算法,由Deezer研究团队开发。使用的是一个性能取向的音源分离算法,并且为用户提供了已经预训练好的模型,能够开箱即用,这也是Spleeter泛用性高的原因之一,关于Spleeter,请移步:[人工智能AI库Spleeter免费人声和背景音乐分离实践(Python3.10)](https://v3u.cn/a_id_305),这里
免费背景音人声分离解决方案MVSEP-MDX23,足以和Spleeter分庭抗礼
|
9月前
|
机器学习/深度学习 存储 人工智能
又拍图片管家亿级图像之搜图系统的两代演进及底层原理
又拍图片管家亿级图像之搜图系统的两代演进及底层原理
90 0
|
9月前
|
人工智能 自然语言处理 前端开发
阿里云智能媒体服务IMS在视频剪辑中花式抠图的代码实操与案例详述
本文介绍阿里云智能媒体服务IMS,围绕视频剪辑及数字人训练中的抠图需求,如何运用 绿幕抠图、实景抠图能力,实现高效、便捷的视频制作及合成体验。
330 0
|
10月前
|
监控 算法
转:如何使用模糊算法提高监控软件的性能
如何才能提高监控软件的性能呢?其实,咱们可以通过模糊算法从各个角度着手,让监控系统变得更聪明更高效。模糊逻辑就是那种对付那些有点儿模糊不太确定信息的法宝,它在解决一些莫名其妙的情况时可是大显身手。在监控软件的世界里,模糊逻辑也是个大明星,可以帮助我们做出更明智的决策和更敏捷的响应,然后整个系统就会变得特别厉害!
54 0
|
12月前
|
算法 搜索推荐
【直播预告】融合复杂目标且支持实时调控的重排模型在淘宝流式推荐场景的应用
【直播预告】融合复杂目标且支持实时调控的重排模型在淘宝流式推荐场景的应用
254 1
|
11月前
|
算法 API Windows
借用PortAudio采集和播放音频,实现双路混音器
借用PortAudio采集和播放音频,实现双路混音器
237 0
|
传感器 编解码 NoSQL