API en vivo: Puntos de referencia y balizas publicitarias con SSAI
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
yavail_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
- 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 - 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
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.
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:
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.