С помощью IMA SDK можно легко интегрировать мультимедийные объявления в сайты и приложения. IMA SDK могут запрашивать объявления у любого совместимого с VAST сервера объявлений и управлять воспроизведением рекламы в ваших приложениях. С помощью IMA DAI SDK приложения отправляют запрос потока для видеообъявления и контента (видео по запросу или трансляции). Затем SDK возвращает комбинированный видеопоток, поэтому вам не нужно управлять переключением между рекламой и контентом в приложении.
Выберите решение для динамической вставки объявлений
Показ пакетов с динамической вставкой объявлений
В этом руководстве рассказывается, как воспроизводить прямые трансляции и видео по запросу с динамической вставкой объявлений с помощью IMA DAI SDK для tvOS и видеопроигрывателя. Чтобы посмотреть или использовать готовую интеграцию, скачайте пример приложения с пакетным показом (Obj C или Swift).
Общие сведения о показе пакетов с динамической вставкой объявлений в IMA DAI
Чтобы реализовать показ пакетов с помощью IMA DAI SDK для tvOS, вам понадобятся два основных компонента:
StreamRequest– объект, который определяет запрос потока к рекламным серверам Google. Чтобы включить показ пакетов, необходимо создать объект с помощьюIMAPodStreamRequestилиIMAPodVODStreamRequest. Для обоих методов требуется код сети, а дляIMAPodStreamRequestтакже нужен специальный ключ объекта. Ключ API не обязателен.IMAStreamManager– объект, который обрабатывает связь между видеопотоком и IMA DAI SDK, например отправляет пинги отслеживания и пересылает события потока издателю.
Требования
Прежде чем начать, вам понадобится следующее:
- Xcode 13 или более поздней версии.
- Способ установки IMA SDK:
- Swift Package Manager (рекомендуется)
- Копия для скачивания IMA 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 видеопотока, предоставленный манипулятором манифеста или внешним партнером, использующим показ пакетов. Вам нужно будет вставить идентификатор трансляции, предоставленный 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 = ""
static let networkCode = ""
static let customAssetKey = ""
static let APIKey = ""
static let backupStreamURLString = ""
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)
}
...
Показ пакетов в видеопотоке по запросу
Измените метод requestStream, чтобы создать запрос на пакетную трансляцию видео по запросу, создав экземпляр 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
}
...
Показ пакетов в видеопотоке по запросу
Измените методы IMAAdsLoaderDelegate, используя streamManager.streamId, чтобы получить идентификатор потока. Затем запросите URL трансляции у своего партнера по видеотехнологиям и вызовите функцию 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
После того как вы успешно запросите и покажете объявления в потоке с пакетной передачей, используя IMA DAI SDK, мы рекомендуем очистить все ресурсы. Вызовите метод IMAStreamManager.destroy(), чтобы остановить воспроизведение трансляции, отслеживание рекламы и освободить все загруженные объекты трансляции.
Другие примеры использования tvOS SDK можно найти на GitHub.