Servidor HTTP para procesamiento de video usando FFmpeg (CPU) y generación de HLS (Vod).
- Upload de video (POST multipart/form-data)
- Conversión a 1080p vía
libx264 - Generación de segmentos
.ts+ playlistindex.m3u8 - Listado de videos generados
- Cleanup automático del RAW
- API documentada con Swagger/OpenAPI
Python 3.10+
pip install -r requirements.txtDebe estar instalado y accesible en PATH
Ejemplo en Windows:
C:\ffmpeg\ffmpeg-8.0.1-full_build-shared\bin
Probar:
ffmpeg -version
ffprobe -versionupload/
├── raw/ # Videos antes de convertir (se limpian automáticamente)
└── videos/
└── <id>/
├── index.m3u8 # playlist HLS
├── index0.ts # segmentos
├── index1.ts
└── metadata.json
ID estilo NestJS:
<timestamp>-<nombre-limpio>
uvicorn main:app --host 0.0.0.0 --port 8000http://localhost:8000/swagger
Endpoints:
| Método | Ruta | Descripción |
|---|---|---|
| GET | /videos/videos |
Listar videos |
| POST | /videos/videos |
Upload + conversión HLS |
| GET | /streams/:id/index.m3u8 |
Consumir HLS |
- Abrir
/swagger - Ir a
POST /videos/videos - Subir un
.mp4 - Esperar conversión (log muestra %)
- Ir a
GET /videos/videos - Obtener
playlistUrl
Ejemplo playlistUrl:
/streams/1768842220000-trbx304yamaha/index.m3u8
Puedes probar con VLC:
Media > Open Network Stream > http://localhost:8000/streams/<id>/index.m3u8
O con <video> en web:
<video controls src="http://localhost:8000/streams/<id>/index.m3u8"></video>El video RAW se borra automáticamente al final del proceso:
upload/raw/
Nunca se exponen los RAW al cliente.
- Multi-resolución (360p, 720p, 1080p)
- GPU (NVENC)
- Cola (RabbitMQ) estilo WBC
- Auth bearer para producción