Prepara al cliente para el redireccionamiento de publicación de grupos de anuncios

En esta guía, se explica cómo desarrollar una aplicación cliente para cargar una transmisión en vivo de HLS o DASH con la API de Pod Serving y tu manipulador de manifiestos.

Requisitos previos

Antes de continuar, debes tener lo siguiente:

Realiza una solicitud de transmisión

Cuando el usuario seleccione una transmisión, haz lo siguiente:

  1. Realiza una solicitud POST al método del servicio de transmisión en vivo. Para obtener más detalles, consulta Método: stream.

  2. Pasa parámetros de segmentación de anuncios en formatos application/x-www-form-urlencoded o application/json. Esta solicitud registra una sesión de transmisión con la DAI de Google.

    En el siguiente ejemplo, se realiza una solicitud de transmisión:

    Codificación de formularios

    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());
    

    Codificación 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());
    

    Si se ejecuta de forma correcta, verás un resultado similar al siguiente:

    {
    "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. En la respuesta JSON, busca el ID de sesión de transmisión y almacena otros datos para los pasos posteriores.

Metadatos de anuncios de encuesta

Para sondear los metadatos de los anuncios, haz lo siguiente:

  1. Lee el valor de metadata_url de la respuesta de registro de la transmisión.

  2. Realiza una solicitud GET al extremo. Para obtener más detalles, consulta Método: metadata.

    En el siguiente ejemplo, se recuperan los metadatos del anuncio:

    const response = await fetch(metadata_url);
    console.log(await response.json());
    

    Si se ejecuta correctamente, recibirás la respuesta PodMetadata para las pausas publicitarias actuales y futuras:

    {
      "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. Guarda el objeto tags para los pasos posteriores.

  4. Establece un temporizador con el valor polling_frequency para solicitar metadatos de forma periódica para todos los intervalos publicitarios sucesivos.

Carga la transmisión en tu reproductor de video

Después de obtener el ID de sesión de la respuesta de registro, pásalo al manipulador de manifiestos o crea una URL de manifiesto para cargar la transmisión en un reproductor de video.

Para pasar el ID de sesión, consulta la documentación del manipulador de manifiestos. Si desarrollas un manipulador de manifiestos, consulta Manipulador de manifiestos para transmisiones en vivo.

En el siguiente ejemplo, se ensambla una URL de manifiesto:

https://<your_manifest_manipulator_url>/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY"

Cuando el reproductor esté listo, comienza la reproducción.

Cómo detectar eventos de anuncios

Verifica el formato del contenedor de tu transmisión para los metadatos cronometrados:

  • Las transmisiones HLS con contenedores de Transport Stream (TS) usan etiquetas ID3 cronometradas para transportar metadatos cronometrados. Para obtener más información, consulta Acerca del formato de aplicación de medios común con HTTP Live Streaming (HLS).

  • Los flujos de DASH usan elementos EventStream para especificar eventos en el manifiesto.

  • Las transmisiones DASH usan elementos InbandEventStream cuando los segmentos contienen casillas de Mensaje de evento (emsg) para los datos de carga útil, incluidas las etiquetas ID3. Para obtener más detalles, consulta InbandEventStream.

  • Los flujos de CMAF, incluidos DASH y HLS, usan casillas emsg que contienen etiquetas ID3.

Para recuperar las etiquetas ID3 de tu transmisión, consulta la guía de tu reproductor de video. Para obtener más información, consulta la guía para controlar metadatos cronometrados.

Para recuperar el ID del evento de anuncio de las etiquetas ID3, haz lo siguiente:

  1. Filtra los eventos por scheme_id_uri con urn:google:dai:2018 o https://aomedia.org/emsg/ID3.
  2. Extrae el array de bytes del campo message_data.

    En el siguiente ejemplo, se decodifican los datos de emsg en JSON:

    {
      "scheme_id_uri": "https://developer.apple.com/streaming/emsg-id3",
      "presentation_time": 27554,
      "timescale": 1000,
      "message_data": "ID3TXXXgoogle_1234567890123456789",
      ...
    }
    
  3. Filtra las etiquetas ID3 con el formato TXXXgoogle_{ad_event_ID}:

    TXXXgoogle_1234567890123456789
    

Mostrar datos de eventos de anuncios

Para encontrar el objeto TagSegment, haz lo siguiente:

  1. Recupera el objeto de metadatos del anuncio tags de Metadatos del anuncio de sondeo. El objeto tags es un array de objetos TagSegment.

  2. Usa el ID completo del evento del anuncio para encontrar un objeto TagSegment con el tipo progress.

  3. Usa los primeros 17 caracteres del ID del evento del anuncio para encontrar un objeto TagSegment de otros tipos.

  4. Después de obtener el TagSegment, usa la propiedad ad_break_id como clave para encontrar el objeto AdBreak en el objeto ad_breaks de metadatos del anuncio.

    En el siguiente ejemplo, se busca un objeto AdBreak:

    {
      "type":"mid",
      "duration":15,
      "ads":1
    }
    
  5. Usa los datos de TagSegment y AdBreak para mostrar información sobre la posición del anuncio en la pausa publicitaria. Por ejemplo, Ad 1 of 3.

Envía pings de verificación de medios

Para cada evento de anuncio, excepto el tipo progress, envía un ping de verificación de medios. La DAI de Google descarta los eventos progress, y enviar estos eventos con frecuencia podría afectar el rendimiento de tu app.

Para generar la URL de verificación de medios completa de un evento de anuncio, haz lo siguiente:

  1. En la respuesta de transmisión, agrega el ID completo del evento del anuncio al valor media_verification_url.

  2. Realiza una solicitud GET con la URL completa:

    // media_verification_url: "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/"
    const completeUrl = `${media_verification_url}google_5555555555123456789`;
    
    const response = await fetch(completeUrl);
    

    Si la operación se realiza correctamente, recibirás una respuesta con el código de estado 202. De lo contrario, recibirás un código de error 404.

Puedes usar el Monitor de actividad de transmisión (SAM) para inspeccionar un registro histórico de todos los eventos de anuncios. Para obtener más información, consulta cómo supervisar y solucionar problemas de una transmisión en vivo.