Webability

Docs / Módulo / Video

Módulo de Video

Transcodificación y streaming (VOD y live) con perfiles, procesamiento por jobs y entrega escalable.

Introducción

El módulo de Video permite crear trabajos de transcodificación (jobs) para convertir videos a distintos formatos y calidades, generar salidas para streaming (HLS) y obtener URLs listas para publicar.

Incluye

  • • Jobs asíncronos (cola + estado)
  • • Perfiles (renditions) configurables
  • • HLS (master + variants)
  • • Webhooks de progreso / finalización

Casos de uso

  • • VOD (catálogos, cursos, recetas)
  • • Live (eventos, transmisiones)
  • • Publicación multi-calidad

Conceptos

Asset

Video fuente (subido o referenciado por URL) del cual se generan las salidas.

Job

Trabajo de transcodificación asíncrono. Tiene estado: queued → processing → finished/failed.

Perfil

Define una salida: resolución, bitrate, fps, codec, audio, contenedor.

Playlist HLS

Master playlist + variants (.m3u8) para streaming adaptativo.

Quickstart

Flujo típico: crear job → consultar estado → obtener URLs (MP4/HLS) → publicar.

1) Crear job desde URL

POST /video/jobs
{
  "source_url": "https://tusitio.com/video.mp4",
  "profile": "hls_1080_720_480",
  "output": {
    "type": "hls",
    "path": "videos/recetas/abc123/"
  },
  "webhook_url": "https://tuapp.com/webhooks/video"
}

2) Consultar estado

GET /video/jobs/job_123

3) URL de salida

{
  "id": "job_123",
  "status": "finished",
  "outputs": {
    "hls_master": "https://cdn.webability.info/videos/recetas/abc123/master.m3u8",
    "mp4_720": "https://cdn.webability.info/videos/recetas/abc123/720p.mp4"
  }
}

Transcodificación (Jobs)

Endpoint Método Descripción
/video/jobs GET/POST Listar / crear jobs.
/video/jobs/{id} GET Detalle y estado del job.
/video/jobs/{id}/cancel POST Cancelar job (si es posible).

Sugerencia: usa webhooks para evitar “polling” constante de estado.

Perfiles

Los perfiles definen las salidas (renditions). Puedes usar perfiles predefinidos o crear los tuyos.

Ejemplo perfil

{
  "name": "hls_1080_720_480",
  "type": "hls",
  "renditions": [
    { "name": "1080p", "w": 1920, "h": 1080, "video_bitrate": 6000, "audio_bitrate": 128, "fps": 30 },
    { "name": "720p",  "w": 1280, "h": 720,  "video_bitrate": 3000, "audio_bitrate": 128, "fps": 30 },
    { "name": "480p",  "w": 854,  "h": 480,  "video_bitrate": 1500, "audio_bitrate": 96,  "fps": 30 }
  ],
  "segments": { "duration": 6 }
}
Endpoint Método Descripción
/video/profiles GET/POST Listar / crear perfiles.
/video/profiles/{id} GET/PATCH/DELETE Detalle / editar / eliminar.

Streaming (HLS)

Para VOD, el job genera un master.m3u8 y variantes por calidad. Para live, normalmente se integra con un origen (RTMP/SRT) y se publica un HLS de salida.

Master playlist

https://cdn.webability.info/videos/recetas/abc123/master.m3u8

Variante (ej.)

https://cdn.webability.info/videos/recetas/abc123/720p/index.m3u8

Embed típico (HLS.js)

<video id="v" controls></video>
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<script>
  if (Hls.isSupported()) {
    const hls = new Hls();
    hls.loadSource("https://cdn.webability.info/videos/recetas/abc123/master.m3u8");
    hls.attachMedia(document.getElementById("v"));
  }
</script>

Webhooks

Recibe eventos del job: queued, processing, progress, finished, failed.

Ejemplo evento

POST https://tuapp.com/webhooks/video
{
  "event": "progress",
  "job_id": "job_123",
  "progress": 42,
  "ts": "2026-01-07T22:25:10-06:00",
  "meta": { "eta_seconds": 120 }
}

Errores

HTTP Código Descripción
400invalid_paramsParámetros faltantes o inválidos.
401unauthorizedAPI key inválida o sin permisos.
404source_not_foundVideo fuente no accesible.
409job_conflictYa existe job en proceso para ese asset.
500transcode_errorError interno de transcodificación.

SDKs

SDKs disponibles para integrar jobs, perfiles y consumo de salidas (Go, Node, PHP, etc.).

Go

go get webability.info/wavideo

Node

npm i @webability/video

PHP

composer require webability/video