

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# DASH 매니페스트 세그먼트 템플릿 형식
<a name="segtemp-format"></a>

DASH 세그먼트 템플릿의 형식을 선택하는 기능은의 라이브 워크플로에서만 사용할 수 있습니다 AWS Elemental MediaPackage.

다음 단원에서는 재생 디바이스의 요건에 잘 맞게 DASH 매니페스트의 `SegmentTemplate` 객체를 수정할 수 있는 방법을 설명합니다.

**Topics**
+ [`SegmentTemplate`의 `media` 속성](segtemp-format-media.md)
+ [`SegmentTemplate`의 `duration` 속성](segtemp-format-duration.md)

# `SegmentTemplate`의 `media` 속성
<a name="segtemp-format-media"></a>

`SegmentTemplate` 속성의 `media` 속성은 재생 디바이스가 세그먼트 요청을 보내는 URL을 정의합니다. 기본적으로 이 URL은 `$Number$` 변수를 사용하여 요청한 특정 세그먼트를 식별합니다. 재생 디바이스가 세그먼트를 요청할 때 디바이스는 변수를 세그먼트의 숫자 식별자로 바꿉니다. 표현의 첫 번째 세그먼트에서는 `SegmentTemplate` 속성의 `startNumber` 값으로 이 식별자를 바꾸십시오. 세그먼트가 추가될 때마다 1씩 커집니다.

일부 플레이어는 재생이 가능할 경우 타임스탬프로 세그먼트를 식별할 때 세그먼트를 보다 원활하게 탐색합니다. 이 사용 사례를 지원하기 위해 MediaPackage에서는 `media` 속성의 URL에 `$Number$` 속성 대신 `$Time$` 변수를 사용합니다. 재생 디바이스가 세그먼트를 요청할 때 디바이스는 변수를 세그먼트의 가용성 시작 시간으로 바꿉니다. 이 시작 시간은 `SegmentTimeline` 객체에서 세그먼트(`S`) 속성의 `t` 값에서 식별됩니다. 예제는 [작동 방식](#how-stemp-works)을 참조하십시오.

## `$Time$` 변수의 작동 방식
<a name="how-stemp-works"></a>

[DASH 엔드포인트 생성](endpoints-dash.md)에서 설명한 것처럼 DASH 엔드포인트의 **Segment template format(세그먼트 템플릿 형식)**을 통해 `$Time$` 변수를 활성화합니다. AWS Elemental MediaPackage 는 다음과 같은 조치를 취합니다.

1.  MediaPackage가 DASH 매니페스트를 생성할 때 다음 예제와 같이 `SegmentTemplate` 객체의 `media` 값에 `$Time$` 변수를 사용합니다.  
**Example**  

   ```
   <SegmentTemplate timescale="30" media="index_video_1_0_$Time$.mp4?m=1122792372" initialization="index_video_1_0_init.mp4?m=1122792372" startNumber="2937928">
   ```

1. 재생 디바이스가 세그먼트를 요청할 때 `media` 속성에 정의된 URL을 사용하고, 요청된 세그먼트의 가용성 시작 시간으로 변수를 대체합니다.
**중요**  
변수를 대체하는 값은 세그먼트의 `t` 값이어야 합니다. 요청에 임의 타임스탬프가 사용되면 MediaPackage가 가장 가까운 세그먼트를 찾지 않습니다.  
**Example**  

   다음은 표현의 세그먼트 템플릿 예제입니다. `$Time$` 변수가 사용됩니다.

   ```
   <SegmentTemplate timescale="30000" media="155_video_1_2_$Time$.mp4?m=1545421124" initialization="155_video_1_2_init.mp4?m=1545421124" startNumber="710">
     <SegmentTimeline>
          <S t="255197799" d="360360" r="8"/>
          <S t="258441039" d="334334"/>
     </SegmentTimeline>
   </SegmentTemplate>
   ```

   첫 번째 세그먼트의 요청 URL은 **155\$1video\$11\$12\$1*255197799*.mp4**입니다. 기간이 360360인 다음 세그먼트 요청은 **155\$1video\$11\$12\$1*255558159*.mp4**이고 9번째 세그먼트로 계속됩니다.

   최종 세그먼트 요청은 **155\$1video\$11\$12\$1*258441039*.mp4**입니다.

# `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)
+ [압축된 DASH 매니페스트가 포함된 `duration` 속성](#stemp-dur-combos)

## `duration` 속성의 작동 방식
<a name="how-stemp-dur-works"></a>

[DASH 엔드포인트 생성](endpoints-dash.md)에서 설명한 것처럼 DASH 엔드포인트의 **세그먼트 템플릿 형식**을 통해 `$duration$` 속성을 활성화합니다. 매니페스트는 다음과 같이 처리됩니다.

1. 가 DASH 매니페스트를 AWS Elemental MediaPackage 생성하면 다음 예제`SegmentTemplate`와 같이 객체에 `duration` 속성을 추가합니다.  
**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 사이여야 합니다(30000 시간 단위에서는 1.5 \$1 4.5초).  
**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. 재생 디바이스에서 최신 세그먼트를 확인해야 할 경우 다음 공식을 사용합니다.

   ((wall clock time - `availabilityStartTime` ) / (`duration` / `timescale` )) \$1 `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)) \$1 175032

   이 계산은 (경과 시간 600초) / (세그먼트 기간 3초) = 경과 세그머트 200이 됩니다. 이러한 세그먼트를 175032 시작 세그먼트에 더하면 최신 세그먼트 175232가 됩니다.

## `duration` 속성 제한
<a name="stemp-limitations"></a>

적절한 재생을 보장하고 세그먼트 기간 충돌 문제를 방지하기 위해는 `duration` 속성에 대해 다음과 같은 제한 사항을 AWS Elemental MediaPackage 적용합니다.
+ 엔드포인트를 생성할 때만 이 기능을 활성화할 수 있습니다.

  나중에 DASH 매니페스트에 `duration` 속성을 추가하도록 엔드포인트를 수정할 수 없습니다. 여기에는 한 세그먼트 템플릿 형식에서 `duration`을 사용하는 세그먼트 형식으로의 변경이 포함됩니다. 예를 들어, `$Time$` 변수를 `SegmentTimeline`와 함께 사용하는 엔드포인트를 생성한 후 `$Number$` 변수를 `duration`과 함께 사용하도록 이 엔드포인트를 편집할 수 없습니다.
+ 엔드포인트를 생성할 때 설정한 **segment duration(세그먼트 기간)** 값을 유지해야 합니다.

  엔드포인트르 편집하여 세그먼트 기간을 수정할 수 없습니다.
+ `duration`을 사용하는 엔드포인트로 단일 기간 DASH 매니페스트를 생성해야 합니다.

  여러 기간 DASH를 `duration` 속성과 함께 사용할 수 없습니다.
+ 수집 스트림은 일반적인 세그먼트화 케이던스를 사용해야 합니다.
+ 수집 스트림에 가변 세그먼트 길이를 사용할 수 없습니다. SCTE-35 관련 세그먼트화 결과를 예로 들 수 있습니다.

## 압축된 DASH 매니페스트가 포함된 `duration` 속성
<a name="stemp-dur-combos"></a>

압축된 매니페스트를 `duration` 속성과 조합하면 매니페스트 크기가 더 줄지만 그렇게 많이 줄지는 않습니다. 압축된 매니페스트는 적응 세트당 `SegmentTemplate` 및 `SegmentTimeline`이 한 개입니다. `duration` 속성을 사용하면 세그먼트 타임라인이 AWS Elemental MediaPackage 제거됩니다. 두 가지 처리 모두 매니페스트의 적응 세트당 `SegmentTemplate`은 1개이며 `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>
```