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