M3U和M3U8

相关介绍

HLS(HTTP Live Streaming)是苹果公司提出的基于HTTP的流媒体网络传输协议。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的扩展 M3U (m3u8) 播放列表文件,用于寻找可用的媒体流。
HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。

M3U

一种播放多媒体列表的文件格式,它的设计初衷是为了播放音频文件,但是越来越多的软件现在用来播放视频文件列表,M3U也可以指定在线流媒体音频源。
M3U文件是一种纯文本文件,可以指定一个或多个多媒体文件的位置。
编辑器编辑M3U文件,必须将该文件用Windows-1252格式保存,这种格式是ASCII编码的超集。

扩展M3U指令

  • #EXTM3U(文件的头部,必须是文件的第一行)
  • #EXTINF(指示多媒体文件的信息,包括播放时间和标题,#EXTINF:191,Artist Name - Track Title)

M3U8

M3U8是Unicode版本的M3U,用UTF-8编码。支持的视频流编码为H.264,音频流编码为AAC。
M3U8主要是可以做多码率的适配,根据网络带宽,客户端会选择一个适合自己码率的文件进行播放,保证视频流的流畅。
媒体文件为MPEG2-TS或者AAC文件(audio only)。

M3U8组成

  • 播放列表必须是扩展的M3U文件
  • 一个URI表示一个媒体文件或是变种播放列表文件
  • m3u8 文件必须以 utf-8 进行编码,不能使用 Byte Order Mark(BOM)字节序, 不能包含 utf-8 控制字符(U+0000 ~ U_001F 和 U+007F ~ u+009F)
  • m3u8 文件的每一行要么是一个 URI,要么是空行,要么就是以 # 开头的字符串。不能出现空白字符,除了显示声明的元素
  • m3u8 文件中以 # 开头的字符串要么是注释,要么就是标签。标签以 #EXT 开头,大小写敏感
  • 播放列表文件名必须以.M3U8为后缀、HTTP Content-Type为“application/vnd.apple.mpegurl”(如果使用http传输)或者以.M3U为后缀、HTTP Content-Type为“audio/mpegurl”
  • 扩展的M3U文件格式定义了两种标签:EXTM3U和EXTINF(#EXTINF:<DURATION>,<TITLE>)。区分扩展的M3U文件与普通M3U文件的关键在于前者的首行为#EXTM3U

定义新标签

#EXTM3U
#EXT-X-TARGETDURATION:3
#EXT-X-ALLOW-CACHE:YES
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:3.000,
/deliveries/13977d266911394bb97e85c93969d11d1890fb1f.m3u8/seg-1-v1-a1.ts
#EXTINF:3.000,
/deliveries/13977d266911394bb97e85c93969d11d1890fb1f.m3u8/seg-2-v1-a1.ts
#EXTINF:3.000,
/deliveries/13977d266911394bb97e85c93969d11d1890fb1f.m3u8/seg-3-v1-a1.ts
#EXTINF:3.000,
/deliveries/13977d266911394bb97e85c93969d11d1890fb1f.m3u8/seg-4-v1-a1.ts
#EXT-X-ENDLIST

在这里插入图片描述
对于点播来说,客户端只需按顺序下载上述片段资源,依次进行播放即可。而对于直播来说,客户端需要 定时重新请求 该 m3u8 文件,看下是否有新的片段数据需要进行下载并播放。

猜你喜欢

转载自blog.csdn.net/u013270347/article/details/119186284