IMA SDK を使用すると、マルチメディア広告をウェブサイトやアプリに簡単に統合できます。IMA SDK は、 VAST 準拠のあらゆる広告サーバーから広告をリクエストし、アプリでの広告再生を管理できます。IMA DAI SDK を使用すると、アプリは広告とコンテンツ動画(VOD またはライブ コンテンツ)のストリーム リクエストを行います。SDK は結合された動画ストリームを返すため、アプリ内で広告とコンテンツの動画を切り替える処理を管理する必要はありません。
関心のある DAI ソリューションを選択する
Pod Serving DAI
このガイドでは、tvOS 向け IMA DAI SDK と動画プレーヤーを使用して、DAI Pod Serving のライブ ストリームまたは VOD ストリームを再生する方法について説明します。完了したサンプル統合を表示またはフォローするには、Pod Serving サンプルアプリ(Obj C または Swift)をダウンロードします。
IMA DAI Pod Serving の概要
tvOS 用 IMA DAI SDK を使用して Pod Serving を実装するには、次の 2 つの主要コンポーネントが必要です。
StreamRequest: Google の広告サーバーへのストリーム リクエストを定義するオブジェクト。Pod サービングを有効にするには、IMAPodStreamRequestまたはIMAPodVODStreamRequestを使用して作成する必要があります。どちらのメソッドでもネットワーク コードが必要です。また、IMAPodStreamRequestではカスタム アセットキーも必要です。API キーは省略可能です。IMAStreamManager: 動画ストリームと IMA DAI SDK 間の通信を処理するオブジェクト(トラッキング ピングの発行、ストリーム イベントのパブリッシャーへの転送など)。
前提条件
始める前に、次のものが必要になります。
- Xcode 13 以降。
- IMA SDK のインストール方法:
- Swift Package Manager(推奨)
- CocoaPods
- tvOS 向け IMA SDK のダウンロード コピー
- DAI 広告を含む動画ストリームを再生するように IMA DAI SDK がすでに設定されている tvOS アプリ。そのようなアプリをまだお持ちでない場合は、tvOS DAI BasicExample を出発点として使用することをおすすめします。BasicExample には、このガイドで参照されているコードベースがあります。IMA DAI SDK の実装方法について詳しくは、クイック スタートガイドをご覧ください。
Pod Serving 変数を設定する
Pod Serving の変更はすべて、Swift の ViewController.swift または Objective-C の ViewController.m で行います。このガイドのスニペットは、デフォルトで Swift 言語を使用します。最初のステップは、定数変数を更新することです。
次の広告ポッド ストリーム リクエスト定数を追加します。
STREAM_URL(ライブ配信でのみ使用): マニフェスト マニピュレータまたは Pod Serving を使用するサードパーティ パートナーから提供された動画ストリーム URL。リクエストを行う前に、IMA DAI SDK から提供されたストリーム ID を挿入する必要があります。この場合、ストリーム URL にはプレースホルダ"[[STREAMID]]"が含まれます。リクエストを行う前に、このプレースホルダをストリーム ID に置き換えます。NETWORK_CODE: アド マネージャー 360 アカウントのネットワーク コード。CUSTOM_ASSET_KEY(ライブ配信でのみ使用): アド マネージャー 360 で Pod 配信イベントを識別するカスタム アセットキー。これは、マニフェスト マニピュレータまたは第三者の Pod Serving パートナーが作成できます。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 ポッド ストリーム リクエストを作成する
ライブ配信 Pod のサービング
IMAPodStreamRequest をインスタンス化してライブ Pod ストリーム リクエストを作成するように 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 ストリームの Pod サービング
IMAPodVODStreamRequest をインスタンス化して VOD Pod ストリーム リクエストを作成するように 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 を編集して設定する
ライブ配信 Pod のサービング
streamManager.streamId を使用してストリーム ID を取得するように、IMAAdsLoaderDelegate メソッドを変更します。次に、STREAM_URL にストリーム ID を挿入し、"[[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 ストリームの Pod サービング
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 を使用して Pod サービング ストリームで広告のリクエストと表示を正常に完了したら、Pod サービング セッションの完了後にリソースをクリーンアップすることをおすすめします。IMAStreamManager.destroy() を呼び出して、ストリームの再生を停止し、すべての広告トラッキングを停止して、読み込まれたすべてのストリーム アセットを解放します。
tvOS SDK の使用例については、GitHub のサンプルをご覧ください。