在本文中,我在这篇文章中,我们看一下MPEG-DASH MPD(媒体演示描述)文件的结构,这是使用MPEG-DASH的ABR流媒体所需要的。了解XML文件结构、MIME-Type、演示文稿、周期、适配集、表现形式、片段等内容。
MPEG-DASH 是最流行的视频流协议之一,被广泛用于通过视频点播 (VOD) 或实时流媒体传输媒体,以及传输到各种终端用户设备,包括智能手机、平板电脑、智能电视、游戏机和更多的。
MPEG-DASH 协议的基础是在媒体打包并准备通过 DASH 传输时创建的清单或 MPD(媒体演示描述)。
在本版 MPEG-DASH 指南中,我们深入研究了 ISO/IEC 23009-1 中定义的 DASH 媒体呈现描述 (MPD)。目的是让您更好地了解 DASH MPD 的不同部分、它们的用途以及它们的工作原理。
DASH 在视频流中的优势是什么?
MPEG DASH是一种与平台和浏览器无关的视频流协议。有大量免费在线播放器,越来越多的浏览器包含原生 DASH 支持,无需外部播放器或插件。只要网络服务器正确报告 DASH 清单 MIME 类型,用户就不需要询问如何播放 MPD 或寻找播放器;当浏览器下载 MPD 时,视频会自动加载和播放。
什么是 DASH 清单?
您会记得浏览器或 DASH 播放器使用 MPD 文件(通常称为 DASH 清单)来确定从 HTTP 服务器请求哪些资源以及何时请求它们。引用规范:
媒体呈现描述 (MPD) 是包含 DASH 客户端构建适当的 HTTP-URL 以访问片段并向用户提供流媒体服务所需的元数据的文档。
DASH MPD 格式
DASH MPD 文件是 XML 文档。像 MPD 这样的 XML 模式可能非常复杂,打包者有责任创建一个有效的 MPD。ISO 规范是由开发人员编写并为开发人员编写的技术文档。本文旨在概述 MPD 结构,以便您更好地了解打包器输入参数。
DASH MPD 编码
DASH MPD 文件使用 UTF-8 编码。请记住,前 128 个 UTF-8 符号与传统的 7 位 ASCII 相同,因此 ASCII 文档自动成为 UTF-8 文档。对于字符 129 及以上,包装商有责任正确进行编码。
DASH MPD MIME 类型
浏览器使用 HTTP 内容类型标头中报告的 MIME 类型/子类型来确定如何处理文件,类似于计算机如何使用文件扩展名来选择合适的应用程序。您必须将您的网络服务器配置为使用 IANA 注册的内容类型 application/dash+xml 交付 DASH MPD 文件。没有必需的参数。
MPD 由哪些部分组成?
顾名思义,MPD 包含具有清晰、一致的层次结构的媒体演示。从上到下,MPD 层次结构的各个元素是:
- 媒体展示包含一系列一个或多个周期。
- 一个周期包含一个或多个适应集。
- 一个 Adaptation Set 包含一个或多个 Representations。
- 一个 Representation 包含一个或多个 Segment。
- 片段携带实际的媒体数据和关联的元数据。
每个元素都包含一组属性。各个属性是强制性的、有条件的强制性的、可选的或具有默认值的可选的。
在 Iraj Sodogar 在 IEEE Multimedia 中发表的流行且权威的指南中可以找到对 MPD 结构的出色描述,标题为“互联网多媒体流的 MPEG-DASH 标准”。它清楚地描述了 DASH MPD 中使用的层次结构。
在接下来的几节中,我们将分别处理 MPD 的每个部分并了解它们的使用方式以及它们如何相互协作。
Media Presentation
Media Presentation 包含有关内容中所有不同媒体类型的信息。最常见的媒体类型是视频、音频和隐藏式字幕数据。在顶层,MPD 包含的信息包括 MPD 配置文件、最小缓冲时间、演示持续时间、最大片段持续时间和标题。
MPD 顶层示例
<?xml version="1.0"?>
<!-- MPD file Generated with GPAC version 0.5.2-DEV-rev710-g713274f-master at 2015-10-15T08:08:21.937Z-->
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
minBufferTime="PT1.500S" type="static"
mediaPresentationDuration="PT0H12M14.167S"
maxSegmentDuration="PT0H0M2.005S"
profiles="urn:mpeg:dash:profile:isoff-on-demand:2011,http://dashif.org/guidelines/dash-if-main">
<ProgramInformation moreInformationURL="http://gpac.sourceforge.net">
<Title>/var/www/Dashcontent/5b_hev/tos_720_Multirate_HEVC_ondemand.mpd generated by GPAC</Title>
</ProgramInformation>
…
</MPD>
周期
DASH 可让您将视频分成多个时段。默认情况下,从一个 Period 到下一个 Period 无缝地继续播放,提供了一种为各个章节添加搜索点的简单方法。Periods 之间的 SCTE35 标签可以触发播放器执行动态广告插入。
具有 3 个周期的 MPD 示例
<Period id="0" duration="PT59.52S">
…
</Period>
<Period id="1" duration="PT0H1M8.678S">
…
</Period>
<Period id="2" duration="PT0H11M14.647S">
…
</Period>
适应集
适应集对媒体的不同表示进行分类。在每个适应集内,玩家只能为特定段选择一个表示,但表示可以从一个段更改为下一个段。
Video Adaptation Sets 通常包含多个 Representations,每个 Representations 对应一个分辨率/比特率,允许媒体播放器选择最佳可用质量而无需缓冲。如果视频在多个编解码器中可用,则每个编解码器将位于不同的 AdaptationSet 中。
如果音频在立体声和多声道环绕声中可用,则这些音频将位于单独的适配集中,以防止播放器在播放过程中来回切换。每种语言都有自己的适应集。
对于每个适应集,玩家将一次选择一个可用的表示,但选择可以从一个片段更改为下一个片段。
下载 MPD 后,播放器根据设备功能和用户偏好的组合选择要播放的改编集。考虑一个包含视频、音频和隐藏式字幕的 MPD。视频在 AVC 和 HEVC(两个适应集)中可用。音频以英语、法语和西班牙语(六个改编集)的立体声或 6 声道音频提供。隐藏式字幕有英语、法语、葡萄牙语和西班牙语(四个改编集)版本。玩家可能会选择:
- HEVC 视频(因为播放器支持)。
- 英语立体声音频(因为播放器只有两个音频通道,并且用户已选择英语作为他们的默认语言)。
- 没有隐藏式字幕(因为用户已关闭字幕)。
两个视频适配集和一个音频适配集示例
<AdaptationSet id="1" segmentAlignment="true" maxWidth="1920" maxHeight="800" maxFrameRate="24" par="1920:800" lang="eng" startWithSAP="1">
<Representation id="1" mimeType="video/mp4" codecs="avc1.640028" width="1920" height="800" frameRate="24" sar="1:1" bandwidth="2029827">
…
</Representation>
<Representation id="2" mimeType="video/mp4" codecs="avc1.640028" width="1920" height="800" frameRate="24" sar="1:1" bandwidth="1016035">
…
</Representation>
</AdaptationSet>
<AdaptationSet id="2" segmentAlignment="true" group="1" maxWidth="1920" maxHeight="1080" maxFrameRate="24" par="16:9" lang="eng">
<Representation id="3" mimeType="video/mp4" codecs="hev1.1.6.L120.90" width="1920" height="800" frameRate="24" sar="1:1" bandwidth="1980081">
…
</Representation>
<Representation id="4" mimeType="video/mp4" codecs="hev1.1.6.L120.90" width="1920" height="800" frameRate="24" sar="1:1" bandwidth="991395">
…
</Representation>
</AdaptationSet>
<AdaptationSet id="3" segmentAlignment="true" lang="eng">
<Representation id="5" mimeType="audio/mp4" codecs="mp4a.40.2" audioSamplingRate="48000" startWithSAP="1" bandwidth="34189">
…
</Representation>
</AdaptationSet>
Representations
在适配集中,表示描述了内容的一个版本。多个表示的最常见用途是描述可用于自适应比特率 (ABR) 流式传输的各种视频比特率。每个 Representation 总是包括 Representation 的平均带宽。
四个视频表示的示例
<Representation id="1" mimeType="video/mp4" codecs="hev1.2.4.L63.90" width="512" height="288" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="500646">
…
</Representation>
<Representation id="2" mimeType="video/mp4" codecs="hev1.2.4.L90.90" width="768" height="432" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="999733">
…
</Representation>
<Representation id="3" mimeType="video/mp4" codecs="hev1.2.4.L93.90" width="1280" height="720" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="1993305">
…
</Representation>
<Representation id="4" mimeType="video/mp4" codecs="hev1.2.4.L120.90" width="1920" height="1080" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="3960054">
…
</Representation>
Segments
Segments包含构建用于下载内容的实际 URL 所需的信息。MPD 可以提供分段 URL 列表或播放器用来动态构建 URL 的模板。
Segments表示例
<SegmentList duration="10">
<SegmentURL media="seg-m1-C2view-1.mp4"/>
<SegmentURL media="seg-m1-C2view-2.mp4"/>
<SegmentURL media="seg-m1-C2view-3.mp4"/>
</SegmentList>
细分模板示例
<SegmentTemplate
media="$Bandwidth%/$%04dNumber$.mp4v">
</SegmentTemplate>
MPD 中如何描述 URL?
考虑到流媒体提供商提供的内容数量巨大,URL 可能会变得相当长,有时会超过 100 个字符。视频通常以 6-10 比特率提供,以在各种网络条件下支持良好的质量。各个片段通常为 2-10 秒长,使播放器能够快速响应不断变化的网络状况。
对于我们具有 12 个改编集的假设视频,一部 2 小时的电影可能需要 40,000 个片段。这些 URL 的列表将超过 4MB,播放器需要下载完整的 MPD 才能开始播放视频。我们假设的用户将使用这些 URL 中的不到 9%。必须有更好的方法,果然有。
基本网址
虽然每个实际 URL 可能超过 100 个字符,但大多数这些字符对于所有 URL 都是相同的。这就是基本 URL 的用武之地。每个 MPD 都有一个可选的@BaseURL 属性。基本 URL 用作所有分段 URL 的前缀,并包含视频的协议、域名和大部分服务器目录结构。它存储在 MPD 级别,并由所有表示、适应集和周期共享。可以在 Period、Adaptation Set 和 Representation 级别添加额外的 Base URL,进一步提高存储效率。
如果内容可从多个来源获得,则可以为每个来源包含一个单独的 BaseURL。
嵌套基本 URL 示例
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" type="dynamic" minimumUpdatePeriod="PT2S" timeShiftBufferDepth="PT30M" availabilityStartTime="2011-12-25T12:30:00" minBufferTime="PT4S" profiles="urn:mpeg:dash:profile:isoff-live:2011">
<BaseURL>http://cdn1.example.com/</BaseURL>
<BaseURL>http://cdn2.example.com/</BaseURL>
<Period id="1">
<!-- Video -->
<AdaptationSet mimeType="video/mp4" codecs="avc1.4D401F" frameRate="30000/1001" segmentAlignment="true" startWithSAP="1">
<BaseURL>video/</BaseURL>
…
</AdaptationSet>
</Period>
</MPD>
http://cdn1.example.com/video/<segmentfilename>
在此示例中,视频片段文件在和上均可用http://cdn2.example.com/video/<segmentfilename>
。
段列表
至少从人类可读性的角度来看,存储 URL 的最简单方法是将它们全部列在每个 Representation 中。如果每个 Representation 在服务器上都有自己的目录并且您使用 Base URL,那么这只不过是 Segment 文件名。对于具有少量改编集的较短内容,这是一种常见的做法。
细分模板
对于更长的内容,每个 Representation 有数百或数千个片段,列出所有文件名仍然需要大量空间。为了进一步减小 MPD 大小,DASH 允许使用 SegmentTemplate 存储 Segments。URL 模板由普通字符和一个或多个标识符组成。标识符在开头和结尾用“$”字符标记(用程序员的话说是“转义”)。播放器在准备好请求片段时使用模板构建 URL。
包装商可以使用下表中显示的已定义标识符在期间级别或更低级别插入段模板。
$identifier$ | 替代参数 |
$$ | 转义序列,即“$$”被替换为单个“$”。 |
$RepresentationID$ | 玩家将此标识符替换为包含表示的属性Representation@id的值。 |
$Number$ | 播放器将此标识符替换为相应段的编号。 |
$Bandwidth$ | 播放器将此标识符替换为Representation@bandwidth属性值的值。 |
$Time$ | 播放器将此标识符替换为段的SegmentTimeline@t属性值。您可以使用$Number$ 或之一$Time$ ,但不能同时使用两者。 |
您可以在封闭的“$”字符内为任何标识符添加后缀,并在该原型后面添加一个格式标记:
%0[width]d
width 参数是一个无符号整数,它提供要打印的最小字符数。如果要打印的值小于此值,它将用零填充结果。如果数字大于标记格式,则不会截断该值。
- 分段模板让您可以流式传输实时内容,而无需在新分段可用时定期更新 MPD。
- Segment Templates 需要对各个文件名进行仔细、一致的构造,但您的打包程序会为您处理好这件事。
MPD 如何动态更新?
DASH 支持静态和动态 MPD。动态 MPD 通常用于直播,在内容可用时添加新片段或时段,并在内容不再可用时删除旧片段和时段。
什么是 MPD 配置文件?
DASH 配置文件告诉播放器 MPD 包含哪些 DASH 功能,主要是出于兼容性原因。您的包装商会为您处理此事,因此您无需担心。最常用的配置文件是:
urn:mpeg:dash:profile:full:2011
urn:mpeg:dash:profile:isoff-on-demand:2011
urn:mpeg:dash:profile:isoff-live:2011
DASH 如何支持 DRM?
DASH 使用 ContentProtection 元素来标识所使用的内容保护。该元素的内容对于每个 DRM 提供商都是唯一的。如果您使用 DRM,则需要与 DRM 提供商合作以确保您的打包程序与他们的系统正确集成。
MPD 中的内容保护示例
<ContentProtection schemeIdUri="http://example.net/052011/drm">
<drm:License>http://MoviesSP.example.com/protect?license=kljklsdfiowek</drm:License>
<drm:Content>http://MoviesSP.example.com/protect?content=oyfYvpo8yFyvyo8f</drm:Content>
</ContentProtection>
结论
这就是 MPEG-DASH MPD 介绍的全部内容。我希望您了解构成 MPD 及其结构的不同组件。在本系列的后续文章中,我们将学习如何使用流行的打包工具(如 Bento4、Shaka、mp4box 等)将视频打包成 MPEG-DASH 格式。
作者:Ron Garrison
原文链接:https://ottverse.com/structure-of-an-mpeg-dash-mpd/
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。