← 返回学习中心

多媒体文件格式剖析: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 协议概述

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

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

在开始一个流媒体会话时,客户端会下载一个包含元数据的 extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。

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

M3U8 格式解析

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

M3U8 格式可以用于直播,也可以用于点播。

M3U8 类型

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

1. 媒体播放列表(Media Playlist)

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

#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

2. 主播放列表(Master Playlist)

当 M3U8 作为主播放列表时,其内部提供的是同一份媒体资源的多份流列表资源。

#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

M3U8 基本字段

如何判断M3U8是直播还是点播

方法一:判断是否存在 #EXT-X-ENDLIST

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

方法二:判断 #EXT-X-PLAYLIST-TYPE 类型

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

VOD 文件通常带有 EXT-X-ENDLIST 标签,因为其为点播片源,不会改变;而 EVENT 文件初始化时一般不会有 EXT-X-ENDLIST 标签。

HLS 工作流程

  1. 服务器端将视频流切分成小片段(通常为TS格式)
  2. 服务器生成M3U8播放列表文件,包含所有TS片段的URL
  3. 客户端首先下载M3U8文件
  4. 客户端根据M3U8文件中的URL依次下载TS片段进行播放
  5. 对于直播,客户端需要定时重新请求M3U8文件以获取最新片段

M3U8 加密

HLS 支持 AES-128 加密,可以在传输过程中保护视频内容。

#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52"

加密方式是AES-128,秘钥需要请求指定的URI地址,请求回来存储在本地进行解密播放。

M3U8 的优势与局限

优势

局限

总结

M3U8作为HLS协议的核心格式,在视频点播和直播回放场景中应用广泛。虽然在实时性方面不如RTMP等协议,但其简单性、跨平台兼容性和CDN友好性使其成为Web视频分发的主流选择之一。