Nella prima e seconda parte di questa serie di blog, abbiamo parlato di VP9 e dell'implementazione della scalabilità. In quest'ultima puntata, tratteremo il codec stesso e i vantaggi della nuova implementazione di VP9 scalabile di Vidyo.
Leggi tutto - Migliorare VP9 senza modificarlo - Parte 1
Leggi tutto - Migliorare VP9 senza modificarlo - Parte 2
L'asimmetria tra la complessità del codificatore e del decodificatore risale ai primissimi progetti di codificatori video digitali della fine degli anni '80 (H.261) ed è una caratteristica intrinseca delle strutture ibride predittive e con compensazione del movimento che sono state storicamente utilizzate. Il livello di sofisticazione del codificatore è sempre stato un punto di differenziazione tra le implementazioni di codec, con molte aziende che hanno sviluppato la propria "salsa segreta" per migliorare la qualità e l'efficienza della compressione.
Questo è spesso un punto di confusione per i non esperti. Gli standard di codifica video standardizzano il processo di decodifica e la sintassi del bitstream, non il processo di codifica. Gli implementatori hanno un'enorme libertà nell'ottimizzare il processo di codifica. È interessante notare che nel codec MPEG-2 utilizzato nei DVD, le prestazioni del codificatore sono quasi raddoppiate (cioè la metà della velocità di trasmissione per la stessa qualità) in un periodo di 10 anni senza alcun cambiamento nella sintassi del bitstream sottostante. Semplicemente, i codificatori sono stati in grado di prendere decisioni più intelligenti su dove spendere i bit. Questo sia perché gli ingegneri hanno realizzato progetti migliori, ma anche perché è diventata disponibile una maggiore potenza di elaborazione per eseguire questi calcoli, anche in tempo reale.
Vidyo ha recentemente lanciato la propria offerta di Platform-as-a-Service (PaaS), in vidyo.io. In quanto PaaS, è stato progettato per essere facilmente accessibile a tutti: basta scaricare l'SDK disponibile gratuitamente per il proprio linguaggio e ambiente di programmazione e collegare il codice alla propria applicazione. Il servizio è basato sul cloud e viene addebitato in base all'utilizzo. È possibile leggere l'ingegneria che sta dietro a vidyo.io in il mio blog.
Per noi era importante poter offrire un codec che supportasse appieno la scalabilità, fosse privo di requisiti di royalty attualmente noti e offrisse un'interoperabilità nativa con WebRTC. Avremmo potuto utilizzare la versione open source di VP9 scalabile disponibile nel progetto WebM, ma abbiamo deciso di sviluppare un'implementazione di VP9 scalabile da zero.
Vidyo ha sempre posto grande enfasi su un'esperienza di alta qualità e sulle prestazioni attraverso la più ampia gamma possibile di piattaforme, dai dispositivi mobili ai sistemi 5K di fascia alta e oltre. Nel corso degli anni abbiamo sviluppato una grande esperienza nella progettazione di codificatori video e nello sviluppo di implementazioni ottimizzate su varie piattaforme, in particolare progettate tenendo conto delle comunicazioni interattive in tempo reale. Volevamo anche poter utilizzare i meccanismi di resilienza e occultamento degli errori che abbiamo integrato nella nostra piattaforma, alcuni dei quali sono brevettati e vanno ben oltre quanto disponibile nei progetti open source, compreso WebRTC.
Di particolare importanza per noi sono le prestazioni dei dispositivi mobili. Dal momento che la codifica viene eseguita via software, è indispensabile ottenere il massimo delle prestazioni dalla CPU e dalla batteria disponibili. In effetti, come mostriamo di seguito (si può guardare avanti nella Tabella 1), anche nella sua modalità operativa più semplice (denominata modalità CPU 8), nei nostri test la versione open source di VP9 (denominata OVP9) non ha fornito prestazioni adeguate in tempo reale per la codifica spaziale scalabile di contenuti a 720p nelle tipiche piattaforme mobili. I frame rate si aggiravano intorno ai 15 fps, la metà dei 30 fps tipicamente richiesti. Questa è stata la motivazione principale che ci ha spinto a sviluppare una nostra versione ottimizzata.
I risultati del nostro lavoro sono ora disponibili sul nostro sito web vidyo.io PaaS e presto sarà disponibile su tutta la piattaforma Vidyo. Il miglioramento delle prestazioni è impressionante. Per dimostrarlo, dobbiamo confrontare i due codec su tre parametri: qualità, velocità di trasmissione e complessità. Tutti e tre i parametri si influenzano a vicenda, quindi per fare un confronto corretto dobbiamo correggere almeno uno di essi. In questa sede confronteremo la qualità dei codec nell'intera gamma operativa e la loro complessità. Di seguito sono riportati alcuni aspetti dei nostri test interni in condizioni specifiche; ovviamente i risultati di altri test o della vita reale possono variare, ma questi risultati dimostrano il tipo di vantaggi in termini di prestazioni che il nostro nuovo codec VP9 può apportare.

Figura 6: Confronto delle prestazioni delle diverse versioni di VP9 per un video a 720p utilizzando 2 livelli spaziali e 3 livelli temporali
Figura 6 mostra un esempio di codifica di una sequenza a 720p, 30 fps con 2 livelli spaziali e 3 livelli temporali utilizzando le due versioni del codec VP9. Il grafico mostra il PSNR (Peak Signal-to-Noise Ratio) rispetto alla velocità di trasmissione. (I numeri si riferiscono al PSNR del livello superiore e al bit rate totale. Per prima cosa, il video viene codificato (utilizzando un quantizzatore fisso) in quattro punti operativi diversi, utilizzando OVP9 in modalità CPU 8. Come abbiamo detto in precedenza, questa è la modalità di codifica più adatta. Come abbiamo detto in precedenza, questa è la modalità operativa più semplice di questa particolare implementazione software, ovvero utilizza la minor quantità di risorse della CPU e, ovviamente, fornisce la minore efficienza di compressione. Ma anche in questa modalità OVP9 non ha fornito prestazioni in tempo reale (cioè 30 fps) per 2 livelli scalabili a 720p. Lo stesso video è stato anche codificato utilizzando l'implementazione di Vidyo di VP9 (qui indicata come VVP9) in due diverse modalità di complessità: bassa e media. Possiamo notare che VVP9 in modalità bassa offre prestazioni uguali o leggermente migliori rispetto a OVP9, mentre in modalità media si ottiene un ulteriore miglioramento.
Figura 6 ci dice che in questa configurazione abbiamo eguagliato le prestazioni qualitative dei due codec. Il confronto chiave ora, tuttavia, è vedere a quale costo di elaborazione otteniamo questa efficienza di compressione. È qui che le cose si fanno interessanti. Tabella 1 di seguito sono riportate le prestazioni dei due codec in termini di fotogrammi al secondo su due piattaforme mobili popolari, un iPhone 6 Plus e un Samsung Galaxy S6 Edge+ (entrambi in modalità single thread).

Tabella 1: Prestazioni della CPU nelle piattaforme iOS e Android
Le colonne di sinistra mostrano gli fps assoluti, mentre quelle di destra mostrano la percentuale di velocità di codifica e decodifica OVP9 raggiunta da VVP9 (nelle due modalità). Possiamo notare che, in media, tra i due dispositivi e le due velocità di trasmissione abbiamo ottenuto una velocità di codifica di 2,7-2,8 volte, producendo al contempo una qualità video leggermente migliore (PSNR). Nel caso dell'iPhone, il VVP9 a modalità bassa ha fornito una velocità più che tripla. Va sottolineato che questi risultati si riferiscono alla codifica scalabile, con due livelli spaziali. Anche in modalità a singolo strato, tuttavia, si sono registrati incrementi di velocità fino a 1,7 volte. Come mostrato in precedenza, anche la velocità di decodifica è stata superiore, anche se non in modo così significativo. Questo è prevedibile, poiché il processo di decodifica è molto più semplice e c'è meno spazio per l'ottimizzazione.
L'aumento significativo della velocità di codifica, in particolare, ha un'implicazione diretta sulla durata della batteria dei dispositivi mobili. Una maggiore velocità di codifica, misurata in fps, significa che la CPU del dispositivo richiede meno tempo per codificare ogni fotogramma video. Se la velocità di codifica è inferiore a 30 fps, come nel caso dei risultati del test OVP9, significa che anche se la CPU dedica tutto il suo tempo alla codifica dei video, non riesce comunque a tenere il passo con i 30 fps di una telecamera tipica. Se la velocità di codifica è ben superiore a 30 fps, come nel caso dei risultati del test VVP9, significa che la CPU ha tempo a sufficienza per codificare un video e poi occuparsi di altre attività applicative o semplicemente andare a dormire. Questo si traduce immediatamente in un minor consumo della batteria. Il miglioramento minore della velocità di decodifica ha un vantaggio simile, ma di conseguenza meno significativo, in termini di consumo energetico. Il miglioramento totale del consumo energetico dipende anche dalle altre attività che l'applicazione di comunicazione video deve svolgere, tra cui la codifica e la decodifica dell'audio, la gestione dell'interfaccia utente, ecc. Nei dispositivi mobili dedicati alla codifica video (ad esempio, le body camera indossate dai primi soccorritori), il risparmio può facilmente tradursi in un raddoppio della durata della batteria.
Alcuni di questi miglioramenti sono presenti anche nelle applicazioni desktop. Ad esempio, in un ambiente Windows a 64 bit abbiamo riscontrato una velocità di circa 1,6-1,7 volte superiore per VVP9 rispetto a OVP9 durante la codifica dello stesso contenuto a 720p. (Negli ambienti desktop, il confronto della velocità di decodifica è meno rilevante, poiché la velocità di decodifica di entrambi i codec è già diverse volte superiore a quella in tempo reale). Ovviamente le risorse della batteria e del processore non sono così limitate nei desktop come nei dispositivi mobili, ma l'aumento delle prestazioni di codifica può comunque tradursi in tempo libero del processore per altre attività e/o in una maggiore durata della batteria per i portatili.
Il risultato netto per gli utenti finali di Vidyo è che possono godere di tutti i vantaggi di uno standard aperto con piena compatibilità con le implementazioni esistenti basate su browser o con qualsiasi implementazione di VP9, godendo allo stesso tempo di prestazioni sostanzialmente migliori e ampliando in modo significativo la capacità dei loro dispositivi mobili di codificare video prima di dover essere collegati. Questo è uno dei grandi punti di forza degli standard aperti: permettere a diverse implementazioni di interagire tra loro.
Per saperne di più:
Migliorare VP9 senza modificarlo - Parte 1
Migliorare VP9 senza modificarlo - Parte 2