AWS Elemental MediaPackage 中的多周期 DASH - AWS Elemental MediaPackage

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS Elemental MediaPackage 中的多周期 DASH

AWS Elemental MediaPackage 提供在 DASH 清单中为 VOD 和实时内容插入多个周期的功能。

周期是 DASH 清单中的大量内容,由起始时间和持续时间定义。默认情况下,整个清单都包含在一个周期内,但 MediaPackage 可以将 DASH 清单分成多个周期,来指示广告和主要内容之间的边界。例如,如果您将 MediaPackage 用于下游广告服务(如 AWS Elemental MediaTailor),请选择在 MediaPackage 中的 MPEG-DASH 端点上触发广告新周期。此选项将告知 MediaPackage,DASH 清单的格式应包含多个周期。

  • 有关 AWS Elemental MediaTailor 的信息,请参阅 AWS Elemental MediaTailor 用户指南

  • 有关 MediaPackage 中 DASH-ISO 端点的信息,请参阅 创建 DASH 端点

  • 有关多周期 DASH 在 MediaPackage 中如何工作的更多信息,请参阅以下工作原理部分。

多周期 DASH 的工作原理

要使用多周期 DASH 功能,MediaPackage 的输入必须具有 SCTE-35 广告标记消息。这些消息将通知 MediaPackage 在何处创建周期边界。下面是 MediaPackage 处理这些消息的方式:

  1. MediaPackage 检测来自输入源的 SCTE-35 消息。

  2. MediaPackage 利用 SCTE-35 消息的属性,来计算主要内容末尾和广告之间的边界。此计算是 (scte35 ptsAdjustment + scte35 ptsTime) / (EventStream timescale)。

    在以下示例中,周期在 44.075 开始,因为 (183003 + 3783780) / 90000 = 44.075:

    <Period start="PT44.075S" id="21"> <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml"> <Event> <scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="183003" tier="4095"> <scte35:SpliceInsert spliceEventId="1000" spliceEventCancelIndicator="false" outOfNetworkIndicator="true" spliceImmediateFlag="false" uniqueProgramId="7" availNum="1" availsExpected="4"> <scte35:Program><scte35:SpliceTime ptsTime="3783780"/></scte35:Program> </scte35:SpliceInsert> </scte35:SpliceInfoSection> </Event> </EventStream> . . </Period>
  3. MediaPackage 将包含额外信息的 EventStreamEventscte35 标签插入清单,并用 Period 标签包围广告周期,如前面的示例所示。MediaPackage 将第一个广告时段前的所有适配集归入一个周期,然后将广告周期后的所有适配集归入一个周期,直至到达下一个 SCTE-35 标记。下面是具有多个周期的完整清单示例。它使用 SpliceInsert SCTE-35 广告标记:

    <?xml version="1.0" encoding="utf-8"?> <MPD> <Period start="PT0.000S" id="0" duration="PT44.075S"> <AdaptationSet mimeType="video/mp4" segmentAlignment="true" subsegmentAlignment="true" startWithSAP="1" subsegmentStartsWithSAP="1" bitstreamSwitching="true"> <Representation id="1" width="960" height="540" frameRate="30000/1001" bandwidth="1000000" codecs="avc1.4D401F"> <SegmentTemplate timescale="30000" media="index_video_1_0_$Number$.mp4?m=1528413503" initialization="index_video_1_0_init.mp4?m=1528413503" startNumber="6" presentationTimeOffset="0"> <SegmentTimeline> <S t="361301" d="60060" r="15"/> </SegmentTimeline> </SegmentTemplate> </Representation> </AdaptationSet> <AdaptationSet mimeType="audio/mp4" segmentAlignment="0" lang="eng"> <Representation id="2" bandwidth="96964" audioSamplingRate="48000" codecs="mp4a.40.2"> <SegmentTemplate timescale="48000" media="index_audio_2_0_$Number$.mp4?m=1528413503" initialization="index_audio_2_0_init.mp4?m=1528413503" startNumber="6" presentationTimeOffset="0"> <SegmentTimeline> <S t="578305" d="96256" r="3"/> <S t="963329" d="95232"/> <S t="1058561" d="96256" r="5"/> <S t="1636097" d="95232"/> <S t="1731329" d="96256" r="3"/> </SegmentTimeline> </SegmentTemplate> </Representation> </AdaptationSet> </Period> <Period start="PT44.075S" id="21"> <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml"> <Event> <scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="183003" tier="4095"> <scte35:SpliceInsert spliceEventId="1000" spliceEventCancelIndicator="false" outOfNetworkIndicator="true" spliceImmediateFlag="false" uniqueProgramId="7" availNum="1" availsExpected="4"> <scte35:Program><scte35:SpliceTime ptsTime="3783780"/></scte35:Program> </scte35:SpliceInsert> </scte35:SpliceInfoSection> </Event> </EventStream> <AdaptationSet mimeType="video/mp4" segmentAlignment="true" subsegmentAlignment="true" startWithSAP="1" subsegmentStartsWithSAP="1" bitstreamSwitching="true"> <Representation id="1" width="960" height="540" frameRate="30000/1001" bandwidth="1000000" codecs="avc1.4D401F"> <SegmentTemplate timescale="30000" media="index_video_1_0_$Number$.mp4?m=1528413503" initialization="index_video_1_0_init.mp4?m=1528413503" startNumber="22" presentationTimeOffset="1322261"> <SegmentTimeline> <S t="1322261" d="60060" r="13"/> </SegmentTimeline> </SegmentTemplate> </Representation> </AdaptationSet> <AdaptationSet mimeType="audio/mp4" segmentAlignment="0" lang="eng"> <Representation id="2" bandwidth="96964" audioSamplingRate="48000" codecs="mp4a.40.2"> <SegmentTemplate timescale="48000" media="index_audio_2_0_$Number$.mp4?m=1528413503" initialization="index_audio_2_0_init.mp4?m=1528413503" startNumber="22" presentationTimeOffset="2115617"> <SegmentTimeline> <S t="2116353" d="96256"/> <S t="2212609" d="95232"/> <S t="2307841" d="96256" r="5"/> <S t="2885377" d="95232"/> <S t="2980609" d="96256" r="4"/> </SegmentTimeline> </SegmentTemplate> </Representation> </AdaptationSet> </Period> </MPD>

    如果您的输入具有 TimeSignal SCTE-35 广告标记而不是 SpliceInsert,广告周期中的 EventStream 将类似于以下内容:

    <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml"> <Event> <scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="183265" tier="4095"> <scte35:TimeSignal> <scte35:SpliceTime ptsTime="1350000"/> </scte35:TimeSignal> <scte35:SegmentationDescriptor segmentationEventId="1073741825" segmentationEventCancelIndicator="false" segmentationDuration="450000"> <scte35:DeliveryRestrictions webDeliveryAllowedFlag="false" noRegionalBlackoutFlag="true" archiveAllowedFlag="true" deviceRestrictions="3"/> <scte35:SegmentationUpid segmentationUpidType="1" segmentationUpidLength="3" segmentationTypeId="48" segmentNum="0" segmentsExpected="0">012345</scte35:SegmentationUpid> </scte35:SegmentationDescriptor> </scte35:SpliceInfoSection> </Event> </EventStream>

    MediaPackage 还将 scte35:SpliceInsert 消息作为元数据嵌入到各个视频段中。

如果您使用下游广告服务,该服务会在 MediaPackage 提供的清单中查找 SCTE-35 标记,根据这些标记插入广告。