Спецификация HLS Interstitials представляет собой гибкий способ планирования и вставки рекламы в видео- или аудиопоток. При использовании клиентского подхода ваше приложение полностью контролирует время запроса и воспроизведения рекламных пауз, создавая класс AVPlayerInterstitialEvent . Этот подход не требует добавления тегов EXT-X-DATERANGE в манифесты потока контента. Клиентские HLS Interstitials позволяют динамически вставлять рекламу в любой контент без необходимости изменения манифеста потока или медиафайлов.
В этом руководстве рассматривается интеграция SDK Interactive Media Ads (IMA) в приложение видеоплеера, которое создаёт сеанс прямой трансляции с использованием вставки рекламы на сервере (SGAI) и планирует показ полноэкранных объявлений на стороне клиента. Подробнее см. в разделе «DSAI на сервере» .
Предпосылки
Прежде чем начать, вам понадобится следующее:
Новый проект Xcode, использующий
Storyboardдля пользовательского интерфейса. Подробнее см. в статье Создание проекта Xcode для приложения .Google IMA SDK. Подробнее см. в статье «Настройка IMA SDK для DAI» .
Следующие параметры для вашего запроса прямой трансляции DAI:
-
NETWORK_CODE: Ваш сетевой код Google Ad Manager. -
CUSTOM_ASSET_KEY: Ваша пользовательская строка, идентифицирующая событие прямой трансляции DAI. Событие прямой трансляции должно иметь тип DAI «Pod, обслуживающий манифест».
-
Настройте раскадровку
В файле iPhone.storyboard выполните следующие действия:
- Создайте объект
UIViewкак контейнер для видеоплеера и рекламного пользовательского интерфейса. - Создайте свойство
adUIViewклассаViewControllerдля подключения к объектуUIView. - В объекте
adUIViewсоздайтеUIButton, который будет функционировать как кнопка воспроизведения. - Создайте свойство
playButtonклассаViewControllerдля подключения к объектуUIButtonи функциюonPlayButtonTouchдля обработки нажатий пользователя.
Инициализировать загрузчик рекламы
В событии viewDidLoad основного контроллера представления выполните следующие действия:
- Настройте видеоплеер с использованием классов
AVPlayerиAVPlayerLayer. - Создайте объекты
IMAAdDisplayContainerиIMAAVPlayerVideoDisplay. Контейнер для показа рекламы определяетadUIViewдля IMA DAI SDK для вставки подвидов пользовательского интерфейса рекламы. Объект для показа видео служит мостом между логикой рекламы IMA DAI SDK и системой воспроизведения AVFoundation, отслеживая воспроизведение видеорекламы. - Инициализируйте объект
IMAAdsLoaderс настройками воспроизведения рекламы и локализации пользовательского интерфейса рекламы.
В следующем примере загрузчик рекламы инициализируется с пустым объектом IMASettings :
Подать заявку на трансляцию
Чтобы запросить рекламу для потока контента, создайте объект IMAPodStreamRequest и передайте его экземпляру IMAAdsLoader . При желании задайте свойство adTagParameters , чтобы указать параметры DAI и таргетинга для вашего потока.
В этом примере вызывается метод loadAdStream в событии viewDidAppear :
В вашем производственном приложении вызовите метод loadAdStream после того, как пользователь выберет поток контента.
Обработка событий загрузки потока
Реализуйте протокол IMAAdsLoaderDelegate для обработки успешного или неудачного запроса потока:
- В случае успешного выполнения вы получите объект
IMAAdsLoadedData, содержащийIMAStreamManager. Сохраните значениеstreamManager.streamIdдля текущего сеанса DAI. - В случае неудачи зарегистрируйте ошибку.
В следующем примере обрабатывается событие загрузки потока и регистрируется событие «Не удалось загрузить поток»:
Расписание показов рекламы
Чтобы запланировать рекламную паузу, создайте объект AVPlayerInterstitialEvent . Присвойте свойству templateItems объекта события массив объектов AVPlayerItem , где каждый объект элемента содержит URL-адрес манифеста рекламного модуля.
Чтобы создать URL-адрес манифеста рекламного модуля, следуйте методу: документация по манифесту модуля HLS .
Для демонстрации следующий пример генерирует строку идентификатора модуля, используя текущее время прямой трансляции контента. Функция generatePodIdentifier возвращает идентификатор модуля в виде ad_break_id/mid-roll-{minute} .
В своем производственном приложении извлеките идентификатор модуля из источника, который предоставляет уникальные значения для каждой рекламной паузы, синхронизированные для всех зрителей прямой трансляции.
В следующем примере рекламная пауза планируется к запуску в течение следующих двух минут после того, как пользователь нажмет кнопку воспроизведения:
Метод scheduleAdInsertion рассчитывает время начала рекламной паузы и формирует URL-адрес манифеста рекламного модуля. Используйте этот URL-адрес для создания объекта AVPlayerInterstitialEvent .
При желании можно использовать структуру AVPlayerInterstitialEvent.Restrictions , чтобы ограничить возможность пользователя пропускать или перематывать рекламу во время воспроизведения.
Обработка рекламных событий
Для обработки рекламных событий реализуйте протокол IMAStreamManagerDelegate . Этот подход позволяет отслеживать начало и конец рекламных пауз, а также получать информацию об отдельных рекламных объявлениях.
Запустите приложение. В случае успеха вы сможете запрашивать и воспроизводить полноэкранную рекламу, используя поток манифеста Pod.