Dynamic Ad Insertion API позволяет запрашивать и отслеживать потоки видео по запросу с динамической вставкой объявлений. Поддерживаются потоки HLS и DASH.
Сервис: dai.google.com
Путь метода stream указан относительно https://dai.google.com.
Метод: stream
| Методы | |
|---|---|
stream |
POST /ondemand/v1/hls/content/{content-source}/vid/{video-id}/stream
Создает поток HLS с динамической вставкой объявлений для заданного источника контента и идентификатора видео.
Создает поток DASH с динамической вставкой объявлений для заданного источника контента и идентификатора видео. |
HTTP-запрос
POST https://dai.google.com/ondemand/v1/hls/content/{content-source}/vid/{video-id}/stream
POST https://dai.google.com/ondemand/v1/dash/content/{content-source}/vid/{video-id}/stream
Заголовок запроса
| Параметры | |
|---|---|
api‑key |
stringКлюч API, предоставленный при создании трансляции, должен быть действительным для сети издателя. Вместо тела запроса ключ API можно передать в заголовке HTTP Authorization в следующем формате: Authorization: DCLKDAI key="<api-key>" |
Параметры пути
| Параметры | |
|---|---|
content-source |
stringИдентификатор потока в CMS. |
video-id |
stringИдентификатор видео в трансляции. |
Тело запроса
Тело запроса имеет тип application/x-www-form-urlencoded и содержит следующие параметры:
| Параметры | ||
|---|---|---|
dai-ssb |
Необязательно | Установите значение |
| Параметры таргетинга DFP | Необязательно | Дополнительные параметры таргетинга. |
| Переопределение параметров трансляции | Необязательно | Переопределять значения по умолчанию для параметров создания трансляции. |
| Аутентификация HMAC | Необязательно | Аутентификация с помощью токена HMAC. |
Тело ответа
Если запрос выполнен успешно, то тело ответа содержит новый экземпляр Stream. Для потоков с маяками на стороне сервера этот объект Stream содержит только поля stream_id и stream_manifest.
Open Measurement
Поле Verifications содержит информацию для проверки Open Measurement в потоках, где не используются веб-маяки на стороне сервера.
Verifications содержит один или несколько элементов Verification, в которых перечислены ресурсы и метаданные, необходимые для проверки воспроизведения креатива с помощью стороннего кода отслеживания. Поддерживается только JavaScriptResource. Дополнительную информацию можно найти на сайте IAB Tech Lab и в спецификации VAST 4.1.
Метод: проверка медиаконтента
Обнаружив идентификатор медиафайла объявления во время воспроизведения, сразу же отправьте запрос, используя media_verification_url из конечной точки stream. media_verification_url – абсолютный путь.
Запросы на проверку медиаконтента не требуются для потоков с маяками на стороне сервера, где сервер инициирует проверку медиаконтента.
Запросы к конечной точке media verification идемпотентны.
| Методы | |
|---|---|
media verification |
GET {media_verification_url}/{ad_media_id}
Уведомляет API о событии проверки медиаконтента. |
HTTP-запрос
GET {media-verification-url}/{ad-media-id}
Тело ответа
media verification
возвращает следующие ответы:
HTTP/1.1 204 No Content, если проверка медиаконтента прошла успешно и все пинги отправлены.HTTP/1.1 404 Not Found, если запрос не может проверить медиаконтент из-за неправильного форматирования URL или истечения срока действия.HTTP/1.1 404 Not Found, если предыдущий запрос на подтверждение для этого идентификатора был выполнен успешно.HTTP/1.1 409 Conflict, если в это время пинги отправляются по другому запросу.
Идентификаторы мультимедийных объектов объявлений (HLS)
Идентификаторы рекламных медиафайлов будут закодированы в метаданных HLS с метками времени с помощью ключа TXXX, зарезервированного для фреймов с текстовой информацией, заданной пользователем. Содержимое фрейма не будет зашифровано и всегда будет начинаться с текста "google_".
Весь текстовый контент фрейма должен быть добавлен к media_verification_url для каждого запроса на проверку объявления.
Идентификаторы мультимедийных объектов объявлений (DASH)
Идентификаторы рекламных медиафайлов будут вставляться в манифест с помощью элемента EventStream DASH.
Каждый элемент EventStream будет иметь идентификатор схемы URI urn:google:dai:2018.
Они будут содержать события с атрибутом messageData, содержащим идентификатор мультимедийного объекта объявления, начинающийся с "google_". Все содержимое атрибута messageData должно быть добавлено к media_verification_url для каждого запроса проверки объявления.
Данные ответа
Поток
Stream используется для отображения списка всех ресурсов для вновь созданного потока в формате JSON .| JSON-представление |
|---|
{
"stream_id": string,
"total_duration": number,
"content_duration": number,
"valid_for": string,
"valid_until": string,
"subtitles": [object(Subtitle)],
"hls_master_playlist": string,
"stream_manifest": string,
"media_verification_url": string,
"apple_tv": object(AppleTV),
"ad_breaks": [object(AdBreak)],
} |
| Поля | |
|---|---|
stream_id |
stringИдентификатор потока. |
total_duration |
numberПродолжительность трансляции в секундах. |
content_duration |
numberПродолжительность контента без рекламы в секундах. |
valid_for |
stringПродолжительность трансляции в формате "00h00m00s". |
valid_until |
stringДата, до которой действителен поток, в формате RFC 3339. |
subtitles |
[object(Subtitle)]Список субтитров. Если значение не указано, оно опускается. Только HLS. |
hls_master_playlist |
stringURL главного плейлиста HLS (УСТАРЕЛО). Используйте stream_manifest. Только HLS. |
stream_manifest |
stringМанифест трансляции. Соответствует главному плейлисту в HLS и MPD в DASH. Это единственное поле, помимо stream_id, которое присутствует в ответе при создании потока с передачей сигналов на стороне сервера. |
media_verification_url |
stringURL подтверждения медиаконтента. |
apple_tv |
object(AppleTV)Необязательная информация, относящаяся к устройствам Apple TV. Только HLS. |
ad_breaks |
[object(AdBreak)]Список рекламных пауз. Если значение не указано, оно опускается. |
AppleTV
AppleTV содержит информацию, относящуюся к устройствам Apple TV.| JSON-представление |
|---|
{
"interstitials_url": string,
} |
| Поля | |
|---|---|
interstitials_url |
stringURL межстраничных объявлений. |
AdBreak
AdBreak описывает одну рекламную паузу в трансляции. Он содержит позицию, продолжительность, тип (в начале, середине или конце видео) и список объявлений.| JSON-представление |
|---|
{ "type": string, "start": number, "duration": number, "ads": [object(Ad)], } |
| Поля | |
|---|---|
type |
stringДопустимые типы рекламных пауз: mid, pre и post. |
start |
numberПозиция в потоке, в которой начинается рекламная пауза (в секундах). |
duration |
numberПродолжительность рекламной паузы в секундах. |
ads |
[object(Ad)]Список объявлений. Если значение не указано, оно опускается. |
Объявление
Ad – объявление в потоке. Он содержит позицию объявления в рекламной паузе, продолжительность объявления и некоторые необязательные метаданные.| JSON-представление |
|---|
{
"seq": number,
"start": number,
"duration": number,
"title": string,
"description": string,
"advertiser": string,
"ad_system": string,
"ad_id": string,
"creative_id": string,
"creative_ad_id": string,
"deal_id": string,
"clickthrough_url": string,
"icons": [object(Icon)],
"wrappers": [object(Wrapper)],
"events": [object(Event)],
"verifications": [object(Verification)],
"universal_ad_id": object(UniversalAdID),
"companions": [object(Companion)],
"interactive_file": object(InteractiveFile),
"skip_metadata": object(SkipMetadata),
"extensions": [],
} |
| Поля | |
|---|---|
seq |
numberПозиция объявления в рекламной паузе. |
start |
numberПозиция в потоке, на которой начинается объявление (в секундах). |
duration |
numberПродолжительность объявления в секундах. |
title |
stringНеобязательный заголовок объявления. |
description |
stringОписание объявления (необязательно). |
advertiser |
stringНеобязательный рекламный идентификатор. |
ad_system |
stringНеобязательный атрибут. |
ad_id |
stringНеобязательный идентификатор объявления. |
creative_id |
stringНеобязательный идентификатор креатива. |
creative_ad_id |
stringНеобязательный идентификатор объявления креатива. |
deal_id |
stringНеобязательный идентификатор сделки. |
clickthrough_url |
stringНеобязательный URL перехода по клику. |
icons |
[object(Icon)]Список значков. Если он пуст, то не показывается. |
wrappers |
[object(Wrapper)]Список контейнеров. Если значение не указано, оно опускается. |
events |
[object(Event)]Список событий в объявлении. |
verifications |
[object(Verification)]Необязательные записи Open Measurement, в которых перечислены ресурсы и метаданные, необходимые для выполнения стороннего кода отслеживания, чтобы проверить воспроизведение креатива. |
universal_ad_id |
object(UniversalAdID)Необязательный универсальный идентификатор объявления. |
companions |
[object(Companion)]Необязательные сопутствующие креативы, которые могут показываться вместе с этим объявлением. |
interactive_file |
object(InteractiveFile)Необязательный интерактивный креатив (SIMID), который должен показываться во время воспроизведения объявления. |
skip_metadata |
object(SkipMetadata)Необязательные метаданные для объявлений с возможностью пропуска. Если этот элемент задан, то объявление можно пропустить. В нем также содержатся инструкции по работе с интерфейсом пропуска и событием отслеживания. |
extensions |
stringНеобязательный список всех узлов <Extension> в VAST. |
Событие
Событие содержит тип события и время его показа.| JSON-представление |
|---|
{ "time": number, "type": string, } |
| Поля | |
|---|---|
time |
numberВремя проведения мероприятия. |
type |
stringТип события. |
Подзаголовок
Subtitle – это дополнительная дорожка субтитров для видеопотока. В нем хранятся субтитры двух форматов: TTML и WebVTT. Атрибут TTMLPath содержит URL файла TTML, а атрибут WebVTTPath – URL файла WebVTT.| JSON-представление |
|---|
{
"language": string,
"language_name": string,
"ttml": string,
"webvtt": string,
} |
| Поля | |
|---|---|
language |
stringКод языка, например "ru" или "en". |
language_name |
stringОписательное название языка. Позволяет различать наборы субтитров, если для одного языка их несколько. |
ttml |
stringНеобязательный URL файла метаданных TTML. |
webvtt |
stringНеобязательный URL файла метаданных WebVTT. |
SkipMetadata
SkipMetadata предоставляет информацию, необходимую клиентам для обработки событий пропуска объявлений с возможностью пропуска.| JSON-представление |
|---|
{
"offset": number,
"tracking_url": string,
} |
| Поля | |
|---|---|
offset |
numberСмещение указывает, через сколько секунд после начала объявления проигрыватель должен показать кнопку пропуска. Если в шаблоне VAST не указано значение, то этот параметр опускается. |
tracking_url |
stringTrackingURL содержит URL, на который должен отправляться запрос ping при пропуске объявления. |
Значок
Объект Icon содержит информацию о значке VAST.| JSON-представление |
|---|
{ "click_data": object(ClickData), "creative_type": string, "click_fallback_images": [object(FallbackImage)], "height": int32, "width": int32, "resource": string, "type": string, "x_position": string, "y_position": string, "program": string, "alt_text": string, } |
| Поля | |
|---|---|
click_data |
object(ClickData) |
creative_type |
string |
click_fallback_images |
[object(FallbackImage)] |
height |
int32 |
width |
int32 |
resource |
string |
type |
string |
x_position |
string |
y_position |
string |
program |
string |
alt_text |
string |
ClickData
ClickData содержит информацию о переходе по значку.| JSON-представление |
|---|
{
"url": string,
} |
| Поля | |
|---|---|
url |
string |
FallbackImage
FallbackImage содержит информацию о резервном изображении VAST.| JSON-представление |
|---|
{ "creative_type": string, "height": int32, "width": int32, "resource": string, "alt_text": string, } |
| Поля | |
|---|---|
creative_type |
string |
height |
int32 |
width |
int32 |
resource |
string |
alt_text |
string |
Wrapper
Контейнер содержит информацию о контейнере объявления. Если идентификатор сделки отсутствует, он не включается в отчет.| JSON-представление |
|---|
{
"system": string,
"ad_id": string,
"creative_id": string,
"creative_ad_id": string,
"deal_id": string,
} |
| Поля | |
|---|---|
system |
stringИдентификатор рекламной системы. |
ad_id |
stringИдентификатор объявления, используемый для объявления-контейнера. |
creative_id |
stringИдентификатор креатива, используемый для контейнера объявлений. |
creative_ad_id |
stringИдентификатор объявления креатива, используемый для контейнера объявлений. |
deal_id |
stringНеобязательный идентификатор сделки для объявления-контейнера. |
Проверка
Элемент Verification содержит информацию для Open Measurement, которая позволяет сторонним сервисам проверять видимость и другие показатели. В настоящее время поддерживаются только ресурсы JavaScript. Подробную информацию можно найти на странице https://iabtechlab.com/standards/open-measurement-sdk/.| JSON-представление |
|---|
{
"vendor": string,
"java_script_resources": [object(JavaScriptResource)],
"tracking_events": [object(TrackingEvent)],
"parameters": string,
} |
| Поля | |
|---|---|
vendor |
stringПоставщик услуг по проверке. |
java_script_resources |
[object(JavaScriptResource)]Список ресурсов JavaScript для проверки. |
tracking_events |
[object(TrackingEvent)]Список событий отслеживания для проверки. |
parameters |
stringНепрозрачная строка, передаваемая в код подтверждения начальной загрузки. |
JavaScriptResource
JavaScriptResource содержит информацию для проверки с помощью JavaScript.| JSON-представление |
|---|
{
"script_url": string,
"api_framework": string,
"browser_optional": boolean,
} |
| Поля | |
|---|---|
script_url |
stringURI для полезной нагрузки JavaScript. |
api_framework |
stringAPIFramework – название фреймворка, который выполняет код подтверждения. |
browser_optional |
booleanМожно ли запустить этот скрипт вне браузера. |
TrackingEvent
TrackingEvent содержит URL, на которые клиент должен отправлять запросы ping в определенных ситуациях.| JSON-представление |
|---|
{
"event": string,
"uri": string,
} |
| Поля | |
|---|---|
event |
stringТип события отслеживания. |
uri |
stringСобытие отслеживания, которое нужно зарегистрировать. |
UniversalAdID
UniversalAdID используется для передачи уникального идентификатора креатива, который поддерживается в разных рекламных системах.| JSON-представление |
|---|
{ "id_value": string, "id_registry": string, } |
| Поля | |
|---|---|
id_value |
stringУниверсальный идентификатор выбранного креатива для объявления. |
id_registry |
stringСтрока, которая используется для идентификации URL сайта реестра, где регистрируется универсальный идентификатор объявления выбранного креатива. |
Companion
Элемент Companion содержит информацию о сопутствующих объявлениях, которые могут показываться вместе с основным.| JSON-представление |
|---|
{ "click_data": object(ClickData), "creative_type": string, "height": int32, "width": int32, "resource": string, "type": string, "ad_slot_id": string, "api_framework": string, "tracking_events": [object(TrackingEvent)], } |
| Поля | |
|---|---|
click_data |
object(ClickData)Данные о кликах по сопутствующему креативу. |
creative_type |
stringАтрибут CreativeType в узле <StaticResource> в VAST, если это сопутствующее объявление статического типа. |
height |
int32Высота сопутствующего креатива в пикселях. |
width |
int32Ширина сопутствующего креатива в пикселях. |
resource |
stringДля статических и iframe-креативов это URL, который будет загружен и показан. Для сопутствующих креативов HTML это будет фрагмент кода HTML, который должен показываться в качестве сопутствующего креатива. |
type |
stringТип сопутствующего креатива. Это может быть статический креатив, iframe или HTML. |
ad_slot_id |
stringИдентификатор рекламного места для этого сопутствующего креатива. |
api_framework |
stringФреймворк API для этого сопутствующего креатива. |
tracking_events |
[object(TrackingEvent)]Список событий отслеживания для этого сопутствующего креатива. |
InteractiveFile
InteractiveFile содержит информацию об интерактивном креативе (например, SIMID), который должен показываться во время воспроизведения объявления.| JSON-представление |
|---|
{ "resource": string, "type": string, "variable_duration": boolean, "ad_parameters": string, } |
| Поля | |
|---|---|
resource |
stringURL интерактивного креатива. |
type |
stringMIME-тип файла, предоставленного в качестве ресурса. |
variable_duration |
booleanМожет ли креатив запрашивать продление длительности. |
ad_parameters |
stringЗначение узла <AdParameters> в VAST. |