了解适用于 HLS 的通用媒体应用程序格式。
分段媒体的通用媒体应用程序格式 (CMAF) 是一种可扩展标准,用于编码和打包分段媒体对象,以便在自适应多媒体演示中的最终用户设备上进行传递和解码。交付和呈现由一个假设的应用程序模型抽象出来,该模型允许广泛的实现,包括HLS和MPEG的动态自适应流HTTP(MPEG DASH)。CMAF 规范定义了几个逻辑媒体对象:
CMAF 轨道:轨道包含编码的媒体样本,包括音频、视频和字幕。媒体样本存储在派生自 ISO 基本媒体文件格式的 CMAF 指定容器中。媒体样本可以选择受 MPEG 通用加密保护。轨道由一个 CMAF 标头和一个或多个 CMAF 片段组成。
CMAF 切换集:切换集包含可在 CMAF 片段边界切换和拼接的替代轨道,以不同的比特率和分辨率自适应地流式传输相同的内容。
对齐的 CMAF 切换集:从同一源编码的两个或多个 CMAF 交换集,具有替代编码,例如,不同的编解码器和彼此对齐的时间。
CMAF 选择集:一组相同媒体类型的切换集,可能包括替代内容(例如,不同的语言或相机角度)或替代编码(例如,不同的编解码器)。
CMAF 演示文稿:一个或多个演示时间同步选择集。
注意
演示文稿是可以组合不同媒体类型的第一点。
CMAF 假设参考模型定义了如何在 CMAF 演示文稿中交付、组合和同步轨道,但该模型允许使用任何兼容的实现。可以创建共享相同资源的 HLS 播放列表和 DASH 媒体演示说明,即 CMAF 可寻址对象,从而即使在交付到多个平台时也能实现高效缓存。CMAF 可寻址媒体对象包括:
CMAF 标头:标头包含包含用于初始化轨道的信息的信息。
CMAF 片段:来自同一轨道的一个或多个连续片段的序列。
CMAF 区块:区块包含片段中样本的顺序子集。
CMAF 跟踪文件:一个ISO_BMFF文件中的完整跟踪。
Apple 的 HLS 规范是已发布的 RFC,RFC 8216。然而,HLS继续发展,所以有一个更新的草案规范 - draft-pantos-hls-rfc8216bis。
HLS 规范在 2016 年 9 月定义了对分段 MPEG-4 段 (ISO_BMFF) 的支持。基于早期修订版的客户端可能无法处理 CMAF 内容。运行 iOS 10.0、macOS 10.12 和 tvOS 10.0 或更高版本的 Apple 硬件应支持 CMAF 内容。
注意
HLS最初是在draft-pantos-http-live-streaming中指定的。该文档已被 RFC 8216 取代。
在 HLS 中,清单的角色在 HLS 多变量播放列表和它引用的媒体播放列表之间划分。它们描述了单个 CMAF 演示文稿或一系列 CMAF 演示文稿。
在 HLS 多变量播放列表中,EXT-X-STREAM-INF 标签定义了演示文稿的不同层。层通过比特率、所需的编解码器、分辨率和其他属性进行区分。每个层指定一个 HLS 媒体播放列表。每个层还可能指示其他 HLS 演绎版,这些演绎版是 EXT-X-MEDIA 标签中描述的媒体播放列表,可在播放该层时进行选择。例如,如果层的媒体播放列表仅包含视频,则可以使用音频呈现形式提供音频;一组音频演绎版可用于提供不同的语言轨道选择。
由于 CMAF 片段通常不能包含多种媒体类型,因此需要使用 EXT-X-MEDIA 标签将音频和字幕播放列表与视频相关联,这通常位于 EXT-X-STREAM-INF 标签的媒体播放列表中。同一个演绎版可以由多个 EXT-X-STREAM-INF 标签使用;例如,多个视频层可以指定相同的音频呈现形式。或者,较高比特率的视频层可以指定单独的较高比特率音频呈现形式,以便音频质量与视频质量成比例。
每个 CMAF 轨道应该有一个 HLS 媒体播放列表。在 HLS 媒体播放列表中,CMAF 段用作 HLS 片段。必须有一个 EXT-X-MAP 标签应用于每个 HLS 段;标记指向适用于 HLS 段内所有 CMAF 片段的 CMAF 标头。由于所有 CMAF 片段都是可独立解码的,因此其 HLS 播放列表应包含 EXT-X 独立片段标签。加密媒体后,EXT-X-SESSION-KEY 标签应包含在多变量播放列表中,以启用密钥预取。
EXT-X-BYTERANGE 标记可用于指示 HLS 段是较大资源内的字节范围。
EXT-X-I-FRAMES 播放列表中的媒体段从 CMAF 片段边界开始。
EXT-X-DISCONTINUITY 标签可用于连接媒体播放列表中相同媒体类型的多个 CMAF 轨道。每个不连续性都划定了连续的CMAF演示之间的边界。不连续性允许重置表示时间戳和其他特征。许多更改可能需要不连续性,例如,从示例加密切换到未加密。在不连续之后,通常需要一个新的 EXT-X-MAP 标签。有关详细信息,请参阅 HLS 规范。
注意
对于分段的 MPEG-4 段,带有 METHOD=SAMPLE-AES 属性的 EXT-X-KEY 标签表示该段使用 ISO/IEC 23001-7 中的“cbcs”方案进行加密。
HLS 支持除 IMSC1 图像轨道之外的所有 CMAF 字幕和字幕格式。
我们可以在每个区段中包含一个或多个事件消息框 ('emsg')。我们必须使用 ISO-23009-1 中的事件消息框标准版本 1。以下值定义语义:
scheme_id_uri
设置为 https://aomedia.org/emsg/ID3 以标识带有 ID3v2 元数据的框。
value
定义 ID 字段语义的 URI。任何相对 URI 都被视为相对于scheme_id_uri。
message_data
包含与 ID3 版本 2.x.x 兼容的数据。
视频 CMAF 切换集中的每个轨道都应作为媒体播放列表 URI 显示在多变量播放列表中,前缀为描述它的 EXT-X-STREAM-INF 标记。EXT-X-STREAM-INF 标记还应指定任何其他格式副本,例如通过指示适当的 EXT-X-MEDIA GROUP-ID 来与视频一起播放的音频。
音频 CMAF 切换集中的每个轨道都应在多变量播放列表中由 EXT-X-MEDIA 标签表示。EXT-X-MEDIA 标签的 URI 属性应该是该曲目的媒体播放列表的 URI。它必须具有 GROUP-ID 属性,该属性允许它与一个或多个指定视频层的 EXT-X-STREAM-INF 标签相关联。
在 HLS 中,当提供多个编解码器时,多变量播放列表中的 EXT-X-STREAM-INF 标记通常排列在一组并行层中,例如,低比特率编解码器 A、高比特率编解码器 A、低比特率编解码器 B、高比特率编解码器 B。
CMAF 选择集通常提供相同源内容的备用编码(例如,使用不同的编解码器进行编码)或源内容的不同版本的同构编码(例如,不同的音频语言轨道)。
对于提供编解码器变体的选择集,选择集中的每个切换集应显示为一组 EXT-X-STREAM-INF 标签(对于视频)或一组 EXT-X-MEDIA 标签(对于其他媒体类型)。请参阅 CMAF 开关集。
对于提供源变体的选择集,成员切换集的每个轨道都应显示为 EXT-X-MEDIA 标签。使用相同设置编码的轨道应获得相同的 EXT-X-MEDIA GROUP-ID。例如,包含法语和英语切换集的选择集,每个切换集中只有一个轨道,应显示为两个具有相同组 ID 的 EXT-X-MEDIA 标签。有关EXT_X_MEDIA标记规则的更多信息,请参阅 RFC 8216 和 HTTP 实时流式处理第 2 版。
CMAF 规范定义了三个表示配置文件:未加密、使用“cbcs”加密和使用“cenc”加密。HLS 支持未加密和使用“cbcs”加密。
在此示例中,有一个视频 CMAF 轨道,其中包含 60 帧 GOP 中的 29.97 fps 视频,每个视频长 2.002 秒。每个 GOP 形成一个 CMAF 片段。CMAF 片段 V1、V2、V3、V4 和 V5 总共有 10.010 秒的视频。他们的CMAF标头是VH。
视频附带的是一个英语音频 CMAF 轨道,由英语 CMAF 标头、EH 和五个音频 CMAF 片段组成:E1、E2、E3、E4 和 E5,采样率为 44.1 Khz。每个 CMAF 段为 86 个 AAC 帧,每个帧的持续时间为 1.997 秒,但 E5 除外,它有 87 帧,总共 10.008 秒的音频。还有五个法语音频 CMAF 片段 - F1、F2、F3、F4 和 F5 — 以及一个法语 CMAF 标头 FH。
CMAF 片段已打包为每个轨道三个 CMAF 片段以进行交付,这些 CMAF 资源被标识为 HLS 段:V1 和 V2、V3 和 V4 和 V5;E1和E2、E3andE4和E5;等等。
此外,还有一个包含 CMAF 片段的高质量视频轨道:VHQ1、VHQ2、VHQ3、VHQ4 和 VHQ5,标头 VHQH,打包和标识类似。
两个视频轨道,V和VHQ,是CMAF切换集。每个音轨也可以被视为一个切换集,只有一个成员。两个音频切换集共同构成一个 CMAF 选择集。
常规视频跟踪视频.m3u8的HLS媒体播放列表如下所示。
#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:6
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MAP:URI="VH"
#EXTINF:4.004,
V1andV2
#EXTINF:4.004,
V3andV4
#EXTINF:2.002,
V5
#EXT-X-ENDLIST
高质量视频跟踪视频-hq.m3u8的媒体播放列表将是类似的。
英语音频轨道 english.m3u8 的媒体播放列表如下所示。
#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:6
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MAP:URI="EH"
#EXTINF:3.9938,
E1andE2
#EXTINF:3.9938,
E3andE4
#EXTINF:2.0201,
E5
#EXT-X-ENDLIST
媒体播放列表法语音频轨道 French.m3u8 将类似。
HLS 多变量播放列表可能类似于以下示例。
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-MEDIA:NAME="English",TYPE=AUDIO,GROUP-ID="audio-stereo-64",LANGUAGE="en",DEFAULT=YES,AUTOSELECT=YES,URI="english.m3u8"
#EXT-X-MEDIA:NAME="Français",TYPE=AUDIO,GROUP-ID="audio-stereo-64",LANGUAGE="fr",DEFAULT=NO,AUTOSELECT=YES,URI="french.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=1123000,CODECS="avc1.64001f,mp4a.40.2",AUDIO="audio-stereo-64",RESOLUTION=620x334
video.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=8123000,CODECS="avc1.640028,mp4a.40.2",AUDIO="audio-stereo-64",RESOLUTION=1916x1032
video-hq.m3u8
我们还可以提供 video.m3u8 和 video-hq.m3u8 的 HEVC 版本,也许还可以为高带宽层提供更高质量的音频。然后,多变量播放列表可能类似于以下示例。
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-MEDIA:NAME="English",TYPE=AUDIO,GROUP-ID="audio-stereo-64",LANGUAGE="en",DEFAULT=YES,AUTOSELECT=YES,URI="english.m3u8"
#EXT-X-MEDIA:NAME="Français",TYPE=AUDIO,GROUP-ID="audio-stereo-64",LANGUAGE="fr",DEFAULT=NO,AUTOSELECT=YES,URI="french.m3u8"
#EXT-X-MEDIA:NAME="English",TYPE=AUDIO,GROUP-ID="audio-stereo-128",LANGUAGE="en",DEFAULT=YES,AUTOSELECT=YES,URI="english-hi.m3u8"
#EXT-X-MEDIA:NAME="Français",TYPE=AUDIO,GROUP-ID="audio-stereo-128",LANGUAGE="fr",DEFAULT=NO,AUTOSELECT=YES,URI="french-hi.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=1123000,CODECS="avc1.64001f,mp4a.40.2", AUDIO="audio-stereo-64",RESOLUTION=620x334
video.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=8187000,CODECS="avc1.640028,mp4a.40.2", AUDIO="audio-stereo-128",RESOLUTION=1916x1032
video-hq.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=623000, CODECS="hvc1.1.6.L120.B0,mp4a.40.2",AUDIO="audio-stereo-64", RESOLUTION=620x334
hevc-video.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4187000, CODECS="hvc1.1.6.L120.B0,mp4a.40.2",AUDIO="audio-stereo-128", RESOLUTION=1916x1032
hevc-video-hq.m3u8
此示例说明了 CMAF 选择集如何显示为单独的演绎版 english.m3u8 和 French.m3u8,或显示为由不同所需编解码器区分的单独层集:{video.m3u8, video-hq.m3u8} 是 AVC 切换集;{hevc-video.m3u8, hevc-video-hq.m3u8} 是 HEVC Switching Set。它们共同构成了一个选择集,允许按编解码器进行选择。