VP9 verbeteren zonder het te veranderen - Deel 3

20 november 2017
  door Blog Team
Prestatievergelijking van verschillende versies van VP9

In deel één en twee van deze blogserie bespraken we VP9 en de implementatie van schaalbaarheid. In dit laatste deel behandelen we de codec zelf en de voordelen van Vidyo's nieuwe implementatie van schaalbaar VP9.

Lees meer VP9 verbeteren zonder het te veranderen - Deel 1
Lees meer VP9 verbeteren zonder het te veranderen - Deel 2

De asymmetrie tussen encoder- en decodercomplexiteit gaat terug tot de allereerste digitale video-encoderontwerpen van eind jaren 1980 (H.261) en is een inherent kenmerk van de voorspellende, bewegingsgecompenseerde hybride structuren die van oudsher werden gebruikt. De verfijning van de encoder is altijd een punt van verschil geweest tussen codec-implementaties, waarbij veel bedrijven hun eigen "geheime saus" ontwikkelden om de kwaliteit en compressie-efficiëntie te verbeteren.

Dit is vaak een punt van verwarring voor niet-experts. Video coderingsstandaarden standaardiseren het decoderingsproces en de bitstream syntax, niet het coderingsproces. Uitvoerders hebben een enorme vrijheid in het optimaliseren van het codeerproces. Het is interessant dat in de MPEG-2 codec die wordt gebruikt in DVD's, de encoderprestaties bijna verdubbelden (d.w.z. de helft van de bitrate voor dezelfde kwaliteit) in een periode van 10 jaar zonder verandering in de onderliggende bitstreamsyntax. Het was gewoon zo dat de encoders slimmere beslissingen konden nemen over waar ze hun bits aan wilden besteden. Dat komt omdat de ingenieurs betere ontwerpen maakten, maar ook omdat er meer rekenkracht beschikbaar kwam om deze berekeningen uit te voeren, zelfs in realtime.

Vidyo lanceerde onlangs zijn eigen Platform-as-a-Service (PaaS) aanbod, in vidyo.io. Als PaaS is het ontworpen om gemakkelijk beschikbaar te zijn voor iedereen - men hoeft alleen maar de vrij beschikbare SDK voor hun programmeertaal en -omgeving te downloaden en de code te koppelen aan hun eigen applicatie. De service is cloudgebaseerd en wordt in rekening gebracht op basis van gebruik. U kunt meer lezen over de techniek achter vidyo.io in mijn blogpost.

Het was belangrijk voor ons om een codec te kunnen aanbieden die volledige ondersteuning voor schaalbaarheid zou bieden, vrij zou zijn van de momenteel bekende royaltyvereisten en native interoperabiliteit met WebRTC zou bieden. Hoewel we gebruik hadden kunnen maken van de open source versie van schaalbaar VP9 die beschikbaar is in het WebM-project, besloten we een schaalbare VP9-implementatie vanaf nul te ontwikkelen.

Vidyo heeft altijd veel nadruk gelegd op een hoogwaardige ervaring en prestaties op de meest uiteenlopende platforms, van mobiel tot high-end 5K-systemen en nog veel meer. In de loop der jaren hebben we veel expertise ontwikkeld in het ontwerpen van video-encoders en het ontwikkelen van geoptimaliseerde implementaties op verschillende platforms, speciaal ontworpen met realtime interactieve communicatie in gedachten. We wilden ook gebruik kunnen maken van de foutbestendigheid en foutonderdrukkingsmechanismen die we in ons platform hebben ingebouwd, waarvan sommige gepatenteerd zijn en veel verder gaan dan wat beschikbaar is in open source projecten, waaronder WebRTC.

Van bijzonder belang voor ons zijn mobiele prestaties. Omdat het coderen met software gebeurt, is het noodzakelijk om zoveel mogelijk prestaties uit de beschikbare CPU en batterij te halen. Zoals we hieronder laten zien (je kunt verder kijken in Tabel 1), leverde de open source versie van VP9 (OVP9 genoemd) in onze tests zelfs in de eenvoudigste bedrijfsmodus (CPU-modus 8) geen realtime prestaties die geschikt zijn voor ruimtelijk schaalbare codering van 720p-inhoud op typische mobiele platforms. De framerates lagen rond de 15 fps, de helft van de typisch vereiste 30 fps. Dit was een belangrijke motivatie voor ons om onze eigen geoptimaliseerde versie te ontwikkelen.

De resultaten van ons werk zijn nu beschikbaar op onze vidyo.io PaaS en zal binnenkort beschikbaar zijn voor het hele Vidyo platform. De prestatieverbetering is indrukwekkend. Om dit aan te tonen, moeten we de twee codecs vergelijken op drie parameters: kwaliteit vs. bitsnelheid vs. complexiteit. Alle drie de parameters beïnvloeden elkaar, dus om een goede vergelijking te kunnen maken, moeten we ten minste één ervan vastleggen. Hier vergelijken we de kwaliteit van de codecs over hun hele werkbereik en vergelijken we hun complexiteit. Het volgende toont aspecten van onze interne tests onder specifieke omstandigheden; uiteraard kunnen andere tests of resultaten uit de praktijk afwijken, maar deze resultaten laten zien welke prestatievoordelen onze nieuwe VP9-codec kan bieden.

720p 30fps

Figuur 6: Prestatievergelijking van verschillende versies van VP9 voor een 720p video met 2 ruimtelijke lagen en 3 temporele lagen

Figuur 6 toont een voorbeeld van het coderen van een 720p, 30 fps sequentie met 2 ruimtelijke lagen en 3 tijdelijke lagen met behulp van de twee versies van de VP9-codec. De grafiek toont PSNR (Peak Signal-to-Noise Ratio) versus bitsnelheid. (PSNR is een maat voor de videokwaliteit, hoe hoger hoe beter.) De getallen verwijzen naar de PSNR van de bovenste laag en de totale bitsnelheid. Eerst wordt de video gecodeerd (met behulp van een vaste kwantisator) op vier verschillende werkpunten met OVP9 op CPU-modus 8. Zoals we al eerder zeiden, is dit de beste manier om video te coderen. Zoals we al eerder zeiden, is dit de eenvoudigste modus van deze specifieke software-implementatie, d.w.z. het gebruikt de minste CPU-bronnen en biedt natuurlijk de laagste compressie-efficiëntie. Maar zelfs in die modus leverde OVP9 geen real-time prestaties (d.w.z. 30 fps) voor 2 schaalbare lagen bij 720p. Dezelfde video is ook gecodeerd met Vidyo's implementatie van VP9 (hier VVP9 genoemd) in twee verschillende complexiteitsmodi: laag en medium. We kunnen zien dat VVP9 in de lage modus ongeveer dezelfde of iets betere prestaties levert dan OVP9, terwijl je in de medium modus een extra verbetering krijgt.

Figuur 6 vertelt ons dat we in deze configuratie de kwaliteitsprestaties van de twee codecs hebben geëvenaard. De belangrijkste vergelijking is nu echter om te zien tegen welke verwerkingskosten we deze compressie-efficiëntie krijgen. Dat is waar het spannend wordt. Tabel 1 Hieronder ziet u de prestaties van de twee codecs in termen van frames per seconde op twee populaire mobiele platforms, een iPhone 6 Plus en een Samsung Galaxy S6 Edge+ (beide in single thread modus).

CPU-prestaties in iOS- en Android-platforms

Tabel 1: CPU-prestaties in iOS- en Android-platforms

De kolommen aan de linkerkant tonen absolute fps, terwijl de kolommen aan de rechterkant het percentage OVP9-coderings- en decoderingssnelheid tonen dat VVP9 (in de twee modi) bereikt. We kunnen zien dat we, gemiddeld over de twee apparaten en bitsnelheden, een 2,7-2,8x snellere codering kregen, terwijl we zelfs een iets betere videokwaliteit (PSNR) produceerden. In het geval van de iPhone leverde VVP9 in de lage modus meer dan het drievoudige aan snelheid. We moeten benadrukken dat deze resultaten betrekking hebben op schaalbare codering, met twee ruimtelijke lagen. Zelfs in de modus met één laag zagen we echter snelheidsverbeteringen tot 1,7x. Zoals hierboven getoond, waren de decoderingssnelheden ook sneller, maar niet zo significant. Dit is te verwachten, aangezien het decoderingsproces veel eenvoudiger is en er minder ruimte is voor optimalisatie.

Vooral de aanzienlijk hogere codeersnelheid heeft een directe invloed op de levensduur van de batterij op mobiele apparaten. Een hogere codeersnelheid, gemeten in fps, betekent dat de CPU van het apparaat minder tijd nodig heeft om elk videoframe te coderen. Als de coderingssnelheid lager is dan 30 fps, zoals het geval was bij de testresultaten van OVP9, betekent dit dat zelfs als de CPU al zijn tijd besteedt aan het coderen van video, deze nog steeds de 30 fps van een typische camera niet kan bijhouden. Als de codeersnelheid ruim boven de 30 fps ligt, zoals het geval was bij onze VVP9-resultaten, betekent dit dat de CPU genoeg tijd heeft om een video te coderen en vervolgens andere applicatietaken uit te voeren of gewoon te gaan slapen. Dit vertaalt zich meteen naar een lager batterijverbruik. De kleinere verbetering in decoderingssnelheid heeft een vergelijkbaar, maar dienovereenkomstig minder significant voordeel in stroomverbruik. De totale verbetering in stroomverbruik hangt ook af van de andere taken die de videocommunicatietoepassing moet uitvoeren, waaronder audio coderen en decoderen, UI-beheer, enz. In mobiele apparaten die speciaal bedoeld zijn voor videocodering (bijvoorbeeld lichaamscamera's die gedragen worden door eerstehulpverleners), kan de besparing gemakkelijk leiden tot een verdubbeling van de batterijlevensduur.

Sommige van deze verbeteringen zijn ook aanwezig in desktoptoepassingen. In een 64-bits Windows-omgeving zagen we bijvoorbeeld een ruwweg 1,6-1,7x hogere snelheid voor VVP9 dan OVP9 bij het coderen van dezelfde 720p-inhoud. (In desktopomgevingen zijn vergelijkingen van de decoderingssnelheid minder relevant, omdat de decoderingssnelheid in beide codecs al enkele malen sneller is dan real-time). Het is duidelijk dat batterij- en processormiddelen niet zo beperkt zijn op desktops als op mobiele apparaten, maar de prestatiewinst bij het coderen kan nog steeds resulteren in vrijgekomen processortijd voor andere taken en/of een langere levensduur van de batterij voor laptops.

Het nettoresultaat voor eindgebruikers van Vidyo is dat ze kunnen profiteren van alle voordelen van een open standaard met volledige compatibiliteit met bestaande browsergebaseerde implementaties, of eigenlijk elke VP9-implementatie, terwijl ze tegelijkertijd kunnen genieten van aanzienlijk betere prestaties en een aanzienlijke uitbreiding van de mogelijkheden van hun mobiele apparaten om video te coderen voordat ze aangesloten moeten worden. Dit is een van de sterke punten van open standaarden: verschillende implementaties toestaan die allemaal met elkaar kunnen samenwerken.

Lees meer:

VP9 verbeteren zonder het te veranderen - Deel 1
VP9 verbeteren zonder het te veranderen - Deel 2

Abonneren op blog

Ontvang een melding wanneer nieuwe blogs in deze categorie worden gepubliceerd: .

Volg ons

Ga naar de inhoud