В этом руководстве описано, как вставлять рекламные паузы, используя метод метаданных времени показа рекламных блоков (ATM), чтобы получить точное время и продолжительность рекламных пауз, включая прероллы.
Для вставки рекламных роликов перед началом видео и управления возвратом к контенту после рекламных пауз в середине видео мы рекомендуем использовать следующие API:
- API метаданных времени показа рекламных блоков (ATM) : запрос результатов принятия решения о размещении рекламных блоков, включая продолжительность показа рекламы и временных интервалов.
- Конечная точка сегмента рекламы : запрос сегментов рекламы или рекламных блоков с возможностью завершения текущего рекламного блока.
В качестве дополнительной опции для трансляций с высокой интенсивностью одновременного показа мы рекомендуем использовать API Early Ad Break Notification (EABN) для планирования решений по рекламе до начала рекламной паузы.
Предварительные требования
Для начала вам необходимо настроить событие прямой трансляции для типа перенаправления при показе пода с динамической вставкой рекламы (DAI). Выберите один из следующих методов:
- Интерфейс менеджера рекламы: Настройка прямой трансляции для DAI .
- API Ad Manager: Используйте клиентскую библиотеку ( доступные параметры ) для вызова метода
LiveStreamEventService.createLiveStreamEvents. Установите параметрLiveStreamEvent.dynamicAdInsertionTypeв значениеPOD_SERVING_REDIRECT.
Получить поток контента
Когда пользователь выбирает событие прямой трансляции, клиентское приложение отправляет запрос на получение потока в Google Ad Manager. В ответном потоке приложение извлекает идентификатор сессии Google DAI и метаданные, которые затем включаются в запрос манифеста потока.
В следующем примере идентификатор сессии Google DAI передается в инструмент для работы с манифестами:
https://MANIFEST_MANIPULATOR_URL/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY
При обработке запроса на воспроизведение видеоконтента сохраните идентификатор сессии Google DAI и CUSTOM_ASSET_KEY из запроса для подготовки к объединению рекламных блоков.
Получить метаданные о времени показа рекламного блока
Чтобы получить информацию о времени показа рекламного блока, выполните следующие действия:
- Сгенерируйте токен HMAC .
- Вызовите API банкомата, используя токен HMAC.
Запросить метаданные о времени показа рекламы перед началом ролика.
Проверьте настройки предварительного просмотра для вашей прямой трансляции, используя следующие параметры:
Чтобы получить результаты принятия решения по предварительной рекламе, отправьте запрос к API банкомата.
В следующем примере выполняется запрос к банкомату на показ рекламных роликов перед началом воспроизведения:
curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=preroll&auth-token=your_signed_HMAC_token"
Запросить метаданные о времени показа рекламы в середине ролика.
Чтобы получить метаданные рекламных блоков для вставок в середине ролика, выполните следующие действия:
- Проанализируйте данные прямой трансляции, чтобы найти рекламные маркеры, содержащие информацию о времени и продолжительности каждой рекламной паузы в середине трансляции.
- Для запроса точной продолжительности показа рекламного блока и временной шкалы обратитесь к конечной точке API банкомата . API вернет объект JSON с результатами принятия решения по рекламному блоку.
В следующем примере выполняется запрос к банкомату для показа рекламных вставок в середине видео:
curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=AD_BREAK_ID&pd=AD_BREAK_DURATION&auth-token=your_signed_HMAC_token"
В случае успеха вы увидите результат, похожий на следующий JSON-объект:
{
"status": "final",
"ads": [
{
"duration_ms": 5046,
"variants": {
"devrel1428000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5045
]
}
},
"devrel1928000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5045
]
}
}
}
}
],
"slate": {
"duration_ms": 0,
"variants": {
"devrel1428000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5005,
...
5046
]
}
},
"devrel1928000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5005,
...
5046
]
}
}
}
}
}
Встраивайте рекламу в контент-манифест
В следующих разделах вы узнаете, как изменить манифест прямой трансляции и добавить рекламные сегменты.
Определите сегменты рекламных пауз и вставьте разрывы.
При обработке каждого варианта манифеста определите в вашем потоке теги EXT-X-CUE-IN и EXT-X-CUE-OUT , указывающие на начало и конец рекламной паузы.
Замените теги EXT-X-CUE-IN и EXT-X-CUE-OUT элементами EXT-X-DISCONTINUITY , чтобы видеоплеер на стороне клиента мог переключаться между контентом и рекламой.
В приведенном ниже примере манифеста заменены теги EXT-X-CUE-IN и EXT-X-CUE-OUT :
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-CUE-OUT:15.000
#EXTINF:5.000,
contentorigin.com/3.ts
#EXTINF:5.000,
contentorigin.com/4.ts
#EXTINF:5.000,
contentorigin.com/5.ts
#EXT-X-CUE-IN
#EXTINF:5.000,
contentorigin.com/6.ts
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
В следующем примере показан замененный манифест:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXTINF:5.000,
#EXT-X-DISCONTINUITY
{... Insert ad segments here ...}
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/6.mp4
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
Рекламные сегменты Google DAI не зашифрованы. Если ваш контент зашифрован, удалите шифрование, добавив элемент EXT-X-KEY:METHOD=NONE перед первым рекламным сегментом каждого рекламного блока. В конце рекламного блока добавьте шифрование обратно, добавив соответствующий элемент EXT-X-KEY .
Следите за временем начала, продолжительностью и индексом предстоящей рекламной паузы.
Создавайте URL-адреса сегментов рекламы.
Замените сегменты контента между тегами EXT-X-DISCONTINUITY URL-адресами для каждого сегмента объявления. Чтобы определить, сколько сегментов объявлений нужно вставить, используйте значение ads.segment_durations.values , предоставленное в JSON-ответе от API ATM.
Чтобы завершить показ рекламного блока досрочно при обнаружении тега EXT-X-CUE-IN , добавьте параметр d= к URL-адресу заключительного рекламного сегмента. Этот параметр сокращает сегмент, чтобы избежать влияния на временную шкалу видеоплеера клиента.
В следующем примере URL-адрес сегмента рекламного ролика добавляется в манифест. Обратите внимание, что сегменты рекламы используют индексацию с нуля:
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/preroll/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
В следующем примере URL-адрес рекламного сегмента в середине ролика добавляется в манифест:
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
Следующий пример добавляет рекламные сегменты в манифест:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.00,
contentorigin.com/1.ts
#EXTINF:5.00,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/2.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:5.00,
contentorigin.com/6.mp4
#EXTINF:5.00,
contentorigin.com/7.mp4
#EXTINF:5.00,
contentorigin.com/8.mp4
Формирование сегментов списка
Чтобы заполнить промежуток между рекламой и контентом, вставьте сегменты заставки. Используйте массив slates.segment_durations.values из JSON-ответа API ATM, чтобы определить продолжительность каждого сегмента заставки. При необходимости перебирайте последовательность длительностей сегментов, чтобы заполнить всю рекламную паузу.
В следующем примере показан процесс сборки сегмента сланцевой плиты:
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
В примере slate/0 обозначает номер итерации табло. Обратитесь к параметрам совместимости и кэширования вашего видеоплеера, чтобы определить, следует ли начинать с 0 и увеличивать это число для каждого цикла табло, или же оставлять его равным 0 для всех итераций.
Управление возвратом к контенту
После вставки всех сегментов из рекламного блока выберите один из следующих способов для возврата к потоку контента:
| Метод | Описание | Влияние на видеоплеер клиента |
|---|---|---|
| Заполнить кусками сланца | Вставляет сегменты плейлиста и зацикливает его. Заполняет временную шкалу и вставляет элементы EXT-X-DISCONTINUITY между каждой итерацией плейлиста. | Никаких эффектов. Видеоплеер возвращается к контенту без изменения временной шкалы. |
| Выровнять с помощью одного сегмента сланца. | Вставляет один сегмент заставки. Использует параметр d= для заполнения промежутка времени до начала воспроизведения контента. | Никаких эффектов. Видеоплеер возвращается к контенту без изменения временной шкалы. |
| Немедленный возврат | Вставьте сегменты контента. | Временная шкала видеоплеера изменена. Ваш клиентский видеоплеер должен обрабатывать измененную временную шкалу. |
(Необязательно) Запланируйте рекламную паузу
Для повышения коэффициента заполнения рекламных блоков отправляйте уведомления о ранней рекламной паузе (EABN) с указанием продолжительности рекламного блока, параметров пользовательского таргетинга и данных сигнала SCTE-35. Более подробную информацию см. в разделе «Отправка уведомлений о ранней рекламной паузе» .