AWS 기술 블로그

AWS Elemental Inference를 활용한 실시간 문맥 광고(Contextual Advertising) 솔루션

AWS Elemental Inference Smart Subtitle, Amazon Bedrock, SCTE-35를 결합하여 라이브 방송 콘텐츠의 문맥을 실시간으로 이해하고, 최적의 시점에 문맥 기반 광고를 배치하는 아키텍처를 구축합니다. 이 블로그에서는 라이브 콘텐츠의 음성을 실시간으로 자막화하고, 그 자막의 문맥을 AI가 분석하여 IAB(Interactive Advertising Bureau) 카테고리로 분류한 뒤, 표준 SCTE-35 오버레이 시그널(segmentation_type_id 0x38)을 통해 AWS Elemental MediaTailor와 연동하는 전체 파이프라인을 설명합니다.

소개

라이브 스트리밍과 광고 수익화의 과제

라이브 스트리밍 시장은 글로벌 규모에서 꾸준히 성장하고 있습니다. 스포츠 중계, 뉴스, 게임 스트리밍, OTT 및 스트리밍 방송 등 다양한 분야에서 실시간 영상이 주요 콘텐츠 소비 방식으로 자리잡았습니다. 이와 함께 라이브 스트리밍의 광고 수익화(Monetization)는 콘텐츠 사업자에게 핵심 과제가 되었습니다.

그러나 기존의 라이브 광고 삽입 기술은 두 가지 근본적인 한계를 안고 있습니다:

한계 1: 시간 기반 스케줄링

기존 라이브 광고는 사전에 정해진 고정 시간 스케줄에 의존합니다. 예를 들어, “매 15분마다 30초 광고 브레이크”라는 룰이 있으면, 방송 내용이 어떻든 상관없이 기계적으로 광고가 삽입됩니다. 또는 운영자가 영상을 모니터링하면서 수동으로 광고 트리거를 누르는 방식을 사용합니다.

문제: 인터뷰의 핵심 발언 도중에 광고가 끊기거나, 스포츠 경기의 결정적 장면 직전에 브레이크가 발생하는 등 시청자 경험을 크게 저해합니다. 수동 운영은 24/7 라이브 채널에서는 인력 비용이 과도하며, 사람의 판단 속도에 의존합니다.

한계 2: 프로필 기반 개인화 광고

현재 대부분의 디지털 광고는 시청자의 프로필 데이터(나이, 성별, 위치, 과거 시청 이력, 쿠키 기반 관심사)를 활용한 타겟팅에 의존합니다. “30대 남성에게는 자동차 광고, 20대 여성에게는 뷰티 광고”라는 식입니다.

문제: 이 방식은 “누구에게” 보여줄지는 결정하지만, “어떤 상황에서” 보여줘야 시청자가 가장 잘 반응하는지를 고려하지 않습니다. AI 기술 뉴스를 열심히 시청하는 30대 남성에게 자동차 광고를 보여주는 것보다, 그가 지금 보고 있는 AI 관련 콘텐츠에 맞는 클라우드 플랫폼 광고를 보여주는 것이 훨씬 효과적입니다.

또한 개인정보 보호 규제가 강화되면서 프로필 기반 타겟팅의 기반 자체가 약화되고 있습니다. 라이브 비디오는 본질적으로 LLM이 직접 소비할 수 없는 형태이지만, AI를 활용하여 음성을 텍스트로 변환하면 실시간 문맥 분석이 가능해집니다.

AI 를 활용한 문맥 기반 광고

이 블로그에서 제안하는 AI 문맥을 활용한 광고는 기존의 개인화 광고와는 근본적으로 다른 접근 방식을 취합니다. 기존 방식이 “이 시청자가 누구인가”에 집중했다면, AI 문맥 기반 광고는 “지금 무슨 내용을 보고 있는가”에 집중합니다. 이를 통해 시청자가 현재 몰입하고 있는 콘텐츠와 높은 관련성을 가진 광고를 자연스럽게 노출할 수 있습니다.

중요한 점은, 이 두 가지 접근법이 상호 보완적이라는 것입니다. 문맥 분석으로 “기술 카테고리 광고가 적합하다”고 결정한 후, 기존의 시청자 프로필 데이터로 “해당 카테고리 내에서 어떤 광고주의 소재를 보여줄 것인가”를 세분화할 수 있습니다. 이 블로그에서 제안하는 아키텍처는 그 첫 번째 단계인 “콘텐츠 문맥을 실시간으로 파악하는 것”을 AI를 활용하여 자동화합니다.

패러다임의 전환: “누구에게” → “어떤 맥락에서”

아래 표는 기존 개인화 광고와 AI 문맥 기반 광고의 차이점을 요약합니다.

구분 기존 개인화 광고 AI 문맥 기반 광고 (이 블로그에서 제안하는 아키텍처)
타겟팅 기준 시청자 프로필 (나이, 성별, 관심사) 현재 시청 중인 콘텐츠의 실시간 문맥
삽입 시점 사전 스케줄 또는 수동 트리거 AI가 자연스러운 전환점을 자동 판별
콘텐츠 이해 없음 (콘텐츠 무관) 실시간 자막 → LLM 문맥 분석
광고 관련성 콘텐츠와 무관할 수 있음 콘텐츠 주제와 높은 연관성 (IAB 매칭)
시청자 경험 부자연스러운 끊김 자연스러운 전환점에서만 삽입
프라이버시 개인정보 의존 (쿠키, 행동 데이터) 콘텐츠 자체만 분석 (개인정보 불필요)
광고 포맷 주로 풀스크린 Break Break + Overlay 듀얼 포맷 지원

이 표에서 확인할 수 있듯이, AI 문맥 기반 광고는 특히 프라이버시 측면에서 큰 장점을 가집니다. 시청자의 개인정보를 수집하지 않고도 콘텐츠 자체의 맥락만으로 광고를 매칭할 수 있기 때문입니다. 이 블로그는 광고 타겟팅의 새로운 접근 방식을 제시합니다.

AWS Elemental Inference의 Smart Subtitle

이 블로그에서 제안하는 아키텍처의 핵심 출발점은 AWS Elemental Inference의 Smart Subtitle 기능입니다.

Elemental Inference란?

AWS Elemental Inference는 AWS Elemental MediaLive와 원활하게 통합된 실시간 AI/ML 추론 서비스입니다. MediaLive가 오디오를 Elemental Inference로 전송하면, Elemental Inference가 자막을 생성하여 다시 MediaLive로 반환합니다. 핵심 특징:

  • MediaLive 통합 처리: MediaLive 채널 설정에서 바로 자막을 활성화할 수 있으며, 동일한 콘솔과 IAM 경계 내에서 동작합니다. 별도의 외부 STT 서비스를 운영할 필요 없이 음성에서 자막(speech-to-subtitle)을 자동 생성합니다.
  • Feed 기반 구성: Elemental Inference Console에서 “Feed”를 생성하고, 해당 Feed의 ARN을 MediaLive 채널의 Caption Selector에 연결합니다. Feed는 사용할 언어를 정의합니다.
  • WebVTT 표준 출력: 생성된 자막은 업계 표준인 WebVTT 형식으로 출력되어, 모든 HLS 플레이어와 다운스트림 시스템에서 즉시 소비할 수 있습니다.

Smart Subtitle: 자막 생성을 넘어 문맥 분석의 시작점

Smart Subtitle은 시청자에게 실시간으로 자막을 표시하는 것이 본래 목적이지만, 이 블로그에서 제안하는 아키텍처에서는 더 중요한 역할을 합니다 — AI가 라이브 영상의 콘텐츠를 “읽을” 수 있는 인터페이스입니다.

라이브 비디오는 본질적으로 LLM이 직접 소비하는건 매우 어렵고 복잡합니다. 하지만 음성이 텍스트로 변환되면, LLM(Amazon Bedrock의 Claude)이 그 텍스트의 의미, 주제, 문맥을 실시간으로 이해할 수 있습니다.

이 아키텍처의 데이터 흐름은 다음과 같습니다. 먼저 라이브 비디오의 오디오가 AWS Elemental Inference(Smart Subtitle)로 전달되어 실시간으로 자막 텍스트가 생성됩니다. 생성된 WebVTT 자막 세그먼트는 자막 수집을 위해 AWS Lambda 함수를 생성하여 주기적으로 폴링하여 수집합니다. 예를 들어 “오늘 프리미어리그 시즌 개막을 앞두고 각 구단의 이적 시장 경쟁이 치열합니다. 특히 맨체스터 시티의 새로운 전술 변화가 주목받으면서…”와 같은 자막이 수집되면, 이 텍스트는 Amazon Bedrock(Claude)으로 전송됩니다. Bedrock은 자막의 문맥을 분석하여 IAB 카테고리를 분류하고(예: “IAB19 – Technology & Computing”), 광고 삽입 적합성과 포맷(Break 또는 Overlay), 신뢰도(confidence) 점수를 판단할 수 있습니다. 신뢰도가 임계값을 넘으면 MediaLive Schedule API를 통해 오버레이 광고 체인이 시작됩니다.

Amazon Bedrock Converse API와 Claude의 역할 구분

Converse API는 “어떻게 모델과 통신할 것인가”를 담당하고, Claude Sonnet은 “무엇을 이해하고 판단할 것인가”를 담당합니다. 이 분리 덕분에 향후 모델을 교체하더라도 파이프라인 코드 변경을 최소화할 수 있습니다.

Bedrock(Claude)는 실시간 자막 분석에 대해 빠른 응답을 제공합니다. 이 아키텍처에서는 Cross-region inference profile을 사용하여 적합한 모델과 모델 ID를 호출 합니다. 예를 들어, claude sonnet 4.6 을 호출해야 한다면 us.anthropic.claude-sonnet-4-6으로 호출합니다. Cross-region inference는 단일 리전의 용량 한계를 넘어 자동으로 가용한 리전에서 추론을 수행하므로, 라이브 스트리밍의 24/7 특성에 적합한 안정성을 확보합니다.

예를 들어, Claude Sonnet 모델을 활용하여, 최근 60초 분량의 자막 텍스트를 수신하면 다음 4가지를 동시에 판단합니다:

  • 광고 삽입 적합성: 현재 시점이 광고를 삽입하기에 적절한지 (자연스러운 전환점인지)
  • 신뢰도 점수: 판단의 확신도 (confidence), 이 값이 임계값을 넘으면 SCTE-35 Inserter Lambda를 트리거하고, MediaLive Schedule API를 통해 오버레이 체인이 시작됩니다

아래 코드는 Bedrock Converse API를 통해 Claude Sonnet에게 자막 텍스트의 문맥을 분석하도록 요청하는 부분입니다. system prompt에서 IAB 카테고리 분류와 광고 적합성 판단을 지시합니다.

import boto3, json
bedrock_runtime = boto3.client("bedrock-runtime")
MODEL_ID = "us.anthropic.claude-sonnet-4-6"  # Cross-region inference profile
def _analyze(transcript_text: str) -> dict:
    response = bedrock_runtime.converse(
        modelId=MODEL_ID,
        messages=[{
            "role": "user",
            "content": [{"text": transcript_text}]
        }],
        system=[{"text": SYSTEM_PROMPT}],
        inferenceConfig={
            "maxTokens": 512,
            "temperature": 0.1,  # 일관된 판단을 위해 낮은 temperature
        },
    )
    # 응답에서 JSON 구조화된 출력 파싱
    result_text = response["output"]["message"]["content"][0]["text"]
    return json.loads(result_text)

구조화된 JSON 응답의 중요성

Claude의 응답을 JSON으로 구조화하는 것은 프로그래매틱 파이프라인 통합에서 핵심적입니다. 자연어 응답이 아닌 정형화된 JSON을 반환받으면, 다운스트림의 SCTE-35 Inserter Lambda가 별도의 파싱 로직 없이 즉시 판단 결과를 소비할 수 있습니다. 또한 confidence 필드를 숫자로 받아 임계값 비교를 단순 연산으로 처리할 수 있어, 실시간 파이프라인의 지연을 최소화합니다.

아래는 Bedrock Claude가 반환하는 JSON 응답 구조의 예시입니다:

{
  "insertAd": true,
  "adFormat": "overlay",
  "durationSeconds": 30,
  "iabCategory": "IAB19 – Technology & Computing",
  "confidence": 0.92,
  "reason": "Technology discussion with clear commercial context; natural transition point between topics."
}

Elemental Inference Smart Subtitle 설정

1단계: Elemental Inference Feed 생성

먼저 AWS Elemental Inference Console에서 Smart Subtitle용 Feed를 생성합니다. Feed는 AI 모델, 언어, 동기화 설정을 정의합니다.

  • Feed Type: Smart Subtitle
  • Language: en-US, es-US, pt-BR 등 다국어 지원
  • Feed ARN 생성 후, MediaLive 채널에서 참조

2단계: MediaLive Caption Selector 설정

MediaLive 채널의 Input Attachment에 Smart Subtitle Caption Selector를 추가합니다. 아래 코드는 Caption Selector가 Elemental Inference Feed와 연결되는 구조를 보여줍니다.

// MediaLive Input Attachment - Caption Selector 설정
InputSettings: {
  CaptionSelectors: [{
    Name: 'smart-subtitle-en',
    LanguageCode: 'en-US',
    SelectorSettings: {
      SmartSubtitleSourceSettings: {
        // Elemental Inference Feed ARN 연결
        FeedArn: 'arn:aws:elemental-inference:<region>:<account>:feed/<feed-id>',
        // 비디오와 자막의 동기화 모드
        CaptionSynchronizationMode: 'SYNCHRONIZED',
      },
    },
  }],
}

CaptionSynchronizationMode: SYNCHRONIZED는 생성된 자막이 원본 비디오의 타임라인과 정확하게 정렬되도록 합니다. 이는 나중에 Bedrock이 분석한 결과로 SCTE-35 마커를 삽입할 때, 해당 마커가 올바른 콘텐츠 위치에 배치되도록 하는 데 필수적입니다.

3단계: MediaLive IAM 역할 설정

MediaLive가 Elemental Inference Feed에 접근하려면 적절한 IAM 권한이 필요합니다. 아래 코드는 최소 권한 원칙에 따라 Feed ARN으로 범위를 제한하는 IAM 정책 예시입니다.

// MediaLive 역할에 Elemental Inference 접근 권한 부여
mlRole.addToPolicy(new iam.PolicyStatement({
  actions: [
    'elemental-inference:PutMedia',     // Feed에 미디어 전송
    'elemental-inference:GetMetadata',  // 추론 결과(자막) 수신
  ],
  // 피드 ARN이 주입되면 해당 feed로 스코프(최소 권한);
  // 미주입 시 '*'(cdk-nag suppression으로 근거 문서화)
  resources: config.smartSubtitleFeedArn
    ? [config.smartSubtitleFeedArn]   // arn:aws:elemental-inference:<region>:<account>:feed/<feed-id>
    : ['*'],
}));

MediaLive 채널 설정

MediaLive에서 인코더 설정: CMAF Ingest + SCTE-35 Pass-through

MediaLive 채널의 Output Group은 CMAF Ingest 형식으로 AWS Elemental MediaPackage v2에 전달합니다. 이때 SCTE-35 광고 마커가 패스스루되도록 설정합니다.

핵심 설정 포인트:

  • TimecodeConfig: SYSTEMCLOCK — MediaLive가 출력 타임코드의 소스로 UTC 시스템 클럭을 사용합니다(AWS 문서: systemclock = UTC time). 덕분에 출력 타임코드와 다운스트림 PROGRAM-DATE-TIME이 UTC 기준으로 정렬되어, UTC로 지정한 SCTE-35 FixedMode 스케줄 액션 시점과 플레이어/MediaTailor의 PDT 정합이 일관됩니다. (FixedMode 액션 자체는 MediaLive의 UTC 기준시각으로 실행되며, TimecodeConfig가 발사 타이밍을 직접 제어하지는 않습니다.)

Figure 1. MediaLive 타임코드 구성 설정 화면

  • Scte35Type: SCTE_35_WITHOUT_SEGMENTATION – CMAF Ingest에서 지원하는 SCTE-35 모드입니다. segmentation_descriptors가 보존되므로, 오버레이 신호(0x38)가 다운스트림까지 전달됩니다.

Figure 2. MediaLive 출력에서 SCTE-35 설정 화면

MediaPackage v2 설정

SCTE 필터와 Origin Endpoint 구성

MediaPackage v2 Origin Endpoint에서는 SCTE-35 필터를 구성하여 광고 관련 타입만 통과시킵니다. scteHls 설정으로 SCTE-35 바이너리를 HLS 매니페스트의 #EXT-X-DATERANGE 태그로 변환합니다.

// MediaPackage v2 Origin Endpoint
originEndpoint = new mpv2.CfnOriginEndpoint({
  containerType: 'CMAF',
  segment: {
    segmentDurationSeconds: 4,
    // SCTE-35 필터: 광고 관련 타입만 통과
    scte: {
      scteFilter: [
        'SPLICE_INSERT',                              // 표준 광고 브레이크
        'PROVIDER_ADVERTISEMENT',
        'DISTRIBUTOR_ADVERTISEMENT',
        'PROVIDER_PLACEMENT_OPPORTUNITY',
        'DISTRIBUTOR_PLACEMENT_OPPORTUNITY',
        'PROVIDER_OVERLAY_PLACEMENT_OPPORTUNITY',     // 오버레이 광고 기회
        'DISTRIBUTOR_OVERLAY_PLACEMENT_OPPORTUNITY',  // 오버레이 광고 기회
      ],
    },
  },

  hlsManifests: [{
    manifestName: 'index',
    manifestWindowSeconds: 60,
    programDateTimeIntervalSeconds: 1,
    // SCTE-35 → #EXT-X-DATERANGE로 변환하여 플레이어에 전달
    scteHls: { adMarkerHls: 'DATERANGE' },
    filterConfiguration: {
      // AI 분석 파이프라인이 광고 결정을 내리고 SCTE-35를 삽입할
      // 시간을 확보하기 위한 lookahead 버퍼
      timeDelaySeconds: 5,
    },
  }],
});

HLS 매니페스트 예시

MediaPackage v2의 scteHls: { adMarkerHls: DATERANGE } 설정은 인스트림 SCTE-35 마커를 HLS 매니페스트의 #EXT-X-DATERANGE 태그로 변환합니다. DATERANGE ID에 segmentation_type_id(38)가 인코딩되어, 다운스트림 플레이어나 SSAI가 Break(splice_insert)와 Overlay(0x38)를 구분할 수 있습니다.

#EXT-X-PROGRAM-DATE-TIME:2026-06-23T14:30:56.000Z
#EXT-X-DATERANGE:ID="1782225056-38-1782224990",START-DATE="2026-06-23T14:30:56.000Z",PLANNED-DURATION=30.0,SCTE35-OUT=0x…
#EXTINF:4.000,
segment-001234.mp4

DATERANGE ID 형식: “<timestamp>-38-<event_id>” — ID에 segmentation_type_id 38이 인코딩됩니다. 플레이어는 이 패턴으로 오버레이 vs. Break를 구분합니다.

왜 문맥 광고에 오버레이를 활용하는가

이 아키텍처에서 AI가 자동으로 트리거하는 광고 형식으로 오버레이를 선택한 데는 4가지 핵심 이유가 있습니다:

  1. NonLinear특성: 오버레이는 콘텐츠 재생을 중단하지 않으므로, AI 분석의 ~30초 지연 후에도 여전히 해당 주제가 진행 중일 가능성이 높습니다. Break의 경우 이미 주제가 바뀐 뒤에 광고가 끊기게 되어 문맥 매칭의 가치가 사라집니다.
  2. 시청자 경험 보존: 라이브 스트리밍에서 콘텐츠 흐름을 유지하면서도 문맥에 맞는 광고를 노출할 수 있어, 시청자 이탈률을 최소화합니다.
  3. 광고 인벤토리 확장: 오버레이는 기존 Break 광고 슬롯과 독립적으로 운영되므로, 추가적인 광고 인벤토리를 생성합니다. Break 없이도 문맥에 맞는 광고 노출 기회를 확보할 수 있어 전체 수익화 기회가 증가합니다.
  4. SCTE-35 표준 호환: 오버레이는 SCTE-35 표준의 segmentation_type_id 0x38(Provider Overlay Placement Opportunity Start)로 정의되어 있어, MediaTailor 등 업계 표준 SSAI 솔루션과 즉시 연동됩니다.

SCTE-35 표준 Table 22: segmentation_type_id

SCTE-35 표준(ANSI/SCTE 35 2023)의 Table 22는 segmentation_type_id 값을 정의합니다. 이 아키텍처에서 사용하는 오버레이 관련 ID는 다음과 같습니다:

segmentation_type_id Name 용도
0x34 Provider Ad Start 일반 광고 시작
0x35 Provider Ad End 일반 광고 종료
0x36 Distributor Ad Start 배포자 광고 시작
0x37 Distributor Ad End 배포자 광고 종료
0x38 Provider Overlay Placement Opportunity Start

오버레이 시작

(이 아키텍처에서 사용)

0x39 Provider Overlay Placement Opportunity End 오버레이 종료
0x3A Distributor Overlay Placement Opportunity Start 배포자 오버레이 시작

이 아키텍처는 0x38(Provider Overlay Placement Opportunity Start)을 사용합니다. 이는 splice_insert(Break용)와 명확히 구분되는, SCTE-35 표준이 정의한 비중단 오버레이 전용 시그널입니다.

Break vs. Overlay SCTE-35 시그널 차이

구분 Break (광고 브레이크) Overlay (오버레이 배너)
SCTE-35 명령 splice_insert time_signal
Descriptor 없음 (splice_event_id + duration) segmentation_descriptor (type 0x38)
의미 콘텐츠 중단, 광고 교체 콘텐츠 유지, 비중단 오버레이 기회
자동/수동 수동 전용 (운영자 트리거) AI 자동 (Bedrock 분석 결정)
MediaTailor 처리 서버사이드 광고 스티칭 NonLinear VAST (클라이언트 렌더링)

AWS Elemental MediaTailor 문서에서도 0x38/0x3A를 오버레이 배치 기회로 인식하며, NonLinear VAST creative를 Tracking API를 통해 클라이언트에 전달합니다.

MediaLive Schedule API: 오버레이 시작점

Bedrock Analyzer가 오버레이 광고 삽입을 결정하면, Lambda 함수가 MediaLive Schedule API의 batch_update_schedule을 호출합니다. Overlay의 경우 time_signal과 segmentation_descriptor(type_id=0x38)를, Break의 경우 splice_insert를 스케줄 액션으로 등록합니다. MediaLive는 지정된 시점에 해당 SCTE-35 메시지를 CMAF 스트림에 삽입합니다.

CMAF Ingest를 통한 SCTE-35 신호 전달

MediaLive는 스케줄된 시점에 SCTE-35 바이너리를 CMAF 스트림의 emsg(Event Message) 박스에 삽입하여 MediaPackage v2로 전송합니다. SCTE_35_WITHOUT_SEGMENTATION 모드에서도 segmentation_descriptor는 보존되며, 해당 시점에 새로운 IDR(Instantaneous Decoder Refresh) 프레임이 생성되어 광고 시점이 프레임 단위로 정확합니다.

CMAF Ingest 스트림 (emsg box):
  scheme_id_uri: "urn:scte:scte35:2013:bin"        
  timescale: 90000
  presentation_time: <PTS @90kHz, PDT로 UTC 대응>  
  message_data: SCTE-35 binary {
    splice_command_type: 0x06 (time_signal)        
    segmentation_descriptor: {
      segmentation_type_id: 0x38  ← OVERLAY!       
      segmentation_event_id: 1782224990              # ← 2026 시각 기반
      segmentation_duration: 2700000 (30s)           # ← 15-60 범위(틱=초×90000)
    }
  }

MediaTailor SSAI 통합

MediaTailor 서비스 소개

AWS Elemental MediaTailor는 채널 어셈블리와 서버사이드 광고 삽입(SSAI)을 제공하는 관리형 서비스입니다. MediaTailor를 사용하는 주요 이점은 다음과 같습니다:

  • 개인화 세션: 시청자별 고유 매니페스트를 생성하여, 동일 콘텐츠를 시청하는 사용자마다 서로 다른 광고를 전달할 수 있습니다.
  • 광고 차단기 우회: 서버 측에서 광고를 콘텐츠 스트림에 직접 스티칭하므로, 클라이언트 측 광고 차단기가 광고를 식별하여 차단하기 어렵습니다.
  • 0x38 자동 인식: MediaTailor는 SCTE-35의 segmentation_type_id 0x38을 오버레이 배치 기회로 자동 인식하여, NonLinear VAST creative를 Tracking API를 통해 플레이어에 전달합니다.

MediaTailor의 역할: Break 스티칭 + Overlay NonLinear 전달

모든 시청자는 기본적으로 MediaTailor를 경유하여 재생합니다:

  • Break (splice_insert): MediaTailor가 서버사이드에서 실제 광고 소재를 스티칭하여 매끄러운 전달
  • Overlay (time_signal 0x38): MediaTailor가 NonLinear VAST 크리에이티브를 클라이언트 사이드 트래킹 API로 전달 → 플레이어가 렌더링

MediaTailor는 [player_params.iab] 매크로를 ADS(Ad Decision Server) URL에 치환하여, 현재 콘텐츠 문맥에 맞는 VAST 크리에이티브를 반환합니다.

Break vs Overlay: MediaTailor 처리 차이

분 류 Break (splice_insert) Overlay (time_signal 0x38)
MediaTailor 동작 서버사이드 스티칭 (콘텐츠 교체) Tracking API로 NonLinear 메타데이터 전달
광고 전달 방식 매니페스트에 광고 세그먼트 삽입 플레이어가 별도 오버레이 렌더링
시청자 경험 콘텐츠 중단 → 광고 → 콘텐츠 복귀 콘텐츠 유지 + 상단/하단 배너 표시
VAST 타입 Linear (InLine) NonLinear (staticResource)
광고 차단기 우회 (서버 스티칭) 감지 가능 (클라이언트 렌더링)

플레이어 오버레이 인식

플레이어는 HLS 매니페스트의 #EXT-X-DATERANGE 태그를 파싱하여 SCTE-35 신호를 감지합니다. SCTE35-OUT 바이너리를 디코딩하여 segmentation_type_id가 0x38이면 오버레이로 분류하고, MediaTailor가 활성화된 경우 Tracking API를 폴링하여 NonLinear 크리에이티브(이미지 URL + 클릭 URL)를 수신한 뒤 오버레이로 렌더링합니다. MediaTailor가 비활성인 경우에는 Context API의 IAB 카테고리에 기반한 로컬 크리에이티브를 fallback으로 표시합니다.

결론

이 블로그에서는 AWS Elemental Inference(Smart Subtitle), Amazon Bedrock(Claude), 그리고 SCTE-35 표준 시그널링을 결합하여 라이브 스트리밍에서 AI 문맥 기반 광고를 자동으로 삽입하는 아키텍처를 소개했습니다. 기존의 시간 기반 스케줄링이나 프로필 기반 타겟팅과 달리, 이 접근 방식은 현재 방송되고 있는 콘텐츠의 문맥을 실시간으로 이해하고 가장 적절한 시점에 관련성 높은 광고를 배치합니다. 이를 통해 시청자 경험을 보존하면서도 광고 효과를 극대화할 수 있으며, 개인정보를 수집하지 않고도 높은 광고 관련성을 확보할 수 있습니다.

  • AWS Elemental Inference (Smart Subtitle): 라이브 비디오 → 실시간 텍스트 변환 (AI가 콘텐츠를 “읽을” 수 있게)
  • Amazon Bedrock (Claude): 텍스트 → 문맥 이해 + IAB 카테고리 분류 + 광고 결정
  • MediaLive + MediaPackage (SCTE-35): 결정 → 표준 광고 시그널 자동 삽입

핵심은 “콘텐츠를 이해한 후 광고를 배치한다”는 접근 방식의 전환입니다:

  • 광고 효율 향상: 문맥과 관련된 광고는 CTR이 높음
  • 시청자 경험 개선: Break는 자연스러운 전환점에서만, Overlay는 콘텐츠 중단 없이
  • 프라이버시 친화: 개인정보 없이 콘텐츠 자체만 분석
  • 완전 자동화: 수동 광고 트리거 불필요, 24/7 AI 운영
  • SSAI 즉시 통합: 표준 SCTE-35로 MediaTailor와 바로 연동 가능
YoHan Choi

YoHan Choi

최요한 Sr. Media Edge Services Specialist SA는 AWS Media Services(Elemental, IVS)를 기반으로 고객의 미디어 비즈니스 성공를 최우선으로 지원하며, 미디어 전문적인 솔루션 설계, 구축 및 개발 경험을 바탕으로 방송과 미디어 분야에서 최적의 솔루션을 제공합니다. 이를 통해 고객에게 혁신적인 미디어 서비스를 제공하고 있습니다.