您当前的位置:首页 > 电脑百科 > 软件技术 > 音/视频编辑

音视频流媒体文件格式剖析:M3U8篇

时间:2022-05-09 11:00:39  来源:  作者:程程欣喜
音视频流媒体文件格式剖析:M3U8篇

 

M3U8背景介绍

M3U8,用 UTF-8 编码。"M3U" 和 "M3U8" 文件都是苹果公司使用的 HTTP Live Streaming(HLS) 协议格式的基础;是 Unicode 版本的 M3U。

M3U8文件是M3U文件的一种,只不过它的编码格式是UTF-8。M3U使用Latin-1字符集编码。M3U的全称是Moving Picture Experts Group Audio Layer 3 Uniform Resource Locator,即mp3 URL。M3U是纯文本文件;

所以UTF-8编码的M3U文件也简称为 M3U8;

HLS 是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议。M3U8只是它具体的表现形式,下面我们都称为HLS格式。

HLS 的工作原理是把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的 extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。

HLS 只请求基本的 HTTP 报文,与实时传输协议(RTP)不同,HLS 可以穿过任何允许 HTTP 数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。这是HLS应用在直播上的一大优势。

如果在直播中使用HLS技术,那么执行流程如下:图片来源于苹果官网;

音视频流媒体文件格式剖析:M3U8篇

 

我们播放一个HLS,首先要对HLS流对应的M3U8文件进行解析,解析M3U8文件,首先要搞清楚M3U8的封装格式。

音视频开发资料包:音视频流媒体高级开发
FFmpegWebRTCRTMPRTSPHLSRTP播放器

M3U8格式解析

HLS流可以用于直播,也可以用于点播;这点很重要,开头的那张图千万别让你误会,M3U8是可以用作点播的。

M3U8 文件实质是一个播放列表(playlist),其可能是一个媒体播放列表(Media Playlist),或者是一个主列表(Master Playlist)。

1.M3U8类型

当 M3U8 文件作为媒体播放列表(Media Playlist)时,其内部信息记录的是一系列媒体片段资源,顺序播放该片段资源,即可完整展示多媒体资源。其格式如下所示:

#EXTM3U
#EXT-X-TARGETDURATION:10

#EXTINF:9.009,
http://media.example.com/first.ts
#EXTINF:9.009,
http://media.example.com/second.ts
#EXTINF:3.003,
http://media.example.com/third.ts
#EXT-X-ENDLIST

当 M3U8 作为主播放列表(Master Playlist)时,其内部提供的是同一份媒体资源的多份流列表资源。其格式如下所示:

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/low/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=240000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/lo_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=440000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/hi_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=640000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/high/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=64000,CODECS="mp4a.40.5"
http://example.com/audio/index.m3u8
#EXT-X-ENDLIST

2.M3U8基本字段

#EXTM3U                    M3U8文件头,必须放在第一行;
#EXT-X-MEDIA-SEQUENCE      第一个TS分片的序列号,一般情况下是0,但是在直播场景下,这个序列号标识直播段的起始位置; #EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION      每个分片TS的最大的时长;   #EXT-X-TARGETDURATION:10     每个分片的最大时长是 10s
#EXT-X-ALLOW-CACHE         是否允许cache;          #EXT-X-ALLOW-CACHE:YES      #EXT-X-ALLOW-CACHE:NO    默认情况下是YES
#EXT-X-ENDLIST             M3U8文件结束符;
#EXTINF                    extra info,分片TS的信息,如时长,带宽等;一般情况下是    #EXTINF:<duration>,[<title>] 后面可以跟着其他的信息,逗号之前是当前分片的ts时长,分片时长 移动要小于 #EXT-X-TARGETDURATION 定义的值;
#EXT-X-VERSION             M3U8版本号
#EXT-X-DISCONTINUITY       该标签表明其前一个切片与下一个切片之间存在中断。下面会详解
#EXT-X-PLAYLIST-TYPE       表明流媒体类型;
#EXT-X-KEY                 是否加密解析,    #EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52"    加密方式是AES-128,秘钥需要请求   https://priv.example.com/key.php?r=52  ,请求回来存储在本地;

3.如何判断M3U8是否直播

  • 1.判断是否存在 #EXT-X-ENDLIST

对于一个M3U8文件,如果结尾不存在 #EXT-X-ENDLIST,那么一定是 直播,不是点播;

  • 2.判断 #EXT-X-PLAYLIST-TYPE 类型

'#EXT-X-PLAYLIST-TYPE' 有两种类型,

VOD 即 Video on Demand,表示该视频流为点播源,因此服务器不能更改该 M3U8 文件;

EVENT 表示该视频流为直播源,因此服务器不能更改或删除该文件任意部分内容(但是可以在文件末尾添加新内容)(注:VOD 文件通常带有 EXT-X-ENDLIST 标签,因为其为点播片源,不会改变;而 EVEVT 文件初始化时一般不会有 EXT-X-ENDLIST 标签,暗示有新的文件会添加到播放列表末尾,因此也需要客户端定时获取该 M3U8 文件,以获取新的媒体片段资源,直到访问到 EXT-X-ENDLIST 标签才停止)。

4.M3U8多码率

上面的Master Playlist 就是会提供 多码率的列表资源,如下:

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/low/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=240000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/lo_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=440000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/hi_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=640000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/high/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=64000,CODECS="mp4a.40.5"
http://example.com/audio/index.m3u8
#EXT-X-ENDLIST

'#EXT-X-STREAM-INF' 字段后面有:

BANDWIDTH 指定码率

RESOLUTION 分辨率

PROGRAM-ID 唯一ID

CODECS 指定流的编码类型

码率、码流是同一个概念,是数据传输时单位时间传送的数据量,一般用单位kbps表示。

视频码率就是指视频文件在单位时间内使用的数据量。简单理解就是要播放一秒的视频需要多少数据,从这个角度就不难理解通常码率越高视频质量也越好,相应的文件体积也会越大。码率、视频质量、文件体积是正相关的。但当码率超过一定数值后,对图像的质量影响就不大了。几乎所有的编码算法都在追求用最低的码率达到最少的失真(最好的清晰度)。

5.如何在M3U8中插入广告

M3U8文件中插入广告,要想灵活的控制广告,则广告可以插入任何视频中,那么无法保证广告的编码格式和码率等信息和原视频的编码格式等信息保持一致,就必须告知播放器,在插入广告的地方,ts片段发生的信息变更,需要播放器适配处理。

'#EXT-X-DISCONTINUITY' 该标签表明其前一个切片与下一个切片之间存在中断。说明有不连续的视频出现,这个视频绝大多数情况下就是广告; '#EXT-X-DISCONTINUITY' 这个字段就是来做这个事情的;

下面展示一个插入广告的例子:

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
movieA.ts
#EXTINF:10.0,
movieB.ts
 ...
#EXT-X-ENDLIST

想在开头插入广告:

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
ad0.ts
#EXTINF:8.0,
ad1.ts
#EXT-X-DISCONTINUITY
#EXTINF:10.0,
movieA.ts
#EXTINF:10.0,
movieB.ts
...
#EXT-X-ENDLIST

当然你可以在任意位置插入广告。

HLS协议草案:HLS协议中还有很多字段,但是有些字段其实就是协议,在实际应用中并不大;大家可以参考看看;
https://tools.ietf.org/html/rfc8216

M3U8实战

将一个mp4视频转化为m3u8视频:

ffmpeg -re -i test.mp4 -c copy -f hls -bsf:v h264_mp4toannexb test.m3u8
音视频流媒体文件格式剖析:M3U8篇

 

生成了一个m3u8和很多ts分片:

音视频流媒体文件格式剖析:M3U8篇

 

但是生成的test.m3u8发现了问题,如下,才有5个分片。这是因为ffmpeg 默认的list size 为5,所以只获得最后的5个片段。

音视频流媒体文件格式剖析:M3U8篇

 

要想解决这个问题,需要指定参数-hls_list_size 0,这样就能包含所有的片段。加上 -hls_list_size 0

ffmpeg -re -i test.mp4 -c copy -f hls -hls_list_size 0  -bsf:v h264_mp4toannexb test.m3u8

为什么还要加上参数-bsf:v h264_mp4toannexb ?

这个参数的作用是将MP4中的H.264数据转换成为H.264 AnnexB标准的编码,AnnexB标准的编码常见于实时传输流中。如果源文件为FLV、TS等可以作为直播传输流的视频,则不需要这个参数。

这也非常强烈地说明了MP4不是流式文件,不能作为直播使用。

学习思考

1.视频广告

目前M3U8视频占我们线上视频的比例是近60%,量非常大,我们可以在M3U8视频中任意位置插入一些广告,为探索商业化开辟新的路。

2.为什么M3U8中分片使用TS不用MP4

这是因为两个 TS 片段可以无缝拼接,播放器能连续播放,而 MP4 文件由于编码方式的原因,两段 MP4 不能无缝拼接,播放器连续播放两个 MP4 文件会出现破音和画面间断,影响用户体验。而且如果要在一段长达一小时的视频中跳转,如果使用单个 MP4 格式的视频文件,如果也用 HTTP 协议,那么需要代理服务器支持 HTTP range request 获取大文件中的一部分。这样的话,对于代理服务器的性能来说要求较高。而 HTTP Live Streaming 则只需要根据列表文件中的时间轴找出对应的 TS 片段下载即可,不需要 range request,对代理服务器的要求小很多。所有代理服务器都支持小文件的高效缓存。



Tags:M3U8   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
8款测试HLS m3u8视频流的免费在线播放器
翻译:Alex技术审校:纪永康本文来自OTTVerse,作者为Krishna Rao Vijayanagar。 ▲扫描图中二维码或点击阅读原文▲了解音视频技术大会更多信息 Easy-Tech#030# 通过m3u8播放器...【详细内容】
2022-06-06  Search: M3U8  点击:(372)  评论:(0)  加入收藏
音视频流媒体文件格式剖析:M3U8篇
M3U8背景介绍M3U8,用 UTF-8 编码。"M3U" 和 "M3U8" 文件都是苹果公司使用的 HTTP Live Streaming(HLS) 协议格式的基础;是 Unicode 版本的 M3U。M3U8文件是M3U文件的一种,只不过...【详细内容】
2022-05-09  Search: M3U8  点击:(1278)  评论:(0)  加入收藏
Python爬取下载m3u8加密视频,原来这么简单
1.前言爬取视频的时候发现,现在的视频都是经过加密(m3u8),不再是mp4或者avi链接直接在网页显示,都是经过加密形成ts文件分段进行播放。今天就教大家如果通过python爬取下载m3u8加...【详细内容】
2021-03-11  Search: M3U8  点击:(2046)  评论:(0)  加入收藏
详解m3u8协议
1.简述官方文档地址:https://tools.ietf.org/html/rfc8216如果需要更详细了解这个协议,就需要阅读这个协议。 HLS(HTTP Live Streaming) 把整个流分片,然后基于HTTP的文件来下载,...【详细内容】
2020-11-12  Search: M3U8  点击:(2962)  评论:(0)  加入收藏
▌简易百科推荐
视频杂音怎么消除只留人声?简单方法快来学
视频杂音怎么消除只留人声?在家看视频时,你是否经常被背景噪音所困扰,导致听不清人物对话?今天,我们就来介绍几个能帮我们消除视频中杂音的软件,让我们能享受清晰纯净的视听体验!一...【详细内容】
2024-01-31  译言工具集    Tags:视频杂音   点击:(58)  评论:(0)  加入收藏
如何将两个视频无缝拼接成一个视频?几种简单易行的方法推荐
怎么把两个视频拼接成一个视频?将两个视频拼接成一个视频是一种常见的视频编辑需求,特别是在需要制作长视频或合集时。拼接后的视频可以更加流畅自然,便于观看和分享。若是拼接...【详细内容】
2024-01-17  技术小蚂蚁    Tags:视频   点击:(75)  评论:(0)  加入收藏
初学者如何开始学习视频剪辑?新手如何利用剪辑技术赚钱?
想提升自身专业技术技能,我建议报名一个培训班去进行学习。今天我给亲们网罗了几家正规且口碑不错的职业教育学校,可以参考一下王氏教育开办多年几乎零负面,而且全国校区都是实...【详细内容】
2024-01-09  利娇少女    Tags:视频剪辑   点击:(86)  评论:(0)  加入收藏
剪辑师怎么学?剪辑师一个月收入多少?
剪辑师的月收入因地区、经验、技能水平等因素而异。一般来说,初级剪辑师的月收入在几千元左右,中级剪辑师的月收入在一万元左右,高级剪辑师的月收入则可能超过一万元。当然,这只...【详细内容】
2023-12-16  王氏动漫学习训练    Tags:剪辑师   点击:(106)  评论:(0)  加入收藏
ev剪辑如何消音?视频消音方法全都在这!
EV剪辑是一款视频制作软件,支持全格式精准剪辑,可以实现水印添加、配音、字幕、多轨道剪辑、转场等功能。ev剪辑支持消音操作,同时需要注意的地方还是很多的,在进行消音处理时,需...【详细内容】
2023-12-12  温暖如初的生活    Tags:剪辑   点击:(116)  评论:(0)  加入收藏
视频合并怎么制作?
听说你想了解一些视频合并方法?我能告诉你,这可是个有趣的活儿!你知道吗,合并视频不仅可以让你的作品更具创意,还能让你成为朋友圈里的视频剪辑高手!在这里,我将为大家介绍视频合并...【详细内容】
2023-12-12  王旭妍爱生活    Tags:视频合并   点击:(108)  评论:(0)  加入收藏
视频剪辑怎么剪?
在这个数字时代,我们对社交媒体上的视频编辑越来越感兴趣。你可能已经看到了各种专业水平的视频,从搞笑的猫咪视频到惊险刺激的极限运动镜头。而你可能也梦想着自己成为一个视...【详细内容】
2023-12-10  叮当猫的颜色    Tags:视频剪辑   点击:(109)  评论:(0)  加入收藏
新手做短视频用哪个软件好
新手做短视频用哪个软件好?随着短视频的兴起,越来越多的人开始接触短视频制作。对于新手来说,选择一个合适的短视频制作软件非常重要。本文将从以下5个步骤,教新手宝子快速制作...【详细内容】
2023-12-05  短视频    Tags:短视频   点击:(138)  评论:(0)  加入收藏
机器配音和真人配音有什么区别?
今天我要跟你聊聊机器配音和真人配音有什么区别。你知道吗,这个话题可不简单,因为这关乎到我们日常生活中的声音体验,听起来有点高大上,但实际上离我们并不遥远。首先,咱们得来说...【详细内容】
2023-11-30  叮当猫的颜色    Tags:配音   点击:(166)  评论:(0)  加入收藏
视频裁剪后清晰度下降用什么软件?
你是否曾经遇到过这样的场景&mdash;&mdash;想要裁剪一段视频,但却苦于没有合适的工具来实现?别着急!视频裁剪软件就是你的好帮手。这些软件充分利用了先进的视频处理技术,通过直...【详细内容】
2023-11-27  数码小风向    Tags:视频   点击:(163)  评论:(0)  加入收藏
站内最新
站内热门
站内头条