This post is also available in: Английский
Серверная часть нашего решения для доставки видеорекламы в приложение iOS представляет собой открытый рекламный сервер OpenX Source и плагин для него, позволяющий добавлять рекламные видеоролики. Чтобы начать работать с OpenX Source, необходимо загрузить его исходные коды, развернуть его на сервере и создать в веб-интерфейсе администрирования рекламную кампанию. О том, как это сделать, мы уже писали в предыдущих статьях:
- Показ рекламы в системе OpenX
- Создание высоконагруженной системы доставки рекламы на базе OpenX
- Подробнее о возможностях OpenX
Правда, существует одна особенность, о которой следует помнить и которая в этих статьях не упоминается: рекламные видеоролики должны иметь формат, подходящий для воспроизведения на мобильных устройствах Apple. Это может быть как отдельный MP4-файл, сжатый с использованием кодеков H.264 и AAC, так и плейлист для воспроизведения по технологии HTTP Live Streaming.
Клиентская часть представляет собой видеоплеер на основе фреймворка AVFoundation (см. нашу предыдущую статью Воспроизведение видео в iOS приложениях). Библиотека iOS VAST Player предоставляет iOS-разработчикам готовый класс
1 | DVIABPlayer |
, который расширяет функциональность стандартного компонента
1 | AVPlayer |
, добавляя к ней возможность загрузки VAST-шаблонов и воспроизведения видеорекламы по заранее заданному расписанию. Расписание задает время и тип воспроизведения рекламных вставок — до, после и в середине видеоролика (pre-roll, post-roll и mid-roll).
Для подключения библиотеки к своему проекту необходимо выполнить следующие действия:
- Добавьте к списку используемых приложением фреймворков AVFoundation и CoreMedia.
- Перетащите папку библиотеки в ваш проект в Xcode.
- Загрузите и добавьте к проекту библиотеку KissXML. Она необходима для парсинга VAST-шаблонов.
В поставку библиотеки включен пример проекта, демонстрирующий ее использование. Рассмотрим этот пример подробно. Пример состоит из одного элемента View Сontroller, содержащего вид-контейнер для слоя плеера, а также несколько информационных меток и кнопок для управления воспроизведением.
Класс
1 | DVIABPlayer |
используется аналогично
1 | AVPlayer |
: в методе
1 | viewDidLoad |
мы его инициализируем и связываем со слоем вида-контейнера; затем мы инициализируем и связываем с плеером элемент
1 | AVPlayerItem |
, содержащий ссылку на основной контент. По изменению свойства
1 | status |
этого элемента происходит автоматический запуск воспроизведения.
1 | AVPlayer |
заключаются в следующем. Во-первых, в свойство
1 | playerLayer |
сохраняется слой для воспроизведения видео. Это необходимо, поскольку
1 | DVIABPlayer |
для каждого воспроизводимого ролика создает внутри себя новый
1 | AVPlayer |
. Во-вторых, необходимо задать рекламное расписание
1 | DVVideoMultipleAdPlaylist |
, содержащее перечень рекламных пауз и соответствующих им ссылок на VAST-шаблоны:
1
2
3
4
5
6
7
8
9
10
11 DVVideoMultipleAdPlaylist *adPlaylist =
[[DVVideoMultipleAdPlaylist alloc] init];
adPlaylist.playBreaks = [NSArray arrayWithObjects:
[DVVideoPlayBreak playBreakBeforeStartWithAdTemplateURL:
OPENX_AD_TAG_WITH_ZONE(18)],
[DVVideoPlayBreak playBreakAtTimeFromStart:CMTimeMake(10, 1)
withAdTemplateURL:OPENX_AD_TAG_WITH_ZONE(19)],
[DVVideoPlayBreak playBreakAfterEndWithAdTemplateURL:
OPENX_AD_TAG_WITH_ZONE(20)],
nil];
self.player.adPlaylist = adPlaylist;
Макрос
1 | OPENX_AD_TAG_WITH_ZONE |
подставляет в OpenX ссылку для получения VAST-описания рекламы, созданной для зоны с указанным идентификатором.
Приведенной последовательности действий достаточно для того, чтобы плеер начал, в ходе воспроизведения основного контента, вставлять рекламные ролики, полученные из OpenX.
1 | DVIABPlayerDelegate |
, что позволит получать оповещения о ходе воспроизведения рекламы. В текущей версии протокола реализованы следующие методы:
-
1- (BOOL)player:(DVIABPlayer *)player shouldPauseForAdBreak:(DVVideoPlayBreak *)playBreak
вызывается перед началом рекламной паузы для того, чтобы дать возможность пропустить ее. По умолчанию метод возвращает значение NO.
-
1- (void)player:(DVIABPlayer *)player didFailPlayBreak:(DVVideoPlayBreak *)playBreak withError:(NSError *)error
вызывается, если рекламная пауза не может быть показана из-за ошибки при загрузке VAST-шаблона.
Надеемся, что классы, описанные в этой статье, пригодятся вам при разработке приложений. На текущий момент, библиотека iOS VAST Player реализует только базовую функциональность видеорекламы. Нам хотелось бы, чтобы в будущем в ней появилась более полная поддержка стандартов VAST, VMAP и, может быть, даже VPAID. Будем рады вашему участию в обсуждении и развитии проекта на его странице в GitHub.
Напоследок предлагаем посмотреть интересное видео об использовании iOS устройств для маркетинга Land Rover Evoque.