서버 측 광고 삽입(SSAI)
Amazon IVS 서버 측 광고 삽입(SSAI)을 사용하면 비디오 광고로 스트림을 수익화할 수 있습니다. IVS SSAI는 AWS Elemental MediaTailor와 통합되어 광고 결정, 대상 지정, 개인화 등의 기능에 액세스할 수 있도록 지원합니다. IVS는 라이브 스트림에 광고 브레이크를 삽입하는 API 작업을 제공하여 생성자나 운영자가 광고 실행 시점을 제어할 수 있도록 합니다. IVS는 비디오 스트림에 광고를 직접 스티칭합니다. 이를 통해 끊김 없는 시청 환경이 제공되고 복잡한 클라이언트 측 로직을 피할 수 있습니다. SSAI와 관련된 비용에 대한 자세한 내용은 IVS 비용을 참조하세요.
SSAI 시작하기
이 자습서는 Amazon IVS 서버 측 광고 삽입(SSAI)을 시작하는 데 도움이 됩니다. 이 자습서를 마치면 서버 측 광고 삽입을 위해 IVS 채널이 구성되며 라이브 스트림에 광고 브레이크를 삽입하는 방법을 알 수 있습니다. IVS SSAI는 AWS Elemental MediaTailor와 통합되어 광고 결정을 처리합니다.
1단계: IVS 채널 생성
IVS 채널을 생성하세요. 다음 단계에서 MediaTailor를 구성하려면 채널의 재생 URL이 필요합니다. 채널 생성 후 다음 값을 저장합니다.
-
채널 ARN - 나중에 채널을 업데이트할 때 필요합니다.
-
재생 URL 접두사 - 재생 URL에서 URL 접두사(/api/ 앞의 모든 부분)를 추출합니다. 예를 들어 재생 URL이 다음과 같은 경우
-
https://c17b3fb37fc9.us-west-2.playback.live-video.net/api/video/v1/us-west-2.123456789012.channel.ABcdef12ghIJ.m3u8
접두사:
-
https://c17b3fb37fc9.us-west-2.playback.live-video.net/
-
-
컨테이너 형식 - MPEG 전송 스트림(TS)으로 설정해야 합니다.
2단계: MediaTailor 재생 구성 생성
AWS Elemental MediaTailor 재생 구성을 생성합니다. 이 구성은 IVS에 광고 결정 서버를 연결하고 스트림에 대한 광고 삽입을 활성화합니다.
재생 구성에는 계정과 리전의 모든 IVS 채널에 공통되는 재생 URL 접두사가 사용됩니다. 즉, 여러 IVS 채널에 단일 MediaTailor 재생 구성을 사용할 수 있습니다.
지침은 AWS Elemental MediaTailor 사용 설명서의 MediaTailor 재생 구성 생성을 참조하세요. 구성을 생성할 때 IVS SSAI에 다음 설정이 필요합니다.
| 설정 | 위치 | 값 |
|---|---|---|
| 광고 결정 서버 URL | 필수 설정 | 광고 결정 서버의 URL |
| 콘텐츠 소스 | 필수 설정 | IVS 재생 URL의 URL 접두사. 예: https://c17b3fb37fc9.us-west-2.playback.live-video.net/ |
| 삽입 모드 | 개인화 세부정보 | PLAYER_SELECT |
중요
전체 URL이 아닌 채널 재생 URL의 접두사(live-video.net/으로 끝나는 부분)만 사용하여 콘텐츠 소스를 지정합니다. 형식이 올바르지 않으면 다음 단계에서 광고 구성 생성이 검증 오류와 함께 실패합니다.
3단계: IVS 광고 구성 생성
광고 구성은 MediaTailor 재생 구성에 IVS 리소스를 연결합니다. 모든 IVS 홈 리전에서 생성된 MediaTailor 재생 구성을 다른 IVS 홈 리전의 광고 구성과 함께 사용할 수 있습니다. IVS 홈 리전에는 us-west-2, us-east-1, eu-west-1, eu-central-1, ap-northeast-1, ap-northeast-2, ap-south-1이 포함됩니다.
여러 채널에서 단일 광고 구성을 재사용할 수 있습니다.
광고 구성을 생성하려면 다음을 수행하세요(AWS CLI).
aws ivs create-ad-configuration --name "my-ad-config" --media-tailor-playback-configurations playbackConfigurationArn="arn:aws:mediatailor:us-west-2:123456789012:playbackConfiguration/my-mediatailor-config"
응답에서 arn 값을 저장합니다. 이 정보는 다음 단계에서 필요합니다.
4단계: 광고 구성으로 채널 업데이트
IVS 채널을 업데이트하여 생성한 광고 구성과 연결합니다. 채널을 업데이트하려면 다음을 수행하세요(AWS CLI).
aws ivs update-channel --arn "arn:aws:ivs:us-west-2:123456789012:channel/ABcdef12ghIJ" --ad-configuration-arn "arn:aws:ivs:us-west-2:123456789012:ad-configuration/ABcdef12ghIJ"
5단계: 스트리밍 시작
채널에서 수집 엔드포인트 및 스트림 키를 사용하여 스트리밍을 시작합니다.
6단계: 광고 브레이크 삽입
스트림이 라이브 상태인 동안 InsertAdBreak 작업을 직접적으로 호출하여 광고 브레이크를 삽입합니다. 광고 브레이크의 채널 ARN과 기간(초)을 지정합니다.
광고 브레이크를 삽입하려면 다음을 수행하세요(AWS CLI).
aws ivs insert-ad-break --channel-arn "arn:aws:ivs:us-west-2:123456789012:channel/ABcdef12ghIJ" --duration-seconds 30
InsertAdBreak가 성공적으로 반환되면 광고 브레이크가 시청자 재생 목록에 삽입될 예상 시간을 나타내는 타임스탬프가 포함된 EventBridge 이벤트(IVS 광고 중단 상태 변경)를 수신할 수 있습니다. 방송사가 광고가 콘텐츠 교체를 시작할 것으로 합리적으로 예상할 수 있는 시간입니다. 광고를 채울 수 없는 경우(예: 광고 결정 서버가 광고를 반환하지 않거나 MediaTailor에서 광고를 트랜스코딩해야 하는 경우) 소스 콘텐츠가 대신 표시됩니다.
중요
기존 광고 브레이크가 아직 진행 중인 동안에는 추가 광고 브레이크를 삽입할 수 없습니다. 이후에 InsertAdBreak를 직접적으로 호출하면 현재 광고 브레이크가 끝날 때까지 409 ConflictException이 반환합니다.
EventBridge 통합
SSAI를 사용하면 다음 필드와 함께 IVS 광고 중단 상태 변경 이벤트(광고 브레이크 삽입됨)가 추가됩니다.
| 필드 | 설명 |
|---|---|
event_name |
내보내고 있는 이벤트의 이름입니다. |
channel_name |
InsertAdBreak API 요청에 의해 트리거되는 채널의 이름입니다. |
stream_id |
InsertAdBreak API 요청에 의해 트리거된 채널에 대한 라이브 스트림의 ID입니다. |
ad_break_id |
광고 브레이크와 연결된 고유 ID이며 초기 InsertAdBreak 요청의 응답에 포함된 광고 중단 ID에 해당합니다. |
duration_seconds |
InsertAdBreak 요청에 포함되고 고객이 지정한 값(초)입니다. |
target_start_time |
재생 목록에 광고 브레이크 삽입 시점을 나타내는 라이브 스트림의 예상 타임스탬프입니다. |
7단계: Player SDK 이벤트
플랫폼 전체에서 Player SDK는 광고 브레이크 재생 시 이벤트를 표시하여 광고 시작, 진행 및 중지 시점을 알려줍니다. 다음은 사용 가능한 이벤트와 타이밍의 개요입니다.
| Event | 페이로드 | 트리거 |
|---|---|---|
| 광고 브레이크 시작됨 | AdBreak | 광고 브레이크의 첫 번째 세그먼트 |
| 광고 크리에이티브 시작됨 | AdCreative | 각 크리에이티브의 첫 번째 세그먼트 |
| 광고 시간 업데이트 | AdTimeUpdate | 광고 재생 중 1초마다 |
| 광고 크리에이티브 끝남 | AdCreative | 각 크리에이티브의 마지막 세그먼트 |
| 광고 브레이크 끝남 | AdBreak | 광고 시간 후 첫 번째 콘텐츠 세그먼트 |
각 플랫폼의 특정 이벤트 및 페이로드 이름은 Player SDK 설명서를 참조하세요.
-
웹: PlayerEventType 열거(https://aws.github.io/amazon-ivs-player-docs/latest/web/
) 참조 -
Android: Player.Listener 클래스(https://aws.github.io/amazon-ivs-player-docs/latest/android/
) 참조 -
IOS: IVSPlayerDelegate 프로토콜(https://aws.github.io/amazon-ivs-player-docs/latest/ios/
) 참조
다음은 웹 SDK에서 광고 이벤트를 사용하여 광고 브레이크 동안 간단한 광고 카운트다운 UI 구성 요소를 생성하는 예입니다.
// State let podLength = 0; let podIndex = 0; let remainingSeconds = 0; // Fired every second during the ad break player.addEventListener(PlayerEventType.AD_TIME_UPDATE, (payload) => { podLength = payload.podLength; podIndex = payload.podIndex; remainingSeconds = Math.round(payload.creativeDuration - payload.creativeElapsed); const text = `Ad ${podIndex} of ${podLength} · ${remainingSeconds}s remaining` // Ad 1 of 2 · 20s remaining console.log('Ad countdown text', text); UpdateAdOverlay(text); }); // Fired when the ad break ends player.addEventListener(PlayerEventType.AD_BREAK_ENDED, (payload) => { hideAdOverlay(); });
레코딩된 콘텐츠의 광고 마커
Amazon S3에 자동 레코딩을 사용하여 라이브 스트림이 레코딩되면 IVS는 라이브 스트림 중 광고가 트리거된 위치에 SCTE-35 광고 마커가 포함된 VOD 재생 목록을 생성하고 S3에 씁니다. 세부 정보는 SSAI 재생 목록 참조 섹션을 참조하세요.
시청자 경험
기본적으로 MediaTailor는 광고 브레이크를 삽입할 때 모든 시청자에게 광고를 채워서 제공합니다. 스트림에 재생 권한 부여 토큰을 사용하는 경우 재생 권한 부여 JWT 토큰에 클레임 "aws:ads-opt-out": true를 추가하여 시청자가 광고 수신을 옵트아웃할 수 있습니다.
시청자가 광고 브레이크 중간에 스트리밍을 시작하면 IVS는 광고 기간을 가장 가까운 사분위수로 반올림합니다. 예를 들어, 60초 광고 브레이크 중 35초가 남았을 때 시청을 시작한 사람은 45초 동안 광고를 보게 됩니다.
MediaTailor 재생 구성을 업데이트하거나 새 광고를 추가할 때 MediaTailor가 먼저 광고를 트랜스코딩해야 하므로 광고 브레이크를 처음 요청할 때 시청자에게 광고가 표시되지 않을 수 있습니다. 몇 분 후 InsertAdBreak를 직접적으로 호출하면 시청자가 광고를 볼 수 있습니다. MediaTailor의 트랜스코딩 로그는 이러한 트랜스코딩을 기록합니다.
시청자 추적 파라미터
Elemental MediaTailor PlaybackConfiguration에서 Ad Decisioning Server(ADS)를 구성할 때 템플릿을 사용하여 ADS에 파라미터를 전달할 수 있습니다(MediaTailor, ADS에 파라미터 전달 참조). IVS SSAI를 사용하면 다음 형식의 클레임을 추가해서 해당 사용자의 재생 권한 부여 토큰을 사용하여 각 시청자에 대한 파라미터를 전달할 수 있습니다.
"aws:ads-player-params": { "key1": "value1", "key2": "value2" }
이러한 파라미터는 Elemental MediaTailor로 전달되어 [player_params.key1] 및 [player_params.key2] 템플릿 변수로 채워집니다. 이 목록에 입력하는 키에는 항상 player_params 템플릿 파라미터가 네임스페이스로 지정됩니다.
모든 키와 값을 합친 총 페이로드 크기는 1,000바이트로 제한됩니다.
보고 모드
시청자가 광고를 볼 때 클라이언트나 서버는 각 광고 크리에이티브의 재생 진행 상황을 나타내는 비콘을 전송할 수 있습니다. 기본적으로 MediaTailor는 서버 측에서 비코닝을 처리합니다. 재생 권한 부여 토큰에 다음 클레임을 추가하여 보고 모드를 제어할 수 있습니다.
"aws:ads-reporting-mode": "CLIENT" | "SERVER"
기본값은 SERVER입니다. SERVER로 설정하면 MediaTailor가 서버 측에서 비콘을 전송합니다. CLIENT로 설정하면 서버 측 비코닝이 비활성화되고 IVS Player SDK adBreakStarted 이벤트의 metadata.trackingData 필드에 추적 데이터가 제공됩니다. IVS Player SDK는 비콘 URL을 직접적으로 호출하지 않습니다.
알려진 문제
-
IVS 채널
containerFormat이FRAGMENTED_MP4로 설정된 경우 IVS 광고가 작동하지 않습니다. FMP4 컨테이너 형식이 광고 구성과 함께 사용되는 경우 UpdateChannel과 CreateChannel을 직접적으로 호출하면 검증 오류가 반환됩니다. -
광고 재생 중 적응형 비트레이트 모드와 수동 품질 선택 사이를 전환하면 플레이어가 동결 및 버퍼링 문제를 겪을 수 있습니다.
-
12시간 이상 진행되는 스트리밍에서 결핍이 발생하면 프로그램 날짜 시간이 드리프트되어 시청자에게 광고가 표시되지 않을 수 있습니다. 해결 방법은 방송사가 스트림을 다시 시작하는 것입니다.
SSAI 재생 목록 참조
SSAI를 사용한 라이브 변형 재생 목록
광고가 스트림에 스티칭되면 IVS는 광고 세그먼트 앞에 아래에 설명된 태그를 스티칭합니다.
1: 스티칭된 광고 선언
#EXT-X-DATERANGE:ID="stitched-ad-1765566299-20000000000",CLASS="live-video-net-stitched-ad",START-DATE="2025-12-12T19:04:59.079Z",DURATION=20.000,X-NET-LIVE-VIDEO-AD-AD-BREAK-ID="test"
| 속성 | 설명 |
|---|---|
ID |
형식:
유형: 문자열 배열 |
CLASS |
SSAI 광고의 경우 항상 live-video-net-stitched-ad |
START-DATE |
광고가 시작되는 ISO 8601 프로그램 날짜/시간 |
DURATION |
광고 길이(초) |
X-NET-LIVE-VIDEO-AD-AD-BREAK-ID |
InsertAdBreak 작업이 직접적으로 호출될 때 IVS가 반환하는 광고 브레이크 ID |
2. 스트림 소스 변경
#EXT-X-DATERANGE:ID="source-1765566299",CLASS="live-video-net-stream-source",START-DATE="2025-12-12T19:04:59.079Z",END-ON-NEXT=YES,X-NET-LIVE-VIDEO-STREAM-SOURCE="0f262e65-a709-4ef1-8741-e82d936c"
| 속성 | 설명 |
|---|---|
CLASS |
항상 live-video-net-stream-source입니다. |
START-DATE / END-ON-NEXT |
이 소스 범위의 시간 메타데이터 |
X-NET-LIVE-VIDEO-STREAM-SOURCE |
비디오 소스가 변경 중인 플레이어에 대한 힌트. 값은 기본 콘텐츠의 경우 라이브이고, 광고 콘텐츠의 경우 고유 ID입니다. |
3. 불연속성 마커
#EXT-X-DISCONTINUITY
라이브 스트림과 광고 콘텐츠 간에 인코딩 파라미터가 변경될 수 있음을 나타내는 표준 HLS 태그입니다.
광고 세그먼트
#EXT-X-PROGRAM-DATE-TIME:2025-12-12T19:04:59.079Z #EXTINF:2.000,0f262e65-a709-4ef1-8741-e82d936c https://4ce388b1cf28.j.cloudfront.hls.live-video.net/v1/segment/CvsCse8Qbs5DU_aRmrVLd72_nK9lo9xS1KjD115LsIXcsD27JfLfkSuamLUivqOTrfHUeGf6Zmx_c9rhq0btTOu7E4F1DaU8knNoebLq6FlKp6q8ysaQdEA10gKCNP92oAQ_0DGLInY462O9HUxgtk5KHj23ZjPhVCxIh3DjWqwaevDci1_q7dYL55rgSKd11SfpsGSS9Yup4g5dfzyGhfz6Y2Skaj34JtoVyd8Nxlppc4jDlZl-6j7YM1i2qdUcM3VNWrZrxCisBXgOPtI3vFdeNcNjPzVdOGjMz5cXcQIp8YOCwnkdkomhn_3xxmB1Zngl3QPao6-oPsjH3qVcMOCuKfKZSmRJGFLvkrO1PefV5ya3eUvihXCMvDE-81EmGp5q9ErEgFpz06rMDbYFWb3z9H8X0t8KzvGDOaqKTYHZ0lgEV-fULeDQ76pDy_OVPwhO2vJMxBpfdQ_IeB1QUK2wJmXJ96Mvv0C2dcb0F7zE3lr_iBGemUjwmb7JmBoM3HdJbpV0TGp8C6vhIAEqCXVzLXdlc3QtMjD3DQ.ts?dna=CmanuVzG9F6kGS2X7ThbGZyZPHWgX2TiBlBMYsvGWLcWaLWyntTaWRp5D9qjZsrGKkzdwoLNY4pri6ZgpxnzqLqWvhcP6zoGu8vifP5NxPgiNKMmYdUmQrqTAf7jbauvE3c6B9ebptAaDEkrbrnG1qF8Cv3kbiABKgl1cy13ZXN0LTIw9w0
| 속성 | 설명 |
|---|---|
EXT-X-PROGRAM-DATE-TIME |
이 세그먼트의 타임스탬프입니다. |
EXTINF |
형식:
|
| 세그먼트 URL | IVS 호스팅 엔드포인트로서 해당 세그먼트에 대한 암호화된 정보와 IVS 캐시 내의 위치를 포함합니다. |
SSAI를 사용한 VOD 변형 재생 목록
라이브 스트림이 레코딩되면 IVS는 라이브 스트림 중 광고가 트리거된 위치에 SCTE-35 광고 마커가 포함된 VOD 재생 목록을 생성하고 S3에 씁니다. VOD 재생 중 광고를 제공하려면 재생 목록에 광고 세그먼트를 스티칭하는 MediaTailor를 통해 이 IVS 재생 목록을 제공합니다. MediaTailor는 광고 브레이크 동안 원래 VOD 세그먼트를 광고 세그먼트로 교체합니다.
1: 광고 브레이크 시작 마커(SCTE35-OUT)
#EXT-X-DATERANGE:ID="12345678",START-DATE="2025-12-06T00:45:45.723Z",PLANNED-DURATION=20.0,SCTE35-OUT=0xFC302000000000000000FFF00F05F8E7AEFC7FFFFE001B7740000000000000340CFD88
| 속성 | 설명 |
|---|---|
ID |
이 광고 브레이크에 대한 고유 식별자입니다. 시작 마커와 종료 마커를 상호 연결시키는 데 사용됩니다. |
START-DATE |
광고 브레이크가 시작되는 ISO 8601 프로그램 날짜/시간입니다. |
PLANNED-DURATION |
예상 광고 기간(초)입니다. |
SCTE35-OUT |
광고 브레이크의 시작을 나타내는 SCTE-35 마커입니다. |
2. 광고 세그먼트(MediaTailor Stitched)
#EXTINF:2.0, ../../../../segment/b2857627df9428679e888ee8daa979d0b7559801/gk-test-ivs-vod/bd0c7d90-a47c-4a91-b5ec-7d0f9897049b/0/3
| 속성 | 설명 |
|---|---|
EXTINF |
광고 세그먼트의 기간(초)입니다. |
Segment URL |
MediaTailor 호스팅 광고 세그먼트의 상대 경로입니다. |
3. 광고 브레이크 종료 마커(SCTE35-IN)
#EXT-X-DATERANGE:ID="12345678",START-DATE="2025-12-06T00:45:45.723Z",END-DATE="2025-12-06T00:46:07.889Z",DURATION=20.0,SCTE35-IN=0xFC302000000000000000FFF00F05F8E7AEFC7F7FFE001B7740000000000000C23E5851
| 속성 | 설명 |
|---|---|
ID |
시작 마커와 동일한 ID입니다. 둘을 함께 연결합니다. |
START-DATE |
광고 브레이크의 원래 시작 시간(시작 마커와 동일)입니다. |
END-DATE |
광고 브레이크가 끝난 시점의 ISO 8601 타임스탬프입니다. |
DURATION |
실제 광고 기간(초)입니다. |
SCTE35-IN |
광고 브레이크의 끝을 나타내는 SCTE-35 마커입니다. |