API en vivo: Puntos de referencia y balizas publicitarias con SSAI

En este tema, aprenderá a administrar puntos de referencia y balizas publicitarias cuando utilice la inserción de anuncios del lado del servidor (SSAI) de Brightcove para sus trabajos de transmisión en vivo.

Resumen

Inserción de anuncios del lado del servidor (SSAI) le permite mostrar anuncios durante un evento de transmisión en vivo en momentos específicos. Para obtener información general, consulte el API en vivo: Inserción de anuncios en el servidor (SSAI) documento.

Puntos de referencia

Las pausas publicitarias se activan mediante puntos de referencia, que se pueden especificar de dos formas:

  • Enviado a Brightcove por el codificador
  • Puntos de referencia inmediatos creados a través del Live API

Desde el codificador

El sistema de entrega en vivo de Brightcove puede interpretar los puntos de referencia enviados por el codificador en el formato AMF:

  AMFDataList
  [0]:onCuePoint
  [1]:{Obj[]:
    time: 1.9889, //Difference from PTS of THIS packet to the first PTS of the 1st video frame in the adbreak
    name: "scte35",
    type: "event",
    ad_server_data: "eyJrZXkiOiJ2YWx1ZSJ9",	// optional introduced by Brightcove. It is a base64 encoded json map of parameters e.g. {"key":"value"}
    parameters: {Obj[]:
      type: "avail_in",
      duration: 12.0
    }
  }

Notas:

  • Dado que los códigos de tiempo se expresan en HH:MM:SS, no se sabe a qué día se refiere. Esto puede generar problemas, como enviar un punto de referencia a las 23:55:00 para que una pausa publicitaria comience a las 00:01:00 y hacer que el servidor lo interprete como hace casi 24 horas. Brightcove ha implementado una solución para esto de la siguiente manera: para los puntos de referencia que llegan entre las 23:50:00 y las 00:00:00 solo , asumiremos que está programando una pausa publicitaria para el día siguiente.
  • Se pueden apilar hasta 128 puntos de referencia en una sola solicitud, pero dadas las reglas sobre "transferencia" explicadas anteriormente, los puntos de referencia no se pueden enviar de esta manera para el día siguiente.
  • Dado que los códigos de tiempo SMPTE están asociados con la transmisión, es posible que una señal llegue después de la hora programada en la transmisión. Brightcove permitirá una tolerancia de hasta 5 segundos después de la entrada para seguir insertando un punto Cue.
  • Solo avail_in y avail_out Los puntos de referencia de tipo se admiten actualmente en la entrada RTMP.
  • Los puntos de referencia SCTE-35 son compatibles con las entradas RTP y SRT.

Inserción manual del punto de referencia

Puede crear puntos de referencia inmediatos para un trabajo o un grupo redundante mediante el Live API enviando un POST pedido:

Método POST
URL (para un trabajo) https://api.bcovlive.io/v1/jobs/{Job_ID}/cue point
URL (para un grupo redundante) https://api.bcovlive.io/v1/jobs/{Redundant_Group_ID}/cue point
Encabezamiento X-API-KEY: {your API KEY}

Incluya un cuerpo de solicitud que especifique lo siguiente:

Campo Tipo Descripción
duration Entero Duración de la pausa en segundos.

La duración del punto de referencia que se inserta debe ser al menos el doble de la longitud de los segmentos en el trabajo. Ver el ejemplo de duración.
timecode Formato SMPTE OPCIONAL: Un código de tiempo en formato SMPTE, HH: MM: SS: FF (FF = marcos), para especificar cuándo se debe pasar un conjunto de variables (pares clave / valor) al adServer.

Si se omite, el punto de referencia se insertará inmediatamente.

Si usa la propiedad de código de tiempo, el codificador debe enviar archivos con formato SMPTE (HH:MM:SS:FF ) código de tiempo almacenado en el tc propiedad vía OnFI. Los códigos de tiempo son desde el inicio de la transmisión en vivo.
ad_server_data Objeto OPCIONAL: Los pares clave / valor que pase dependerán del servidor de anuncios que esté utilizando. Para obtener más detalles, consulte la documentación de su servidor de anuncios y la Orientación de anuncios mediante macros publicitarias sección.
cuepoint_id Cadena OPCIONAL: Opcional. ID para usar al crear un punto de referencia. Si cancel es true , entonces este campo es requerido y es el ID del punto de referencia para cancelar.
cancel booleano OPCIONAL: Opcional. Defecto: false. Cuando true , punto de referencia especificado por cuepoint_id será cancelada. Si la pausa publicitaria ya está en curso, se producirá un bloqueo y volverá al contenido principal.

Ejemplo de duración

La duración del punto de referencia que se inserta debe ser al menos el doble de la longitud de los segmentos en el trabajo.

Por ejemplo, insertar un punto de referencia de 10 segundos en un trabajo con "segment_seconds"=4, funcionará bien. Sin embargo, al insertar el mismo punto de referencia en un trabajo con "segment_seconds"=6 dará como resultado el siguiente error:

  "error": "The parameter duration should be greater than
    or equal to (2 * target duration) of the job"
 
 

Cuerpo de solicitud de muestra

  {
    "duration": 30,
    "timecode": "15:50:49:16",
    "ad_server_data" : {
    "adbreakid": 12312
    "breaktheme": "fitness"
    }
  }

Notas

  1. Los codificadores de software como Wirecast y OBS no admiten el envío de código de tiempo a través de OnFI paquetes en el flujo RTMP
  2. Los codificadores de hardware elementales admiten el envío de código de tiempo a través de OnFI paquetes en el flujo RTMP

Respuesta de muestra

  {
    "id": "Job_ID",
    "cue_point": {
      "id": "adBreak-2f58393ada1442d98eca0817fa565ba4",
      "duration": 30,
      "accuracy": "segment", [Can be segment or frame ]
      "inserted_at": "2017-07-21T09:30:46.307Z" [ Time when the cue point was inserted in the stream]
    },
  }

Balizas

Las balizas son puntos de datos sobre la reproducción que se envían a análisis de terceros para rastrear si se reprodujeron anuncios y en qué cantidad. En esta sección veremos los tipos de balizas que se pueden configurar usando el Live API y variables que se pueden utilizar para proporcionar los datos. La siguiente sección detallará el uso de solicitudes de API para crear y administrar conjuntos de balizas.

Tipos de balizas

Tipos de balizas
Tipo de baliza Descripción
Load Se activa una vez por sesión y solo se activa cuando se solicita un manifiesto de nivel superior
Play Se solicitó contenido y se devolvió el primer segmento.
Heartbeat Duración objetivo (segundos de segmento)
AdStart Anuncio individual iniciado
AdFirstQuartile Primer cuartil del anuncio (25%)
AdMidpoint Segundo cuartil de anuncios (50%)
AdThirdQuartile Tercer cuartil del anuncio (75%)
AdComplete Anuncio individual completado
AdBreakStart Ha comenzado la pausa publicitaria
AdBreakComplete la pausa publicitaria ha terminado

Variables de baliza / anuncio

La siguiente tabla muestra las variables que puede utilizar para proporcionar datos para las URL de baliza. Para incluir una variable, rodee con llaves dobles, como esta: {{job.job_id}}. Consulte la siguiente sección sobre la gestión de conjuntos de balizas para ver ejemplos completos.

Variables de configuración de anuncios
Variable
Descripción
session.session_id
id de sesión única
job.job_id
id de trabajo único
videocloud.video_id
Solo disponible para trabajos creados con un video de VideoCloud.
application_ad_configuration.description
valor de la aplicación en la creación de la sesión
random.int32
entero aleatorio de 32 bits con signo
random.int64
entero aleatorio de 64 bits con signo
random.uint32
entero sin signo aleatorio de 32 bits
random.uint64
entero sin signo aleatorio de 64 bits
random.uuid
uuid aleatorio
server.timestamputc
tiempo de época en milisegundos cuando se ha realizado la llamada desde ads-api
client.useragent
valor de encabezado http user-agent en la creación de la sesión
client.ipaddress
http x-reenviado-para valor de encabezado en la creación de la sesión, si se proporciona; de lo contrario, la dirección remota
client.referrer
valor del encabezado de referencia http en la creación de la sesión (nota: esa es la ortografía correcta)
client.referer
valor de encabezado de referencia http en la creación de la sesión (ortografía http)
client.ipuaid
valor hash de client.ipaddress y client.useragent
live.adbreak
(actualmente sin usar)
live.adbreakdurationms
Duración de la pausa publicitaria en milisegundos
live.adbreakduration
Duración de la pausa publicitaria en segundos de punto flotante de doble precisión
live.adbreakdurationint
Duración de la pausa publicitaria en segundos enteros
live.adbreak.timestamputc.wallclock
tiempo de época en milisegundos cuando se ha realizado la llamada al servidor de anuncios
live.adbreak.timestamputc.origin
tiempo de época en milisegundos desde la lista de bloques de origen. Este valor indica el momento en que se ha creado el fragmento de salida de señal en la lista de fragmentos de origen.
live.adbreak.timestamputc.session
tiempo de época en milisegundos de la lista de bloques ssai. Este valor indica el tiempo del fragmento de salida en la lista de fragmentos ssai. Dado que el contenido del anuncio y la brecha del anuncio NO suelen ser los mismos, después del primer anuncio, el live.adbreak.timestamputc.origin es diferente de live.adbreak.timestamputc.session. Este valor tiene en cuenta los ajustes de tiempo que se han realizado en el SSAI chunklist.

Variables publicitarias de SCTE-35

La Sociedad de Ingenieros de Telecomunicaciones por Cable (SCTE) define un estándar para la inserción de anuncios dinámicos para transmisiones en vivo. Un marcador de anuncios SCTE-35 define la marca de tiempo y la duración en la que se puede insertar un anuncio en la transmisión.

Si se analiza desde SCTE-35, las siguientes variables de configuración se pueden aplicar a sus etiquetas de anuncios:

Variables de configuración de anuncios SCTE-35
Variable
Descripción
{{scte35_eventID}}
una identificación de evento única pasada con un mensaje SCTE35.
{{scte35_programID}}
Se pasó una identificación de programa única con un mensaje SCTE35.
{{scte35_availNum}}
Una identificación para un tiempo de empalme específico disponible para anuncios, envíe a través de un mensaje SCTE35.
{{scte35_breakDuration}}
Duración de la pausa para la pausa publicitaria, en términos de tics del reloj de 90 kHz del programa, pasado con un mensaje SCTE35.
{{scte35_spliceTime}}
Tiempo de empalme para una pausa publicitaria, en términos de tics del reloj de 90 kHz del programa, pasado con un mensaje SCTE35.

Como parte de los manifiestos HLS, los mensajes SCTE-35 también son base64 con las variables en JSON. Por ejemplo:

{"scte35_eventID": somevalue, "scte35_programID": somevalue}

Gestión de conjuntos de balizas

Esta sección proporciona detalles sobre las solicitudes de API para administrar conjuntos de balizas. Consulte la sección anterior para conocer los tipos y variables de balizas.

Para agregar un conjunto de balizas a un trabajo en vivo, primero cree el conjunto de balizas y luego incluya la identificación cuando cree el trabajo, así:

{
  "live_stream": true,
  "region": "us-west-2",
  "reconnect_time": 30,
  "ad_insertion": true,
  "beacon_set": "beacon_set_id", ...

Crea un conjunto de balizas

Para crear un conjunto de balizas, envíe un POST pedido:

Método POST
URL https://api.bcovlive.io/v1/ssai/beaconsets
Encabezamiento X-API-KEY: your API KEY

Cuerpo de solicitud de muestra

{
    "account_id": "User's Account ID [Optional]",
    "beacon_urls": [
      {
        "beacon_url": "https://myserver.com/beaconRX/{{job.job_id}}/load?position=load&sid={{session.session_id}}&jid={{job.job_id}}&app={{application_ad_configuration.description}}&rnd32={{random.int32}}&rnd64={{random.int64}}&bid={{random.uuid}}&t={{server.timestamputc}}&ua={{client.useragent}}&ip={{client.ipaddress}}&ref={{client.referrer}}&ref={{client.referer}}&ab={{live.adbreak}}&abd={{live.adbreakduration}}&abdi={{live.adbreakdurationint}}",
        "beacon_type": "Load"
      },
      {
        "beacon_url": "https://myserver.com/beaconRX/{{job.job_id}}/play?position=play&sid={{session.session_id}}&jid={{job.job_id}}&app={{application_ad_configuration.description}}&rnd32={{random.int32}}&rnd64={{random.int64}}&bid={{random.uuid}}&t={{server.timestamputc}}&ua={{client.useragent}}&ip={{client.ipaddress}}&ref={{client.referrer}}&ref={{client.referer}}&ab={{live.adbreak}}&abd={{live.adbreakduration}}&abdi={{live.adbreakdurationint}}",
        "beacon_type": "Play"
      }
    ]
  }

Respuesta de muestra

{
    "beacon_set": {
      "beacon_urls": [{
      "beacon_url": "https://myserver.com/beaconRX/{{job.job_id}}/load?position=load&sid={{session.session_id}}&jid={{job.job_id}}&app={{application_ad_configuration.description}}&rnd32={{random.int32}}&rnd64={{random.int64}}&bid={{random.uuid}}&t={{server.timestamputc}}&ua={{client.useragent}}&ip={{client.ipaddress}}&ref={{client.referrer}}&ref={{client.referer}}&ab={{live.adbreak}}&abd={{live.adbreakduration}}&abdi={{live.adbreakdurationint}}",
      "beacon_type": "Load"
    },
    {
      "beacon_url": "https://myserver.com/beaconRX/{{job.job_id}}/play?position=play&sid={{session.session_id}}&jid={{job.job_id}}&app={{application_ad_configuration.description}}&rnd32={{random.int32}}&rnd64={{random.int64}}&bid={{random.uuid}}&t={{server.timestamputc}}&ua={{client.useragent}}&ip={{client.ipaddress}}&ref={{client.referrer}}&ref={{client.referer}}&ab={{live.adbreak}}&abd={{live.adbreakduration}}&abdi={{live.adbreakdurationint}}",
      "beacon_type": "Play"
    }],
    "beacon_set_id": "Inserted Beacon Set ID",
    "account_id": "USER's ACCOUNT ID"
    }
    "inserted": true
  }

Actualizar un conjunto de balizas

Actualizar un conjunto de balizas es similar a crear uno. Presentar una PUT pedido:

Método PUT
URL https://api.bcovlive.io/v1/ssai/beaconsets/beaconset/beacon_set_id
Encabezamiento X-API-KEY: your API KEY

Cuerpo de solicitud de muestra

{
    "account_id": "User's Account ID [Optional]",
    "beacon_urls": [
      {
      "beacon_url": "https://myserver.com/beaconRX/load",
      "beacon_type": "Load"
      },
      {
      "beacon_url": "https://myserver.com/beaconRX/play",
      "beacon_type": "Play"
      }
    ]
  }

Respuesta de muestra

{
    "beacon_set": {
      "account_id": "User's Account ID",
      "beacon_set_id": "Beacon set ID",
      "beacon_urls": [{
        "beacon_url": "https://myserver.com/beaconRX/load",
        "beacon_type": "Load"
        },
        {
        "beacon_url": "https://myserver.com/beaconRX/play",
        "beacon_type": "Play"
      }],
      "updated_beacon_set": {
        "beacon_set_id": "Beacon set ID",
        "beacon_urls": [{
          "beacon_url": "https://myserver.com/beaconRX/load",
          "beacon_type": "Load"
        },
        {
          "beacon_url": "https://myserver.com/beaconRX/play",
          "beacon_type": "Play"
        }],
        "account_id": "User's Account ID"
      }
    }
  }

Obtenga conjuntos de balizas

Para recuperar los conjuntos de balizas de una cuenta, envíe un GET pedido:

Método GET
URL https://api.bcovlive.io/v1/ssai/beaconsets/account/Account ID
Encabezamiento X-API-KEY: your API KEY

Respuesta de muestra

[{
      "account_id": "User's Account ID",
      "beacon_set_id": "Beacon set ID1",
      "beacon_urls": [{
      "beacon_url": "https://myserver.com/beaconRX/load",
      "beacon_type": "Load"
    }]
    },
    {
      "account_id": "User's Account ID",
      "beacon_set_id": "Beacon set ID2",
      "beacon_urls": [{
      "beacon_url": "https://myserver.com/beaconRX2/load",
      "beacon_type": "Load"
      },
      {
      "beacon_url": "https://myserver.com/beaconRX2/play",
      "beacon_type": "Play"
      }]
  }]

Obtenga conjuntos de balizas para el usuario solicitante

También puede obtener los conjuntos de balizas para la cuenta del usuario solicitante sin incluir la identificación de la cuenta en la URL de la solicitud:

Método GET
URL https://api.bcovlive.io/v1/ssai/beaconsets
Encabezamiento X-API-KEY: your API KEY

Respuesta de muestra

[{
      "account_id": "User's Account ID",
      "beacon_set_id": "Beacon set ID1",
      "beacon_urls": [{
      "beacon_url": "https://myserver.com/beaconRX/load",
      "beacon_type": "Load"
    }]
    },
    {
      "account_id": "User's Account ID",
      "beacon_set_id": "Beacon set ID2",
      "beacon_urls": [{
      "beacon_url": "https://myserver.com/beaconRX2/load",
      "beacon_type": "Load"
      },
      {
      "beacon_url": "https://myserver.com/beaconRX2/play",
      "beacon_type": "Play"
      }]
  }]

Obtener una baliza configurada por id

Para recuperar una baliza única establecida por su id, envíe un GET pedido:

Método GET
URL https://api.bcovlive.io/v1/ssai/beaconsets/beaconset/beacon_set_id
Encabezamiento X-API-KEY: your API KEY

Respuesta de muestra

{
      "account_id": "User account ID",
      "beacon_set_id": "Beacon set ID",
      "beacon_urls": [{
        "beacon_type": "Load",
        "beacon_url": "https://myserver.com/beaconRX2/load"
    },
    {
      "beacon_type": "Play",
      "beacon_url": "https://myserver.com/beaconRX2/play"
    }]
  }

Eliminar un conjunto de balizas

Finalmente, para eliminar un conjunto de balizas, envíe un DELETE pedido:

Método DELETE
URL https://api.bcovlive.io/v1/ssai/beaconsets/beaconset/beacon_set_id
Encabezamiento X-API-KEY: your API KEY

Respuesta de muestra

La respuesta se verá así:

{
    "beacon_set_id": "Beacon set ID",
    "deleted": true
  }

Apéndice

A continuación se muestra una captura de pantalla para mostrar una configuración de punto de referencia de muestra para el codificador elemental.

Configuración de punto de señal elemental
Configuración de punto de señal elemental