이 가이드에서는 Video Stitcher API에서 지원하는 광고 마커를 설명합니다. Video Stitcher API는 라이브 스트림의 소스 HLS/DASH 매니페스트에서 광고 마커를 기준으로 광고 시점 경계를 식별하고 라이브 스트림의 모든 세션에 대해 광고 시점 내에서 광고 병합을 실행합니다.
시작하기 전에
Video Stitcher API의 입문 개념과 용어를 익혀야 합니다. 자세한 내용은 기술 개요를 참조하세요.
SCTE-35 사양 케이블 디지털 프로그램 삽입 큐 메시지를 참고하세요.
SCTE-35 명령어
라이브 스트림 광고 마커는 표준 SCTE-35 신호로 표시됩니다. Video Stitcher API는 SCTE-35 명령어 목록 내에서 다음 두 가지 명령어를 지원합니다.
splice_insert
time_signal
time_signal
를 사용하면 첫 번째 세분화 고유 프로그램 식별자 (UPID)에서 연결된 광고 시점에 임의의 메타데이터를 추가로 제공할 수 있습니다.
Video Stitcher API는 segmentation_upid_type
가 MPU()
를 나타내는 0x0C
이어야 한다고 예상합니다. MPU()
의 private_data
는 base64로 인코딩된 JSON 문자열이어야 하며, 여기서 특정 JSON 키는 다음과 같은 특정 목적으로 예약됩니다.
%%AD_TAG_ID%%
: 광고 시점에 사용할 광고 태그를 지정합니다. 광고 태그 ID는 라이브 세션의adTagMacros
에 있는 키 중 하나여야 합니다.%%SLATE_ID%%
: 광고 시점에 사용할 슬레이트를 지정합니다. 슬레이트 ID는 동일한 Google Cloud 프로젝트에서 이미 생성된 슬레이트의 ID와 일치해야 합니다.
UPID 페이로드의 다른 모든 키-값 쌍은 광고 태그 매크로 대체에 사용됩니다.
예를 들어 광고 태그 URI가 https://example.com?key=[foo]
이고 private_data
가 {"foo":"bar"}
의 Base64 표현인 eyJmb28iOiJiYXIifQ==
인 경우 Video Stitcher API는 [foo]
를 bar
로 대체하고 https://example.com?key=bar
에 광고 태그를 요청합니다.
Google Ad Manager 통합
Google Ad Manager 통합 워크플로의 경우 SCTE35 메시지에 광고 태그에서 대체할 수 있는 특정 값이 포함될 수 있습니다. 지원되는 매크로 목록을 참고하세요.
라이브 구성에 등록된 adTagUri
에 선택한 매크로가 포함되어 있는지 확인합니다.
예를 들어 SCTE35 메시지가 %%SPLICE_INSERT_EVENT_ID%%
값을 전달하는 경우 다음 예와 같이 adTagUri
에 매크로가 있는지 확인합니다.
AD_TAG_URI¯o=%%SPLICE_INSERT_EVENT_ID%%
Video Stitcher API가 광고 메타데이터를 요청하고 splice_insert
SCTE35 메시지의 splice_insert_event_id
가 123
로 설정된 경우 다음 광고 태그가 사용됩니다.
AD_TAG_URI¯o=123
HLS 광고 마커
EXT-X-DATERANGE
#EXT-X-DATERANGE
사용은 HTTP 라이브 스트리밍 사양에 지정되어 있습니다.
SCTE35-OUT
속성이 있는#EXT-X-DATERANGE
태그는 광고 시점의 즉시 시작 스플라이스 지점을 나타냅니다.SCTE35-IN
속성이 있는#EXT-X-DATERANGE
태그는 광고 시점의 즉각적인 종료 스플라이스 지점을 나타냅니다.SCTE35-OUT
및SCTE35-IN
의 값은 16진수로 인코딩되어야 합니다.
예:
#EXT-X-DATERANGE:ID="111",START-DATE=START_DATE,SCTE35-OUT=0xFC302000000000000000FFF00F050000006F7FFF7E002932E0000000000000235EE5EF
...
#EXT-X-DATERANGE:ID="111",START-DATE=START_DATE,END-DATE=END_DATE,SCTE35-IN=0xFC302000000000000000FFF00F050000006F7F7F7E002932E0000000000000D56C4036
EXT-X-CUE-OUT 및 EXT-X-CUE-IN
#EXT-X-CUE-OUT
태그는 광고 시점의 즉시 시작을 나타내고 #EXT-X-CUE-IN
태그는 광고 시점의 즉시 종료를 나타냅니다.
#EXT-OATCLS-SCTE35
태그는 SCTE-35 메시지에 사용할 수 있으며 값은 base64로 인코딩되어야 합니다.
예시 (SCTE-35 메시지 없음):
#EXT-X-CUE-OUT:DURATION=30
...
#EXT-X-CUE-IN
예시 (SCTE-35 메시지 포함):
#EXT-OATCLS-SCTE35:/DBBAAAAAAAAAP/wBQb+AAaXgAArAilDVUVJAAAAb3//AAApMuAMFXslJUFEX1RBR19JRCUlOnRhZy0xfTQAALOJefk=
#EXT-X-CUE-OUT:30
...
#EXT-X-CUE-IN
EXT-X-CUE-OUT
태그의 길이가 지정되면 SCTE-35 메시지의 광고 시점 길이와 충돌하더라도 이 값이 우선 적용됩니다. EXT-X-CUE-OUT
태그의 길이가 지정되지 않았고 연결된 SCTE-35 메시지에 길이가 지정된 경우 SCTE-35 메시지의 값이 사용됩니다.
DASH 광고 마커
현재 Video Stitcher API는 다중 기간 DASH 매니페스트만 지원합니다. 다중 기간 DASH 매니페스트에서 광고 시점은 큐 아웃 마커가 포함된 이벤트 스트림이 있는 Period
로 표시되어야 합니다. 광고 시점 기간의 끝이 광고 시점의 끝을 나타내므로 큐 인 마커는 필요하지 않습니다.
광고 시점 기간의 SCTE-35 이벤트 스트림에 여러 개의 큐 아웃 이벤트가 표시되는 경우 Video Stitcher API는 첫 번째 이벤트만 사용합니다. 광고 시점 이벤트의 표시 시간은 광고 시점 시작 시간이 기간의 시작 시간과 동일하므로 무시됩니다.
다음은 SCTE-35 이벤트 스트림에서 지원되는 schemeIdUri
목록입니다.
urn:scte:scte35:2014:xml+bin
urn:scte:scte35:2013:xml
urn:scte:scte35:2014:xml+bin
schemeIdUri
가 urn:scte:scte35:2014:xml+bin
로 설정된 이벤트 스트림에는 base64로 인코딩된 바이너리로 SCTE-35 메시지를 나타내는 이벤트가 포함됩니다.
예:
<Period start="PT444334H55M0.010S" id="break-1">
<EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="90000">
<Event presentationTime="0" duration="5400000" id="1">
<Signal xmlns="urn:scte:scte35:2014:xml+bin">
<Binary xmlns="urn:scte:scte35:2014:xml+bin">/DBTAAAAAAAAAP/wBQb+AAaXgAA9AjtDVUVJAAAAAH//AABSZcAMJ3siJSVBRF9UQUdfSUQlJSI6InRhZy0xIiwiZGFzaCI6InRydWUifTQAABxkspA=</Binary>
</Signal>
</Event>
</EventStream>
...
</Period>
urn:scte:scte35:2013:xml
schemeIdUri
이 urn:scte:scte35:2013:xml
로 설정된 이벤트 스트림에는 SCTE-35 메시지를 명확한 XML로 나타내는 이벤트가 포함됩니다.
예:
<Period start="PT444334H55M0.010S" id="break-1">
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="5400000">
<scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="140429" tier="4095">
<scte35:SpliceInsert spliceEventId="1" spliceEventCancelIndicator="false" outOfNetworkIndicator="true" spliceImmediateFlag="false" uniqueProgramId="1" availNum="1" availsExpected="1">
<scte35:Program><scte35:SpliceTime ptsTime="5672624400"/></scte35:Program>
<scte35:BreakDuration autoReturn="true" duration="5400000"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
...
</Period>
라이브 스트림의 광고 시점 조기 알림
실시간 병합의 경우 동영상 광고 삽입 도구 API가 라이브 스트림의 매니페스트에서 큐 아웃 광고 마커를 수신하면 광고 태그가 동기식으로 처리됩니다. 이 동기식 처리는 다수의 광고 태그 요청을 트리거하며 스트림에 많은 항목이 포함된 경우 라이브 세션의 재생 요청이 오래 지연됩니다.
EABN (Early Ad Break Notification)을 사용하면 Video Stitcher API가 예정된 광고 시점을 API에 알림으로 전송하여 광고를 준비할 시간을 더 확보할 수 있습니다.
HLS 광고 시점 조기 알림
API가 광고를 미리 준비할 수 있도록 예정된 광고 시점을 API에 알리려면 라이브 스트림의 HLS 재생목록이 다음을 충족해야 합니다.
#EXT-X-DATERANGE
또는EXT-X-CUE-OUT
를 광고 마커로 사용- 라이브 스트림의 소스 매니페스트에서 큐 아웃 광고 마커 반복
#EXT-X-DATERANGE
소스 인코더가 예정된 광고 시점을 예약하면 소스 매니페스트에 #EXT-X-DATERANGE
큐 아웃 마커를 삽입할 수 있습니다. 마커의 X-TYPE
속성은 광고 마커의 유형을 나타냅니다. 조기 광고 시점 알림의 경우 X-TYPE
의 값은 EABN
여야 합니다. 마커의 START-TIME
속성은 실제 또는 계획된 광고 시점 시작 시간을 나타냅니다.
광고 시점의 길이를 나타내려면 마커의 DURATION
속성이 필요합니다. 이 마커를 EABN 큐 아웃이라고 합니다.
광고 시점이 실제로 시작되면 소스 인코더는 소스 매니페스트에 #EXT-X-DATERANGE
큐 아웃 마커를 삽입해야 합니다. 마커의 ID
속성은 상응하는 EABN 큐 아웃과 동일해야 합니다. 마커의 START-TIME
는 이 마커가 삽입된 세그먼트의 미디어 시간과 동일해야 합니다. 이 마커를 즉시 큐 아웃이라고 합니다.
다음 샘플 매니페스트에는 EABN 큐 아웃 1개, 즉시 큐 아웃 1개, 큐 인 1개가 포함되어 있습니다.
#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:7
#EXT-X-PROGRAM-DATE-TIME:2020-11-08T21:11:20.976Z
#EXT-X-MEDIA-SEQUENCE:239959
#EXT-X-DISCONTINUITY-SEQUENCE:2
#EXT-X-DATERANGE:ID="2415919105",X-TYPE="EABN",START-DATE="2020-11-08T21:11:28.976Z",DURATION=29.988,SCTE35-OUT=0xFC303...
#EXTINF:4.000,
1028/segment_239959.ts
#EXTINF:4.000,
1028/segment_239960.ts
#EXT-X-DATERANGE:ID="2415919105",START-DATE="2020-11-08T21:11:28.976Z",DURATION=29.988,SCTE35-OUT=0xFC303...
#EXTINF:4.000,
1028/segment_239961.ts
#EXTINF:4.000,
1028/segment_239962.ts
#EXTINF:4.000,
1028/segment_239963.ts
...
#EXT-X-DATERANGE:ID="2415919105",END-DATE="2020-11-08T21:11:48.976Z",SCTE35-IN=0xFC303...
#EXTINF:4.000,
1028/segment_239968.ts
#EXT-X-CUE-OUT
#EXT-X-CUE-OUT
을 광고 마커로 사용- 라이브 스트림의 소스 매니페스트에서 큐 아웃 광고 마커 반복
소스 인코더가 예정된 광고 시점을 예약할 때 소스 매니페스트에 #EXT-X-CUE-OUT
큐 아웃 마커를 삽입할 수도 있습니다. 마커의 X-TYPE
속성은 광고 마커의 유형을 나타냅니다. 조기 광고 시점 알림의 경우 X-TYPE
의 값은 EABN
여야 합니다. 마커의 DURATION
속성은 광고 시점의 길이를 나타내야 합니다.
이 마커를 EABN 큐 아웃이라고 합니다.
광고 시점이 실제로 시작되면 소스 인코더는 소스 매니페스트에 #EXT-X-CUE-OUT
큐 아웃 마커를 삽입해야 합니다. 마커의 ID
속성은 상응하는 EABN 큐 아웃과 동일해야 합니다. 이 마커를 즉시 큐 아웃이라고 합니다.
다음 샘플 매니페스트에는 EABN 큐 아웃 1개, 즉시 큐 아웃 1개, 큐 인 1개가 포함되어 있습니다.
#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:7
#EXT-X-PROGRAM-DATE-TIME:2020-11-08T21:11:20.976Z
#EXT-X-MEDIA-SEQUENCE:239959
#EXT-X-DISCONTINUITY-SEQUENCE:2
#EXT-OATCLS-SCTE35:0xFC303...
#EXT-X-CUE-OUT:ID="2415919105",X-TYPE="EABN",DURATION=29.988
#EXTINF:4.000,
1028/segment_239959.ts
#EXTINF:4.000,
1028/segment_239960.ts
#EXT-OATCLS-SCTE35:0xFC303...
#EXT-X-CUE-OUT:ID="2415919105",DURATION=29.988
#EXTINF:4.000,
1028/segment_239961.ts
#EXTINF:4.000,
1028/segment_239962.ts
#EXTINF:4.000,
1028/segment_239963.ts
...
#EXT-X-CUE-IN:ID="2415919105"
#EXTINF:4.000,
1028/segment_239968.ts
DASH 조기 광고 시점 알림
API가 광고를 미리 준비할 수 있도록 예정된 광고 시점을 API에 알리려면 DASH 라이브 스트림 매니페스트가 Main Period
및 Ad Break Period
에서 광고 마커 이벤트를 반복해야 합니다.
Main Period
에 처음 표시되면 API에 예정된 광고 시점을 알리고 Ad Break Period
에 두 번째로 표시되면 광고 시점이 즉시 시작됨을 나타냅니다.
다음은 샘플 매니페스트입니다.
<MPD>
<Period id="1">
<!-- Main Period -->
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="5400000" presentationTime="53460000" id="1">
<scte35:SpliceInfoSection>
<scte35:SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">
<scte35:BreakDuration autoReturn="true" duration="5400000"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
...
</Period>
<Period start="PT9M54S" id="2">
<!-- Ad Break Period -->
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="5400000" id="1">
<scte35:SpliceInfoSection>
<scte35:SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">
<scte35:BreakDuration autoReturn="true" duration="5400000"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
...
</Period>
<Period start="PT10M54S" id="3">
<!-- Main Period -->
...
</Period>
</MPD>
다음 단계
특정 Video Stitcher API 태스크를 완료하는 방법 알아보기