通常,我们希望提供一系列电影,并在每部电影前面显示某种品牌(广告),让用户知道它们来自我们的网站。一种方法是简单地将广告与每部电影合并。但是,如果我们有数百部电影,则必须重做大量编码,并且我们将在每部电影中复制广告。
我们可以将广告作为单独的电影投放,先播放,然后再播放预期的电影。然而,这种方法的问题在于,在从广告到电影的过渡过程中,质量会下降。例如,广告以较低的数据速率开始播放,以确保客户端可以读取它,然后逐渐增加以提供最佳的播放体验。广告播放完毕后,影片会以较低的数据速率开始(就像广告一样)并逐渐上升,从而导致质量下降。此外,如果我们在电影中间显示广告,我们的质量会持续下降。
解决方案是通过使用 EXT-X-DISCONTINUITY 标签让客户端知道即将发生更改。此标记通知客户端流媒体即将发生的更改,以便客户端可以提前为更改做好准备。
以下示例显示了一个流,该流使用 EXT-X-DISCONTINUITY 标记播放前面有 18 秒广告的电影(片段 ad0.ts 和 ad1.ts):
#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
以下是广告播放列表示例中使用的代码:
EXTM3U:表示播放列表是扩展的 M3U 文件。这种类型的文件与基本的 M3U 文件区分开来,方法是将第一行的标签更改为 EXTM3U。所有 HLS 播放列表都必须以此标记开头。
EXT-X-TARGETDURATION:指定最长媒体文件持续时间。
EXT-X-VERSION:指示播放列表文件的兼容版本。播放列表媒体及其服务器必须符合定义该协议版本的 HTTP 实时流规范的最新版本的 IETF 互联网草案的所有规定。
EXT-X-MEDIA-SEQUENCE:指示播放列表文件中显示的第一个 URL 的序列号。播放列表中的每个媒体文件 URL 都有一个唯一的整数序列号。URL 的序列号比其前面的 URL 的序列号高 1。媒体序列号与文件名无关。
注意:
对于从播放列表文件中删除的每个媒体 URI,EXT-X-MEDIA-SEQUENCE 标记值必须递增 1。媒体 URI 必须按照它们在播放列表中的显示顺序从播放列表文件中删除。更新的索引文件将一个移动窗口呈现为连续流。这种类型的会话适用于连续广播。
EXT-X-DISCONTINUITY:指示其后面的媒体文件与前面的媒体文件之间的编码不连续性。
EXT-X-DISCONTINUITY-SEQUENCE:提供不同变体流或同一变体流的不同演绎版之间的同步。必须将此标记用于具有不连续性的实时事件。
EXTINF:描述由其后 URL 标识的媒体文件的记录标记。每个媒体文件 URL 前面必须有一个 EXTINF 标记。此标记包含一个持续时间属性,该属性是采用十进制位置表示法的整数或浮点数,用于指定媒体段的持续时间(以秒为单位)。此值必须小于或等于目标持续时间。