AWS 기술 블로그

VoD 및 Live 환경에서의 광고 개인화 서비스 구성 및 요청 흐름 소개

개요

Free Ad-supported Streaming TV(이하 FAST)는 유료 구독 없이도 광고를 통해 전통적인 TV 프로그래밍과 영화를 제공하는 서비스입니다. 주로 사용자 생성 콘텐츠 플랫폼(Twitch, Youtube 등)과 구독형 광고 지원 서비스(Amazon Prime Video, Netflix 등)와 구별되는 FAST는 새로운 수익 모델과 서비스를 모색해야 하는 상황에서 탄생한 혁신적인 스트리밍 서비스입니다. 하지만 FAST 서비스를 제공하기 위해서는 다양한 미디어 소스 통합, 개인화된 광고 삽입, 안정적이고 확장 가능한 인프라 구축 등 복잡한 과제가 수반됩니다. 이러한 과제를 해결하는 데 AWS Elemental MediaTailor가 유용한 솔루션이 될 수 있습니다.

AWS Elemental MediaTailor(이하 MediaTailor)는 채널 어셈블리와 개인화된 광고 삽입을 제공하는 서비스입니다. MediaTailor를 이용하면 실시간 라이브 스트리밍부터 VoD 콘텐츠까지 다양한 형식의 미디어 콘텐츠를 통합하고, 사용자 경험에 맞추어 개인화된 광고를 삽입할 수 있습니다. 또한 이 서비스는 AWS의 안정적인 클라우드 인프라를 기반으로 구동되며 확장성과 고가용성을 갖추고 있기 때문에 사용자는 FAST 채널을 보다 쉽고 효율적으로 구축할 수 있습니다. 이번 블로그에서는 VoD 서비스 환경에서 채널 어셈블리를 구성하여 FAST 채널을 생성하고 실시간 방송 송출 환경에서 동적으로 광고를 삽입하는 방법을 살펴보겠습니다. 또한, MediaTailor에서 생성된 스트림이 어떤 식으로 전달되는지 설명합니다.

단계 요약

  • 사전 준비하기
  • MediaTailor 채널 어셈블리 구성하기
  • 실시간 방송 환경에서 개인화 광고 삽입하기
  • 광고 삽입된 스트림 흐름 이해하기

사전 준비하기

실습을 진행하기 위해 아래와 같은 사항을 준비 해야 합니다.

  • AWS 계정
  • 환경 구성을 위한 CloudFormation 템플릿 배포
  • 배포 리소스 확인

[환경 구성을 위한 CloudFormation 템플릿 배포]

  1. AWS Elemental MediaTailor를 사용하기 전에 환경 구성을 위해 링크를 클릭합니다.
  2. 스택 이름으로 기본값인 MediaTailorDemo를 사용하거나 다른 값을 입력하고 별도의 설정 없이 다음을 클릭합니다.
  3. 하단 체크박스를 클릭하고 전송을 클릭합니다. 배포에는 1~2분 가량 소요됩니다.

[배포된 리소스 확인]

배포된 리소스는 AWS Elemental MediaLive의 ‘채널‘ 및 ‘입력‘, AWS Elemental MediaPackage의 ‘채널‘ 및 ‘패키지 타입별(CMAF,DASH,HLS) 엔드포인트’, AWS Elemental MediaTailor의 ‘채널‘ 및 ‘소스 위치‘, 그리고 Amazon S3의 버킷입니다.

  1. 첫 구성에서 AWS Elemental MediaTailor를 사용하여 MediaTailor 채널 어셈블리를 생성합니다.
  2. 두 번째 구성에서 AWS Elemental MediaLive, Elemental MediaPackage, Elemental MediaTailor를 활용하여 라이브 방송 중, 개인화 광고를 삽입합니다.

축하합니다! 실습에 필요한 환경을 성공적으로 배포하였습니다.

MediaTailor 채널 어셈블리 구성하기

그림 1 – MediaTailor 채널 어셈블리의 구성요소

[사용 사례]

프로그램 제작자들은 자신들이 보유한 본 영상과 광고 영상들을 콘텐츠 소스라는 저장소에 안전하게 보관할 수 있습니다. 여기서 본 영상의 특정 구간에 광고 영상을 삽입하는 형태로 VoD 기반의 FAST 채널을 만들 수가 있습니다.

[구성요소 설명]

채널이란 시청자가 TV의 채널 몇 번을 선택하는 것과 같은 개념으로 시청자가 선택할 수 있는 최소 선택 단위입니다. ‘프로그램’은 그 채널안에 특정 시간 기간에 보여지는 드라마, 스포츠, 예능등의 프로그램을 이야기 합니다. 그리고 광고는 그 프로그램 중간이나 프로그램 사이에 나오는 광고의 슬롯을 의미합니다. 이런 구조를 바탕으로 단일 채널을 여러 개의 프로그램으로 구성할 수 있습니다. 하나의 프로그램 안에는 하나의 컨텐츠(VoD) 소스와 여러개의 광고로 구성하실 수 있습니다.

채널 안의 프로그램과 광고를 보여주는 비디오/오디오 파일들은 소스 위치라는 개념으로 관리됩니다.
소스 위치는 저장소의 도메인이 포함된 접두사(prefix) 경로이고, 소스 그룹이라고도 합니다. 위 다이어그램은 동일한 S3 버킷을 사용하고 있고, vods/ads/라는 접두사로 구분하여 광고와 VOD로 소스 그룹을 나누어 관리할 수 있는 구조입니다.

[배포된 리소스로 MTCA 구성하기]

  1. AWS Elemental MediaTailor 콘솔 좌측의 소스 위치를 클릭하고 생성된 VoDprogram을 클릭합니다. 3개의 영상이 존재하며, 각 영상의 용도는 아래와 같습니다.
    1. VoDmain: 채널의 프로그램 구성시, 메인으로 재생될 영상입니다.
    2. 30secslate: 영상 시청 전 재생되는 광고로써 ‘인스트림’, ‘프리롤’ 광고의 개념입니다.
    3. Adprogram: 정해진 시점에 지정된 시간만큼 재생되는 광고입니다.
  2. 콘솔 좌측의 채널을 클릭하고 채널 생성을 클릭합니다.
  3. 이름MyChannel을 입력하고 다음을 클릭한 후, 매니페스트 이름index를 입력합니다.
    1. 여기서 매니페스트 이름은 HLS 및 DASH를 지원하는 브라우저나 애플리케이션에서 매니페스트 파일을 읽을 때 사용하는 이름으로 여기서는 디폴트 값인 index를 입력합니다.
  4. 액세스 제어에서는 채널 정책을 설정할 수 있으며, 여기서는 퍼블릭 정책 연결을 선택합니다.
  5. 그 외 설정은 그대로 두고 채널을 생성합니다.
  6. 채널이 생성되면 채널을 클릭하고 프로그램 추가를 클릭합니다.
  7. 아래와 같이 이름에 MyProgram을 입력하고 소스 위치는 VoDprogram, VOD 소스는 VoDmain을 선택합니다.

    그림 2 – 프로그램에서 재생될 메인 영상 선택

  8. 광고를 삽입하기 위해 우측 상단의 광고 시간 추가를 클릭합니다.
  9. 광고 시간 1에 영상 시청 전 재생되는 30초 광고로 VoDprogram 위치의 30secslate를 선택합니다.
  10. 가능성 번호(Avail number), 스플라이스 이벤트 ID(Splice event ID), 고유 프로그램 ID(Unique program ID)는 각각 1을 입력합니다.
    1. 가능성 번호(Avail number): 프로그램 중간에 광고를 삽입할 때마다 부여되는 번호
    2. 예상 가능성(Avails expected): 채널에서 예상되는 총 광고 삽입 기회 수를 나타내는 설정값
    3. 스플라이스 이벤트 ID(Splice event ID): 실제로 광고를 삽입할 때 부여되는 고유 번호
    4. 고유 프로그램 ID(Unique program ID): 방송되는 각 프로그램마다 부여되는 고유 번호

    그림 3 – 광고 시간 1에 0초 구간에 실행되는 30초 분량 광고 등록

  11. 우측 상단 광고 시간 추가를 클릭하고 영상 중간에 플레이 될 두번째 광고를 입력합니다.
    1. 광고 입력으로는 VoDprogram 위치의 Adprogram을 선택합니다.
    2. 오프셋(밀리초)(Offset in millisecond)에 60000을 입력합니다. 이는 60초를 의미하며 첫번째 광고가 끝난 후 60초가 지난 구간에 실행되는 것을 의미합니다.
    3. DASH 혹은 HLS로 스트리밍할 때, 메인 영상과 중간에 삽입될 광고의 세그먼트 단위가 동일해야 합니다. 배포된 환경에서는 모든 영상 세그먼트를 6초로 지정하여 트랜스코딩하였으므로 6초 단위의 지점에 광고를 삽입할 수 있습니다. (예. 66초, 84초: O, 70초, 92초: X)
    4. 가능성 번호(Avail number), 스플라이스 이벤트 ID(Splice event ID), 고유 프로그램 ID(Unique program ID)는 각각 2를 입력합니다.

    그림 4 – 광고 시간 2에 중간 광고 등록

  12. 프로그램을 생성합니다.
  13. 프로그램이 생성되면 채널로 이동하여 시작을 클릭하고 출력 탭의 재생 url을 복사하여 재생합니다. (예: https://xxxxxxxxxx.xxxx.channel-assembly.mediatailor.us-east-1.amazonaws.com/v1/channel/MTCAxxxxx/index.m3u8)
    1. 권장 사항으로는 Apple SafariMicrosoft Edge 브라우저 또는 VLC player를 사용합니다.
  14. 아래는 URL 입력 시, 재생되는 영상의 순서입니다.

    그림 5 – URL 입력 시 재생되는 영상 순서

실시간 방송 환경에서 개인화 광고 삽입하기

그림 6 – Elemental 서비스를 활용한 개인화 광고 삽입 아키텍쳐

[사용 사례]

VoD 환경에서 영상 구간에 광고를 삽입하는 형태가 아닌 실시간 방송 중, 광고 서버와의 통신을 통해 시청자 별 개인화된 광고를 삽입할 수 있습니다. 써드파티 솔루션을 사용할 경우, 각 솔루션에서 제공하는 방식으로 광고 서버와의 통신을 할 수 있고 AWS 네이티브 서비스를 활용할 경우에는 AWS Elemental MediaLive 서비스의 일정 기능을 활용할 수 있습니다. 이를 통해 송출 담당자는 직접 큐톤 신호를 입력하여 지정된 구간에 CUE-OUT, CUE-IN 할 수 있습니다.
*AWS Command Line Interface 혹은 콘솔에서 수행할 수 있으며, 여기서는 콘솔에서 진행합니다.

[구성요소 설명]

실시간 방송환경에서 MediaLive와 MediaPackage를 통해 시청자의 재생 환경에 최적화된 화질로 전달할 수 있습니다. 해당 파이프라인에 MediaTailor를 삽입함으로써 서버단에서 광고를 삽입한 스트림을 전달할 수 있습니다. 위의 아키텍처는 이런 사용 사례에 따른 단순화된 아키텍처입니다. 위 구성 요소는 Content Delivery Network(이하 CDN)인 Amazon CloudFront, 광고를 삽입하는 서비스인 MediaTailor를 사용하였습니다. 그리고 MediaTailor 자체에는 광고와 본영상 간의 광고 삽입을 위한 광고영상에 대한 실시간 관리형 트랜스코더와 트랜스코딩된 광고 영상을 저장하기 위한 S3를 가지고 있습니다. Ad Decision Server(이하 광고 서버)는 광고 시점(Ad break)에 어떤 광고를 삽입할지, 그리고 시청자가 광고를 얼마나 보았는지에 대한 정보를 전달 및 수집하는 역할을 하는 서버입니다. Ad Assets Repository는 광고 서버에서 전달해 주는 광고의 영상 파일들이 저장되어 있는 저장소입니다. 광고 시간(Ad break)은 MediaLive의 일정(Schedule) 기능을 통해서 SCTE-35를 이용하여 추가할 수 있습니다. 이런 구조를 통해서 직접 광고를 삽입할 수 있는 실습을 아래의 내용을 통해 해 보실 수 있습니다.

[배포된 리소스로 개인화 광고 삽입하기]

  1. MediaPackage 콘솔로 이동합니다.
  2. 라이브 v1(Live v1)의 채널 중 mediatailordemo 를 선택하고 오리진 엔드포인트 중 Apple HLS 패키지 유형의 엔드포인트 URL을 복사합니다.
  3. MediaTailor 콘솔 좌측의 광고 삽입구성으로 이동하여 구성 생성을 클릭합니다.
  4. 이름에 DynamicAd를 입력하고 콘텐츠 소스에는 앞서 복사한 HLS 엔드포인트 URL을 입력합니다. 이때 /index.m3u8은 제외하고 붙여넣습니다.

    그림 7 – MediaPackage의 Apple HLS Endpoint URL 삽입 아키텍쳐

  5. Ad Decision server에 광고 서버 영상을 호출하는 xml파일(https://aws-korea-tech-blog-public.s3.ap-northeast-2.amazonaws.com/20240408MediatailorMTCAdynamicad/xml/ad.xml)을 입력하고 생성합니다.

    그림 8 – 구성 설정 예시

  6. 구성 생성 후, 콘텐츠 및 오리진 세부 정보 탭의 HLS 재생 접두사를 복사합니다.
  7. AWS Elemental Medialive로 이동하여 좌측 채널mediatailordemo를 클릭하고 우측 상단의 시작을 클릭합니다.
  8. {4번에서 복사한 HLS 재생 접두사}/index.m3u8 를 브라우저 혹은 플레이어에 입력하여 영상을 플레이합니다.

    그림 9 – MediaLive 채널 시작 및 파이프라인 상태 확인

  9. 출력되는 라이브 영상에 광고를 삽입하기 위해 MediaLive 채널 콘솔 하단 탭의 일정 탭을 클릭하고 생성을 클릭합니다.
  10. 아래와 같이 입력하고 생성을 클릭합니다. (뜻: 즉시 1분 동안 SCTE-35 신호(ID 1)를 삽입하도록 설정)
    • 작업 이름(Action name): ImmediateAd test
    • 시작 유형(Start type): 즉시(Immediate)
    • 작업 유형(Action type): SCTE-35 스플라이스 삽입(SCTE-35 Splice insert)
    • 스플라이스 이벤트 ID(Splice event ID): 1
    • 기간(Duration): 60000(60초)

    그림 10 – MediaLive 일정(Schedule) 설정 예시

  11. 영상 도중 광고가 재생되고 다시 본래의 메인 영상이 시작되는 것을 확인합니다. MediaLive에서 인코딩을 거쳐서 HLS 혹은 DASH로 패키징 되기까지 시간이 소요될 수 있습니다. 여기서 중요한 것은 광고가 종료될 때, 광고 시작 전, 본 영상이 끊긴 시점부터 재성되는 것이 아니라 광고 시간만큼 본 영상의 시간이 지나있다는 것입니다.

광고 삽입된 스트림 흐름 이해하기

이 단계에서는 Elemental MediaTailor를 활용할 때, 시청자의 요청에 따라 개인화된 매니페스트(m3u8, mpd)가 어떻게 전달되는지, 그리고 콘텐츠 영상과 광고 영상이 어떻게 전달되고, 광고 시청 여부를 어떤 식으로 전달하는지에 대한 흐름을 설명합니다. 이러한 흐름을 이해하면서 CDN 설정 시 유의사항과 개인화된 광고에서 광고 서버와의 연동을 파악하여, 광고 서버 통합을 보다 원활하게 할 수 있습니다.

[매니페스트(Manifest) 파일 흐름]

시청자가 영상을 요청할 때는 매니페스트 파일을 우선 요청합니다. 매니페스트는 시청자가 사용하는 장비에서 재생할 비디오, 오디오 등의 미디어 조각(chunk) 리스트를 가지고 있는 파일입니다. MediaLive + MediaPackage 라이브 환경에서는 MediaPackage의 엔드포인트를 통해서 매니페스트를 받을 수 있습니다. 이 매니페스트는 광고가 없는 메인 스트림으로 모든 사용자가 동일한 파일을 받습니다. 그래서 보통은 CloudFront(이하 CF)에서 일정 기간 해당 파일을 캐싱하고 각각 사용자에게 전달하는 캐싱 구조를 이용합니다. 하지만, 사용자 간에 다른 광고를 보여주기 위해서는 매니페스트에 사용자마다 다른 광고를 재생할 수 있게, 미디어 조각을 다르게 구성해야 합니다. 이런 매니페스트는 아래의 흐름처럼, MediaTailor에서 사용자마다 다른 광고 영상 주소를 넣은 새로운 매니페스트를 생성합니다. 광고 영상 주소는 광고 서버에서 사용자의 특성을 나타내는 파라미터들을 전달해서 VAST 규격으로 광고 정보를 받고, MediaTailor 내부의 관리형 트랜스코더를 통해 트랜스코딩된 경로입니다. 이런 개인화된 매니페스트들은 CDN에 캐싱되지 않고, 시청자마다 새롭게 생성된 매니페스트를 전달합니다. 이런 흐름을 잘 고민하여 CDN에서 매니페스트의 캐싱 여부 설정을 결정합니다.

그림 11 – 개인화된 매니페스트 전달 흐름

[미디어 조각(chunk) 파일 흐름]

다음으로 미디어 조각 파일에 대한 전달 흐름에 대해서 설명합니다. MediaTailor는 미디어 조각 파일의 전송 여부를 추적하여 사용자가 광고를 얼마나 시청했는지 모니터링하고, 해당 정보를 광고 서버에 보고하는 서버 측 리포팅 기능을 제공합니다. 시청자는 콘텐츠 조각파일을 CF를 통해 MediaPackage에서 응답을 받아옵니다. 콘텐츠 스트리밍 중 광고 삽입 시점이 되면, CF를 통해 광고 조각파일을 요청합니다. 그리고 해당 요청은 MediaTailor 서비스 내부의 CF를 통해서 내부 S3에 요청을 하게 됩니다. 광고 조각파일이 시청자에게 전달되면, MediaTailor는 해당 시청자에게 전달된 광고 조각파일 기반으로 광고 시청 정보를 추적하여 광고 서버에 보고합니다.

그림 12 – 광고 및 콘텐츠 미디어 조각(chunk)파일 전달 흐름

결론

이번 블로그를 통해 AWS Elemental MediaTailor를 활용하여 FAST 채널을 구성하고 개인화 광고를 삽입하는 방법을 살펴보았습니다. VoD 콘텐츠와 실시간 스트리밍 환경에서 AWS Elemental 서비스를 조합하여 미디어 서비스를 구축하는 과정을 실습해 보며 이해할 수 있었습니다. 또한 광고가 삽입된 스트림의 전달 흐름을 아키텍처를 기준으로 확인하고 매니페스트 및 미디어 조각 파일의 전달 방식을 이해했습니다.

이러한 아키텍처를 활용하면 개인화 광고 삽입, 안정적 서버사이드 미디어 광고 서비스 구축의 과제를 해결할 수 있습니다. AWS Elemental MediaTailor 개발자 가이드를 통해 더 자세한 정보를 확인할 수 있으며, Elemental MediaTailor 블로그 내용을 참조하여 향후 광고 정보 분석, 고도화된 광고 서버 생성 등의 액션 아이템을 수행하여 광고 플랫폼을 고도화할 수 있습니다.

TaeHoon Kyeong

TaeHoon Kyeong

Kyeong Tae-Hoon (Nick) is a solutions architect at AWS responsible for optimizing architecture for media and entertainment customers to achieve their desired business results. 경태훈(Nick) 솔루션즈 아키텍트는 미디어 및 엔터테인먼트 고객이 원하는 비즈니스 결과를 얻을 수 있도록 아키텍처를 최적화하는 역할을 담당하고 있습니다.

Yuntaek Lim

Yuntaek Lim

임윤택 솔루션즈 아키텍트는 미디어 및 엔터테인먼트 고객들이 원하는 비즈니스 결과를 달성할 수 있도록 최적의 아키텍처를 설계하는 역할을 맡고 있습니다. OTT 산업의 기술 배경지식을 바탕으로 미디어 산업에 기술적으로 기여하고자 노력하고 있습니다.