알림

Google Ad Manager 360에서만 사용 가능

HTTP 동적 적응형 스트리밍(DASH)

라이브 스트림 광고 시점 인코딩(DASH)

지원되는 DASH 기능 및 통합 세부정보의 전체 목록을 확인하세요.

 북마크다음으로 이동: 매니페스트 및 콘텐츠 요건 | 패키지, 플랫폼 및 플레이어

다중 기간 매니페스트와 단일 기간 매니페스트 비교

Ad Manager에서는 DASH에 대한 다중 기간 매니페스트와 단일 기간 매니페스트의 수집을 모두 지원합니다.

단일 기간 매니페스트를 사용하면 게시자는 콘텐츠를 구별하는 여러 기간이 아닌, 모든 콘텐츠와 광고 시점 기회가 포함된 하나의 기간으로 DASH 스트림을 제공합니다. DAI는 가져오기를 실행할 때마다 매니페스트를 다중 기간으로 변환하여 단일 기간 매니페스트를 지원합니다.

Google Ad Manager에서 라이브 스트림을 설정하고 스트리밍 형식으로 'DASH'를 선택하면 매니페스트가 단일 기간과 다중 기간 중에서 무엇으로 제공될지 선택할 수 있습니다.

Ad Manager 인터페이스의 DASH 매니페스트 유형 선택기.

이 가이드를 사용하여 다중 기간 매니페스트단일 기간 매니페스트에 관한 기대치를 확인하세요. 또한 단일 기간 매니페스트를 사용하는 경우 부록은 DAI가 단일 기간 매니페스트를 다중 기간 매니페스트로 변환하는 방법을 보여줍니다.

Google의 동적 광고 삽입은 세그먼트 분할을 지원하지 않습니다. 이 자료에서는 매니페스트 컨디셔닝에 대한 지원만 설명합니다.

매니페스트 및 콘텐츠 요건

다중 기간 매니페스트의 경우

다중 기간 MPEG-DASH 매니페스트에 대한 기대치

Google DAI는 원본 MPD에서 다음 유효성 검사를 수행합니다.

MPD 요소 유효성 검사

  • Typedynamic으로 설정됨
  • Profileurn:mpeg:dash:profile:isoff-live:2011로 설정됨
  • availabilityStartTime은 0이 아니어야 하며 MPD의 연속 폴 사이에 그 값이 변경되지 않아야 함
  • PublishTime은 0이 아니어야 하며 연속 폴 사이에 값이 증가하거나 동일하게 유지되어야 함 하지만 업데이트할 때마다 publishTime 속성을 현재 시간으로 설정해야 합니다.
  • HTTPS는 동일한 MPD에서 참조되는 DASH 콘텐츠 전체에 사용해야 함

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" type="dynamic"
profiles="urn:mpeg:dash:profile:isoff-live:2011"
availabilityStartTime="2022-01-01T10:00:00Z"
publishTime="2022-01-01T10:00:00Z"
minimumUpdatePeriod="PT25S" timeShiftBufferDepth="PTM0S" maxSegmentDuration="PT2S"
minBufferTime="PT2S">
  <Period …>
    …
  </Period>
  …
</MPD>

기간 요소 유효성 검사

  • Start가 0 이상이어야 함

    이렇게 하면 정수 날짜 입력란을 선택적으로 포함할 수 있는 ISO-8601 기간을 지원할 수 있습니다. 예를 들어 P3DT3H1M30S는 3일, 3시간 1분 30초를 나타냅니다.

    ISO-8601 연, 월, 주 기간 지정자는 현재 지원되지 않습니다.

  • Period에 1개 이상의 AdaptationSet 요소가 있음
  • 주소 지정 체계는 숫자 및 시간 기반 주소 지정을 포함한 템플릿으로 제한됨

<Period start="PT0S">
  <AdaptationSet …>
    …
  </AdaptationSet>
  <AdaptationSet …>
    …
  </AdaptationSet>
</Period>

MPD의 연속 폴 사이에서:

  • Period 요소는 MPD 상단에서만 삭제할 수 있음
  • Period 요소는 MPD 하단에만 추가할 수 있음
  • MPD의 첫 번째와 마지막 기간만 업데이트할 수 있습니다. MPD의 다른 기간은 수정할 수 없습니다. 업데이트는 다음 목적을 위한 것이어야 합니다.
    • 첫 번째 기간의 최고점에서 세그먼트 또는 이벤트 삭제
    • 마지막 기간의 최저점에 새 세그먼트 또는 이벤트 추가

AdaptationSet 요소 유효성 검사

  • AdaptationSet에 하나 이상의 Representation 요소가 있음
  • AdaptationSetContentProtection 요소와 하위 요소는(있는 경우) MPD의 연속 폴 사이에 변경되면 안 됨

<AdaptationSet mimeType="video/mp4" startWithSAP="1"
contentType="video" par="16:9"
minWidth="640" maxWidth="640" minHeight="360" maxHeight="360"
maxFrameRate="60/2"
segmentAlignment="true">
  <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>
  <ContentComponent id="0" contentType="video" />
  <Representation …>
    …
  </Representation>
  <Representation …>
    …
  </Representation>
</AdaptationSet>

Representation 요소 유효성 검사

  • Id가 비어 있지 않아야 함
  • SegmentBase 또는 SegmentList 요소가 없어야 함

<Representation width="640" height="360" sar="1:1" frameRate="60/2"
codecs="avc1.64001e" id="V300" bandwidth="300000">
  …
</Representation>

시간 속성이 있는 SegmentTemplate 유효성 검사

  • SegmentTimeline S 요소에는 미디어 URL에 사용되는 t 속성이 포함될 수 있음
    • 없는 경우, 처음 S 요소 및 차후 S 요소에 대해 해당 값은 0으로 간주되며, 이전 S 요소의 가장 이른 프레젠테이션 시간 및 인접 기간의 합, 즉 이전 S 요소의 [t + d × (r + 1)] 값으로 간주됨
    • $Time$$Number$는 모두 다중 기간 매니페스트에서 지원됨
    • SegmentTemplateStartNumber가 사용되지 않음
  • MPD의 연속 폴 사이에서:
    • 세그먼트가 DVR 구간 스냅샷 외부로 이동할 때 SegmentTimeline 상단에서만 삭제할 수 있음
    • SegmentTimeline 하단에만 세그먼트를 추가할 수 있음

<SegmentTemplate timescale="90000" initialization="$RepresentationID$/init.mp4"
media="$RepresentationID$/$Time$.m4s">
  <SegmentTimeline>
    <S t="0" d="270000" r="20" />
  </SegmentTimeline>
</SegmentTimeline>

시간 구성요소 유효성 검사

Google DAI는 ISO-8601 기간의 시간 구성요소 부분을 지원하며 선택적 정수 날짜 구성요소(P0Y0M[n]DT[n]H[n]M[n]S)를 지원합니다. 일 구성요소는 1일 = 24시간임을 고려해 기간으로 변환되며 시간 구성요소에 추가됩니다. 인식되는 가장 작은 단위는 나노초입니다.

유효한 시간 형식의 예
  • P0Y0M
  • P0Y0M2D
  • P2D
  • PT3H
  • PT0H3M
  • P0Y0M0DT0H0M1.000S
  • P0Y0M1DT2H4M10S
  • PT0.000000001S
잘못된 시간 형식의 예
  • P
  • PT
  • 2007-03-01
  • P5Y0M1DT2H4M1.000S
  • P0Y1.5M1DT2H4M1.000S
  • P0YiM1DT2H4M1.000S
  • P0Y0M.3DT0H0M1.000S
  • 3h
  • PT100,000H

큐 아웃 및 큐 인 메시지 이벤트에 대한 기대치

Google DAI는 큐 아웃 및 큐 인 메시지 이벤트에 대해 다음 유효성 검사를 수행합니다. 콘텐츠는 다음을 기준으로 사전 조건이 지정되어 있어야 합니다.

  • 미디어 프레젠테이션은 여러 기간으로 나뉘어야 하고 각 미드롤 CUE-OUTCUE-IN은 기간 경계에 있어야 합니다.
  • 각 기간의 시작 및 끝에 있는 콘텐츠 세그먼트는 세그먼트의 모든 프레임이 기간에 포함되도록 준비되어야 합니다.
  • 키프레임/IDR 프레임은 큐 포인트를 따라야 하며 기간의 시작 부분에 있어야 합니다. 이에 따라 큐 포인트가 자연적인 경계에 있지 않은 경우 종료 기간에 짧은 세그먼트가 필요할 수 있습니다.

광고 시점 신호

  • 하나의 광고 시점과 관련된 모든 콘텐츠는 하나 이상의 연속 기간 내에 포함되어야 합니다. 해당 기간에는 대체될 콘텐츠 세그먼트만 포함되어야 합니다.
  • 광고 시점 CUE-OUT 표시기에서는 다음 예에 표시된 것처럼 MPD 매니페스트에서 신호를 받아야 합니다.

    예 1

    • SCTE-35 EventStream 요소
    • SchemeIdUri="urn:scte:scte35:2014:xml+bin"
    • DASH 표준에 정의되어 있습니다.

    <MPD>

    <Period start="PT0S" id="1">

       <!-- 콘텐츠 기간 -->

       ...

    </Period>

    <Period start="PT32S" id="2">

        <!-- 광고 시점 기간 -->

        <!-- 광고 시점은 이 기간의 첫 세그먼트에서 시작되며,

        마지막 세그먼트와 함께 종료됨 -->

        <EventStream timescale="90000"

        schemeIdUri="urn:scte:scte35:2014:xml+bin">

         <Event duration="2520000" id="1">

         <!-- 이 이벤트에 지정된 재생 시간은 해당 기간의

         실제 재생 시간과 최대한 일치해야 함 -->

            <Signal xmlns="http://www.scte.org/schemas/35/2016"

             <Binary>

               /DAlAAAAAAAAAP/wFAUAAAAEf+/+kybGyP4BSvaQAAEBAQAArky/3g==

             <Binary>

           </Signal>

          </Event>

        </EventStream> 

    </Period>

    <Period start="PT60S" id="3"> 

       <!-- 콘텐츠 기간 -->

       ...

       </Period>

    </MPD>

    예 2

    • SCTE-35 EventStream 요소
    • SchemeIdUri="urn:scte:scte35:2013:xml"
    • DASH 표준에 정의되어 있습니다.

    <MPD>

    <Period start="PT0S" id="1">

       <!-- 콘텐츠 기간 -->

       ...

    </Period>

    <Period start="PT32S" id="2">

        <!-- 광고 시점 기간 -->

        <!-- 광고 시점은 이 기간의 첫 세그먼트에서 시작되며,

        마지막 세그먼트와 함께 종료됨 -->

       <EventStream timescale="90000"

       schemeIdUri="urn:scte:scte35:2013:xml">

         <Event duration="2520000" id="1">

         <!-- 이 이벤트에 지정된 재생 시간은 해당 기간의

           실제 재생 시간과 최대한 일치해야 함 -->

           <SpliceInfoSection xmlns="urn:scte:scte35:2013:xml">

              <SpliceInsert outOfNetworkIndicator="true" 

              spliceImmediateFlag="true">

                <BreakDuration autoReturn="true"

                duration="2520000"/>

                </SpliceInsert>

            </SpliceInfoSection>

          </Event>

        </EventStream> 

    </Period>

    <Period start="PT60S" id="3"> 

        <!-- 콘텐츠 기간 -->

        ...

    </Period>

    </MPD>

  • CUE-OUT 이벤트에 지정된 광고 시점의 기간은 광고 시점 기간에 있는 모든 세그먼트의 총 기간과 동일해야 합니다.

지원되는 광고 마커

SCTE35 XML 이음 삽입

DASH에서 CUE 마크업은 XML Period 요소 경계와 함께 제공됩니다. CUE 마크업은 Period 내에서 EventStream 요소 내에 Event 요소로 제공됩니다. 이 추가 경계는 마크업을 식별하는 데 충분한 기능을 합니다. 또한 광고 시점은 Period 경계로 표시되므로 명시적 CUE-IN 마커가 필요하지 않습니다.

이 예에서는 DASH에 대한 XML 기반 SCTE35 마크업을 보여줍니다. 이는 데이터가 파싱되어 바이너리 대신 XML로 표시된 점을 제외하면 SCTE35 바이너리 이음 삽입과 유사합니다.

<Period>

  <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">

     <Event duration="2520000" id="1">

       <SpliceInfoSection xmlns="urn:scte:scte35:2013:xml">

          <SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">

          <BreakDuration autoReturn="true" duration="2520000"/>

          </SpliceInsert>

        </SpliceInfoSection>

      </Event>

    </EventStream>

</Period>

SCTE35 XML 시간 신호

DASH에서 CUE 마크업은 XML Period 요소 경계와 함께 제공됩니다. CUE 마크업은 Period 내에서 EventStream 요소 내에 Event 요소로 제공됩니다. 이 추가 경계는 마크업을 식별하는 데 충분한 기능을 합니다. 또한 광고 시점은 Period 경계로 표시되므로 명시적 CUE-IN 마커가 필요하지 않습니다.

이 예에서는 DASH에 대한 XML 기반 SCTE35 마크업을 보여줍니다. 이는 데이터가 파싱되어 바이너리 대신 XML로 표시된 점을 제외하면 SCTE35 Binary Time Signal과 유사합니다.

<Period>

  <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">

     <Event duration="2520000" id="1">

       <SpliceInfoSection xmlns="urn:scte:scte35:2013:xml">

          <TimeSignal outOfNetworkIndicator="true" spliceImmediateFlag="true">

             <SpliceTime ptsTime="123123"/>

          </TimeSignal>

          <SegmentationDescriptor  segmentationEventId="123123" segmentationEventCancelIndicator="false" segmentationDuration="123123">

             <DeliveryRestrictions webDeliveryAllowedFlag="false" noRegionalBlackoutFlag="true" archiveAllowedFlag="false" deviceRestrictions="3"/>            

             <SegmentationUpid segmentationUpidType="14" segmentationTypeId="52" >11111</SegmentationUpid>

          </SegmentationDescriptor>

        </SpliceInfoSection>

      </Event>

    </EventStream>

</Period>

SegmentationTypeId는 시간 신호의 유형을 나타냅니다.

다음 SegmentationTypeId 값은 유효한 CUE-OUT 시간 신호로 인식됩니다.

34 : 광고 시간 시작
48 : 제공업체 광고 시작t
52 : 제공업체 게재위치 기회 시작

다음 SegmentationTypeId 값은 유효한 CUE-IN 시간 신호로 인식됩니다.

35 : 광고 시점 종료
49 : 제공업체 광고 종료
53 : 제공업체 게재위치 기회 종료

SCTE35 바이너리 이음 삽입

DASH에서 CUE 마크업은 XML Period 요소 경계와 함께 제공됩니다. CUE 마크업은 Period 내에서 EventStream 요소 내에 Event 요소로 제공됩니다. 이 추가 경계는 마크업을 식별하는 데 충분한 기능을 합니다. 또한 광고 시점은 Period 경계로 표시되므로 명시적 CUE-IN 마커가 필요하지 않습니다.

이 예에서는 DASH의 바이너리 SCTE35 마크업을 보여줍니다.

<Period>

    <EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin">

      <Event duration="2520000" id="1">

       <Signal xmlns="http://www.scte.org/schemas/35/2016">

         <Binary>

         /DAlAAAAAAAAAP/wFAUAAAAEf+/+kybGyP4BSvaQAAEBAQAArky/3g==

         </Binary>

       </Signal>

      </Event>

    </EventStream>

 ...

<Period>

SCTE35 바이너리 시간 신호: 광고 시점 시작/종료

시점 타겟팅 정보와 함께 유효한 CUE-OUT/CUE-IN이 포함되어 있는지 확인하려면 SCTE-35 바이너리(base64로 인코딩됨) 데이터를 디코딩 및 파싱해야 합니다.

예를 들어 유효한 CUE-OUT 신호가 포함되어 있는 바이너리 데이터는 다음과 같습니다.

<Period>

    <EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin">

      <Event duration="2520000" id="1">

       <Signal xmlns="http://www.scte.org/schemas/35/2016">

         <Binary>

           /DAsAAAAAyiYAP/wBQb/PVbrDQAWAhRDVUVJB48zWH//AAEuGvsAACIAAdRJqiI=

         </Binary>

       </Signal>

      </Event>

    </EventStream>

 ...

<Period>

디코딩되고 나면 메시지에 다음과 같은 필드가 포함됩니다.

  • 6으로 설정된 splice_command_type은 이것이 시간 신호임을 나타냅니다.
  • segmentation_type_id는 시간 신호의 유형을 나타냅니다.

다음 segment_type_id 값은 유효한 CUE-OUT 시간 신호로 인식됩니다.

34: 광고 시점 시작

다음 segmentation_type_id 값(splice_command_type = 6인 경우)은 유효한 CUE-IN 시간 신호로 인식됩니다.

35: 광고 시점 종료

SCTE35 바이너리 시간 신호: 제공업체 광고 시작/종료

시점 타겟팅 정보와 함께 유효한 CUE-OUT/CUE-IN이 포함되어 있는지 확인하려면 SCTE-35 바이너리(base64로 인코딩됨) 데이터를 디코딩 및 파싱해야 합니다.

예를 들어 유효한 CUE-OUT 신호가 포함되어 있는 바이너리 데이터는 다음과 같습니다.

<Period>

    <EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin">

      <Event duration="2520000" id="1">

       <Signal xmlns="http://www.scte.org/schemas/35/2016">

         <Binary>

           /DBcAAAAAAAAAP/wBQb//ciI8QBGAh1DVUVJXQk9EX+fAQ5FUDAxODAzODQwMDY2NiEEZAIZQ1VFSV0JPRF/3wABLit7AQVDMTQ2NDABAQEKQ1VFSQCAMTUwKnPhdcU=

         </Binary>

       </Signal>

      </Event>

    </EventStream>

 ...

<Period>

디코딩되고 나면 메시지에 다음과 같은 필드가 포함됩니다.

  • 6으로 설정된 splice_command_type은 이것이 시간 신호임을 나타냅니다.
  • segmentation_type_id는 시간 신호의 유형을 나타냅니다.

다음 segment_type_id 값은 유효한 CUE-OUT 시간 신호로 인식됩니다.

48: 제공업체 광고 시작

다음 segmentation_type_id 값(splice_command_type = 6인 경우)은 유효한 CUE-IN 시간 신호로 인식됩니다.

49: 제공업체 광고 종료

SCTE35 바이너리 시간 신호: 제공업체 게재위치 기회

시점 타겟팅 정보와 함께 유효한 CUE-OUT/CUE-IN이 포함되어 있는지 확인하려면 SCTE-35 바이너리(base64로 인코딩됨) 데이터를 디코딩 및 파싱해야 합니다.

예를 들어 유효한 CUE-OUT 신호가 포함되어 있는 바이너리 데이터는 다음과 같습니다.

<Period>

    <EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin">

      <Event duration="2520000" id="1">

       <Signal xmlns="http://www.scte.org/schemas/35/2016">

         <Binary>

           /DA0AAAAAAAA///wBQb+cr0AUAAeAhxDVUVJSAAAjn/PAAGlmbAICAAAAAAsoKGKNAIAmsnRfg==

         </Binary>

       </Signal>

      </Event>

    </EventStream>

 ...

<Period>

디코딩되고 나면 메시지에 다음과 같은 필드가 포함됩니다.

  • 6으로 설정된 splice_command_type은 이것이 시간 신호임을 나타냅니다.
  • segmentation_type_id는 시간 신호의 유형을 나타냅니다.

다음 segment_type_id 값은 유효한 CUE-OUT 시간 신호로 인식됩니다.

52: 제공업체 게재위치 기회 시작

다음 segmentation_type_id 값(splice_command_type = 6인 경우)은 유효한 CUE-IN 시간 신호로 인식됩니다.

53: 제공업체 게재위치 기회 종료

SCTE-35 마크업의 매크로

피드에 EXT-OATCLS-SCTE35 또는 EXT-X-DATERANGE 마크업이 포함되어 있으면 메타데이터가 자동으로 추출되고 맞춤 키-값을 통해 사용할 수 있게 됩니다. 맞춤 키-값을 설정하고 광고 태그를 생성할 때 해당 키-값을 매크로로 삽입해야 합니다.

SCTE-35 필드의 새로운 맞춤 키-값을 설정할 때 맞춤 키(예: 'scte35')를 사용하고 다음과 같이 피드에서 사용할 수 있는 필드 유형에 해당하는 매크로에 값을 설정합니다.

매크로 설명
%%SPLICE_INSERT_EVENT_ID%% SCTE35 메시지의 부호 없는 정수는 10진수 문자열로 변환됩니다.
%%SPLICE_INSERT_UPID%%
%%TIME_SIGNAL_EVENT_ID%%
%%TIME_SIGNAL_UPID%% 0x 접두어 없이 소문자 16진수로 렌더링됩니다.
%%TIME_SIGNAL_UPID_RAW%% 16진수 변환 없이 SCTE 메시지의 원시 바이트를 삽입합니다(초기 문자열은 유효한 UTF-8 인코딩 문자열이어야 함).
%%AFMM_CBC%% 이음 정보에서 광고 시점 코드를 추출합니다(프랑스어 AF2M 사양에 필요함).
DASH 콘텐츠는 DASH-IF 상호운용성 포인트서비스 혜택 요구사항 및 가이드라인에 지정된 규칙을 모두 따라야 합니다.
단일 기간 매니페스트의 경우

단일 기간 MPEG-DASH 매니페스트에 대한 기대치

Google DAI는 원본 MPD에서 다음 유효성 검사를 수행합니다.

MPD 요소 유효성 검사

  • Typedynamic으로 설정됨
  • Profilesurn:mpeg:dash:profile:isoff-live:2011로 설정됨
  • AvailabilityStartTime은 0이 아니어야 하며 MPD의 연속 폴 사이에 그 값이 변경되지 않아야 함
  • PublishTime은 0이 아니어야 하며 연속 폴 사이에 값이 증가하거나 동일하게 유지되어야 함
  • MPD에 정확히 하나의 Period 요소가 있음
  • HTTPS는 동일한 MPD에서 참조되는 DASH 콘텐츠 전체에 사용해야 함

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" type="dynamic"
profiles="urn:mpeg:dash:profile:isoff-live:2011"
availabilityStartTime="2022-01-01T10:00:00Z"
publishTime="2022-01-01T10:00:00Z"
minimumUpdatePeriod="PT25S" timeShiftBufferDepth="PTM0S" maxSegmentDuration="PT2S"
minBufferTime="PT2S">
  <Period …>
    …
  </Period>
  …
</MPD>

기간 요소 유효성 검사

  • Start가 0 이상이어야 함
  • Period에 1개 이상의 AdaptationSet 요소가 있음

<Period start="PT0S">
  <AdaptationSet …>
    …
  </AdaptationSet>
  <AdaptationSet …>
    …
  </AdaptationSet>
</Period>

EventStream 요소 유효성 검사

MPD의 연속 폴 사이에서:

  • EventStream 상단에서만 Event 요소를 삭제할 수 있음
  • EventStream의 하단에만 Event 요소를 추가할 수 있음

AdaptationSet 요소 유효성 검사

  • AdaptationSet에 하나 이상의 Representation 요소가 있음
  • AdaptationSetContentProtection 요소와 하위 요소는(있는 경우) MPD의 연속 폴 사이에 변경되면 안 됨

<AdaptationSet mimeType="video/mp4" startWithSAP="1"
contentType="video" par="16:9"
minWidth="640" maxWidth="640" minHeight="360" maxHeight="360"
maxFrameRate="60/2"
segmentAlignment="true">
  <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>
  <ContentComponent id="0" contentType="video" />
  <Representation …>
    …
  </Representation>
  <Representation …>
    …
  </Representation>
</AdaptationSet>

Representation 요소 유효성 검사

  • Id가 비어 있지 않아야 함
  • SegmentBase 또는 SegmentList 요소가 없어야 함

<Representation width="640" height="360" sar="1:1" frameRate="60/2"
codecs="avc1.64001e" id="V300" bandwidth="300000">
  …
</Representation>

$Time$ 속성이 있는 SegmentTemplate 유효성 검사

  • SegmentTimeline S 요소에는 미디어 URL에 사용되는 t 속성이 포함될 수 있음
    • 없는 경우, 처음 S 요소 및 차후 S 요소에 대해 해당 값은 0으로 간주되며, 이전 S 요소의 가장 이른 프레젠테이션 시간 및 인접 기간의 합, 즉 이전 S 요소의 [t + d × (r + 1)] 값으로 간주됨
    • $Time$는 단일 기간 매니페스트에서 지원되며, $Number$는 아직 지원되지 않음
    • SegmentTemplateStartNumber가 사용되지 않음
  • MPD의 연속 폴 사이에서:
    • 세그먼트가 DVR 구간 스냅샷 외부로 이동할 때 SegmentTimeline 상단에서만 삭제할 수 있음
    • SegmentTimeline 하단에만 세그먼트를 추가할 수 있음

<SegmentTemplate timescale="90000" initialization="$RepresentationID$/init.mp4"
media="$RepresentationID$/$Time$.m4s">
  <SegmentTimeline>
    <S t="0" d="270000" r="20" />
  </SegmentTimeline>
</SegmentTimeline>

시간 구성요소 유효성 검사

Google DAI는 ISO-8601 기간의 시간 구성요소 부분을 지원하며 선택적 정수 날짜 구성요소(P0Y0M[n]DT[n]H[n]M[n]S)를 지원합니다. 일 구성요소는 1일 = 24시간임을 고려해 기간으로 변환되며 시간 구성요소에 추가됩니다. 인식되는 가장 작은 단위는 나노초입니다.

유효한 시간 형식의 예
  • P0Y0M
  • P0Y0M2D
  • P2D
  • PT3H
  • PT0H3M
  • P0Y0M0DT0H0M1.000S
  • P0Y0M1DT2H4M10S
  • PT0.000000001S
잘못된 시간 형식의 예
  • P
  • PT
  • 2007-03-01
  • P5Y0M1DT2H4M1.000S
  • P0Y1.5M1DT2H4M1.000S
  • P0YiM1DT2H4M1.000S
  • P0Y0M.3DT0H0M1.000S
  • 3h
  • PT100,000H

입력 SCTE-35 마커에 대한 기대치

Google DAI는 입력 SCTE-35 마커에 대해 다음과 같은 유효성 검사를 수행합니다.

이음 포인트 유효성 검사

Google DAI는 이음 포인트가 다음 유효성 검사를 통과하는 경우에만 이를 DASH MPD Event 요소에서 전달되는 SCTE-35 마커로 인식합니다.

  • Base64로 인코딩된 SCTE-35 데이터는 이벤트의 Signal 요소에 있는 Binary 요소에 포함되어야 합니다.
    • Splice_insert가 지원됨
    • segmentation_descriptor 명령어가 있는 Time_signal이 지원됨
  • SCTE-35 마커가 있는 이벤트가 포함된 EventStream 요소는 schemeIdUriurn:scte:scte35:2014:xml+bin으로 설정되어 있어야 함
  • Signal 네임스페이스는 http://www.scte.org/schemas/35/2016으로 설정되어야 함
  • 큐 아웃의 경우 EventpresentationTime이 설정되어 있어야 함
  • 큐 인의 경우 EventpresentationTime이 설정되어 있고 기간은 설정되어 있지 않아야
  • EventStreamEvent 요소는 presentationTime에 따라 정렬된 순서로 되어 있어야 함
이음 포인트는 스트림 소스 간에 전환할 수 있는 기회를 제공합니다. 이음 포인트는 광고 시점으로 전환할 수 있는 기회인 큐 아웃, 또는 광고 시점으로부터 다시 반환할 수 있는 기회인 큐 인일 수 있습니다.

이 컨텍스트에서 이음 포인트는 Period를 개별 콘텐츠로 분할하고 이음 포인트의 프레젠테이션 시간이나 재생 시간을 기준으로 Period 요소를 분할하는 데 사용됩니다. 이러한 이음 포인트는 SCTE-35 마커가 있는 이벤트 요소에 의해 제공됩니다.

splice_insert 유효성 검사

  • 큐 아웃은 out_of_network_indicator1로 설정된 splice_insert
  • 큐 인은 out_of_network_indicator0으로 설정된 splice_insert
  • 큐 인은 큐 아웃이 포함된 Eventsplice_insert이고 duration에 0이 아닌 값이 설정된 경우에만 선택사항임
    • Google DAI가 암시적인 splice_insert 큐 인을 큐 아웃의 presentationTime + duration의 프레젠테이션 시간으로 해석함
    • 명시적인 큐 인 이벤트는 그 기간이 끝나기 전에 큐 아웃을 종료할 수 있습니다. 이렇게 하면 조기 반환을 트리거할 수 있습니다.

time_signal 유효성 검사

  • 큐 아웃은 다음과 일치하는 segment_type_id를 가진 segmentation_descriptor가 포함된 time_signal임:
    • 34 - 광고 시점 시작
    • 48 - 제공업체 광고 시작
    • 52 - 제공업체 게재위치 기회 시작
  • 큐 인은 다음과 일치하는 segment_type_id를 가진 segmentation_descriptor가 포함된 time_signal임:
    • 35 - 광고 시점 종료
    • 49 - 제공업체 광고 종료
    • 53 - 제공업체 게재위치 기회 종료
  • 다른 모든 segmentation_type_ids는 지원되지 않음
  • Time_signal은 명시적인 큐 인이 있는 광고 시점으로부터의 자동 반환을 지원하지 않음

프레젠테이션 시간 유효성 검사

Google DAI는 세그먼트 분할을 지원하지 않으므로 이음 포인트의 프레젠테이션 시간과 가장 가까운 세그먼트 경계 사이의 거리에 대해 100ms의 허용오차만 허용합니다.

  • 이음 포인트의 프레젠테이션 시간은 EventStreamtimescale에 따라 Period의 start에 맞춰 조정된 EventpresentationTime을 추가함으로써 MPDavailabilityStartTime을 기준으로 합니다.

    암시적인 큐 인의 프레젠테이션 시간은 연결된 큐 아웃의 프레젠테이션 시간에 기간을 추가하여 계산할 수 있습니다. 이음 포인트의 기간은 EventStreamEvent / timescale 의 duration을 사용하여 계산됩니다.

    이 컨텍스트에서 SCTE-35 신호에 제공된 PTS 시간 및 기간은 프레젠테이션 시간 또는 기간을 계산하는 데 사용되지 않습니다.

  • 큐 아웃은 다른 큐 아웃 또는 큐 인과 동일한 Segment 경계에 있으면 안 됩니다.
  • 동일한 Segment 경계에 하나 이상의 큐 인이 있을 수 있습니다(예: 조기 광고 시점이 광고 시점의 실제 종료와 동시에 트리거됨). 중복 큐 인은 사실상 무시됩니다.

기간, 큐 아웃 및 큐 인 메시지 이벤트

단일 기간 매니페스트의 다중 기간 프레젠테이션을 만드는 경우 큐 아웃 이벤트의 시작 및 종료 시점(또는 큐 아웃 및 큐 인 이벤트의 시작 시점)에 모두 새 Periods가 삽입됩니다.

  • 첫 번째 새 Period의 시작은 큐 아웃의 프레젠테이션 시간으로 표시되고, 두 번째 새 Period의 시작은 큐-아웃의 presentationTimeduration의 합계 또는 큐 인의 presentationTime으로 표시됩니다(제공되는 경우).
    • duration이 있는 큐 아웃에 대해 큐 인이 제공되는 경우 Period는 이전의 이음 포인트를 사용하여 분할됩니다.
  • Google DAI가 SCTE-35 메시지의 splice_time, break_duration, auto_return, splice_immediate_flag 필드를 무시합니다.

전체 광고 시간 동안 큐 아웃 메시지를 나타내는 Event가 있어야 합니다.

하지만 EventStream의 첫 번째 Event가 항상 큐 아웃 메시지라는 의미는 아닙니다. 입력 DVR 구간이 충분히 긴 경우 해당 구간의 이전 광고 시점에 속하는 이벤트가 있을 수 있습니다.

큐 아웃 메시지가 다음 큐 인 메시지에 의해 종료됩니다.

  • SCTE-35 이음 ID(splice_event_id 또는 segmentation_event_id)와 이벤트의 id 속성이 무시됨
  • auto_return이 설정되지 않은 경우 splice_insert 큐 아웃 메시지는 splice_insert 큐 인 메시지에 의해서만 종료될 것으로 예상됨
  • time_signal 큐 아웃 메시지는 동일한 segmentation_type_idtime_signal 큐 인 메시지에 의해서만 종료될 것으로 예상됨
기간이 끝나기 직전에 다른 큐 아웃 메시지 바로 다음에 오는 큐 아웃 메시지는 초기 광고 시점을 종료하고 새 광고 시점을 시작합니다(즉, 새로운 Period가 생성됨).

<EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="600" presentationTimeOffset="991724821200">

  <Event presentationTime="992568282204" duration="18073" id="1615447966">

    <Signal xmlns="http://www.scte.org/schemas/35/2016">

      <Binary>/DAbAAAAAAAAAP/wCgUAAAAAf98AAAAAAAAHeq0Q</Binary>

    </Signal>

  </Event>

  <Event presentationTime="992568300277" id="1085695472">

    <Signal xmlns="http://www.scte.org/schemas/35/2016">

      <Binary>/DAbAAAAAAAAAP/wCgUAAAAAf18AAAAAAAAqqkN1</Binary>

    </Signal>

  </Event>

</EventStream>

지원되는 플랫폼, 패키지 프로그램 및 플레이어

플랫폼

기기/브라우저

버전

DRM

Chrome 브라우저

66 이상 버전

Widevine

Firefox 브라우저

60 이상 버전

Widevine

Microsoft Edge

18

PlayReady

Android

4.4 이상 버전

Widevine

Chromecast

Gen2, Ultra(CAF API)

Widevine

Roku

3, 4(펌웨어 8.1)

PlayReady

 

패키지 프로그램

Shaka

2.1.0

여러 기간 지원

Bitmovin

1.47.3

여러 기간 지원

통합 스트리밍

1.11.17 단일 기간 지원
 

플레이어

Shaka

2.4.2

테스트에 권장됨

Bitmovin

v7

 

Exo-Player

2.8.2

 

Dash.js

2.0

 

부록

단일 기간 매니페스트를 사용하는 경우 이 예는 DAI가 단일 기간 매니페스트를 다중 기간 매니페스트로 변환하는 방법을 보여줍니다.

단일 기간 매니페스트 입력의 예

<?xml version="1.0" encoding="UTF-8"?>

<MPD availabilityStartTime="2017-01-01T10:00:00Z" id="id1" maxSegmentDuration="PT2S" minBufferTime="PT2S" minimumUpdatePeriod="PT25S" profiles="urn:mpeg:dash:profile:isoff-live:2011" publishTime="2017-01-01T10:00:00Z" timeShiftBufferDepth="PT5M" type="dynamic" ns1:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:ns1="http://www.w3.org/2001/XMLSchema-instance">

  <BaseURL>http://example.com/dash/</BaseURL>

  <Period id="1" start="PT0S">

    <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2014:xml+bin">

      <Event duration="2700000" presentationTime="270000" id="1">

        <Signal xmlns="http://www.scte.org/schemas/35/2016">

          <Binary>/DAlAAAAAAAAAP/wFAUAAA+if+/+INAJ0P4AKTLgAAAAAAAA9UTkTA==</Binary>

        </Signal>

      </Event>

      <Event presentationTime="2970000" id="2">

        <Signal xmlns="http://www.scte.org/schemas/35/2016">

          <Binary>/DAgAAAAAAAAAP/wDwUAAA+if0/+IPk8sAAAAAAAAH3XbUE=</Binary>

        </Signal>

      </Event>

    </EventStream>

    <AdaptationSet contentType="audio" lang="eng" mimeType="audio/mp4" segmentAlignment="true" startWithSAP="1">

      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main" />

      <SegmentTemplate timescale="44100" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/$Number$.m4s">

        <SegmentTimeline>

          <S t="0" d="132300" r="20" />

        </SegmentTimeline>

      </SegmentTemplate>

      <Representation audioSamplingRate="48000" bandwidth="48000" codecs="mp4a.40.2" id="A48">

        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2" />

      </Representation>

    </AdaptationSet>

    <AdaptationSet contentType="video" maxFrameRate="60/2" maxHeight="360" maxWidth="640" mimeType="video/mp4" minHeight="360" minWidth="640" par="16:9" segmentAlignment="true" startWithSAP="1">

      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main" />

      <SegmentTemplate timescale="90000" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/$Number$.m4s">

        <SegmentTimeline>

          <S t="0" d="270000" r="20" />

        </SegmentTimeline>

      </SegmentTemplate>

      <Representation bandwidth="300000" codecs="avc1.64001e" frameRate="60/2" height="360" id="V300" sar="1:1" width="640" />

    </AdaptationSet>

  </Period>

</MPD>

다중 기간 매니페스트 출력의 예

<?xml version="1.0" encoding="UTF-8"?>

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:XMLSchema-instance="http://www.w3.org/2001/XMLSchema-instance" XMLSchema-instance:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" id="id1" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="dynamic" availabilityStartTime="2017-01-01T10:00:00Z" publishTime="2017-01-01T10:00:00Z" minimumUpdatePeriod="PT25S" minBufferTime="PT2S" timeShiftBufferDepth="PT5M0S" maxSegmentDuration="PT2S">

  <BaseURL>http://example.com/dash/</BaseURL>

  <Period id="0s" start="PT0S">

    <AdaptationSet mimeType="audio/mp4" startWithSAP="1" lang="eng" contentType="audio" segmentAlignment="true">

      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>

      <SegmentTemplate timescale="44100" presentationTimeOffset="0" media="$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$/init.mp4">

        <SegmentTimeline>

          <S d="132300"></S>

        </SegmentTimeline>

      </SegmentTemplate>

      <Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="A48" bandwidth="48000">

        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>

      </Representation>

    </AdaptationSet>

    <AdaptationSet mimeType="video/mp4" startWithSAP="1" contentType="video" par="16:9" minWidth="640" maxWidth="640" minHeight="360" maxHeight="360" maxFrameRate="60/2" segmentAlignment="true">

      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>

      <SegmentTemplate timescale="90000" presentationTimeOffset="0" media="$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$/init.mp4">

        <SegmentTimeline>

          <S d="270000"></S>

        </SegmentTimeline>

      </SegmentTemplate>

      <Representation width="640" height="360" sar="1:1" frameRate="60/2" codecs="avc1.64001e" id="V300" bandwidth="300000"></Representation>

    </AdaptationSet>

  </Period>

  <Period id="3s" start="PT3S">

    <EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="90000">

      <Event duration="2700000" id="1">

        <Signal xmlns="http://www.scte.org/schemas/35/2016">

          <Binary>/DAlAAAAAAAAAP/wFAUAAA+if+/+INAJ0P4AKTLgAAAAAAAA9UTkTA==</Binary>

        </Signal>

      </Event>

    </EventStream>

    <AdaptationSet mimeType="audio/mp4" startWithSAP="1" lang="eng" contentType="audio" segmentAlignment="true">

      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>

      <SegmentTemplate timescale="44100" presentationTimeOffset="132300" media="$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$/init.mp4">

        <SegmentTimeline>

          <S t="132300" d="132300" r="9"></S>

        </SegmentTimeline>

      </SegmentTemplate>

      <Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="A48" bandwidth="48000">

        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>

      </Representation>

    </AdaptationSet>

    <AdaptationSet mimeType="video/mp4" startWithSAP="1" contentType="video" par="16:9" minWidth="640" maxWidth="640" minHeight="360" maxHeight="360" maxFrameRate="60/2" segmentAlignment="true">

      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>

      <SegmentTemplate timescale="90000" presentationTimeOffset="270000" media="$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$/init.mp4">

        <SegmentTimeline>

          <S t="270000" d="270000" r="9"></S>

        </SegmentTimeline>

      </SegmentTemplate>

      <Representation width="640" height="360" sar="1:1" frameRate="60/2" codecs="avc1.64001e" id="V300" bandwidth="300000"></Representation>

    </AdaptationSet>

  </Period>

  <Period id="33s" start="PT33S">

    <EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="90000">

      <Event id="2">

        <Signal xmlns="http://www.scte.org/schemas/35/2016">

          <Binary>/DAgAAAAAAAAAP/wDwUAAA+if0/+IPk8sAAAAAAAAH3XbUE=</Binary>

        </Signal>

      </Event>

    </EventStream>

    <AdaptationSet mimeType="audio/mp4" startWithSAP="1" lang="eng" contentType="audio" segmentAlignment="true">

      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>

      <SegmentTemplate timescale="44100" presentationTimeOffset="1455300" media="$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$/init.mp4">

        <SegmentTimeline>

          <S t="1455300" d="132300" r="9"></S>

        </SegmentTimeline>

      </SegmentTemplate>

      <Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="A48" bandwidth="48000">

        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>

      </Representation>

    </AdaptationSet>

    <AdaptationSet mimeType="video/mp4" startWithSAP="1" contentType="video" par="16:9" minWidth="640" maxWidth="640" minHeight="360" maxHeight="360" maxFrameRate="60/2" segmentAlignment="true">

      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>

      <SegmentTemplate timescale="90000" presentationTimeOffset="2970000" media="$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$/init.mp4">

        <SegmentTimeline>

          <S t="2970000" d="270000" r="9"></S>

        </SegmentTimeline>

      </SegmentTemplate>

      <Representation width="640" height="360" sar="1:1" frameRate="60/2" codecs="avc1.64001e" id="V300" bandwidth="300000"></Representation>

    </AdaptationSet>

  </Period>

</MPD>

DAI 문제 해결 또는 중단과 관련된 모든 문제는 게시자 지원팀에 문의하세요.

도움이 되었나요?

어떻게 하면 개선할 수 있을까요?
true
동적 광고 삽입 시작하기

실시간, 선형, 주문형 동영상 콘텐츠에서 원활한 광고 경험을 제공하기 위한 가이드입니다.
가이드 보기

검색
검색어 지우기
검색 닫기
기본 메뉴
15462132461674734040
true
도움말 센터 검색
true
true
true
true
true
148
false
false