本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 处理这些消息的方式:
-
MediaPackage 检测来自输入源的 SCTE-35 消息。
-
MediaPackage 利用 SCTE-35 消息的属性,来计算主要内容末尾和广告之间的边界。此计算是 (scte35
ptsAdjustment
+ scte35ptsTime
) / (EventStreamtimescale
)。在以下示例中,周期在 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>
-
MediaPackage 将包含额外信息的
EventStream
、Event
和scte35
标签插入清单,并用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 标记,根据这些标记插入广告。