本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
SegmentTemplate
中的 duration
屬性
在預設 DASH 資訊清單中,SegmentTemplate
保留 SegmentTimeline
。時間軸描述 Representation
中的所有區段,包括其持續時間及其開始時間。透過即時事件,AWS Elemental MediaPackage 會將它從編碼器收到的區段新增到時間軸。若要瞭解最新可用的區段,播放裝置必須定期向中要求更新的資訊清單 MediaPackage。
如果表示中的所有區段都有相同的持續時間,您可以透過啟用 MediaPackage 移除SegmentTimeline
物件來協助減少延遲並縮短資訊清單。取而代之的是, MediaPackage 將duration
屬性添加到SegmentTemplate
屬性中。播放裝置會使用 duration
和 startNumber
來計算何時有可用區段。由於播放裝置不需要倚賴更新的資訊清單來了解區段,所以不需要持續請求更新來維持播放。如需 duration
屬性運作方式的相關資訊,請參閱以下各節。
duration
屬性的工作原理
透過 DASH 端點上的「區段範本格式」設定啟用$duration$
屬性,如中所述建立破折號端點。以下發生在資訊清單的情形:
-
當 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>
-
播放裝置會使用
media
屬性中定義的 URL 來要求區段。在 URL 中,它會將$Number$
變數換成區段號碼,而第一個區段是從SegmentTemplate
中的startNumber
值開始。 -
如果播放裝置需要判斷最新的區段,它會使用下列公式:
((時鐘時間 -
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
屬性的精簡資訊清單,以進一步降低資訊清單的大小,但不會降太多。精簡資訊清單中每個調節集各有一個 SegmentTimeline
和 SegmentTemplate
。當您使用 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>