SegmentTemplate 中的 duration 屬性 - AWS Elemental MediaPackage

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

SegmentTemplate 中的 duration 屬性

在預設 DASH 資訊清單中,SegmentTemplate 保留 SegmentTimeline。時間軸描述 Representation 中的所有區段,包括其持續時間及其開始時間。透過即時事件,AWS Elemental MediaPackage 會將它從編碼器收到的區段新增到時間軸。若要瞭解最新可用的區段,播放裝置必須定期向中要求更新的資訊清單 MediaPackage。

如果表示中的所有區段都有相同的持續時間,您可以透過啟用 MediaPackage 移除SegmentTimeline物件來協助減少延遲並縮短資訊清單。取而代之的是, MediaPackage 將duration屬性添加到SegmentTemplate屬性中。播放裝置會使用 durationstartNumber 來計算何時有可用區段。由於播放裝置不需要倚賴更新的資訊清單來了解區段,所以不需要持續請求更新來維持播放。如需 duration 屬性運作方式的相關資訊,請參閱以下各節。

duration屬性的工作原理

透過 DASH 端點上的「區段範本格式」設定啟用$duration$屬性,如中所述建立破折號端點。以下發生在資訊清單的情形:

  1. 當 AWS Elemental MediaPackage 產生 DASH 資訊清單時,它會將 duration 屬性新增到 SegmentTemplate 物件,如以下範例所示:

    <SegmentTemplate timescale="30000" media="index_video_1_0_$Number$.mp4?m=1535562908" initialization="index_video_1_0_init.mp4?m=1535562908" startNumber="175032" duration="90000" presentationTimeOffset="62061"/>

    區段範本不包含區段時間軸和個別區段描述。

    重要

    最終區段除外,區段偏離持續時間值不得超過 50%。如果使用 9 萬個持續時間,區段必須介於 45000 到 135000 之間 (具有 3 萬個時間刻度為 1.5 至 4.5 秒)。

    以下是區段範本中使用 duration 的調節集範例:

    <AdaptationSet mimeType="video/mp4" segmentAlignment="true" subsegmentAlignment="true" startWithSAP="1" subsegmentStartsWithSAP="1" bitstreamSwitching="true"> <Representation id="1" width="852" height="480" frameRate="30/1" bandwidth="1200000" codecs="avc1.4D401F"> <SegmentTemplate timescale="30000" media="index_video_1_0_$Number$.mp4?m=1535562908" initialization="index_video_1_0_init.mp4?m=1535562908" startNumber="175032" duration="90000" presentationTimeOffset="62061"/> </Representation> <Representation id="2" width="640" height="360" frameRate="30/1" bandwidth="800000" codecs="avc1.4D401E"> <SegmentTemplate timescale="30000" media="index_video_3_0_$Number$.mp4?m=1535562908" initialization="index_video_3_0_init.mp4?m=1535562908" startNumber="175032" duration="90000" presentationTimeOffset="62061"/> </Representation> <Representation id="3" width="320" height="240" frameRate="30/1" bandwidth="499968" codecs="avc1.4D400D"> <SegmentTemplate timescale="30000" media="index_video_5_0_$Number$.mp4?m=1535562908" initialization="index_video_5_0_init.mp4?m=1535562908" startNumber="175032" duration="90000" presentationTimeOffset="62061"/> </Representation> </AdaptationSet>
  2. 播放裝置會使用media屬性中定義的 URL 來要求區段。在 URL 中,它會將 $Number$ 變數換成區段號碼,而第一個區段是從 SegmentTemplate 中的 startNumber 值開始。

  3. 如果播放裝置需要判斷最新的區段,它會使用下列公式:

    ((時鐘時間 - availabilityStartTime ) / (duration / timescale )) + startNumber

    播放裝置會使用以下值來計算最新的區段:

    • 來自播放設備的掛鐘時間:2018-11-16T19:18:30 Z

    • availabilityStartTime-來自資訊清單MPD物件的屬性:2018-11-16T19:08:30 Z

    • duration-來自資訊清單SegmentTemplate物件的屬性:90000

    • timescale-屬性來自SegmentTemplate:3 萬

    • startNumber-來自下列項目的屬性SegmentTemplate

    使用的計算是 ((2018-11-16T19:18:30Z - 2018-11-16T19:08:30Z) / (90000/30000)) + 175032

    然後,這個計算會成為 (600 秒經歷時間)/(3 秒區段持續時間) = 200 的經歷區段。將這些區段新增到 175032 開始區段會將最新的區段變成 175232。

duration屬性限制

為了確保適當播放,並協助防止區段持續時間衝突的問題,AWS Elemental MediaPackage 會對 duration 屬性強制執行下列限制:

  • 只有在建立端點時才能啟用此功能。

    您無法在稍後修改端點將 duration 屬性新增到 DASH 資訊清單。其中包括將一個區段範本格式變更為 duration 所使用的格式。例如,您無法建立端點將 $Time$ 變數用於 SegmentTimeline,然後編輯端點將 $Number$ 變數用於 duration

  • 您必須保留您建立端點時所設定的 segment duration (區段持續時間)

    您無法編輯端點來修改區段持續時間。

  • 您必須從使用 duration 的端點來產生單期間 DASH 資訊清單。

    您無法將多期間 DASH 用於 duration 屬性。

  • 您的擷取串流必須使用一般的分段節奏。

  • 您無法在擷取串流中使用可變區段長度。例如,由於與 SCTE-35 相關的分割所產生的。

duration具有壓縮 DASH 清單的屬性

合併含有 duration 屬性的精簡資訊清單,以進一步降低資訊清單的大小,但不會降太多。精簡資訊清單中每個調節集各有一個 SegmentTimelineSegmentTemplate。當您使用 duration 屬性時,AWS Elemental MediaPackage 會移除區段時間軸。對於這兩種處理方法,資訊清單中每個調節集各有一個 SegmentTemplate,而沒有 SegmentTimeline。請參閱以下範例。

如需精簡資訊清單的詳細資訊,請參閱壓實短跑清單

重要

如果簡報中的區段刻意有不同大小的區段,請勿使用 duration 屬性。只有在區段是一致大小時,此處理方法才適用。

以下是壓縮資訊清單的範例:
<AdaptationSet mimeType="video/mp4" segmentAlignment="true" subsegmentAlignment="true" startWithSAP="1" subsegmentStartsWithSAP="1" bitstreamSwitching="true"> <SegmentTemplate timescale="30000" media="index_video_$RepresentationID$_0_$Number$.mp4?m=1543947824" initialization="index_video_$RepresentationID$_0_init.mp4?m=1543947824" startNumber="1"> <SegmentTimeline> <S t="62000" d="60000" r="9"/> </SegmentTimeline> </SegmentTemplate> <Representation id="1" width="640" height="360" frameRate="30/1" bandwidth="749952" codecs="avc1.640029"/> <Representation id="2" width="854" height="480" frameRate="30/1" bandwidth="1000000" codecs="avc1.640029"/> <Representation id="3" width="1280" height="720" frameRate="30/1" bandwidth="2499968" codecs="avc1.640029"/> </AdaptationSet>
以下是具有duration屬性的壓縮資訊清單的範例:
<AdaptationSet mimeType="video/mp4" segmentAlignment="true" subsegmentAlignment="true" startWithSAP="1" subsegmentStartsWithSAP="1" bitstreamSwitching="true"> <SegmentTemplate timescale="30000" media="index_video_$RepresentationID$_0_$Number$.mp4?m=1543947824" initialization="index_video_$RepresentationID$_0_init.mp4?m=1543947824" startNumber="1" duration="60000"/> <Representation id="1" width="640" height="360" frameRate="30/1" bandwidth="749952" codecs="avc1.640029"/> <Representation id="2" width="854" height="480" frameRate="30/1" bandwidth="1000000" codecs="avc1.640029"/> <Representation id="3" width="1280" height="720" frameRate="30/1" bandwidth="2499968" codecs="avc1.640029"/> </AdaptationSet>