API en vivo: Creación de clips VOD

En este tema, aprenderá a usar Live API para crear clips de video a pedido (VOD) a partir de sus transmisiones en vivo.

Resumen

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 sistema de ingesta transcodificará el MP4 y los tipos de representaciones 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 / o stream_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/o end_time definido en relación con la hora de inicio ( stream_start_time ) de todo el evento de transmisión en vivo
  • Con start_time y / o end_time definido en tiempo Epoch (Unix) (en segundos)
  • Con duration
  • Tanto Live API como Live Module admiten la creación de clips a partir de trabajos encriptados o protegidos con DRM.

Notas

  1. 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.
  2. 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 está terminado: ( finished_at - duración) a ( finished_at)
  3. Si especifica ambos start_time Y end_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 y finished_at, se realizará el clip
  4. Clips de transmisiones en vivo usando SSAI no incluirá anuncios.
  5. 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 7 días (lo que sea más corto).
  6. 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.
  7. 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.
  8. 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 enviándolo 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 un minuto de duración 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,
        "profile": "valid-ingest-profile-name"
        }
      }
    }
  ]
}

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": ["https://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": ["https://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": ["https://myserver.com/api/notification_listener?type=jvod"]
    }
  ],
}

En este ejemplo, estamos creando un clip de 30 segundos de duración y enviándolo a un depósito S3. Proporcionamos la URL del depósito, incluido el nombre del archivo para el clip, y una cadena que es el nombre de las credenciales del depósito S3 guardadas.

Puede crear y administrar credenciales mediante Live API. Para obtener más información, consulte lo siguiente:

Solicitar campos de cuerpo

Aquí hay una tabla completa de los campos del cuerpo de la solicitud.

Solicitar campos de cuerpo
Campo Tipo Descripción
live_job_id Cadena

El ID del trabajo de Live Stream desde el que crear el clip VOD.

outputs Objeto[]

Matriz de salidas VOD

outputs.label Cadena

Etiqueta para la salida

outputs.duration Número

Duración del clip en segundos. Se duration puede utilizar solo para definir un clip que se hará de los {duration} segundos finales de la transmisión. duration también se puede utilizar con cualquiera de stream_start_time, stream_end_time, start_time, end_time, stream_end_timecode, o stream_start_timecode.

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, stream_start_time debe usarse con ya sea stream_end_time o duration.

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, stream_end_time debe usarse con ya sea stream_start_time o duration.

outputs.start_time Número

Hora de inicio del clip en tiempo Epoch (Unix) (segundos), start_time debe usarse con ya sea end_time o duration.

outputs.end_time Número

Hora de finalización del clip en tiempo Epoch (Unix) (segundos), end_time debe usarse con ya sea start_time o duration.

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, stream_start_timecode debe usarse con ya sea stream_end_timecode o duration.

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.stream_end_timecode debe usarse con ya sea stream_start_timecode o duration.

outputs.url Cadena

URL de destino del clip, tenga en cuenta que la salida deber Contiene ya sea esto url campo o a videocloud objeto que define las propiedades de vídeo y las opciones de ingesta para Video Cloud.

outputs.credentials Cadena

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 master campo, ya que esa información será proporcionada por la API en vivo. Si no se especifica ningún perfil de ingesta, se utilizará el perfil predeterminado de la cuenta.

Campos de video para Video Cloud ingestión

Ver el Referencia de la API de CMS para más detalles.

Campos de video
Campo Tipo Descripción
ad_keys Cadena 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 Cadena Descripción larga (hasta 5000 caracteres)
name Cadena 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 Cadena La proyección de mapeo para videos de 360 °, por ejemplo, "equirectangular"
reference_id Cadena 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 Cadena 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.

Campos de punto de referencia
Campo Tipo Descripción
id Cadena 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 Cadena El nombre del punto de referencia
time Flotador Tiempo del punto de referencia en segundos medido desde el inicio del video
type Cadena El tipo de punto de referencia ( AD o DATA)

Campos geográficos de video

La siguiente tabla muestra el video.geo campos de objeto.

Campos de filtrado geográfico
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

La siguiente tabla muestra el video.link campos de objeto.

Campos de enlace
Campo Tipo Descripción
url Cadena URL del enlace relacionado
text Cadena Texto del enlace relacionado

Campos de programación de video

La siguiente tabla muestra los campos para video.schedule objeto

video.schedule Campos
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

Video Cloud Campos de ingesta
Campo Tipo Descripción
audio_tracks opcional Solo entrega dinámica 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 false esta apoyado) Entrega dinámica únicamente

Valor por defecto: false

audio_tracks.masters opcional Objeto[]

matriz de objetos de pista de audio Entrega dinámica únicamente

audio_tracks.masters.url opcional Cadena

URL del archivo de audio Entrega dinámica únicamente

audio_tracks.masters.language opcional Cadena

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 Cadena

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: "main", "alternate", "commentary", "dub", "descriptive"

profile opcional Cadena

el ID (no el nombre) del perfil de ingesta que se usará para la transcodificación; si está ausente, se usará el perfil predeterminado (se recomienda omitir este campo y usar el perfil predeterminado)

text_tracks opcional Objeto[]

gama de text_tracks objetos - ver Ingesta de archivos WebVTT (pistas de texto)

text_tracks.url URL

URL de un archivo WebVTT

text_tracks.srclang Cadena

Código de idioma ISO 639 de 2 letras (alfa-2) para las pistas de texto

text_tracks.kind opcional Cadena

cómo se debe usar el archivo vtt

Valor por defecto: captions

Valores permitidos: "captions", "subtitles", "chapters", "metadata"

text_tracks.label opcional Cadena

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 true si el perfil tiene representaciones de imágenes, false si no es así, mira Imágenes y API de ingesta dinámica para más información

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

Campos del cuerpo de respuesta
Campo Tipo Descripción
vod_jobs Objeto

El objeto de respuesta de clip

jvod_id Cadena

La identificación del trabajo de clip

label Cadena

La etiqueta del clip (de la entrada)

live_job_id Cadena

La identificación del trabajo en vivo (de la entrada)