Sono Dale Curtis, l'ingegnere responsabile della riproduzione multimediale in Chromium. Il mio team è responsabile delle API web per la riproduzione di video come MSE e WebCodecs, e degli elementi interni specifici della piattaforma coinvolti nel demuxing, nella decodifica e nel rendering di audio e video.
In questo articolo, ti illustrerò l'architettura di rendering video di Chromium. Anche se alcuni dettagli sull'estensibilità sono probabilmente specifici di Chromium, la maggior parte dei concetti e dei progetti discussi qui si applica ad altri motori di rendering e persino ad app di riproduzione native.
L'architettura di riproduzione di Chromium è cambiata notevolmente nel corso degli anni. Anche se non abbiamo iniziato con l'idea di una piramide del successo come descritto nel primo post di questa serie, abbiamo seguito in definitiva passaggi simili: affidabilità, prestazioni ed esestensione.
All'inizio, il rendering video era abbastanza semplice: basta un ciclo for per scegliere quale software decodificare i frame video da inviare al compositore. Per anni questo approccio è stato sufficientemente affidabile, ma con l'aumento della complessità del web, la necessità di un maggiore rendimento ed efficienza ha portato a cambiamenti nell'architettura. Molti miglioramenti richiedevano primitive specifiche per il sistema operativo. Pertanto, la nostra architettura doveva diventare più estensibile per raggiungere tutte le piattaforme di Chromium.