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