Grabar una sala en S3 y obtener un VOD
Iniciá una grabación con una llamada, dejá que egress y el job de subida hagan el resto, y terminá con un VOD reproducible en tu propio bucket. Incluye partes divididas y capturas.
De sala en vivo a VOD en tres movimientos
Grabar en StreamHub es una operación de disparar-y-olvidar: la iniciás, y un pipeline en segundo plano convierte la sala en vivo en un VOD subido e indexado en el bucket S3 de tu app.
Asegurate primero de que la app tenga S3 configurado (mirá la guía de S3 por app), y luego:
Iniciar la grabación
curl -s -X POST $BASE/apps/live/recording/start \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"roomName":"studio"}'
Recibís un handle de grabación:
{ "data": { "vodId": 12, "egressId": "EG_xxx", "status": "recording" } }
Detrás de escena, egress de LiveKit empieza a escribir un MP4 local y se inserta una fila VOD con status=recording. Dispara el webhook recording_started.
Dejá que el pipeline lo termine
No hacés polling ni lo vigilás. Cuando egress termina:
- el estado del archivo pasa a
uploadingy se encola un job de subida, - el job sube al S3 de la app, construye una URL pública/prefirmada, genera una captura y borra el archivo local,
- el estado pasa a
ready, se guardan los metadatos (duración, resolución, códec) y disparavod_ready.
Si la subida falla, el archivo local se conserva y dispara recording_failed — nada se pierde en silencio.
Grabar un stream ya en vivo
Si un stream ya está publicando, grabalo en el lugar por id de stream:
curl -s -X POST $BASE/apps/live/streams/<id>/record/start \
-H "Authorization: Bearer $TOKEN"
Detené cualquiera de los dos con recording/:id/stop.
Partes divididas y capturas
La forma de la salida viene de la config de la app, no de la petición:
split_minutes> 0 corta la grabación cada N minutos — cada parte se vuelve su propio VOD, perfecto para cámaras 24/7. Valores permitidos incluyen 15, 30, 60, 90, 120.snapshot_seconds> 0 toma una miniatura JPEG periódica durante la grabación.
También podés capturar un cuadro puntual en cualquier momento:
curl -s -X POST $BASE/apps/live/snapshots \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"room":"studio"}'
Mirar el VOD
Una vez en status=ready, el VOD tiene una URL reproducible (prefirmada o pública según tu config), servida por el reproductor de VOD de video.js. Como las grabaciones respetan max_recording_minutes_month, podés poner un tope de gasto por tenant mientras seguís grabando todo lo que importa.