이 가이드에서는 동영상 플레이어와 함께 tvOS용 IMA DAI SDK를 사용하여 DAI 광고 모음 게재 실시간 또는 VOD 스트림을 재생하는 방법을 설명합니다. 완료된 샘플 통합을 보거나 따르려면 광고 모음 게재 예시 앱(Obj C 또는 Swift)을 다운로드하세요.
IMA DAI 광고 모음 게재 개요
tvOS용 IMA DAI SDK를 사용하여 광고 모음 게재를 구현하려면 두 가지 주요 구성요소가 필요합니다.
StreamRequest: Google 광고 서버에 대한 스트림 요청을 정의하는 객체입니다. 포드 서빙을 사용 설정하려면IMAPodStreamRequest또는IMAPodVODStreamRequest을 사용하여 만들어야 합니다. 두 방법 모두 네트워크 코드가 필요하며IMAPodStreamRequest에는 맞춤 저작물 키도 필요합니다. API 키는 선택사항입니다.IMAStreamManager: 동영상 스트림과 IMA DAI SDK 간의 통신(예: 추적 핑 실행 및 스트림 이벤트를 게시자에게 전달)을 처리하는 객체입니다.
기본 요건
시작하기 전에 다음이 필요합니다.
- Xcode 13 이상
- IMA SDK 설치 방법:
- Swift Package Manager(권장)
- tvOS용 IMA SDK의 다운로드 사본
- DAI 광고가 포함된 동영상 스트림을 재생하도록 IMA DAI SDK로 이미 설정된 tvOS 앱. 아직 이러한 앱이 없는 경우 tvOS DAI BasicExample을 시작점으로 사용하는 것이 좋습니다. BasicExample에는 이 가이드에서 참조하는 코드베이스가 있습니다. IMA DAI SDK를 구현하는 방법에 관한 자세한 내용은 빠른 시작 가이드를 참고하세요.
광고 모음 게재 변수 설정
Swift의 ViewController.swift 또는 Objective-C의 ViewController.m에서 포드 서빙을 위한 모든 변경사항을 적용합니다. 이 가이드의 스니펫은 기본적으로 Swift 언어를 사용합니다. 첫 번째 단계는 상수 변수를 업데이트하는 것입니다.
다음 광고 모음 스트림 요청 상수를 추가합니다.
STREAM_URL(라이브 스트림에만 사용됨): 광고 모음 게재를 사용하는 매니페스트 조작자 또는 서드 파티 파트너가 제공하는 동영상 스트림 URL입니다. 요청하기 전에 IMA DAI SDK에서 제공하는 스트림 ID를 삽입해야 합니다. 이 경우 스트림 URL에는 요청을 수행하기 전에 스트림 ID로 대체하는 자리표시자"[[STREAMID]]"가 포함됩니다.NETWORK_CODE: Ad Manager 360 계정의 네트워크 코드입니다.CUSTOM_ASSET_KEY(라이브 스트림에만 사용됨): Ad Manager 360에서 광고 모음 게재 이벤트를 식별하는 커스텀 애셋 키입니다. 매니페스트 조작기 또는 서드 파티 광고 모음 게재 파트너가 이를 만들 수 있습니다.API_KEY(라이브 스트림에만 사용됨): IMA DAI SDK에서 스트림 ID를 가져오는 데 필요한 선택적 API 키입니다.
예시의 변수 섹션을 다음과 일치하도록 변경합니다.
...
class ViewController:
UIViewController,
IMAAdsLoaderDelegate,
IMAStreamManagerDelegate,
AVPlayerViewControllerDelegate
{
static let streamUrl = ""
static let networkCode = ""
static let customAssetKey = ""
static let APIKey = ""
static let backupStreamURLString = ""
var adsLoader: IMAAdsLoader?
...
라이브 또는 VOD 광고 모음 스트림 요청 만들기
라이브 스트림 광고 모음 게재
IMAPodStreamRequest를 인스턴스화하여 라이브 광고 모음 스트림 요청을 만들도록 requestStream 메서드를 수정합니다.
...
func requestStream() {
guard let playerViewController = self.playerViewController else return
guard let adContainerView = self.adContainerView else return
guard let adsLoader = self.adsLoader else return
self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
adDisplayContainer = IMAAdDisplayContainer(
adContainer: adContainerView, viewController: self)
// Create a podserving stream request.
request = IMAPodStreamRequest(
networkCode: self.networkCode,
customAssetKey: self.customAssetKey,
adDisplayContainer: adDisplayContainer,
videoDisplay: self.videoDisplay,
userContext: nil)
adsLoader.requestStream(with: request)
}
...
VOD 스트림 광고 모음 게재
IMAPodVODStreamRequest를 인스턴스화하여 VOD 광고 모음 스트림 요청을 만들도록 requestStream 메서드를 수정합니다.
...
func requestStream() {
guard let playerViewController = self.playerViewController else return
guard let adContainerView = self.adContainerView else return
guard let adsLoader = self.adsLoader else return
self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
adDisplayContainer = IMAAdDisplayContainer(
adContainer: adContainerView, viewController: self)
// Create a podserving stream request.
request = IMAPodVODStreamRequest(
networkCode: self.networkCode,
adDisplayContainer: adDisplayContainer,
videoDisplay: self.videoDisplay,
userContext: nil)
adsLoader.requestStream(with: request)
}
...
스트림 URL 수정 및 설정
라이브 스트림 광고 모음 게재
streamManager.streamId를 사용하여 스트림 ID를 가져오도록 IMAAdsLoaderDelegate 메서드를 수정합니다. 그런 다음 스트림 ID를 STREAM_URL에 삽입하여 "[[STREAMID]]"를 바꿉니다. 이 변경사항을 적용한 후 videoDisplay.loadStream()를 사용하여 새 스트림 URL을 설정합니다.
...
// MARK: - IMAAdsLoaderDelegate
func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
let streamManager = adsLoadedData.streamManager
let streamId = streamManager.streamId
let urlString = streamUrl.replacingOccurrences(of: "[[STREAMID]]", with: streamId)
let loadedStreamUrl = URL(string:urlString)
self.videoDisplay.loadStream(loadedStreamUrl, subtitles:@[])
self.videoDisplay.play()
streamManager.delegate = self
streamManager.initialize(with: nil)
self.streamManager = streamManager
}
...
VOD 스트림 광고 모음 게재
streamManager.streamId를 사용하여 스트림 ID를 가져오도록 IMAAdsLoaderDelegate 메서드를 수정합니다. 그런 다음 동영상 기술 파트너 (VTP)에게 스트림 URL을 요청하고 IMAStreamManager.loadThirdPartyStream()를 호출하여 IMA가 스트림 URL과 TVP에서 반환한 자막을 로드하도록 합니다.
...
// MARK: - IMAAdsLoaderDelegate
func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
let streamManager = adsLoadedData.streamManager
let streamId = streamManager.streamId
// 'vtpInterface' is a place holder for your own video technology partner
// (VTP) API calls.
let streamUrl = vtpInterface.requestStreamURL(streamID)
self.streamManager.loadThirdPartyStream(streamUrl, streamSubtitles:@[])
streamManager.delegate = self
streamManager.initialize(with: nil)
self.streamManager = streamManager
}
IMA DAI 애셋 정리
IMA DAI SDK를 사용하여 광고 모음 게재 스트림에서 광고를 요청하고 표시하는 작업을 완료한 후에는 광고 모음 게재 세션이 완료된 후 리소스를 정리하는 것이 좋습니다. IMAStreamManager.destroy()를 호출하여 스트림 재생을 중지하고, 모든 광고 추적을 중지하고, 로드된 모든 스트림 애셋을 해제합니다.
tvOS SDK를 사용하는 다른 예는 GitHub의 샘플을 참고하세요.