API en vivo: Creación de clips VOD
Descripción general
Los clips son videos extraídos de una transmisión en vivo. Se pueden enviar a un bucket de S3, un sitio FTP o un Video Cloud cuenta. El clip se crea como un video MP4, y eso es lo que se envía al destino en todos los casos. En el caso de Video Cloud , el MP4 será transcodificado por el sistema de ingesta, y los tipos de interpretaciones que se creen para el video dependerán del perfil de ingesta utilizado.
Las definiciones de los clips se crean utilizando el /vods
punto final.
Los clips se pueden crear de varias formas:
- Con
stream_start_timecode
y / ostream_end_timecode
definido en los códigos de tiempo SMPTE para el evento de transmisión en vivo - tenga en cuenta que esto requiere que el codificador envíe información de código de tiempo - Con
start_time
y/oend_time
definida en relación con la hora de inicio (stream_start_time
) de todo el evento de transmisión en directo - Con
start_time
y / oend_time
definido en tiempo Epoch (Unix) (en segundos) - Con
duration
- La API de VOD lata ser usado con cifrado o protegido por DRM trabajos. Actualmente, el Live Module no es compatible con esto, pero lo hará en una versión futura.
Notas
- Para que los clips estén disponibles lo más rápido posible, primero se crea un clip con precisión de segmento y luego se reemplaza por un clip con precisión de fotograma tan pronto como esté disponible.
- Si lo especifica
duration
, el clip resultante será el siguiente:- Si el trabajo está activo y aún en vivo: (tiempo de solicitud - duración) a (tiempo de solicitud)
- Si el trabajo ha finalizado: (
finished_at
- duración) a (finished_at
)
- Si especifica ambos
start_time
Yend_time
:- Si el trabajo está activo y aún en vivo: siempre que la ventana de tiempo de Época se encuentre completamente dentro
created_at
y el tiempo de solicitud, se realizará el clip - Si el trabajo ha finalizado: siempre que la ventana de tiempo de época caiga completamente dentro
created_at
yfinished_at
, se realizará el clip
- Si el trabajo está activo y aún en vivo: siempre que la ventana de tiempo de Época se encuentre completamente dentro
- Clips de transmisiones en vivo usando SSAI no incluirá anuncios.
- Los clips se pueden crear hasta 7 días después de un evento. Para SEP , se pueden crear hasta la próxima activación o hasta 7 días (lo que sea más corto).
- La API de VOD no agregará ningún contenido fuera de lo que está presente en la transmisión. Si especifica 350 en una transmisión en vivo de 300 segundos, la salida será de 300 segundos.
- No es necesario que use una transmisión en vivo habilitada para DVR para que el recorte funcione, porque la transmisión en vivo se almacena mientras se transmite y está disponible de inmediato y durante 7 días después de que finaliza el evento.
- El recorte de Brightcove Live solo producirá un clip que tenga la misma resolución que la salida de mayor resolución. No coincidirá con la resolución de entrada de la fuente (a menos que sea la misma que la salida con la resolución más alta).
Los clips también se pueden enviar a varios destinos:
- A Video Cloud cuenta
- Un servidor FTP
- Un cubo S3
Cuando especifica un clip, la salida deber Contiene ya sea a url
destino o a videocloud
objeto para detallar la creación del video y la ingestión del clip en Video Cloud.
Nota: clips se puede crear mientras se ejecuta la transmisión en vivo. Para hacer esto, deberá definir las horas de inicio y finalización del clip en tiempo de Época o en relación con comienzo hora de la transmisión en vivo.
Cartas credenciales
Si el destino al que está enviando el clip requiere credenciales para acceder, puede crearlas usando las operaciones de credenciales de Live API. Ver Administrar credenciales para la API en vivo para más detalles.
Punto final
Los clips se crean enviando un POST
solicitud de:
https://api.bcovlive.io/v1/vods
Cuerpo de la solicitud - Video Cloud
Ejemplo 1: horas de inicio / finalización relativas al inicio de la transmisión
El cuerpo de la solicitud incluye las horas de inicio y finalización, y detalles sobre dónde enviar el clip. Aquí hay un cuerpo de solicitud de muestra que crea un clip del tercer minuto de una transmisión y lo envía a un Video Cloud cuenta:
{
"live_job_id":"PUT-LIVE-JOB-ID-HERE",
"outputs":[
{
"label": "60 secs by stream from min 2 to min 3",
"stream_start_time": 120,
"stream_end_time": 180,
"credentials": "USER_VIDEOCLOUD_CREDENTIAL_LABEL",
"videocloud": {
"video": {
"name": "One Minute Clip",
"tags": ["live", "clip"]
},
"ingest": {
"capture-images": true
}
}
}
]
}
En este ejemplo, estamos creando un clip de un minuto de duración y lo enviamos a Video Cloud . Le damos al clip un nombre y un par de etiquetas, sin especificar el ingest profile para retranscodificar, de modo que se utilice la cuenta predeterminada, e instruir Video Cloud para capturar imágenes en miniatura y póster del clip durante la transcodificación.
Ejemplo 2: horas de inicio / finalización en la época de la Época
El cuerpo de la solicitud incluye las horas de inicio y finalización en la época de Epoch y detalles sobre dónde enviar el clip. Aquí hay un cuerpo de solicitud de muestra que crea un clip del tercer minuto de una transmisión y lo envía a un Video Cloud cuenta:
{
"live_job_id":"PUT-LIVE-JOB-ID-HERE",
"outputs":[
{
"label": "60 secs - epoch time",
"start_time": 1516652694,
"end_time": 1516652754,
"credentials": "USER_VIDEOCLOUD_CREDENTIAL_LABEL",
"videocloud": {
"video": {
"name": "One Minute Clip",
"tags": ["live", "clip"]
},
"ingest": {
"capture-images": true
}
}
}
]
}
En este ejemplo, estamos creando un clip de duración de un minuto en una época específica (en este caso el 22 de enero de 2018 a las 08:24:54 GMT).
Ejemplo 3: duración con hora de inicio relativa al inicio de la transmisión
El cuerpo de la solicitud incluye la duración y stream_start_time, y detalles sobre dónde enviar el clip. Aquí hay un cuerpo de solicitud de muestra que crea un clip del tercer minuto de una transmisión y lo envía a un Video Cloud cuenta:
{
"live_job_id":"PUT-LIVE-JOB-ID-HERE",
"outputs":[
{
"label": "60 secs from start time",
"stream_start_time": 300,
"duration": 60,
"credentials": "USER_VIDEOCLOUD_CREDENTIAL_LABEL",
"videocloud": {
"video": {
"name": "One Minute Clip",
"tags": ["live", "clip"]
},
"ingest": {
"capture-images": true
}
}
}
]
}
En este ejemplo, estamos creando un clip de un minuto de duración que comienza 5 minutos después del inicio de la transmisión en vivo.
Ejemplo 4: duración sin hora de inicio ni de finalización
El cuerpo de la solicitud incluye las horas de inicio y finalización en la época de Epoch y detalles sobre dónde enviar el clip. Aquí hay un cuerpo de solicitud de muestra que crea un clip del tercer minuto de una transmisión y lo envía a un Video Cloud cuenta:
{
"live_job_id":"PUT-LIVE-JOB-ID-HERE",
"outputs":[
{
"label": "60 secs - duration",
"duration": 60,
"credentials": "USER_VIDEOCLOUD_CREDENTIAL_LABEL",
"videocloud": {
"video": {
"name": "One Minute Clip",
"tags": ["live", "clip"]
},
"ingest": {
"capture-images": true
}
},
"notifications": ["http://myserver.com/api/notification_listener?type=jvod"]
}
]
}
En este ejemplo, estamos creando un clip de un minuto de duración. Dado que no estamos especificando una hora de inicio o finalización, el clip se tomará de los últimos 60 segundos de la transmisión en vivo.
Ejemplo 5: usar stream_start_timecode
y stream_end_timecode
El cuerpo de la solicitud incluye las horas / fotogramas de inicio y finalización en los códigos de tiempo HH: MM: SS: FF y detalles sobre dónde enviar el clip. Tenga en cuenta que para utilizar códigos de tiempo, el codificador debe enviar códigos de tiempo. Aquí hay un cuerpo de solicitud de muestra que crea un clip de los 50 minutos de una transmisión y lo envía a un Video Cloud cuenta:
{
"live_job_id":"PUT-LIVE-JOB-ID-HERE",
"outputs":[
{
"label": "Clipping using Timecode from-01:10:18:15 to-01:11:08:15",
"stream_start_timecode": "01:10:18:15",
"stream_end_timecode": "01:11:08:15",
"credentials": "USER_VIDEOCLOUD_CREDENTIAL_LABEL",
"videocloud": {
"video": {
"name": "Fifty Minute Clip",
"tags": ["live", "clip"]
},
"ingest": {
"capture-images": true
}
}
},
"notifications": ["http://myserver.com/api/notification_listener?type=jvod"]
]
}
Información general sobre el envío de clips a Video Cloud
Para ver qué campos se pueden incluir en el video
y ingest
objetos, ver el Dynamic Ingest API Reference.
Cuerpo de la solicitud - S3
El cuerpo de la solicitud incluye las horas de inicio y finalización, y detalles sobre dónde enviar el clip. A continuación, se muestra un cuerpo de solicitud de muestra que crea un clip del tercer minuto de una transmisión y lo envía a un depósito de S3:
{
"live_job_id":"",
"outputs":[
{
"label": "last_30",
"duration": 30,
"url": "s3://YOUR_BUCKET_NAME/file_name.mp4",
"credentials": "s3-credentials",
"notifications": ["http://myserver.com/api/notification_listener?type=jvod"]
}
],
}
En este ejemplo, estamos creando un clip de 30 segundos de duración y lo enviamos a un bucket de S3. Proporcionamos la URL del depósito, incluido el nombre del archivo del clip, y una cadena que es el nombre de las credenciales del depósito de S3 guardadas; Brightcove Support puede configurar las credenciales para su cuenta.
Solicitar campos de cuerpo
Aquí hay una tabla completa de los campos del cuerpo de la solicitud.
Campo | Tipo | Descripción |
---|---|---|
live_job_id |
cuerda |
El ID del trabajo de Live Stream desde el que crear el clip VOD. |
outputs |
Objeto[] |
Matriz de salidas VOD |
outputs.label |
cuerda |
Etiqueta para la salida |
outputs.duration |
Número |
Duración del clip en segundos. Se |
outputs.stream_start_time |
Número |
Hora de inicio en segundos para el clip en relación con la hora de inicio de la transmisión en vivo, |
outputs.stream_end_time |
Número |
Hora de finalización en segundos para el clip en relación con la hora de inicio de la transmisión en vivo, |
outputs.start_time |
Número |
Hora de inicio del clip en tiempo Epoch (Unix) (segundos), |
outputs.end_time |
Número |
Hora de finalización del clip en tiempo Epoch (Unix) (segundos), |
outputs.stream_start_timecode |
Número |
Hora de inicio del clip en un código de tiempo con formato SMPTE (HH: MM: SS: FF) desde el inicio de la transmisión, |
outputs.stream_end_timecode |
Número |
Hora de finalización del clip en un código de tiempo con formato SMPTE (HH: MM: SS: FF) desde el final de la transmisión, |
outputs.url |
cuerda |
URL de destino del clip, tenga en cuenta que la salida deber Contiene ya sea esto |
outputs.credentials |
cuerda |
El nombre de las credenciales configuradas en su cuenta para esta dirección |
outputs.videocloud |
Objeto |
Un objeto que contiene entradas para Video Cloud ingestión |
outputs.videocloud.video |
Objeto |
Un objeto que contiene entradas para Video Cloud creación de objetos de vídeo: consulte la CMS API Reference for creating a video |
outputs.videocloud.ingest |
Objeto |
Un objeto que contiene entradas para Video Cloud ingestión de vídeo: consulte la Dynamic Ingest Reference - hacer no incluir la |
Campos de video para Video Cloud ingestión
Ver el Referencia de la API de CMS para más detalles.
Campo | Tipo | Descripción |
---|---|---|
ad_keys |
cuerda | Cadena que representa los pares clave / valor del anuncio asignados al video. Los pares clave / valor tienen el formato clave = valor y están separados por símbolos de unión. Por ejemplo: "adKeys": "category=sports&live=true" |
cue_points |
Matriz de mapas | matriz de mapas de puntos de referencia |
custom_fields |
Mapa de pares de campo-valor (cadenas) | Personalizado fieldname:value conjuntos para el vídeo: tenga en cuenta que los campos personalizados no tienen un valor para este video no están incluidos en este mapa; Los valores de campo personalizados tienen una longitud máxima de 1024 caracteres de un solo byte. |
description |
Cuerda; ocupa el lugar de la vieja descripción corta | Breve descripción del video (longitud máxima: 248 caracteres de un solo byte) |
economics |
Cadena, debe ser uno de los valores de enumeración válidos | "AD_SUPPORTED" (predeterminado) o "GRATIS" |
geo |
Mapa de pares propiedad-valor | Propiedades de restricción geográfica para el video |
link |
Mapa de pares propiedad-valor | Mapa de propiedades de enlaces relacionados |
long_description |
cuerda | Descripción larga (hasta 5000 caracteres) |
name |
cuerda | El nombre del video (longitud máxima: 248 caracteres de un solo byte) requerido |
offline_enabled |
booleano | Si el video está habilitado para reproducción sin conexión |
projection |
cuerda | La proyección de mapeo para videos de 360 °, por ejemplo, "equirectangular" |
reference_id |
cuerda | Identificador especificado por el usuario que identifica de forma exclusiva el vídeo, limitado a 150 caracteres. Se puede usar un referenceId como clave externa para identificar este video en otro sistema. El ID de referencia no debe contener espacios, comas ni caracteres especiales. |
schedule |
Mapa de pares propiedad-valor | Mapa de fecha y hora de inicio y finalización para la disponibilidad del video |
state |
cuerda | ACTIVO INACTIVO |
tags |
Matriz de etiquetas (cadenas) | Matriz de etiquetas asignadas al video |
text_tracks |
Matriz de pistas de texto estilo HTML5 | Matriz de pistas de texto (archivos WebVTT) asignadas al video |
Campos de puntos de referencia de video
La siguiente tabla muestra campos para video.cuepoints
.
Campo | Tipo | Descripción |
---|---|---|
id |
cuerda | Identificación del sistema para el punto de referencia |
force_stop |
booleano | Si el video debe detenerse en el punto de referencia |
metadata |
Cuerda; solo punto de código | Una cadena de metadatos asociada con el punto de referencia. |
name |
cuerda | El nombre del punto de referencia |
time |
Flotador | Tiempo del punto de referencia en segundos medido desde el inicio del video |
type |
cuerda | El tipo de punto de referencia ( AD o DATA ) |
Campos geográficos de video
La siguiente tabla muestra el video.geo
campos de objeto.
Campo | Tipo | Descripción |
---|---|---|
countries |
Matriz de cadenas de códigos de país | Matriz de la lista ISO 3166 de códigos de 2 o 4 letras (https://www.iso.org/obp/ui/) para los países en los que se permite o no se permite la reproducción del video |
exclude_countries |
booleano | Si es verdadero, la matriz de países se trata como una lista de países excluidos de la visualización. |
restricted |
booleano | Si el filtrado geográfico está habilitado para este video |
Campos de enlace de video
La siguiente tabla muestra el video.link
campos de objeto.
Campo | Tipo | Descripción |
---|---|---|
url |
cuerda | URL del enlace relacionado |
text |
cuerda | Texto del enlace relacionado |
Campos de programación de video
La siguiente tabla muestra los campos para video.schedule
objeto
Campo | Tipo | Descripción |
---|---|---|
ends_at |
Cadena en formato de fecha ISO-8601 | Fecha y hora en que el video deja de estar disponible para su visualización |
starts_at |
Cadena en formato de fecha ISO-8601 | Fecha y hora en que el video estará disponible para su visualización |
Video Cloud Campos de ingesta
Campo | Tipo | Descripción |
---|---|---|
audio_tracks Opcional Entrega dinámica únicamente |
Objeto[] |
matriz de objetos de pista de audio - ver Implementación de varias pistas de audio mediante las API para más información. |
audio_tracks.merge_with_existing Opcional |
booleano |
ya sea para reemplazar las pistas de audio existentes o agregar las nuevas (actualmente solo Valor por defecto: |
audio_tracks.masters Opcional |
Objeto[] |
matriz de objetos de pista de audio Entrega dinámica únicamente |
audio_tracks.masters.url Opcional |
cuerda |
URL del archivo de audio Entrega dinámica únicamente |
audio_tracks.masters.language Opcional |
cuerda |
Código de idioma para la pista de audio de las subetiquetas en https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry (se puede configurar el valor predeterminado para la cuenta comunicándose con el soporte de Brightcove) Entrega dinámica únicamente |
audio_tracks.masters.variant Opcional |
cuerda |
el tipo de pista de audio (el valor predeterminado se puede configurar para la cuenta comunicándose con el Soporte de Brightcove) Entrega dinámica únicamente Valores permitidos: |
profile Opcional |
cuerda |
ingiera el perfil que se utilizará para la transcodificación; si está ausente, se utilizará el perfil predeterminado |
text_tracks Opcional |
Objeto[] |
gama de |
text_tracks.url |
URL |
URL de un archivo WebVTT |
text_tracks.srclang |
cuerda |
Código de idioma ISO 639 de 2 letras (alfa-2) para las pistas de texto |
text_tracks.kind Opcional |
cuerda |
cómo se debe usar el archivo vtt Valor por defecto: Valores permitidos: |
text_tracks.label Opcional |
cuerda |
título legible por el usuario |
text_tracks.default Opcional |
booleano |
establece el idioma predeterminado para los subtítulos |
capture-images Opcional |
booleano |
si el póster y la miniatura deben capturarse durante la transcodificación; predeterminado a |
poster Opcional |
Objeto |
el póster del video que se va a ingerir - ver Imágenes y API de ingesta dinámica para más información |
poster.url |
URL |
URL de la imagen del póster del video |
poster.height Opcional |
Entero |
altura de píxel de la imagen |
poster.width Opcional |
Entero |
ancho de píxel de la imagen |
thumbnail Opcional |
Objeto |
la miniatura del video que se va a ingerir; consulte Imágenes y API de ingesta dinámica para más información |
thumbnail.url |
URL |
URL de la imagen en miniatura del video |
thumbnail.height Opcional |
Entero |
altura de píxel de la imagen |
thumbnail.width Opcional |
Entero |
ancho de píxel de la imagen |
callbacks Opcional |
Cuerda[] | Matriz de URL que notificaciones debe ser enviado a
|
Respuesta de la API
La respuesta a una solicitud de creación de clip incluye una identificación para el trabajo y la etiqueta que estableciste en el cuerpo de la solicitud, así como la identificación del trabajo en vivo:
{
"vod_jobs": [
{
"jvod_id": "9582606c50d84be5ad4bc104f2aa3360",
"label": "last 60 secs of live job"
}
],
"live_job_id": "88ba5d87b61a4ef3a6dddabd0c38d319"
}
Campos de respuesta
Campo | Tipo | Descripción |
---|---|---|
vod_jobs |
Objeto |
El objeto de respuesta de clip |
jvod_id |
cuerda |
La identificación del trabajo de clip |
label |
cuerda |
La etiqueta del clip (de la entrada) |
live_job_id |
cuerda |
La identificación del trabajo en vivo (de la entrada) |