SDK IMA упрощают интеграцию мультимедийной рекламы в ваши веб-сайты и приложения. SDK IMA могут запрашивать рекламу с любого рекламного сервера , совместимого с VAST , и управлять воспроизведением рекламы в ваших приложениях. С SDK IMA DAI приложения отправляют запрос на потоковое видео, включающее рекламу и контент — либо видео по запросу, либо прямой эфир. Затем SDK возвращает объединенный видеопоток, так что вам не нужно управлять переключением между рекламой и контентом внутри вашего приложения.
Выберите интересующее вас решение DAI.
Подача капсул DAI
В этом руководстве показано, как воспроизводить прямые трансляции или видео по запросу (VOD) из DAI Pod Serving с помощью IMA DAI SDK для tvOS на видеоплеере. Чтобы посмотреть или выполнить пример интеграции, загрузите пример приложения Pod Serving ( на языке Objective C или Swift ).
Обзор системы подачи напитков в капсулах IMA DAI
Реализация Pod Serving с использованием IMA DAI SDK для tvOS включает в себя два основных компонента:
StreamRequest: Объект, определяющий запрос потока на рекламные серверы Google. Для включения Pod Serving его необходимо создать с помощьюIMAPodStreamRequestилиIMAPodVODStreamRequest. Оба метода требуют сетевого кода , аIMAPodStreamRequestтакже требует пользовательского ключа ресурса . Ключ API является необязательным.IMAStreamManager: Объект, который обрабатывает обмен данными между видеопотоком и SDK IMA DAI, например, отправляет запросы на отслеживание и пересылает события потока издателю.
Предварительные требования
Прежде чем начать, вам потребуется следующее:
- Xcode 13 или более поздняя версия.
- CocoaPods (предпочтительно), Swift Package Manager или загруженная копия IMA DAI SDK для tvOS .
- Приложение tvOS, уже настроенное с использованием SDK IMA DAI, воспроизводит видеопотоки с рекламой DAI. Если у вас еще нет такого приложения, мы рекомендуем использовать tvOS DAI BasicExample в качестве отправной точки. В BasicExample содержится код, на который ссылается это руководство. Для получения дополнительной информации о том, как внедрить SDK IMA DAI, см. руководство по быстрому запуску .
Настройте переменные для запуска пода.
Все изменения, необходимые для Pod Serving, вносятся в файл ViewController.swift на Swift или ViewController.m на Objective-C. В приведенных в этом руководстве фрагментах кода по умолчанию используется язык Swift. Первым шагом является обновление константных переменных.
Вот константы запроса потока рекламных блоков, которые необходимо добавить:
-
STREAM_URL( используется только для прямых трансляций ): URL видеопотока, предоставленный вашим манипулятором манифеста или сторонним партнером, использующим Pod Serving. Перед отправкой запроса необходимо указать идентификатор потока, предоставленный SDK IMA DAI. В данном случае URL потока содержит заполнитель"[[STREAMID]]", который заменяется идентификатором потока перед отправкой запроса. -
NETWORK_CODE: Сетевой код для вашей учетной записи Ad Manager 360. -
CUSTOM_ASSET_KEY( используется только для прямых трансляций ): пользовательский ключ ресурса, идентифицирующий событие Pod Serving в Ad Manager 360. Он может быть создан вашим манипулятором манифеста или сторонним партнером по Pod Serving. -
API_KEY( Only used for livestreams ): An optional API key that can be required to retrieve a stream ID from the IMA DAI SDK.
Измените раздел переменных в примере следующим образом:
...
class ViewController:
UIViewController,
IMAAdsLoaderDelegate,
IMAStreamManagerDelegate,
AVPlayerViewControllerDelegate
{
static let streamUrl = ""
static let networkCode = ""
static let customAssetKey = ""
static let APIKey = ""
static let backupStreamURLString = ""
var adsLoader: IMAAdsLoader?
...
Создайте запрос на прямую трансляцию или запись подкаста.
Livestream Pod Serving
Измените метод 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-адрес потока и любые субтитры, возвращенные вашим партнером по видеотехнологиям.
...
// 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
When you have successfully finished requesting and displaying ads in a Pod Serving stream with IMA DAI SDK, we suggest you clean up any resources after the Pod Serving session is complete. Call IMAStreamManager.destroy() to stop stream playback, stop all ad tracking, and release all of the loaded stream assets.
Другие примеры использования tvOS SDK можно найти на GitHub .