media server logo
Mostrar u ocultar la navegación
Inicio de Callaba

Grabaciones

Usa Grabaciones para capturar una entrada en directo como archivo continuo o como segmentos temporizados destinados a archivo, replay, cumplimiento normativo o posproducción.

Qué haceCapturar una fuente en directo

Elige este módulo cuandoUna fuente en directo debe convertirse en un archivo continuo o segmentado.

Usa otro módulo cuandoUsa Archivos si el contenido ya está almacenado; usa Retransmisiones si la salida debe seguir en directo.

1Selecciona la fuente2Inicia la grabación3Guarda el recurso
POST /api/recording/create
10 endpoints

Antes de empezar

Todos los métodos requieren un x-access-token válido. Crea o comprueba primero la entrada, confirma la capacidad del disco local, selecciona el formato de salida y define antes del evento cualquier ajuste de retención.

Qué puedes hacer

  • create y update configuran la entrada, el formato, el modo de grabación, el procesamiento y la retención.
  • getAll, getCount y getById consultan los procesos y los archivos generados.
  • start y stop controlan la captura.
  • getStat devuelve el bitrate, la cadencia de frames, la velocidad de codificación y el progreso de salida disponibles.
  • removeFile elimina un archivo generado sin borrar el proceso.
  • remove elimina el proceso de grabación.

Flujo de ejemplo

  1. Crea un proceso desde un servidor SRT, servidor RTMP, fuente de videollamada o URL de stream compatible.
  2. Selecciona MP4, HLS u otro formato de salida compatible y el modo continuo o dividido por tiempo.
  3. Inicia el proceso antes de la ventana de captura necesaria.
  4. Usa getStat para confirmar que el bitrate de entrada y el tiempo de salida siguen avanzando.
  5. Detén el proceso, comprueba los archivos y cópialos al almacenamiento configurado.

Casos de uso habituales

  • Crear un archivo continuo del programa de un evento en directo.
  • Dividir una grabación larga de videovigilancia o broadcast en intervalos predecibles.
  • Grabar una señal de contribución RIST compatible para archivo o replay.
  • Mantener una grabación de respaldo con limpieza automática por antigüedad.

Límites y resolución de problemas

Una grabación necesita una entrada en directo estable y suficiente capacidad de disco y procesamiento. Supervisa el bitrate de entrada y el progreso mientras se ejecuta, comprueba los archivos generados antes de limpiarlos y prueba cualquier fuente RIST con el perfil y los ajustes de seguridad requeridos antes del evento.

Siguientes pasos

Usa Archivos para consultar o transferir el resultado y Almacenamientos para configurar retención duradera fuera de la instancia.

Receta de solución REST

Grabar una entrada en directo de forma continua o segmentada

Crea una grabación desde una fuente estable, elige salida continua o por tiempo, inicia la captura y supervisa el progreso.

  1. Crear la grabaciónElige fuente, formato, modo, procesamiento y retención.POST /api/recording/create
  2. Iniciar la capturaInicia solo cuando estén listas la fuente y la ruta de almacenamiento.POST /api/recording/start
  3. Supervisar progresoObserva bitrate, cadencia, velocidad de codificación y progreso.POST /api/recording/getStat

Confirma capacidad y retención antes del evento. Verifica los archivos antes del borrado o transferencia.

Flujo de varios módulos

Convertir una captura en directo en reproducción bajo demanda

Captura el evento, detén la grabación correctamente, lee el archivo terminado en recordedFiles y crea y valida un reproductor con el preset de archivo gestionado correspondiente.

  1. Crear la capturaSelecciona la entrada, un formato compatible con navegador y la retención.POST /api/recording/create
  2. Iniciar la grabaciónInicia la captura cuando la fuente esté estable y haya capacidad.POST /api/recording/start
  3. Finalizar la capturaDetén el proceso al terminar para finalizar la salida antes de reproducirla.POST /api/recording/stop
  4. Obtener el archivo completoVuelve a cargar la grabación y selecciona una entrada completa de recordedFiles.POST /api/recording/getById
  5. Crear reproducción bajo demandaUsa el preset de archivo gestionado y configura acceso, entrega y presentación.POST /api/vod/create
  6. Iniciar el reproductorInicia el reproductor cuando el archivo esté finalizado y disponible.POST /api/vod/start
  7. Validar la entregaComprueba el proceso y la entrega y prueba la URL en navegadores representativos.POST /api/vod/getStat

No publiques un archivo mientras se está escribiendo. Detén y carga la grabación, elige una entrada completa de recordedFiles y conserva el archivo mientras dependa de él el reproductor.

Flujo de grabación y almacenamiento

Grabar una fuente en directo y copiar el archivo final a almacenamiento de objetos

Registra el almacenamiento, captura la fuente, finaliza la grabación, obtiene su entrada recordedFiles y copia el archivo gestionado al destino verificado.

  1. Registrar el almacenamientoCrea el destino S3 o Backblaze validado con su bucket y configuración de metadatos.POST /api/storages/create
  2. Verificar el destino guardadoConfirma los campos no secretos y conserva el id para la operación de copia.POST /api/storages/getById
  3. Crear el proceso de capturaElige el preset de entrada, formato, segmentación y retención revisados.POST /api/recording/create
  4. Iniciar la capturaInicia solo cuando la fuente esté estable y hayas comprobado la capacidad local.POST /api/recording/start
  5. Supervisar el proceso de grabaciónObserva bitrate, FPS, progreso y estado mientras se escribe el medio.POST /api/recording/getStat
  6. Finalizar la salidaDetén la grabación correctamente antes de tratar el archivo como transferible.POST /api/recording/stop
  7. Obtener recordedFilesRecarga el proceso y selecciona la identidad finalizada de archivo en recordedFiles.POST /api/recording/getById
  8. Copiar al almacenamientoEnvía el id del archivo, el tipo y el id de almacenamiento y sigue después la consulta de progreso documentada.POST /api/files/copyTo

Las credenciales son secretos operativos de solo escritura. Detén y recarga la grabación antes de usar un id de recordedFiles y supervisa el progreso en vez de asumir que una petición correcta significa que la transferencia terminó.

POST
/api/recording/create
Requiere token de API

Crea una grabación gestionada con origen, formato, segmentación, procesamiento opcional, retención y estado activo inicial. Envía el JWT generado en el panel mediante la cabecera x-access-token.

Las fuentes compatibles incluyen servidores SRT y RTMP, salas o participantes de videollamada y URL HLS, MPEG-DASH, RTSP, RTP, UDP y RIST. Para RIST, usa INPUT_TYPE_RIST_URL y define input_stream_url.

Ejemplos de solicitud

Elige la plantilla correspondiente al formato y al comportamiento de captura y añade solo el procesamiento necesario.

Casos de uso habituales

  • Capturar un evento completo como MP4 para archivo o posproducción.
  • Crear archivos segmentados por tiempo para fuentes continuas.
  • Grabar una salida HLS para reproducirla después como archivo.

Después de iniciar el trabajo, usa getStat para consultar bitrate, FPS y progreso y revisa recordedFiles para ver los archivos generados.

Archivo continuo

Usa este preajuste cuando el objetivo principal sea obtener un único archivo estable a partir de una contribución SRT en vivo.

URL SRT a archivo MP4

Es la configuración de grabación más habitual: conserva el flujo entrante en un único archivo continuo y reduce al mínimo la capa de procesamiento.

URL SRT a archivo MP4
Copiar código
curl --request POST \
--url http://localhost/api/recording/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"recording_name": "Main program archive",
"recording_type": "RECORDING_STREAM_TO_FILE",
"input": {
"input_type": "INPUT_TYPE_SRT_URL",
"application": "IO_APPLICATION_FFMPEG",
"input_stream_url": "srt://127.0.0.1:1935",
"input_stream_listen_port": {},
"input_settings": {},
"input_module_id": "",
"input_stream_id": "",
"entity_name": "Main program archive",
"module_name": "MODULE_RECORDINGS"
},
"output_format": "mp4",
"recording_mode": "RECORDING_MODE_INFINITY",
"recording_mode_settings": {
"hours": 0,
"minutes": 0,
"seconds": 0
},
"transcoding": {
"video_transcoding": "Disabled",
"output_video_bitrate": 6000,
"preset": "ultrafast",
"tune": "Disabled",
"crf": "Disabled",
"pix_fmt": "Disabled",
"encoding_rate": "",
"filter_fps": "",
"gop": "Disabled",
"force_key_frames": 2,
"frame_width": "",
"frame_height": "",
"slices": "",
"cores": "",
"xlnx_hwdev": "0",
"audio_transcoding": "aac",
"output_audio_bitrate": 128,
"sample_rate": 44100
},
"modify_audio": {
"type": "DISABLED",
"channel": "1,2",
"track": "0"
},
"modify_video": {
"type": "DISABLED"
},
"overlay": {
"type": "DISABLED",
"position": {
"x": 1,
"y": 1
}
},
"delete_after": 0,
"active": true
}'
Archivo segmentado

Usa este preajuste cuando las capturas largas deban dividirse en intervalos previsibles para almacenamiento, automatización o posproducción.

URL SRT a archivo segmentado por tiempo

El modo de grabación pasa de un archivo continuo a segmentos sucesivos, mientras el resto de la canalización de captura permanece prácticamente igual.

URL SRT a archivo segmentado por tiempo
Copiar código
curl --request POST \
--url http://localhost/api/recording/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"recording_name": "Program segments every 10 minutes",
"recording_type": "RECORDING_STREAM_TO_FILE",
"input": {
"input_type": "INPUT_TYPE_SRT_URL",
"application": "IO_APPLICATION_FFMPEG",
"input_stream_url": "srt://127.0.0.1:1935",
"input_stream_listen_port": {},
"input_settings": {},
"input_module_id": "",
"input_stream_id": "",
"entity_name": "Program segments every 10 minutes",
"module_name": "MODULE_RECORDINGS"
},
"output_format": "mp4",
"recording_mode": "RECORDING_MODE_SPLIT_BY_TIME",
"recording_mode_settings": {
"hours": 0,
"minutes": 10,
"seconds": 0
},
"transcoding": {
"video_transcoding": "Disabled",
"output_video_bitrate": 6000,
"preset": "ultrafast",
"tune": "Disabled",
"crf": "Disabled",
"pix_fmt": "Disabled",
"encoding_rate": "",
"filter_fps": "",
"gop": "Disabled",
"force_key_frames": 2,
"frame_width": "",
"frame_height": "",
"slices": "",
"cores": "",
"xlnx_hwdev": "0",
"audio_transcoding": "aac",
"output_audio_bitrate": 128,
"sample_rate": 44100
},
"modify_audio": {
"type": "DISABLED",
"channel": "1,2",
"track": "0"
},
"modify_video": {
"type": "DISABLED"
},
"overlay": {
"type": "DISABLED",
"position": {
"x": 1,
"y": 1
}
},
"delete_after": 0,
"active": true
}'
Captura por formato

Usa este preajuste cuando la salida deba guardarse como contenido HLS en lugar de usar un contenedor de archivo clásico.

URL SRT a grabación HLS

Resulta útil cuando el formato almacenado condiciona la reproducción posterior o las herramientas de distribución siguientes.

URL SRT a grabación HLS
Copiar código
curl --request POST \
--url http://localhost/api/recording/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"recording_name": "HLS archive output",
"recording_type": "RECORDING_STREAM_TO_FILE",
"input": {
"input_type": "INPUT_TYPE_SRT_URL",
"application": "IO_APPLICATION_FFMPEG",
"input_stream_url": "srt://127.0.0.1:1935",
"input_stream_listen_port": {},
"input_settings": {},
"input_module_id": "",
"input_stream_id": "",
"entity_name": "HLS archive output",
"module_name": "MODULE_RECORDINGS"
},
"output_format": "m3u8",
"recording_mode": "RECORDING_MODE_INFINITY",
"recording_mode_settings": {
"hours": 0,
"minutes": 0,
"seconds": 0
},
"transcoding": {
"video_transcoding": "Disabled",
"output_video_bitrate": 6000,
"preset": "ultrafast",
"tune": "Disabled",
"crf": "Disabled",
"pix_fmt": "Disabled",
"encoding_rate": "",
"filter_fps": "",
"gop": "Disabled",
"force_key_frames": 2,
"frame_width": "",
"frame_height": "",
"slices": "",
"cores": "",
"xlnx_hwdev": "0",
"audio_transcoding": "aac",
"output_audio_bitrate": 128,
"sample_rate": 44100
},
"modify_audio": {
"type": "DISABLED",
"channel": "1,2",
"track": "0"
},
"modify_video": {
"type": "DISABLED"
},
"overlay": {
"type": "DISABLED",
"position": {
"x": 1,
"y": 1
}
},
"delete_after": 0,
"active": true
}'
Parámetros del cuerpo de la solicitud
Identidad
recording_name
string
Copiar enlace directo

Etiqueta en el panel: Nombre.

Nombre legible de la tarea. El panel lo valida como campo obligatorio y admite los mismos caracteres que indica la interfaz: A-Z, a-z, 0-9 y -.

recording_type
string
Copiar enlace directo

El flujo de grabación actual utiliza RECORDING_STREAM_TO_FILE.

Entrada
input
object
Copiar enlace directo

Definición de entrada creada a partir del formulario de origen. Determina qué fuente en vivo se captura. La captura RIST mediante URL utiliza INPUT_TYPE_RIST_URL con input_stream_url a través de la ruta de entrada de E/S compartida.

Salida
output_format
string
Copiar enlace directo

Etiqueta en el panel: Formato de salida.

Las opciones reales del producto incluyen mp4, avi, flv, mp3, m3u8, mpegts y mkv, según el protocolo de entrada seleccionado.

recording_mode
string
Copiar enlace directo

Etiqueta en el panel: Modo de clips automáticos.

Determina si el grabador escribe un archivo continuo o divide la salida por tiempo. Los modos disponibles son RECORDING_MODE_INFINITY y RECORDING_MODE_SPLIT_BY_TIME.

recording_mode_settings
object
Copiar enlace directo

Se usa con el modo de división por tiempo. El panel envía hours, minutes y seconds, y presenta el intervalo como un control temporal de arrastrar y soltar.

Procesamiento
transcoding
object
Copiar enlace directo

Perfil de transcodificación opcional para el proceso FFmpeg. El panel también envía este bloque cuando la transcodificación está desactivada.

modify_audio
object
Copiar enlace directo

Ajustes opcionales para modificar el audio. Los objetos en estado desactivado siguen formando parte de la estructura normal de la carga útil.

modify_video
object
Copiar enlace directo

Ajustes opcionales para modificar el vídeo.

overlay
object
Copiar enlace directo

Ajustes opcionales de superposición para grabaciones con marca o anotaciones.

Runtime
delete_after
integer
Copiar enlace directo

Etiqueta en el panel: Eliminar automáticamente después de.

Plazo opcional de eliminación automática, en días. 0 desactiva la eliminación automática y la interfaz mantiene 0 como valor desactivado habitual.

active
boolean
Copiar enlace directo

Etiqueta en el panel: Activar al crear.

Determina si el proceso de grabación queda activo después de aprovisionarlo.

Crear grabación
Copiar código
curl --request POST \
--url http://localhost/api/recording/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"recording_name": "Main program archive",
"recording_type": "RECORDING_STREAM_TO_FILE",
"input": {
"input_type": "INPUT_TYPE_SRT_URL",
"application": "IO_APPLICATION_FFMPEG",
"input_stream_url": "srt://127.0.0.1:1935",
"input_stream_listen_port": {},
"input_settings": {},
"input_module_id": "",
"input_stream_id": "",
"entity_name": "Main program archive",
"module_name": "MODULE_RECORDINGS"
},
"output_format": "mp4",
"recording_mode": "RECORDING_MODE_INFINITY",
"recording_mode_settings": {
"hours": 0,
"minutes": 0,
"seconds": 0
},
"transcoding": {
"video_transcoding": "Disabled",
"output_video_bitrate": 6000,
"preset": "ultrafast",
"tune": "Disabled",
"crf": "Disabled",
"pix_fmt": "Disabled",
"encoding_rate": "",
"filter_fps": "",
"gop": "Disabled",
"force_key_frames": 2,
"frame_width": "",
"frame_height": "",
"slices": "",
"cores": "",
"xlnx_hwdev": "0",
"audio_transcoding": "aac",
"output_audio_bitrate": 128,
"sample_rate": 44100
},
"modify_audio": {
"type": "DISABLED",
"channel": "1,2",
"track": "0"
},
"modify_video": {
"type": "DISABLED"
},
"overlay": {
"type": "DISABLED",
"position": {
"x": 1,
"y": 1
}
},
"delete_after": 0,
"active": true
}'
Respuesta
Identidad
_id
string
Copiar enlace directo

Id de recurso que se devuelve al crear o listar el proceso de grabación.

id
string
Copiar enlace directo

Alias práctico de _id.

recording_name
string
Copiar enlace directo

Nombre guardado para la tarea de grabación.

recording_type
string
Copiar enlace directo

Tipo de grabación devuelto por el backend.

Entrada
input[]
array
Copiar enlace directo

Objeto u objetos de entrada enlazados que utiliza la canalización de captura.

Salida
output_format
string
Copiar enlace directo

Formato de salida almacenado para la grabación.

recording_mode / recording_mode_settings
object
Copiar enlace directo

Modo de grabación y ajustes de división por tiempo guardados en el objeto de la tarea.

Procesamiento
transcoding / modify_audio / modify_video / overlay
object
Copiar enlace directo

Ajustes de procesamiento asociados a la tarea de grabación.

Archivos
recordedFiles[]
array
Copiar enlace directo

Archivos grabados que ya están vinculados a la tarea. Este campo es especialmente importante en capturas finalizadas o segmentadas.

Runtime
delete_after
integer
Copiar enlace directo

Plazo de eliminación automática, en días.

active
boolean
Copiar enlace directo

Indicador del estado de ejecución actual de la tarea de grabación.

created / modified
string
Copiar enlace directo

Marcas de tiempo administradas por el backend.

Resultado de la operación
success
boolean
Copiar enlace directo

El modelo incluye success: true como campo virtual en las respuestas correctas.

Respuesta: Crear grabación
JSON
Copiar código
{
"_id": "66004d2997300f9385d32b00",
"id": "66004d2997300f9385d32b00",
"recording_name": "Main program archive",
"recording_type": "RECORDING_STREAM_TO_FILE",
"input": [
{
"_id": "66004d2997300f9385d32b01",
"id": "66004d2997300f9385d32b01",
"input_type": "INPUT_TYPE_SRT_URL",
"application": "IO_APPLICATION_FFMPEG",
"input_stream_url": "srt://127.0.0.1:1935",
"input_stream_listen_port": {},
"input_settings": {},
"input_module_id": "",
"input_stream_id": "",
"entity_name": "Main program archive",
"module_name": "MODULE_RECORDINGS"
}
],
"output_format": "mp4",
"recording_mode": "RECORDING_MODE_INFINITY",
"recording_mode_settings": {
"hours": 0,
"minutes": 0,
"seconds": 0
},
"transcoding": {
"video_transcoding": "Disabled",
"output_video_bitrate": 6000,
"preset": "ultrafast",
"tune": "Disabled",
"crf": "Disabled",
"pix_fmt": "Disabled",
"encoding_rate": "",
"filter_fps": "",
"gop": "Disabled",
"force_key_frames": 2,
"frame_width": "",
"frame_height": "",
"slices": "",
"cores": "",
"xlnx_hwdev": "0",
"audio_transcoding": "aac",
"output_audio_bitrate": 128,
"sample_rate": 44100
},
"modify_audio": {
"type": "DISABLED",
"channel": "1,2",
"track": "0"
},
"modify_video": {
"type": "DISABLED"
},
"overlay": {
"type": "DISABLED",
"position": {
"x": 1,
"y": 1
}
},
"delete_after": 0,
"active": true,
"recordedFiles": [
{
"_id": "66004d2997300f9385d32b10",
"id": "66004d2997300f9385d32b10",
"file_name": "main-program-archive-2026-03-24_12-00-00.mp4",
"file_path": "/recordings/main-program-archive-2026-03-24_12-00-00.mp4",
"module_name": "MODULE_RECORDINGS",
"file_visibility": "FILE_VISIBILITY_PUBLIC",
"output_format": "mp4",
"entity_name": "Main program archive",
"entity_id": "66004d2997300f9385d32b00",
"size_bytes": 184320000,
"duration_ms": 1800000,
"created": "2026-03-24T12:30:00.000Z"
}
],
"created": "2026-03-24T12:00:00.000Z",
"modified": "2026-03-24T12:00:00.000Z",
"success": true
}
POST
/api/recording/getCount
Requiere token de API
POST
/api/recording/getAll
Requiere token de API
POST
/api/recording/getById
Requiere token de API
POST
/api/recording/update
Requiere token de API
POST
/api/recording/start
Requiere token de API
POST
/api/recording/stop
Requiere token de API
DELETE
/api/recording/remove
Requiere token de API
POST
/api/recording/removeFile
Requiere token de API
POST
/api/recording/getStat
Requiere token de API