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

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

Предпосылки

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

Подать заявку на трансляцию

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

  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. Установите таймер, используя значение 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, выполните следующие действия:

  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 . Объект 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) для просмотра истории всех рекламных событий. Подробнее см. в разделе Мониторинг и устранение неполадок в прямой трансляции.