本指南說明如何使用 tvOS 專用 IMA DAI SDK 搭配影片播放器,播放 DAI 廣告連播放送直播或 VOD 串流。如要查看或按照完整的整合範例操作,請下載 Pod Serving 範例應用程式 (Obj C 或 Swift)。
IMA DAI 廣告連播放送總覽
使用 tvOS 適用的 IMA DAI SDK 導入廣告連播放送功能,主要包含兩個部分:
StreamRequest:這個物件定義向 Google 廣告伺服器提出的串流請求。必須使用IMAPodStreamRequest或IMAPodVODStreamRequest建立,才能啟用廣告連播放送。這兩種方法都需要聯播網代碼,IMAPodStreamRequest則還需要自訂素材資源金鑰。API 金鑰為選用項目。IMAStreamManager:這個物件會處理影片串流和 IMA DAI SDK 之間的通訊,例如觸發追蹤連線偵測 (ping),以及將串流事件轉送給發布商。
必要條件
開始前,請備妥下列項目:
- Xcode 13 以上版本。
- IMA SDK 安裝方法:
- Swift Package Manager (建議)
- 下載 tvOS 專用 IMA SDK
- tvOS 應用程式已設定 IMA DAI SDK,可播放含有 DAI 廣告的影片串流。如果您還沒有這類應用程式,建議您使用 tvOS DAI BasicExample 做為起點。BasicExample 包含本指南參照的程式碼集。如要進一步瞭解如何導入 IMA DAI SDK,請參閱快速入門指南。
設定廣告連播放送變數
在 Swift 的 ViewController.swift 或 Objective-C 的 ViewController.m 中,對廣告連播放送進行所有變更。本指南中的程式碼片段預設使用 Swift 語言。第一步是更新常數變數。
新增下列廣告連播串流請求常數:
STREAM_URL(僅用於直播):資訊清單操控器或使用廣告連播放送的第三方合作夥伴提供的影片串流網址。您必須先插入 IMA DAI SDK 提供的串流 ID,才能提出請求。在這種情況下,串流網址會包含預留位置"[[STREAMID]]",您必須先將其替換為串流 ID,才能提出要求。NETWORK_CODE:Ad Manager 360 帳戶的聯播網代碼。CUSTOM_ASSET_KEY(僅用於直播):在 Ad Manager 360 中,用於識別廣告連播放送事件的自訂素材資源索引鍵。資訊清單操控器或第三方廣告連播放送合作夥伴可以建立這項資訊。API_KEY(僅用於直播):選用的 API 金鑰,可能需要用來從 IMA DAI SDK 擷取串流 ID。
將範例的變數部分變更為:
...
class ViewController:
UIViewController,
IMAAdsLoaderDelegate,
IMAStreamManagerDelegate,
AVPlayerViewControllerDelegate
{
static let streamUrl = ""
static let networkCode = ""
static let customAssetKey = ""
static let APIKey = ""
static let backupStreamURLString = ""
var adsLoader: IMAAdsLoader?
...
建立直播或隨選影片廣告連播串流請求
直播廣告連播放送
修改 requestStream 方法,透過例項化 IMAPodStreamRequest 建立直播廣告連播串流請求。
...
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)
}
...
隨選影片串流廣告連播放送
修改 requestStream 方法,透過例項化 IMAPodVODStreamRequest 建立 VOD 廣告連播串流請求。
...
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)
}
...
編輯及設定串流網址
直播廣告連播放送
修改 IMAAdsLoaderDelegate 方法,使用 streamManager.streamId 取得串流 ID。接著,將串流 ID 插入 STREAM_URL,取代 "[[STREAMID]]"。完成這項變更後,請使用 videoDisplay.loadStream() 設定新的串流網址。
...
// 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
}
...
隨選影片串流廣告連播放送
修改 IMAAdsLoaderDelegate 方法,使用 streamManager.streamId 取得串流 ID。接著,向影片技術合作夥伴 (VTP) 索取串流網址,並呼叫 IMAStreamManager.loadThirdPartyStream(),讓 IMA 載入串流網址和 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 上的範例。