{"id":5531,"date":"2023-03-03T09:00:00","date_gmt":"2023-03-03T08:00:00","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=5531"},"modified":"2023-03-02T18:01:26","modified_gmt":"2023-03-02T17:01:26","slug":"aws-elemental-mediaconvert-transcodifica-avanzata-per-piattaforme-di-streaming","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/aws-elemental-mediaconvert-transcodifica-avanzata-per-piattaforme-di-streaming\/","title":{"rendered":"AWS Elemental MediaConvert: transcodifica avanzata per piattaforme di streaming"},"content":{"rendered":"\n

Introduzione<\/h2>\n\n\n\n

Vi siete mai chiesti che cosa si intende quando si parla di transcodifica?<\/p>\n\n\n\n

Vi siete mai chiesti come le grandi piattaforme di streaming riescano a fornirvi un servizio cos\u00ec completo e ricco di funzionalit\u00e0?<\/p>\n\n\n\n

In questo articolo capiremo cos\u2019\u00e8, come si fa, e perch\u00e9 si utilizza la transcodifica; affronteremo prima una soluzione classica con l\u2019utilizzo di FFmpeg e successivamente la accosteremo al servizio AWS Elemental MediaConvert.<\/p>\n\n\n\n

Cos\u2019\u00e8 la transcodifica e perch\u00e9 serve<\/h2>\n\n\n\n

Possiamo definire transcodifica il processo che permette, data una sorgente audio\/video, di ottenerne versioni con differenti formati e qualit\u00e0. Il processo di elaborazione pu\u00f2 essere fatto, sia in real-time sia in post produzione.<\/p>\n\n\n\n

Al giorno d\u2019oggi i dispositivi di riproduzione sono molteplici e differiscono tra loro in risoluzione, dimensioni e codec video supportati.<\/p>\n\n\n\n

L\u2019unica possibilit\u00e0 che abbiamo per raggiungere tutti i dispositivi \u00e8 transcodificare i contenuti della nostra piattaforma.<\/p>\n\n\n\n

Partendo da un contenuto realizzato in 4K andremo a realizzarne pi\u00f9 versioni differenti per risoluzione, codec , bitrate ecc.<\/p>\n\n\n\n

Oggi la possibilit\u00e0 di impostare la risoluzione del video \u00e8 ormai considerata una feature quasi obbligatoria, soprattutto se si intende competere con le piattaforme pi\u00f9 in voga. Questo porta con s\u00e9 incredibili benefici sia per l\u2019utente, che per chi gestisce la piattaforma. <\/p>\n\n\n\n

Se durante la riproduzione di un video l\u2019utente decidesse di abbassare la risoluzione, ad esempio, questo ridurrebbe il consumo della sua rete dati.<\/p>\n\n\n\n

Un\u2019altra cruciale attivit\u00e0, svolta in fase di transcodifica, \u00e8 la frammentazione.<\/p>\n\n\n\n

Questa operazione ci permette di suddividere un unico grande video in sottoparti della stessa durata. Per organizzare la ricomposizione del video viene utilizzato uno specifico file adibito ad orchestrare tutti i singoli frammenti che verranno trasmessi dal player. <\/p>\n\n\n\n

Quest\u2019operazione permette il buffering del video, evitando cos\u00ec all\u2019utente di scaricarsi sul dispositivo l\u2019intero contenuto prima della visualizzazione \u201clive\/streaming\u201d.<\/p>\n\n\n\n

Le pi\u00f9 moderne piattaforme di streaming live adoperano la frammentazione in real time cos\u00ec da consentire una fruizione fluida del contenuto in onda. <\/p>\n\n\n\n

Guida galattica per transcodificatori<\/h2>\n\n\n\n

Prendiamo in considerazione i principali codec video in funzione dei formati e dei dispositivi pi\u00f9 diffusi. Sotto una tabella dei principali codec video utilizzati e le rispettive risoluzioni supportate:<\/p>\n\n\n\n

Codec<\/strong><\/td>Descrizione<\/strong><\/td>Risoluzione<\/strong><\/td><\/tr>
H.264\/AVC<\/td>Uno dei codec pi\u00f9 diffusi, utilizzato per la codifica di video ad alta definizione . Offre un’ottima qualit\u00e0 video con una larghezza di banda ridotta.<\/td>HD – 720p con 1280x720px
FullHD – 1080p 1920x1080px<\/td><\/tr>
H.265\/HEVC<\/td>Successore di H.264, offre una qualit\u00e0 video ancora migliore con una larghezza di banda ridotta.<\/td>fino a 8k – 7680x4320px<\/td><\/tr>
VP9<\/td>Sviluppato da Google, \u00e8 un codec aperto e gratuito che offre una qualit\u00e0 video simile a quella di H.265 (fino a 4k) a un costo minore.<\/td>Fino a 4k – 3840x2160px<\/td><\/tr>
AV1<\/td>Sviluppato da un consorzio di aziende tecnologiche, offre una qualit\u00e0 video simile a quella di H.265\/HEVC a un costo inferiore<\/td>fino a 8k – 7680x4320px<\/td><\/tr>
MPEG-2<\/td>Utilizzato per la codifica di DVD e TV digitale, offre una buona qualit\u00e0 video a una larghezza di banda moderata.<\/td>SD – 720x576px o 720x480px
HD – 720p con 1280x720px
FullHD – 1080p 1920x1080px<\/td><\/tr>
MPEG-4<\/td>Utilizzato per la codifica di video su Internet e dispositivi mobili, offre una buona qualit\u00e0 video con una larghezza di banda ridotta.<\/td>SD – 720x576px o 720x480px
HD – 720p con 1280x720px
FullHD – 1080p 1920x1080px<\/td><\/tr>
Theora<\/td>Un codec video open source, offre una buona qualit\u00e0 video con una larghezza di banda ridotta.<\/td>SD – 720x576px o 720x480px
HD – 720p con 1280x720px<\/td><\/tr><\/tbody><\/table>
Principali codec video e rispettive risoluzioni supportate.<\/figcaption><\/figure>\n\n\n\n

Per convertire il nostro contenuto in questi formati possiamo utilizzare due metodi:<\/p>\n\n\n\n

Il metodo \u201cclassico\u201d<\/h2>\n\n\n\n

Il termine transcodifica, dalla maggior parte degli utilizzatori, \u00e8 associato al framework FFmpeg.<\/p>\n\n\n\n

Citando dal sito ufficiale:<\/p>\n\n\n\n

\n

FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created. It supports the most obscure ancient formats up to the cutting edge. No matter if they were designed by some standards committee, the community or a corporation. It is also highly portable: FFmpeg compiles, runs, and passes our testing infrastructure <\/em>FATE<\/em><\/a> across Linux, Mac OS X, Microsoft Windows, the BSDs, Solaris, etc. under a wide variety of build environments, machine architectures, and configurations.<\/em> <\/p>\n<\/blockquote>\n\n\n\n

Una volta installato sulla nostra macchina, potremo utilizzarlo per effettuare le operazioni di transcodifica in locale.<\/p>\n\n\n\n

A titolo di esempio, se volessimo diminuire (o aumentare) il bitrate a 24 di un file video utilizzeremmo il seguente comando:<\/p>\n\n\n\n

ffmpeg -i input.avi -r 24 output.avi<\/code><\/pre>\n\n\n\n

Se ci trovassimo con la necessit\u00e0 di transcodificare numerose sorgenti in molteplici formati, potremmo adottare una soluzione scalabile utilizzando EC2, SQS e autoscaling group.
Per elaborare i nostri video utilizzeremo una batteria di EC2 disposte all\u2019interno di un autoscaling group; facendo ci\u00f2, la nostra infrastruttura sar\u00e0 capace di gestire sia aumenti del traffico (e quindi delle elaborazioni necessarie) creando in maniera autonoma nuove EC2, sia \u2019eventuale fallimento di una delle AZ di AWS.<\/p>\n\n\n\n

Come metrica di scaling ci baster\u00e0 implementare una coda SQS che andr\u00e0 a fare da buffer per i lavori da eseguire permettendoci di non scalare eccessivamente qualora le richieste fossero gestibili con l\u2019attuale numero di macchine, e di sfruttare al meglio le risorse computazionali che le EC2 ci metteranno a disposizione.<\/p>\n\n\n\n

La coda SQS, inoltre, fornisce anche altri vantaggi come la gestione delle dead-letter queue, ovvero la possibilit\u00e0 di riconoscere i lavori che per un qualunque motivo non sono stati portati a termine dalle nostre EC2 e quindi eventualmente riproporlo per poter effettuare un nuovo tentativo. Per utilizzare questa unione dei due servizi per\u00f2 sar\u00e0 necessario creare una metrica custom su AWS dato che il numero di elementi nella coda non \u00e8 riconosciuto nativamente dagli autoscaling group.<\/p>\n\n\n\n

<\/p>\n\n\n

\n
\"SQS
Coda SQS per transcodifica parallelizzata su una flotta di EC2.<\/figcaption><\/figure><\/div>\n\n\n

<\/p>\n\n\n\n

Utilizzando le giuste tipologie di EC2 avremmo sicuramente una grande potenza di calcolo per completare i nostri lavori, ma andremmo ad incappare in diversi svantaggi:<\/p>\n\n\n\n