Editor

Qué hace el editor
El Editor de grabaciones es la vista en navegador enlazada a una grabación existente en la plataforma orquestada por C21 Live Control. Es el camino desde un broadcast capturado a un clip que puede descargarse, entregarse a MediaCopilot o enviarse a un destino de almacenamiento externo. El editor nunca modifica la grabación fuente; cada exportación es un artefacto derivado nuevo.
El editor puede abrirse sobre una grabación en cualquier estado, incluido mientras la grabación sigue escribiéndose (la API expone ended_at: null en ese caso).
La pestaña Editor y el endpoint de ejecución subyacente requieren la licencia C21LiveEditor en la instancia de Live Control. Sin ella, la pestaña queda oculta en la sección Recordings y las llamadas directas al endpoint se rechazan.
UI Interface
La vista Editor expone:
| Control | Propósito |
|---|---|
| Vídeo preview | Preview basada en HLS de la grabación seleccionada. |
| Timeline | Barra temporal navegable con la posición del playhead. |
| IN / OUT / CUT | Marca el punto de entrada, el de salida y crea el clip; con un clip ya seleccionado, IN u OUT actualizan directamente sus límites. |
| Panel de clips | Lista de cada clip definido sobre la grabación. Por clip: nombre, start, end y acciones Send to / Download / Delete. |
| Selector de paso | Granularidad del playhead — fotograma a fotograma o un segundo. |
| Add tag | Marcadores puntuales sobre el timeline. |
| Diálogo Send to | Selector de formato, selector de destino (FTP / SFTP / S3 / MediaCopilot), selección de pistas de audio, bloque DRM y formulario opcional de metadatos XML (Title / Description / Destination / Category). |
Los clips sobreviven recargas — el Editor los persiste en una clave por-grabación del session storage del navegador y los restaura al volver a montar.
Cómo se define un corte
Un corte es el cuerpo de una única petición executeEditor. Los campos obligatorios son:
| Campo | Notas |
|---|---|
quality | Una de las renditions capturadas (devuelta en qualities sobre la grabación). |
allbitrates | Cuando es true, el corte abarca todos los bitrates capturados; el resultado se entrega como TAR. |
intervals[] | Uno o más rangos { start, end, name? }. start y end son timestamps. |
kfstart | Cuando es true, el corte se ajusta al keyframe más cercano para no recodificar el primer segmento. |
concat | Cuando es true, los intervalos del mismo bitrate se concatenan en una sola salida; en otro caso cada intervalo produce su artefacto. |
encoding | Contenedor de salida — ver tabla abajo. |
command | Destino de entrega — ver tabla abajo. |
filename | Nombre de fichero de salida opcional. |
Formatos de salida
El diálogo Send-to expone los siguientes formatos de salida:
encoding | Contenedor | Notas |
|---|---|---|
ts | MPEG-TS | Entrega de rendition única. |
mp4 | MP4 | Entrega de rendition única. |
fmp4 | MP4 fragmentado | Entrega de rendition única; útil para packagers aguas abajo. |
audio | Solo audio | Elimina el vídeo; selecciona las pistas de audio según el bloque audio. |
Destinos de entrega
El diálogo Send-to expone un destino a la vez. El valor de command elegido activa el sub-objeto correspondiente en el cuerpo de la petición.
command | Destino | Activa |
|---|---|---|
download | Navegador del operador | Descarga HTTP directa — un fichero inline, varios como TAR. |
ftp | Servidor FTP remoto | Sub-objeto ftp. |
sftp | Servidor SFTP remoto | Sub-objeto sftp. |
s3 | Bucket compatible con S3 | Sub-objeto s3. |
exportMediaCopilot | Tenant de MediaCopilot | Campos específicos de MediaCopilot (sync, mc_model, mc_collection, mc_template). |
Cada sub-objeto FTP, SFTP y S3 acepta los campos de conexión inline o — preferido — una referencia id única a un Target Folder guardado (cross-link abajo).
Sub-objetos FTP y SFTP
{
"ftp": {
"id": <target folder id>,
"host": "<host>",
"username": "<usuario>",
"password": "<contraseña>",
"path": "<dir remoto>",
"filename": "<override de filename>"
}
}
sftp acepta el mismo shape más un identificador account opcional. Cuando id referencia un Target Folder guardado, host, credenciales y path se toman del registro y los valores inline pueden omitirse.
Sub-objeto S3
{
"s3": {
"id": <target folder id>,
"aki": "<AWS access key id>",
"sak": "<AWS secret access key>",
"bucket": "<nombre del bucket>"
}
}
Cuando id referencia un Target Folder guardado, las credenciales y el bucket se toman del registro. Consulta Target Folders para el catálogo y el modelo de credenciales.
Selección de audio
El bloque audio opcional selecciona qué pistas de audio lleva el corte — útil para grabaciones multilingües:
{
"audio": {
"pids": [<pid>, …],
"languages": ["<idioma>", …],
"codecs": ["<codec>", …]
}
}
Cada miembro es independiente; el editor empareja pistas por cualquier combinación de pid, idioma o codec.
DRM en exportación
Cuando el deploy sirve clips protegidos en reposo, el bloque drm opcional asocia un DRM provider registrado al corte:
{
"drm": {
"provider": <id del proveedor>,
"content_id": "<content id en hex>"
}
}
content_id debe ser un valor hexadecimal. Consulta DRM workflow para el registro del proveedor y el alcance multi-sistema (Widevine, PlayReady, FairPlay).
Sidecar XML de metadatos
Cuando xml_enabled = true, el editor genera un sidecar XML desde el template configurado y lo entrega junto al fichero de vídeo. Los campos de metadatos viven en el sub-objeto FTP / SFTP / S3 elegido (o se envían desde el formulario de metadatos del diálogo Send-to):
| Campo | Propósito |
|---|---|
title | Título del clip — por defecto el filename cuando se deja vacío. |
description | Descripción libre. |
publishing | Identificador del Destination. |
category | Categoría de contenido. |
El template XML lo personaliza el System Administrator al instalar — los operators solo rellenan los campos de arriba.
Exportación a MediaCopilot
command: "exportMediaCopilot" activa los campos específicos de MediaCopilot. Los dos prerrequisitos heredados de la página de integración MediaCopilot aplican: cuenta MediaCopilot contratada vía Cires21 más la licencia C21LiveEditor.
| Campo | Notas |
|---|---|
sync | true devuelve el assetId asignado de forma síncrona; false devuelve un jobId y procesa de forma asíncrona. |
mc_model | Uno de turbo (default) o normal. |
mc_collection | Id opcional de colección MediaCopilot a la que asignar el activo. |
mc_template | Id opcional de template MediaCopilot a aplicar. |
Cuando sync = false, sondea el job mediante GET /c21apiv2/system/mediacopilot/jobs/{jobId} hasta que termine. El destino MediaCopilot aparece en el diálogo Send-to solo cuando la integración está configurada en Integrations → MediaCopilot.
Superficie API
| Acción | Método + ruta | operationId |
|---|---|---|
| Ejecutar el editor | POST /c21apiv2/editor/{broadcastName}/{broadcastDetailName}/execute | executeEditor |
El cuerpo completo de la petición está documentado arriba. El handler aplica Idempotency-Key; repetir la misma clave devuelve la respuesta original sin volver a cortar.
Ejemplo mínimo — descarga un clip MP4:
curl -X POST "https://<tu-host>/c21apiv2/editor/<broadcastName>/<broadcastDetailName>/execute" \
-H "Authorization: Bearer <YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"quality": 4000,
"allbitrates": false,
"kfstart": true,
"concat": false,
"encoding": "mp4",
"command": "download",
"filename": "highlight",
"intervals": [{ "start": 1747585200, "end": 1747588800, "name": "Goal 1" }]
}'
Cross-links
- Recordings — catálogo de capturas y política de retención.
- Opciones del Live stream — abrir el editor sobre la grabación activa de un Live stream.
- Target Folders — registra Target Folders para entrega FTP / SFTP / S3.
- Integración MediaCopilot — modelo de cuenta y prerrequisitos para el destino MediaCopilot.
- DRM workflow — registro de proveedor para el bloque
drmopcional en exportación. - Cortar un clip en el Editor y enviarlo a MediaCopilot — how-to paso a paso.
FAQ
ended_at siga siendo null; el corte está limitado a los segmentos ya escritos al enviar la exportación.start y end y un name opcional. Con concat = true, los intervalos del mismo bitrate se concatenan en una sola salida; en otro caso cada uno produce su artefacto.id desde un Target Folder guardado en Target Folders. Usar un Target Folder guardado es la vía recomendada — las credenciales se almacenan cifradas y el id es lo único que viaja en el payload.