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