В этом руководстве описывается, как вставлять рекламные паузы с помощью метода метаданных синхронизации рекламных модулей (ATM) для получения точного времени и продолжительности рекламных пауз, включая рекламу в начале ролика.
Для вставки рекламы в начале ролика и управления возвратом к контенту после рекламных пауз в середине ролика мы рекомендуем вызывать следующие API:
- API метаданных синхронизации рекламных модулей (ATM) : запрашивает результаты решений по рекламным модулям, включая длительность рекламы и показа.
- Конечная точка сегмента рекламы : запрос сегментов рекламы или рекламного блока с возможностью завершения текущего рекламного модуля.
При необходимости для событий прямой трансляции с большим количеством одновременных показов мы рекомендуем вызвать API раннего уведомления о рекламной паузе (EABN), чтобы запланировать решения о рекламе до начала рекламной паузы.
Предпосылки
Для начала вам необходимо настроить событие прямой трансляции для типа перенаправления «Динамическая вставка рекламы (DAI)». Выберите один из следующих способов:
- Пользовательский интерфейс менеджера объявлений: настройка прямой трансляции для DAI .
- API Менеджера рекламы: используйте клиентскую библиотеку ( доступные варианты ) для вызова метода
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.
Сгенерировать подписанный токен HMAC
Для аутентификации ваших запросов выполните следующие действия:
Создайте строку токена, объединив следующие параметры в алфавитном порядке, разделив их тильдой
~
:Параметр Обязательно или необязательно Описание ad_break_id
Необходимый Строка, которую вы указываете для обозначения рекламной паузы, например ad-break-1
. Для рекламы в начале ролика используйтеpreroll
.custom_asset_key
Необходимый Пользовательский ключ актива события прямой трансляции. cust_params
Необязательный Параметры таргетинга. Подробнее см. в разделе «Установка параметров таргетинга для вашего потока» . exp
Необходимый Время истечения срока действия токена, измеряемое как общее количество секунд, прошедших с эпохи Unix. network_code
Необходимый Ваш сетевой код Google Ad Manager. Подробнее см. в разделе «Поиск информации об аккаунте Ad Manager» . pd
Необходимый Длительность рекламной паузы в миллисекундах. Для рекламы в начале ролика Google DAI переопределяет этот параметр настройками события прямой трансляции. scte35
Необязательный Сигнал SCTE-35, закодированный в Base64. Убедитесь, что сигнал верный. Если он неверный, в HTTP-заголовок X-Ad-Manager-Dai-Warning
в ответе отправляется сообщение, и сигнал продолжает распространяться для создания рекламной паузы. Подробнее о поддерживаемых маркерах рекламной паузы см. в разделе «Интеграция HLS» .Загрузите ключ аутентификации Google DAI типа HMAC . Подробнее см. в разделе Аутентификация запросов на видеопоток DAI .
Используйте загруженный ключ HMAC для генерации подписи SHA256 строки токена.
Объедините строку токена и сгенерированную подпись.
Примените URL-кодирование к объединённой строке. Закодированная строка представляет собой подписанный токен HMAC для аутентификации запросов API к метаданным синхронизации (ATM) рекламного модуля.
В следующем примере создается подписанный токен HMAC для рекламы в начале ролика:
custom_asset_key="CUSTOM_ASSET_KEY"
exp="1750700000" # Expired on Mon Jun 23 2025 13:33:20 GMT-0400 (Eastern Daylight Time)
network_code="NETWORK_CODE"
ad_break_id="preroll"
pd="0" # Pod duration value is overridden by the livestream event settings.
# The HMAC authentication key associated with your livestream event in Google Ad Manager.
secret_key="24E96382584C328087546B0E8454F26158564E8466FD2BE3D8A996B38445876C"
# Concatenate the parameters, keep the parameters alphabetically ordered by name.
token_string="ad_break_id=${ad_break_id}~custom_asset_key=${custom_asset_key}~exp=${exp}~network_code=${network_code}~pd=${pd}"
# Calculate the SHA256 signature of the token_string.
hmac_signature=$(echo -n "$token_string" | openssl dgst -sha256 -hmac "$secret_key" | awk '{print $2}')
# Concatenate the token string and the signature.
signed_token="${token_string}~hmac=${hmac_signature}"
url_encode() {
local string="${1}"
local strlen=${#string}
local encoded=""
local pos c
for (( pos=0 ; pos<strlen ; pos++ )); do
c=${string:$pos:1}
case "$c" in
[-_.~a-zA-Z0-9] ) o="${c}" ;;
* ) printf -v o '%%%02x' "'$c"
esac
encoded+="${o}"
done
echo "${encoded}"
}
# Apply URL encoding to the concatenated string.
url_encoded_signed_token=$(url_encode "$signed_token")
echo "Signed HMAC token:"
echo "${url_encoded_signed_token}"
# Example output:
# ad_break_id%3Dpreroll~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~exp%3D1489680000~network_code%3D21775744923~pd%3D180000~pod_id%3D5~hmac%3D24E96382584C328087546B0E8454F26158564E8466FD2BE3D8A996B38445876C
Запрос метаданных времени для рекламы в начале ролика
Проверьте настройки предварительной трансляции для вашего мероприятия в прямом эфире, используя следующие параметры:
Чтобы получить результаты решения о показе рекламы в пре-ролле, отправьте запрос к API ATM.
В следующем примере выполняется запрос ATM на рекламу в начале ролика:
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 ATM , чтобы запросить точную продолжительность рекламного модуля и рекламного объявления. API возвращает JSON-объект с результатами решения по рекламному модулю.
В следующем примере выполняется запрос ATM на рекламу в середине ролика:
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. Подробнее см. в разделе «Отправка уведомлений о ранней рекламной паузе» .