Подготовить клиента к перенаправлению обслуживания pod

В этом руководстве рассматривается разработка клиентского приложения для загрузки потокового видео HLS или DASH с использованием API для обслуживания подов и вашего инструмента для работы с манифестами.

Предварительные требования

Прежде чем продолжить, вам необходимо иметь следующее:

Отправить запрос на трансляцию

Когда пользователь выберет поток, выполните следующие действия:

  1. Отправьте POST запрос к методу службы прямой трансляции. Подробности см. в разделе Метод: stream .

  2. Передайте параметры таргетинга рекламы в форматах 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
    }
    
  3. В JSON-ответе найдите идентификатор сеанса потока и сохраните остальные данные для последующих шагов.

Метаданные опроса

Для получения метаданных объявления выполните следующие действия:

  1. Прочитайте значение metadata_url из ответа на запрос регистрации потока.

  2. Выполните 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
        },
        ...
      }
    }
    
  3. Сохраните объект tags для последующих шагов.

  4. Set a timer using the polling_frequency value to regularly request metadata for all successive ad breaks.

Загрузите видеопоток в свой видеоплеер.

Получив идентификатор сессии из ответа на запрос регистрации, передайте его в инструмент обработки манифеста или создайте 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 с контейнерами транспортного потока (TS) для передачи временных метаданных используются метки ID3. Подробнее см. раздел «Общий формат медиаприложений с потоковой передачей HTTP в реальном времени (HLS)» .

  • В потоках DASH для указания событий в манифесте используются элементы EventStream .

  • В потоках DASH используются элементы InbandEventStream , когда сегменты содержат блоки Event Message ( emsg ) для данных полезной нагрузки, включая теги ID3. Подробнее см. InbandEventStream .

  • В потоках CMAF, включая DASH и HLS, используются блоки emsg , содержащие теги ID3.

To retrieve ID3 tags from your stream, refer to your video player's guide. For details, see Handle timed metadata guide

Чтобы получить идентификатор рекламного события из тегов ID3, выполните следующие действия:

  1. Отфильтруйте события по scheme_id_uri с помощью urn:google:dai:2018 или https://aomedia.org/emsg/ID3 .
  2. Извлеките массив байтов из поля message_data .

    В следующем примере данные emsg декодируются в формат JSON:

    {
      "scheme_id_uri": "https://developer.apple.com/streaming/emsg-id3",
      "presentation_time": 27554,
      "timescale": 1000,
      "message_data": "ID3TXXXgoogle_1234567890123456789",
      ...
    }
    
  3. Отфильтруйте ID3-теги в формате TXXXgoogle_{ad_event_ID} :

    TXXXgoogle_1234567890123456789
    

Показать данные о рекламных событиях

Чтобы найти объект TagSegment , выполните следующие действия:

  1. Получите объект tags из объекта Poll ad metadata . Объект tags представляет собой массив объектов TagSegment .

  2. Используйте полный идентификатор события объявления, чтобы найти объект TagSegment с типом progress .

  3. Используйте первые 17 символов идентификатора рекламного события, чтобы найти объект TagSegment других типов.

  4. Получив TagSegment , используйте свойство ad_break_id в качестве ключа, чтобы найти объект AdBreak в объекте метаданных объявления ad_breaks .

    В следующем примере находится объект AdBreak :

    {
      "type":"mid",
      "duration":15,
      "ads":1
    }
    
  5. Используйте данные TagSegment и AdBreak , чтобы отобразить информацию о позиции объявления в рекламной паузе. Например, Ad 1 of 3 .

Отправьте запросы на подтверждение медиафайлов.

Для каждого рекламного события, кроме событий, связанных с progress , отправляйте запрос на подтверждение медиафайла. Google DAI игнорирует события, progress , и частая отправка таких событий может негативно повлиять на производительность вашего приложения.

Для генерации полного URL-адреса подтверждения медиаконтента для рекламного события выполните следующие действия:

  1. Из ответа потока добавьте полный идентификатор рекламного события к значению media_verification_url .

  2. Выполните 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) можно просмотреть историю всех рекламных событий. Подробнее см. раздел «Мониторинг и устранение неполадок в прямом эфире».