您可以使用 IMA SDK 輕鬆將多媒體廣告整合至網站和應用程式。IMA SDK 可向任何 符合 VAST 規定的廣告伺服器要求廣告,並管理應用程式中的廣告播放作業。透過 IMA DAI SDK,應用程式會針對廣告和內容影片 (隨選影片或直播內容) 提出串流要求。接著,SDK 會傳回合併的影片串流,因此您不必在應用程式中管理廣告和內容影片之間的切換。
選取感興趣的動態廣告解決方案
DAI 廣告連播放送
本指南將說明如何使用 iOS 專用的 IMA DAI SDK 搭配影片播放器,播放 DAI 廣告連播放送直播或 VOD 串流。如要查看或瞭解完成的整合範例,請下載 Objective-C 或 Swift 的 Pod 服務範例。
IMA DAI 廣告連播放送功能總覽
使用 iOS 版 IMA DAI SDK 導入廣告連播放送功能,需要兩個主要元件:
StreamRequest
:定義 Google 廣告伺服器串流要求的物件。必須使用IMAPodStreamRequest
或IMAPodVODStreamRequest
建立,才能啟用廣告連播服務。這兩種方法都需要網路代碼,IMAPodStreamRequest
還需要自訂資產金鑰。API 金鑰為選填項目。IMAStreamManager
:這個物件會處理影片串流和 IMA DAI SDK 之間的通訊,例如觸發追蹤 ping 和將串流事件轉寄給發布者。
必要條件
開始之前,請先準備下列項目:
- Xcode 13 以上版本。
- CocoaPods (建議使用)、Swift Package Manager 或 IMA DAI SDK for iOS 的下載副本。
- 已設定 iOS 應用程式,使用 IMA DAI SDK 播放含有 DAI 廣告的影片串流。如果您還沒有這類應用程式,建議您先使用 iOS DAI 基本範例。BasicExample 包含本指南所參照的程式碼集。如要進一步瞭解如何導入 IMA DAI SDK,請參閱快速入門指南。
設定 Pod 放送變數
所有 Pod 服務所需的變更,都會在 Swift 的 ViewController.swift 或 Objective-C 的 ViewController.m 中完成。本指南中的程式碼片段預設使用 Swift 語言。第一步是更新常數變數。
以下是新增的廣告連播串流要求常數:
STREAM_URL
(僅用於直播):使用 Pod 放送服務的資訊清單操作者或第三方合作夥伴提供的影片串流網址。您必須先插入 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 =
"https://encodersim.sandbox.google.com/masterPlaylist/9c654d63-5373-4673-8c8d-6d92b66b9d46/master.m3u8?gen-seg-redirect=true&network=51636543&event=google-sample&pids=devrel4628000,devrel896000,devrel3528000,devrel1428000,devrel2628000,devrel1928000&seg-host=dai.google.com&stream_id=[[STREAMID]]"
static let networkCode = "51636543"
static let customAssetKey = "google-sample"
static let APIKey = ""
static let backupStreamURLString =
"http://googleimadev-vh.akamaihd.net/i/big_buck_bunny/bbb-,480p,720p,1080p,.mov.csmil/master.m3u8"
var adsLoader: IMAAdsLoader?
...
建立直播或 VOD 廣告連播串流要求
直播 Pod 放送
修改 requestStream
方法,透過例項化 IMAPodStreamRequest
建立 Pod 串流即時要求。
...
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 串流 Pod 放送
修改 requestStream
方法,透過例項化 IMAPodVODStreamRequest
建立 VOD Pod 串流要求。
...
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)
}
...
編輯並設定串流網址
直播 Pod 放送
修改 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
}
...
VOD 串流 Pod 放送
修改 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 在 Pod 放送串流中成功完成廣告請求和顯示作業後,建議您在 Pod 放送工作階段結束後清理所有資源。呼叫 IMAStreamManager.destroy()
可停止串流播放、停止所有廣告追蹤,並釋放所有已載入的串流資產。
如要查看其他 iOS SDK 使用範例,請參閱 GitHub 上的範例。