SegmentTemplate의 duration 속성 - AWS Elemental MediaPackage

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

SegmentTemplateduration 속성

기본 DASH 매니페스트에서 SegmentTemplate에는 SegmentTimeline가 있습니다. 타임라인은 그 기간과 시작 시간을 포함해 Representation의 모든 세그먼트를 설명합니다. 라이브 이벤트에서는 AWS Elemental MediaPackage가 인코더에서 수신할 때 세그먼트를 타임라인에 추가합니다. 새로 사용할 수 있는 세그먼트를 알기 위해서는 재생 디바이스가 MediaPackage의 업데이트된 매니페스트를 정기적으로 요청해야 합니다.

표현의 모든 세그먼트의 기간이 동일하면 MediaPackage로 SegmentTimeline 객체를 삭제하여 지연 시간과 매니페스트를 줄일 수 있습니다. 그 대신 MediaPackage는 duration 속성을 SegmentTemplate 속성에 추가합니다. 재생 디바이스는 durationstartNumber를 사용하여 세그먼트를 사용할 수 있는 시점을 계산합니다. 재생 디바이스는 세그먼트에 대해 알기 위해 업데이트된 매니페스트에 의존할 필요가 없기 때문에 재생을 유지하기 위해 계속해서 업데이트를 요청할 필요가 없습니다. duration 속성의 작동 방식에 관한 내용은 다음 단원을 참조하십시오.

duration 속성의 작동 방식

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

  1. AWS Elemental MediaPackage가 DASH 매니페스트를 생성할 때 다음 예제와 같이 SegmentTemplate 객체에 duration 속성을 추가합니다.

    <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 ~ 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$ 변수가 대신하며, 첫 세그먼트는 SegmentTemplatestartNumber 값으로 시작합니다.

  3. 재생 디바이스에서 최신 세그먼트를 확인해야 할 경우 다음 공식을 사용합니다.

    ((wall clock time - availabilityStartTime ) / (duration / timescale )) + startNumber

    재생 디바이스는 다음 값으로 최신 세그먼트를 계산합니다.

    • 재생 디바이스의 일반 시계 시간: 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 속성 제한

정확한 재생을 보장하고 세그먼트 기간 충돌 문제를 방지하기 위해 AWS Elemental MediaPackage는 다음과 같은 duration 속성 제한을 적용합니다.

  • 엔드포인트를 생성할 때만 이 기능을 활성화할 수 있습니다.

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

  • 엔드포인트를 생성할 때 설정한 segment duration(세그먼트 기간) 값을 유지해야 합니다.

    엔드포인트르 편집하여 세그먼트 기간을 수정할 수 없습니다.

  • duration을 사용하는 엔드포인트로 단일 기간 DASH 매니페스트를 생성해야 합니다.

    여러 기간 DASH를 duration 속성과 함께 사용할 수 없습니다.

  • 수집 스트림은 일반적인 세그먼트화 케이던스를 사용해야 합니다.

  • 수집 스트림에 가변 세그먼트 길이를 사용할 수 없습니다. SCTE-35 관련 세그먼트화 결과를 예로 들 수 있습니다.

압축된 DASH 매니페스트가 포함된 duration 속성

압축된 매니페스트를 duration 속성과 조합하면 매니페스트 크기가 더 줄지만 그렇게 많이 줄지는 않습니다. 압축된 매니페스트는 적응 세트당 SegmentTemplateSegmentTimeline이 한 개입니다. duration 속성을 사용하면 AWS Elemental MediaPackage가 세그먼트 타임라인을 삭제합니다. 두 가지 처리 모두 매니페스트의 적응 세트당 SegmentTemplate은 1개이며 SegmentTimeline은 없습니다. 다음 예시를 참조하세요.

압축된 매니페스트에 관한 자세한 내용은 압축된 DASH 매니페스트 단원을 참조하십시오.

중요

표현에 있는 세그먼트에 의도적으로 다른 크기의 세그먼트가 있는 경우에는 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>