В этом руководстве рассматривается разработка клиентского приложения для загрузки прямой трансляции HLS или DASH с помощью API обслуживания Pod и вашего манипулятора манифестов.
Предпосылки
Прежде чем продолжить, вам необходимо иметь следующее:
Пользовательский ключ ресурса для события прямой трансляции, настроенного с типом DAI "
Pod serving redirect
". Чтобы получить этот ключ, выполните следующие действия:Используйте клиентскую библиотеку SOAP API для вызова метода
LiveStreamEventService.createLiveStreamEvents
с объектомLiveStreamEvent
и свойствомdynamicAdInsertionType
, установленным в значение перечисленияPOD_SERVING_REDIRECT
. Сведения обо всех клиентских библиотеках см. в разделе «Клиентские библиотеки и примеры кода» .
Проверьте, доступен ли Interactive Media Ads (IMA) SDK для вашей платформы. Мы рекомендуем использовать IMA SDK для увеличения дохода. Подробнее см. в разделе «Настройка IMA SDK для DAI» .
Подать заявку на трансляцию
Когда пользователь выбирает поток, сделайте следующее:
Отправьте
POST
запрос к методу сервиса прямой трансляции. Подробнее см. в разделе Метод: stream .Передавайте параметры таргетинга рекламы в форматах
application/x-www-form-urlencoded
илиapplication/json
. Этот запрос регистрирует сеанс потоковой передачи в Google DAI.В следующем примере выполняется потоковый запрос:
Форма кодирования
const url = `https://dai.google.com/ssai/pods/api/v1/` + `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`; const params = new URLSearchParams({ cust_params: 'section=sports&page=golf,tennis' }).toString(); const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: params }); console.log(await response.json());
JSON-кодирование
const url = `https://dai.google.com/ssai/pods/api/v1/` + `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`; const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ cust_params: { section: 'sports', page: 'golf,tennis' } }) }); console.log(await response.json());
В случае успеха вы увидите вывод, подобный следующему:
{ "stream_id": "8d2b2292-6356-4c0e-94be-cece01d2df2e:DLS", "media_verification_url": "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/", "metadata_url": "https://dai.google.com/linear/pods/hls/.../metadata", "session_update_url": "https://dai.google.com/linear/.../session", "polling_frequency": 10 }
В ответе JSON найдите идентификатор сеанса потока и сохраните остальные данные для последующих шагов.
Метаданные объявления опроса
Чтобы опросить метаданные объявления, выполните следующие действия:
Прочитайте значение
metadata_url
из ответа регистрации потока.Отправьте
GET
запрос к конечной точке. Подробнее см. в разделе «Метод: метаданные» .В следующем примере извлекаются метаданные рекламы:
const response = await fetch(metadata_url); console.log(await response.json());
В случае успеха вы получите ответ PodMetadata для текущих и предстоящих рекламных пауз:
{ "tags":{ "google_5555555555":{ "ad":"0000229834_ad1", "ad_break_id":"0000229834", "type":"firstquartile" }, "google_1234567890123456789":{ "ad":"0000229834_ad1", "ad_break_id":"0000229834", "type":"progress" }, ... }, "ads":{ "0000229834_ad1":{ "ad_break_id":"0000229834", "position":1, "duration":15, "clickthrough_url":"https://.../", ... }, ... }, "ad_breaks":{ "0000229834":{ "type":"mid", "duration":15, "ads":1 }, ... } }
Сохраните объект
tags
для последующих шагов.Установите таймер, используя значение
polling_frequency
, чтобы регулярно запрашивать метаданные для всех последовательных рекламных пауз.
Загрузите трансляцию в свой видеоплеер
Получив идентификатор сеанса из ответа на регистрацию, передайте его манипулятору манифеста или создайте URL-адрес манифеста для загрузки потока в видеоплеер.
Чтобы передать идентификатор сеанса, см. документацию по манипулятору манифеста. Если вы разрабатываете манипулятор манифеста, см. статью Манипулятор манифеста для прямой трансляции .
В следующем примере формируется URL-адрес манифеста:
https://<your_manifest_manipulator_url>/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY"
Когда ваш плеер будет готов, начните воспроизведение.
Прислушивайтесь к рекламным событиям
Проверьте формат контейнера вашего потока на наличие синхронизированных метаданных:
Потоки HLS с контейнерами Transport Stream (TS) используют синхронизированные теги ID3 для передачи синхронизированных метаданных. Подробнее см. в разделе «О формате Common Media Application Format с HTTP Live Streaming (HLS)» .
Потоки DASH используют элементы
EventStream
для указания событий в манифесте.Потоки DASH используют элементы
InbandEventStream
, когда сегменты содержат блоки сообщений о событиях (emsg
) для полезных данных, включая теги ID3. Подробнее см. InbandEventStream .Потоки CMAF, включая DASH и HLS, используют поля
emsg
, содержащие теги ID3.
Чтобы получить ID3-теги из потока, обратитесь к руководству по вашему видеоплееру. Подробнее см. в руководстве по обработке синхронизированных метаданных.
Чтобы получить идентификатор события рекламы из тегов ID3, выполните следующие действия:
- Отфильтруйте события по
scheme_id_uri
с помощьюurn:google:dai:2018
илиhttps://aomedia.org/emsg/ID3
. Извлечь массив байтов из поля
message_data
.Следующий пример декодирует данные
emsg
в JSON:{ "scheme_id_uri": "https://developer.apple.com/streaming/emsg-id3", "presentation_time": 27554, "timescale": 1000, "message_data": "ID3TXXXgoogle_1234567890123456789", ... }
Отфильтруйте теги ID3 в формате
TXXXgoogle_{ad_event_ID}
:TXXXgoogle_1234567890123456789
Показать данные о событиях рекламы
Чтобы найти объект TagSegment
, выполните следующие действия:
Извлеките объект
tags
метаданных объявления из метаданных объявления Poll . Объектtags
представляет собой массив объектовTagSegment
.Используйте полный идентификатор события рекламы, чтобы найти объект
TagSegment
с типомprogress
.Используйте первые 17 символов идентификатора события рекламы, чтобы найти объект
TagSegment
других типов.После получения
TagSegment
используйте свойствоad_break_id
в качестве ключа для поиска объектаAdBreak
в объекте метаданных рекламыad_breaks
.В следующем примере выполняется поиск объекта
AdBreak
:{ "type":"mid", "duration":15, "ads":1 }
Используйте данные
TagSegment
иAdBreak
для отображения информации о позиции объявления в рекламной паузе. Например,Ad 1 of 3
.
Отправлять пинги для проверки медиа
Для каждого события рекламы, за исключением типа progress
, отправляйте пинг-запрос на подтверждение медиа. Google DAI отбрасывает события progress
, и частая отправка этих событий может повлиять на производительность вашего приложения.
Чтобы сгенерировать полный URL-адрес проверки медиа-события рекламного события, выполните следующие действия:
Из ответа потока добавьте полный идентификатор события рекламы к значению
media_verification_url
.Сделайте
GET
запрос с полным URL-адресом:// media_verification_url: "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/" const completeUrl = `${media_verification_url}google_5555555555123456789`; const response = await fetch(completeUrl);
В случае успеха вы получите ответ с кодом статуса
202
В противном случае вы получите код ошибки404
.
Вы можете использовать Монитор активности трансляции (SAM) для просмотра истории всех рекламных событий. Подробнее см. в разделе Мониторинг и устранение неполадок в прямой трансляции.