- AV1 is a video codec that’s gaining traction among online streaming services because it’s free of royalties and delivers good video quality without needing a lot of bandwidth.
- However, many devices lack hardware accelerators for playing back videos encoded in AV1, which means they need to use a software decoder running on the CPU.
- Android currently ships with Google’s libgav1 AV1 software decoder, but a future update will switch that over to VideoLAN’s libdav1d, which offers significantly better performance.
Exactly seven years ago, YouTube shared a mind-boggling statistic with the world: people are watching a billion hours of content on the platform every single day. The digital media landscape has only grown since then thanks to the rise of TikTok and the ongoing online streaming war between Netflix and large media companies. With the sheer amount of video content these online services have to deliver on a daily basis, it’s imperative companies use the best compression technology available to save bandwidth without significantly compromising on quality. That’s why the Alliance for Open Media’s AV1 codec has been gaining traction among online streaming services.
AV1 is a video codec that offers superior compression efficiency compared to older codecs like h.264, h265, or VP9, which means that videos encoded in AV1 can deliver similar video quality at much lower bitrates. This reduces bandwidth requirements for both the streaming service and the end user without compromising on quality. Better performance isn’t the only reason why the streaming industry loves AV1, though. AV1 is also free of any royalties, which makes it an attractive option for streaming services that want to cut costs.
However, streaming services have been slow to adopt AV1 for their content. While services like YouTube, Netflix, Instagram, and Vimeo already encode much of their content in AV1, they still serve this content in other codecs to the vast majority of consumer devices. The reason is that many consumer devices still lack hardware support for playing back AV1 videos, which means they would have to use a software decoder running on the CPU to play back an AV1 video.
AV1 offers superior compression efficiency compared to older codecs like h.264, h265, or VP9.
Video decoders are essentially complex algorithms that can be run on either the CPU (software-accelerated) or on a dedicated hardware block for multimedia processing (hardware-accelerated). Depending on the quality of the video and the codec that’s used, decoding a video file can be computationally intensive. Ideally, devices would use a hardware-accelerated decoder to play back AV1 content, ensuring smoother playback and lower power consumption.
Unfortunately, most mobile devices lack a hardware-accelerated AV1 decoder, meaning they’d have to process AV1 content on the CPU using a software-accelerated decoder. That’s especially problematic considering battery life is a high priority for most users. We’re finally at a point where every major mobile silicon vendor — including Qualcomm starting with the Snapdragon 8 Gen 2 and Apple with the A17 Pro — is shipping products with a hardware-accelerated AV1 decoder. Given that most people don’t upgrade their phones every year or don’t buy the highest-end hardware, it’ll take a couple of years before a majority of mobile devices support hardware-accelerated AV1 decoding.
Credit: Mishaal Rahman / Android Authority
Left: List of available AV1 decoders on a Samsung Galaxy S24 Ultra.
Middle: Details for the system-provided, software-accelerated libgav1 AV1 decoder.
Right: Details for the Qualcomm-provided, hardware-accelerated AV1 decoder.
In the meantime, Google is preparing to update Android so that existing devices can adequately play back AV1 content even if they lack a hardware-accelerated decoder. Since the release of Android 10, AOSP has included the libgav1 decoder, an open-source AV1 decoder developed by Google. However, libgav1 isn’t the only AV1 decoder out there, as there’s also the Alliance for Open Media’s libaom (the reference decoder) as well as VideoLAN’s libdav1d.
Like libgav1, libdav1d runs on the CPU, but it’s significantly better at decoding AV1 content than libgav1 is. This can be attributed to the fact that large parts of libdav1d were written in assembly for ARMv8 chips, reducing a lot of performance overhead. In fact, libdav1d is so computationally efficient that it gives even low-end hardware the ability to smoothly play back high-quality AV1 content without eating up a lot of CPU power.
For comparison, here’s a chart that compares the performance between Google’s libgav1 and VideoLAN’s libdav1d AV1 decoders. The device I tested on was a Google Pixel 3 XL powered by Qualcomm’s Snapdragon 845, which lacks a hardware-accelerated AV1 decoder. In this test, I played back two videos encoded in AV1: a 6:30 clip of the Artemis I launch at 4K60 (8-bit, 1165 kb/s) and a 9:11 clip from Netflix called “Sparks” at 1080p25 (10-bit, 915 kb/s).
Credit: Mishaal Rahman / Android Authority
As you can see from the chart, libdav1d dramatically outperformed libgav1 in this experiment. My Pixel 3 XL averaged over 50fps when playing the Artemis 1 clip using libdav1d as the decoder. In comparison, the device averaged under 10fps when using libgav1. Similarly, my Pixel averaged 25fps when playing the Sparks clip with libdav1d versus under 10fps with libgav1.
If you’re wondering how I was able to test libdav1d on my Pixel 3 XL, it’s because I used VLC Media Player, which bundles libdav1d. Most media player apps on Android use Google’s ExoPlayer library, which defaults to the system-provided libgav1 decoder for AV1 content when a hardware-accelerated AV1 decoder isn’t present. If Google were to swap the system-provided AV1 decoder from libgav1 to libdav1d, then media player apps that use ExoPlayer might benefit significantly from its performance improvements. That’s exactly what Google has been preparing to do since late last year.
My test device averaged 25fps when playing the Sparks clip with libdav1d versus under 10fps with libgav1.
Since early November, the AOSP source code has included the libdav1d decoder. This is because Google needed to experiment with using libdav1d instead of libgav1 as Android’s system-provided AV1 decoder. According to two sources who wish to remain anonymous, Google informed its partners a few months back that they intend to replace libgav1 with libdav1d on existing devices by March 2024 through an upcoming Google Play System Update. This is possible because media codecs are part of a Project Mainline module on Android.
While one of my sources confirmed that Google is still testing this change, what’s unclear is whether this will roll out to all devices that support the Media Codecs mainline module (Android 10 and above) or if it’ll roll out only to devices running Android 14. It’s possible that Google may limit this change to just devices that run Android 14, since Android 14 is the first release where Google actually made it mandatory for OEMs to include an AV1 decoder. This might sound odd since AOSP has included libgav1 since Android 10, but it seems that Google hasn’t actually required OEMs to include it in their builds until Android 14.
In any case, we’ll be keeping an eye out for the upcoming March 2024 Google Play System Update to see if it actually includes the libdav1d AV1 decoder. If it does, then users on lower-end hardware may see a substantial improvement to AV1 video playback performance. However, it remains to be seen how long it will take for streaming services to actually serve AV1 video content to these devices.