IMA SDK упрощают интеграцию мультимедийной рекламы на ваши веб-сайты и приложения. IMA SDK могут запрашивать рекламу с любого рекламного сервера , совместимого с VAST, и управлять воспроизведением рекламы в ваших приложениях. С помощью SDK IMA DAI приложения отправляют потоковый запрос на рекламу и видеоконтент — либо VOD, либо контент в реальном времени. Затем SDK возвращает объединенный видеопоток, так что вам не придется управлять переключением между рекламой и видеоконтентом в вашем приложении.
Выберите решение DAI, которое вас интересует
Под, обслуживающий DAI
В этом руководстве показано, как воспроизводить поток DAI Pod Serving в прямом эфире или поток VOD с помощью IMA DAI SDK для tvOS с помощью видеоплеера. Чтобы просмотреть или проследить за завершенным примером интеграции, загрузите пример приложения Pod Serving ( Obj C или Swift ).
Обзор обслуживания модулей IMA DAI
Реализация обслуживания подов с использованием IMA DAI SDK для tvOS включает два основных компонента:
StreamRequest
: объект, определяющий запрос потока к рекламным серверам Google. Должен быть создан с помощьюIMAPodStreamRequest
илиIMAPodVODStreamRequest
чтобы включить обслуживание модулей. Оба метода требуют сетевого кода , аIMAPodStreamRequest
также требует пользовательского ключа актива . Ключ API не является обязательным.IMAStreamManager
: объект, который обрабатывает связь между видеопотоком и IMA DAI SDK, например отправляет запросы отслеживания и пересылает события потока издателю.
Предварительные условия
Прежде чем начать, вам необходимо следующее:
- Xcode 13 или новее.
- CocoaPods (предпочтительно), Swift Package Manager или загруженная копия IMA DAI SDK для tvOS .
- Приложение tvOS уже настроено с помощью IMA DAI SDK для воспроизведения видеопотоков с рекламой DAI. Если у вас еще нет такого приложения, мы рекомендуем использовать tvOS DAI BasicExample в качестве отправной точки. BasicExample имеет базу кода, указанную в этом руководстве. Дополнительные сведения о внедрении IMA DAI SDK см. в кратком руководстве .
Настройте переменные обслуживания подов
Все изменения, необходимые для обслуживания модулей, выполняются в ViewController.swift
в Swift или ViewController.m
в Objective-C. Фрагменты в этом руководстве по умолчанию используют язык Swift. Первым шагом является обновление постоянных переменных.
Вот константы запроса потока рекламного модуля, которые нужно добавить:
-
STREAM_URL
( используется только для прямых трансляций ): URL-адрес видеопотока, предоставленный вашим манипулятором манифеста или сторонним партнером, использующим Pod Serving. Прежде чем делать запрос, вам потребуется ввести идентификатор потока, предоставленный IMA DAI SDK. В этом случае URL-адрес потока включает заполнитель"[[STREAMID]]"
, который заменяется идентификатором потока перед выполнением запроса. -
NETWORK_CODE
: код сети вашего аккаунта Менеджера рекламы 360. -
CUSTOM_ASSET_KEY
( используется только для прямых трансляций ): специальный ключ актива, который идентифицирует ваше событие обслуживания модулей в Менеджере рекламы 360. Он может быть создан вашим манипулятором манифеста или сторонним партнером по обслуживанию модулей. -
API_KEY
( используется только для прямых трансляций ): дополнительный ключ API, который может потребоваться для получения идентификатора потока из IMA DAI SDK.
Измените раздел переменных примера так, чтобы он соответствовал следующему:
...
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?
...
Создайте запрос на поток модуля в реальном времени или по запросу.
Обслуживание модулей прямой трансляции
Измените метод 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)
}
...
Обслуживание модулей VOD-потоков
Измените метод requestStream
, чтобы создать запрос потока модуля VOD, создав экземпляр IMAPodVODStreamRequest
.
...
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-адрес потока
Обслуживание модулей прямой трансляции
Измените методы IMAAdsLoaderDelegate
, streamManager.streamId
для получения идентификатора потока. Затем вставьте идентификатор потока в STREAM_URL
, заменив "[[STREAMID]]"
. После внесения этого изменения новый URL-адрес потока можно будет установить с помощью 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-потоков
Измените методы IMAAdsLoaderDelegate
, streamManager.streamId
для получения идентификатора потока. Затем запросите URL-адрес потока у своего партнера по видеотехнологиям (VTP) и вызовите 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 .