Servizio Convertitore Media

Panoramica del caso

Questo è un servizio di conversione media basato su cloud che prende file video e audio e li trasforma in formato streaming HLS con supporto per bitrate adattivo. Il sistema monitora una coda SQS per nuovi file, avvia un job Kubernetes per ognuno, e produce un set completo di playlist m3u8 e segmenti .ts pronti per qualsiasi player video moderno.


Supporta più risoluzioni per i video, più livelli di bitrate per l'audio e gestisce video con tracce audio multiple — comprese diverse lingue o commenti. Il servizio funziona per più progetti simultaneamente e organizza gli output in cartelle separate su S3 basate sul progetto o sull'editore.

Obiettivo: Costruire un servizio completamente automatizzato che converte qualsiasi file video o audio in formato HLS senza intervento manuale - operando su più progetti, gestendo tipi di contenuto diversi, e scalando a zero quando inattivo.

Image

Informazioni chiave del progetto

Settori

Settori

Media & Intrattenimento, Piattaforme di streaming video, Servizi OTT e broadcasting, Pubblicazione digitale, Reti di distribuzione contenuti — qualsiasi attività che necessita di fornire contenuti video o audio agli utenti finali su diversi dispositivi e varie condizioni di rete.

Servizi

Servizi

Elaborazione della coda SQS con long polling e gestione del timeout di visibilità, transcodifica media e analisi streaming con FFmpeg & FFprobe, orchestrazione di job Kubernetes con volumi effimeri e affinità nodi, pipeline di caricamento parallelo su S3 con pulizia pre-caricamento.

Soluzioni

Soluzioni

Video HLS multi-risoluzione — 1080p, 720p, 480p, 360p, 240p con bitrate adattivo, Audio HLS multi-bitrate — livelli 32, 64, 96, 128, 192 kbps per ogni traccia audio, Rilevamento automatico di tutti i flussi audio con metadati linguistici, Thumbnails al secondo 2, anteprima MP4 a bassa risoluzione, copie MP3 e WAV.

Tecnologie

Tecnologie

AWS SQS, S3, Kubernetes, FFmpeg, FFprobe, H.264, AAC/HE-AAC, HLS/m3u8, NVIDIA NVENC, Intel Quick Sync, EC2 Auto Scaling, Docker, Helm

Le sfide

Molti formati di output da un solo input

Molti formati di output da un solo input

Un singolo file video può produrre centinaia di file — cinque risoluzioni video, cinque bitrate audio per traccia audio, più thumbnails e anteprime. Dovevamo organizzare tutto in modo ordinato e caricarlo rapidamente.

Molteplici flussi audio per file video

Molteplici flussi audio per file video

Alcuni video hanno diverse tracce audio in lingue diverse. Il sistema doveva rilevarle automaticamente tutte, convertirle singolarmente e creare una playlist master che le ricollega tutte con il tag lingua corretto.

Affidabilità della coda e logica di ritentativo

Affidabilità della coda e logica di ritentativo

Con SQS devi gestire correttamente duplicati, timeout di visibilità e job falliti. Se un job fallisce, il messaggio deve tornare in coda per il ritentativo. Se lo stesso file viene messo in coda due volte, non dobbiamo processarlo due volte.

Gestione su Kubernetes

Gestione su Kubernetes

Ogni job di conversione usa molta CPU e memoria. Abbiamo dovuto configurare volumi effimeri, regole di affinità nodi e pulizia appropriata per evitare accumuli o blocchi tra i job.

Isolamento multi-progetto su S3

Isolamento multi-progetto su S3

Il servizio funziona per più progetti contemporaneamente. Ogni progetto ha bisogno del proprio percorso di output su S3 e abbiamo dovuto supportare strutture di cartelle basate sia sull’editore sia sulla serie senza rompere nulla.

Selezione automatica del codec

Selezione automatica del codec

Non tutte le macchine hanno accelerazione GPU. Il sistema doveva rilevare quali codec sono disponibili — NVIDIA, Intel Quick Sync, AMD o solo software — e scegliere automaticamente il migliore.

Il processo

L'intera pipeline funziona senza intervento umano — dal momento in cui un file arriva su S3 fino a quando l'output HLS finale è pronto per la riproduzione. Ogni fase passa ordinatamente alla successiva, con salvaguardie integrate per guasti, duplicati e concorrenza delle risorse. Di seguito come il sistema muove un file attraverso l'intero ciclo di conversione.

Interrogazione coda

Interrogazione coda

Il gestore dei job gira su Kubernetes e interroga la coda SQS con long polling. Quando arriva un messaggio, analizza il bucket S3 e la chiave dell’oggetto per identificare il file sorgente.

Prevenzione duplicati

Prevenzione duplicati

Prima di creare un nuovo job, il gestore verifica l'esistenza di un job Kubernetes per lo stesso file. Se trovato, il messaggio viene rimesso in coda con un ritardo per evitare doppie elaborazioni.

Creazione job Kubernetes

Creazione job Kubernetes

Viene creato un nuovo pod da un modello con limiti di risorse corretti, affinità nodi per istanze ARM e volumi effimeri per file temporanei, input, output e log.

Conversione video e audio

Conversione video e audio

FFmpeg converte video in cinque risoluzioni HLS (1080p→240p) con segmenti da 4 secondi. Ogni traccia audio è rilevata e convertita in cinque livelli di bitrate — da 32 a 192 kbps.

Generazione playlist master

Generazione playlist master

Un singolo file m3u8 master fa riferimento a tutte le risoluzioni video e tracce audio con metadati linguistici — permettendo streaming adattivo e cambio lingua in qualsiasi player moderno.

Caricamento, pulizia e autoscaling

Caricamento, pulizia e autoscaling

Tutti i file sono caricati su S3 in parallelo tramite un pool di 500 thread. I vecchi segmenti HLS sono puliti prima che arrivi il nuovo set. L'autoscaler riduce i nodi a zero quando la coda è vuota.

Soluzioni

Caratteristiche principali della soluzione

  • Video con bitrate adattivo - 5 livelli —240p (300 kbps) → 1080p (5000 kbps) in un'unica playlist. Selezione automatica della qualità basata sulla velocità di connessione.

  • Audio multi-traccia con tag linguistici — Rileva e converte tutte le tracce audio, inclusi commenti e descrizioni, preservando i metadati della lingua.

  • Rilevamento codec automatico — Utilizza l’accelerazione NVIDIA / Intel / AMD, o fallback software se non è presente una GPU.

  • Autoscaling a costo zero in inattività — I nodi EC2 si riducono a zero quando la coda è vuota. I lavori attivi sono protetti da terminazioni premature.

  • Isolamento S3 multi-progetto — Ogni progetto ha il proprio percorso di output S3. Supporta strutture di cartelle basate sia sull’editore che sulla serie.


Image

Risultati in numeri

Copertura qualità video

1080p

Cinque livelli di bitrate adattivo da 240p a 300 kbps fino al full HD 1080p a 5000 kbps — il player cambia qualità automaticamente in base alla velocità di connessione.

Thread di caricamento parallelo

500x

Centinaia di file di output — segmenti, playlist, miniature, anteprime — vengono caricati su S3 simultaneamente tramite un pool di thread, mantenendo il tempo di consegna minimo.

Durata segmentata HLS

4sec

I segmenti HLS di 4 secondi bilanciano la velocità di commutazione adattiva con l’efficienza del buffering — il player reagisce ai cambiamenti della rete all’interno di un singolo segmento.

Livelli di bitrate audio per traccia

5x

Ogni traccia audio — inclusi commenti e descrizioni — dispone di fino a cinque livelli di qualità da 32 kbps (HE-AAC) a 192 kbps (LC-AAC) con normalizzazione della loudness.

Costruisci una pipeline media scalabile per la tua piattaforma!

Ottieni un sistema di conversione HLS completamente automatico che scala con i tuoi contenuti - e ti aiuteremo a trovare l’architettura ottimale per il tuo progetto.

Message not sent.
Message not sent.
×
Non sai da dove cominciare? Ti aiuteremo a definire i prossimi passi!
Consenso al trattamento dei dati personali
×
Hai una sfida? Il nostro team la trasformerà in una soluzione.
Consenso al trattamento dei dati personali