Esta página se ha movido; se le dirigirá a la nueva ubicacion en 3 segundos. ¡Actualiza tus marcadores!

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.

Descripción general

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: "YWJjZGVmZ2g=",	// 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:

  • Solo avail_in 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 utilizando el Live API enviando un POST pedido:

Método POST
URL https://api.bcovlive.io/v1/jobs/Job_ID/cuepoint
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 con formato SMPTE (HH:MM:SS:FF ) código de tiempo almacenado en el tc propiedad a través de 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.

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 de adbreak y la brecha de adbreak NO suelen ser los mismos, después del primer adbreak 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. En la tabla siguiente se resumen las variables de configuración de anuncios de SCTE-35.

Variables de configuración de anuncios SCTE-35
Variable
Descripción
scte35_eventID
se ha transmitido un identificador de evento único con un mensaje SCTE35.
scte35_programID
Se ha pasado un identificador de programa único con un mensaje SCTE35.
scte35_availNum
Identificador de un tiempo de empalme específico disponible para los anuncios, se envía mediante un mensaje SCTE35.
scte35_breakDuration
La duración del descanso del anuncio, en términos de ticks del reloj de 90 kHz del programa, pasó con un mensaje SCTE35.
scte35_spliceTime
Combina el tiempo para una pausa publicitaria, en términos de ticks del reloj de 90 kHz del programa, transcurrido con un mensaje SCTE35.

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