

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

# `SegmentTemplate` 中的 `duration` 屬性
<a name="segtemp-format-duration"></a>

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

如果表示法中的所有區段具有相同的持續時間，您可以透過啟用 MediaPackage 移除`SegmentTimeline`物件，協助減少延遲並縮短資訊清單。MediaPackage 會在其位置新增`duration`屬性至`SegmentTemplate`屬性。播放裝置會使用 `duration` 和 `startNumber` 來計算何時有可用區段。由於播放裝置不需要倚賴更新的資訊清單來了解區段，所以不需要持續請求更新來維持播放。如需 `duration` 屬性運作方式的相關資訊，請參閱以下各節。

**主題**
+ [`duration` 屬性的運作方式](#how-stemp-dur-works)
+ [`duration` 具有壓縮 DASH 資訊清單的屬性](#stemp-dur-combos)

## `duration` 屬性的運作方式
<a name="how-stemp-dur-works"></a>

透過 DASH 端點上的**區段範本格式**設定啟用 `$duration$` 屬性，如 中所述[建立 DASH 端點](endpoints-dash.md)。以下發生在資訊清單的情形：

1. 當 AWS Elemental MediaPackage 產生 DASH 資訊清單時，它會將 `duration` 屬性新增至`SegmentTemplate`物件，如下列範例所示：  
**Example**  

   ```
   <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%。若持續時間為 90000，區段必須介於 45000 到 135000 之間 (1.5 到 4.5 秒，30000 時間比例）。  
**Example**  

   以下是區段範本中使用 `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>
   ```

1. 播放裝置會使用 `media` 屬性中定義的 URL 請求客群。在 URL 中，它會將 `$Number$` 變數換成區段號碼，而第一個區段是從 `SegmentTemplate` 中的 `startNumber` 值開始。

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

   ((時鐘時間 - `availabilityStartTime` ) / (`duration` / `timescale` )) \+ `startNumber`  
**Example**  

   播放裝置會使用以下值來計算最新的區段：
   + 播放裝置的壁鐘時間：2018-11-16T19：18：30Z
   + `availabilityStartTime` - 來自資訊清單`MPD`物件的屬性：2018-11-16T19：08：30Z
   + `duration` - 來自資訊清單`SegmentTemplate`物件的屬性：90000
   + `timescale` - 來自 的屬性`SegmentTemplate`：30000
   + `startNumber` - 來自 的屬性`SegmentTemplate`：175032

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

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

## `duration` 屬性限制
<a name="stemp-limitations"></a>

為了確保適當的播放並協助防止區段持續時間衝突的問題， 會針對 `duration` 屬性 AWS Elemental MediaPackage 強制執行下列限制：
+ 只有在建立端點時才能啟用此功能。

  您無法在稍後修改端點將 `duration` 屬性新增到 DASH 資訊清單。其中包括將一個區段範本格式變更為 `duration` 所使用的格式。例如，您無法建立端點將 `$Time$` 變數用於 `SegmentTimeline`，然後編輯端點將 `$Number$` 變數用於 `duration`。
+ 您必須保留您建立端點時所設定的 **segment duration (區段持續時間)**。

  您無法編輯端點來修改區段持續時間。
+ 您必須從使用 `duration` 的端點來產生單期間 DASH 資訊清單。

  您無法將多期間 DASH 用於 `duration` 屬性。
+ 您的擷取串流必須使用一般分段節奏。
+ 您無法在擷取串流中使用變數區段長度。例如，造成與 SCTE-35-related分段。

## `duration` 具有壓縮 DASH 資訊清單的屬性
<a name="stemp-dur-combos"></a>

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

如需精簡資訊清單的詳細資訊，請參閱[壓縮的 DASH 資訊清單](compacted.md)。

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

**Example**    
以下是壓縮資訊清單的範例：  

```
<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>
```