ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
Casos de uso y soluciones

Backend para una plataforma VOD y de vídeo corto: servidores de almacenamiento, HLS con FFmpeg, MinIO y CDN

8 pasos 29 min de lectura 5 vistas 0
Contenido

El backend de una plataforma de vídeo bajo demanda (VOD) o de vídeos cortos necesita cuatro piezas: servidores dedicados de almacenamiento para originales y renditions, un pipeline de transcodificación con ffmpeg que genere escaleras de bitrate HLS, almacenamiento de objetos compatible con S3 como MinIO y una CDN que asuma la mayor parte del ancho de banda. IMIDC ofrece esa infraestructura en Hong Kong (CN2 GIA a China continental), Tokio, Singapur, Los Ángeles y otras ubicaciones de Asia: dedicados en Hong Kong desde $139/mes, dedicados en Los Ángeles desde $499/mes, uplinks de 10 Gbps, protección DDoS y la CDN de IMIDC.

Datos clave
  • Regiones: Hong Kong para audiencias de China; Tokio, Singapur, Taipéi, Seúl, Bangkok y Los Ángeles para audiencias regionales.
  • Dedicados en Hong Kong desde $139/mes, en Taiwán desde $199/mes y en Los Ángeles desde $499/mes.
  • Uplinks de 10 Gbps, almacenamiento SSD, protección DDoS y colocation de 1U a rack completo para tu propio hardware de almacenamiento.
  • La CDN de IMIDC entrega los segmentos HLS, así los servidores de almacenamiento actúan como origen y no como primera línea.
  • Migración de servidores gratuita al trasladar una videoteca existente.

El pipeline VOD desde la subida hasta la reproducción

Toda plataforma de vídeo sigue el mismo pipeline: subida, guardado del original, transcodificación, guardado de renditions y entrega por CDN.

  1. Subida: los clientes suben directamente al almacenamiento de objetos con URLs prefirmadas, así tus servidores API no hacen de proxy de archivos grandes.
  2. Cola: el evento de subida completada encola un trabajo (Redis, RabbitMQ o una tabla de base de datos).
  3. Transcodificación: los workers ejecutan ffmpeg y generan la escalera HLS, una portada y una vista previa corta.
  4. Almacenamiento: las renditions van a un bucket HLS de lectura pública; los originales, a almacenamiento frío.
  5. Entrega: el reproductor carga master.m3u8 desde la CDN, que pide al origen los segmentos que le faltan.

Guarda los metadatos (títulos, autores, visualizaciones, estado de moderación) en una base de datos normal en un servidor API, y los bytes en servidores de almacenamiento.

Transcodificar con ffmpeg: escaleras de bitrate HLS

Codifica cada vídeo una vez en varias resoluciones con fotogramas clave alineados para que el reproductor cambie de calidad sin saltos.

mkdir -p out/v0 out/v1 out/v2 out/v3
ffmpeg -i input.mp4 \
  -filter_complex "[0:v]split=4[a][b][c][d];[a]scale=-2:1080[v0];[b]scale=-2:720[v1];[c]scale=-2:480[v2];[d]scale=-2:360[v3]" \
  -map "[v0]" -c:v:0 libx264 -b:v:0 5000k -maxrate:v:0 5350k -bufsize:v:0 7500k \
  -map "[v1]" -c:v:1 libx264 -b:v:1 2800k -maxrate:v:1 3000k -bufsize:v:1 4200k \
  -map "[v2]" -c:v:2 libx264 -b:v:2 1400k -maxrate:v:2 1500k -bufsize:v:2 2100k \
  -map "[v3]" -c:v:3 libx264 -b:v:3 800k  -maxrate:v:3 856k  -bufsize:v:3 1200k \
  -map a:0 -map a:0 -map a:0 -map a:0 -c:a aac -b:a 128k -ac 2 \
  -preset medium -profile:v high -pix_fmt yuv420p \
  -force_key_frames "expr:gte(t,n_forced*2)" -sc_threshold 0 \
  -f hls -hls_time 4 -hls_playlist_type vod -hls_flags independent_segments \
  -hls_segment_filename "out/v%v/seg_%04d.ts" \
  -master_pl_name master.m3u8 \
  -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2 v:3,a:3" \
  out/v%v/index.m3u8
RenditionResolución (16:9)Bitrate de vídeoAudioEspectador típico
1080p1920x10805.000 kbpsAAC 128 kbpsEscritorio, TV, Wi-Fi
720p1280x7202.800 kbpsAAC 128 kbpsMóviles con buen 4G/5G
480p854x4801.400 kbpsAAC 128 kbpsRedes móviles congestionadas
360p640x360800 kbpsAAC 128 kbpsSeñal débil, modo ahorro de datos
  • -force_key_frames "expr:gte(t,n_forced*2)" coloca un fotograma clave cada 2 segundos sea cual sea la tasa de fotogramas, y -sc_threshold 0 los mantiene alineados entre renditions.
  • H.264 se reproduce en todas partes; más adelante añade una escalera HEVC o AV1 para ahorrar ancho de banda en dispositivos compatibles.
  • La transcodificación por CPU escala con los núcleos: servidores dedicados con muchos núcleos son el pool de workers más sencillo. Un trabajo de ffmpeg por cada pocos núcleos y se escala añadiendo servidores.

Particularidades del vídeo corto: formato vertical y arranque instantáneo

Las apps de vídeo corto dependen del tiempo hasta el primer fotograma, así que usa segmentos pequeños, una escalera corta y vistas previas precargadas.

# vertical short video: 3-step ladder, 2 s segments for a fast first frame
ffmpeg -i clip.mp4 \
  -filter_complex "[0:v]split=3[a][b][c];[a]scale=1080:-2[v0];[b]scale=720:-2[v1];[c]scale=540:-2[v2]" \
  -map "[v0]" -c:v:0 libx264 -b:v:0 3500k -maxrate:v:0 3750k -bufsize:v:0 5000k \
  -map "[v1]" -c:v:1 libx264 -b:v:1 2000k -maxrate:v:1 2150k -bufsize:v:1 3000k \
  -map "[v2]" -c:v:2 libx264 -b:v:2 1000k -maxrate:v:2 1070k -bufsize:v:2 1500k \
  -map a:0 -map a:0 -map a:0 -c:a aac -b:a 96k \
  -preset medium -force_key_frames "expr:gte(t,n_forced*2)" -sc_threshold 0 \
  -f hls -hls_time 2 -hls_playlist_type vod \
  -hls_segment_filename "short/v%v/seg_%03d.ts" -master_pl_name master.m3u8 \
  -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" short/v%v/index.m3u8

# cover image and a small progressive MP4 preview for feeds
ffmpeg -ss 1 -i clip.mp4 -frames:v 1 -vf scale=540:-2 short/cover.jpg
ffmpeg -i clip.mp4 -t 6 -vf scale=360:-2 -c:v libx264 -b:v 400k -an -movflags +faststart short/preview.mp4
  • Usa segmentos de 2 segundos y precarga el primer segmento de los siguientes vídeos del feed.
  • Para clips de menos de 60 segundos suelen bastar tres renditions; más escalones cuestan almacenamiento sin mejorar mucho la experiencia.
  • Genera portadas y vistas previas sin audio al subir, para que el feed se pinte antes de cualquier petición HLS.

Almacenamiento de objetos con MinIO y niveles caliente/frío

Guarda las renditions en almacenamiento de objetos compatible con S3 sobre servidores dedicados y organiza los datos por frecuencia de visualización.

# single-node MinIO on a storage dedicated server (use distributed mode across 4+ servers for HA)
docker run -d --name minio --restart unless-stopped \
  -p 9000:9000 -p 9001:9001 \
  -v /data/minio:/data \
  -e MINIO_ROOT_USER=vodadmin \
  -e MINIO_ROOT_PASSWORD=replace-with-a-long-random-secret \
  minio/minio server /data --console-address ":9001"

# buckets: raw uploads (private) and hls output (public read via CDN)
mc alias set vod http://127.0.0.1:9000 vodadmin replace-with-a-long-random-secret
mc mb vod/raw
mc mb vod/hls
mc anonymous set download vod/hls
mc ilm rule add vod/raw --expire-days 180      # drop raw uploads after 180 days
mc mirror --overwrite out/ vod/hls/videos/abc123/

MinIO se distribuye bajo AGPLv3 y su edición comunitaria ha cambiado con el tiempo, así que revisa la edición y la licencia vigentes antes de usarlo en producción; SeaweedFS, Garage y Ceph RGW son otras opciones compatibles con S3. En este ejemplo el bucket raw es solo una zona temporal de subida; guarda el original o un archivo mezzanine de alta calidad en almacenamiento frío para poder retranscodificar más adelante.

NivelQué contieneHardwarePatrón de acceso
CalienteRenditions de vídeos nuevos y en tendenciaServidores de almacenamiento NVMe/SSDPeticiones constantes de la CDN
TempladoRenditions del catálogo de cola largaDedicados con RAID de HDD grande o erasure codingPeticiones ocasionales, fallos de caché de la CDN
FríoOriginales y archivos mezzanineServidores HDD de alta capacidad o chasis propios en colocationSolo lectura para retranscodificar

Cálculo aproximado: la escalera de 4 escalones anterior suma unos 10,5 Mbps, es decir, unos 79 MB por minuto de vídeo. 1.000 horas de contenido ocupan unos 4,7 TB de renditions, más los originales.

Entrega por CDN y el coste real del ancho de banda

El mayor coste recurrente de una plataforma de vídeo es el ancho de banda, no el almacenamiento, así que estímalo antes de elegir servidores.

Espectadores activos diariosTiempo de visionado por espectadorBitrate medio entregadoEntrega mensual
1.00020 min1,5 Mbpsunos 6,75 TB
10.00020 min1,5 Mbpsunos 67,5 TB
50.000 (vídeo corto)30 min1,2 Mbpsunos 405 TB
100.00020 min1,5 Mbpsunos 675 TB
  • Fórmula: TB al mes = espectadores x minutos x 60 x Mbps / 8 / 1.000.000 x 30.
  • Pon la CDN de IMIDC delante del bucket HLS; con una alta tasa de aciertos de caché, los servidores de almacenamiento solo atienden los fallos.
  • Los segmentos y las playlists VOD no cambian una vez publicados: dales un Cache-Control largo y versiona las rutas en lugar de purgar.
  • Usa URLs firmadas o tokens para evitar el hotlinking, que consume ancho de banda sin que te des cuenta.

Elegir región: Hong Kong frente a Tokio, Singapur y Los Ángeles

Coloca los orígenes donde están tus espectadores y donde las rutas hacia ellos son más sólidas.

UbicaciónMejor audienciaRutas e IPs
Hong KongChina continental, Hong Kong, usuarios de habla chinaChina Telecom CN2 GIA (AS4809); el alojamiento no requiere registro ICP
Tokio, JapónJapón, Corea del SurIPs nativas japonesas; opción de ruta CN2 optimizada para China en VPS
SingapurSudeste asiático, India, OceaníaSe configura bajo pedido vía ventas
Los Ángeles, EE. UU.América, y usuarios de China por rutas premiumRutas Unicom 9929/4837 y CN2
Taipéi / Bangkok / Kuala LumpurPlataformas de un solo mercadoIPs nativas locales

Muchas plataformas usan un único origen principal (a menudo Hong Kong o Tokio) detrás de la CDN y solo añaden un segundo origen cuando los fallos de caché desde una región lejana se vuelven lentos.

Derechos de autor y cumplimiento de contenidos

Una plataforma de vídeo es responsable de gestionar lo que suben sus usuarios, así que integra el cumplimiento en el pipeline desde el primer día.

  • Aloja solo contenido propio o con licencia de distribución, y haz que quienes suben acepten condiciones que digan lo mismo.
  • Publica un contacto de derechos de autor y un proceso de notificación y retirada (por ejemplo, avisos tipo DMCA), actúa rápido ante avisos válidos y mantén una política para infractores reincidentes.
  • Registra la cuenta, la IP y la hora de cada subida, y guarda hashes del contenido para que los vídeos retirados no puedan volver a subirse sin más.
  • Los proveedores de hosting reenvían las quejas de derechos de autor a sus clientes; responde con rapidez para que tu servicio siga funcionando.
  • Para audiencias de China continental el contenido debe ser legal, y los servicios audiovisuales en línea allí pueden requerir licencias específicas. Esto es información general, no asesoramiento legal.

Qué configuración de IMIDC te conviene

Empieza con un origen y una CDN, y separa transcodificación y almacenamiento a medida que crece la biblioteca.

  • MVP o biblioteca de cursos: un dedicado en Hong Kong o un dedicado en Japón con la API, MinIO y ffmpeg, más la CDN de IMIDC.
  • App de vídeo corto en crecimiento: workers de transcodificación separados, un clúster MinIO en servidores dedicados de almacenamiento y la CDN.
  • Audiencias en América y China: añade dedicados en Los Ángeles con rutas CN2 y 9929.
  • Chasis de almacenamiento propios: colocation de 1U a rack completo con manos remotas.
  • Discos grandes, muchos núcleos, Singapur o configuraciones a medida: contacta con el equipo comercial de IMIDC.

Preguntas frecuentes

¿Qué servidores necesito para crear una plataforma de vídeo corto tipo TikTok para Asia?

Como mínimo, servidores API, workers de transcodificación con ffmpeg, almacenamiento compatible con S3 como MinIO en servidores dedicados de almacenamiento y una CDN. IMIDC ofrece servidores dedicados en Hong Kong, Tokio, Los Ángeles y otras ubicaciones de Asia, además de la CDN de IMIDC para este stack.

¿Alojo mi plataforma de vídeo en Hong Kong o en Singapur?

Elige Hong Kong si muchos espectadores están en China continental, porque los servidores de IMIDC en Hong Kong usan China Telecom CN2 GIA y el alojamiento no requiere registro ICP. Elige Singapur para el Sudeste asiático y Tokio para Japón y Corea; IMIDC configura los servidores de Singapur bajo pedido a través de ventas.

¿Cuánto ancho de banda consume una plataforma VOD?

Multiplica espectadores por minutos de visionado y bitrate medio: 10.000 espectadores diarios viendo 20 minutos a 1,5 Mbps consumen unos 67,5 TB al mes. La CDN debería entregar la mayor parte para que el origen solo atienda los fallos de caché.

¿Es MinIO una buena opción para almacenar vídeo?

MinIO es un almacenamiento compatible con S3 muy utilizado que funciona bien para segmentos HLS y originales en servidores dedicados. Revisa antes su licencia y edición actuales; SeaweedFS, Garage y Ceph RGW son alternativas.

¿Necesito GPU para transcodificar vídeo?

No. La codificación por CPU con ffmpeg en dedicados con muchos núcleos ofrece la mejor calidad por bit y escala con facilidad. Las GPU aceleran grandes volúmenes de subidas; consulta con ventas de IMIDC las configuraciones con GPU o muchos núcleos.

¿Listo para construir tu plataforma de vídeo? Consulta los servidores dedicados en Hong Kong y la CDN de IMIDC, o abre un ticket y los ingenieros de IMIDC te ayudarán a planificar almacenamiento, transcodificación y entrega.

¿Fue útil la respuesta?

Tutoriales relacionados