The VP9 Breakthrough: VP9 Support Now Possible on Apple Devices and All Major Platforms
by Pieter-Jan Speelmans on April 19, 2023
Over the past week, during my early mornings at NAB, I’ve been exploring the potential of running the VP9 codec on all platforms. Despite my sleep-deprived, jet-lagged state, I’ve discovered some exciting news: it's now possible to use VP9 everywhere, making it possible to thank H.264 for its services and move on. Although I admit this article might come across as unorganized, my enthusiasm for the findings was too great to keep to myself.
AVC/h.264 has been a reliable codec for the past 19 years. Originally published on August 17, 2004, it remains the go-to choice for ensuring your content can play on any device. However, from an efficiency standpoint, it's outdated technology. Many improvements have been made since its inception.
The codecs that followed H.264, H.265/HEVC, and VP9, released on June 7 and 17, 2013, respectively, have yet to achieve widespread adoption. The main reason is that device coverage isn't as comprehensive, necessitating a dual codec approach that increases encoding and storage costs. In addition, H.265 is also plagued by licensing issues, making it unclear who needs to be paid to use it (and that’s not even mentioning the Sisvel VP9/AV1 claims).
The H.265 and VP9 generation of codecs boasts impressive gains in compression efficiency. One could wonder why they are not often used. While I prefer to stay away from the (almost religious) discussions on which codecs are best and what the exact efficiency gains are, H.265 and VP9 seem to have efficiency gains of around 40-50%. If you’re storing a large library of video or streaming huge quantities of it, it’s no surprise the potential cost reduction is massive. There will be an increase in encoding cost using a more modern codec (my numbers seem to indicate a 3x increase in compute requirements for VP9), but when you don’t have a long tail of rarely viewed and only briefly stored videos, this should be offset easily. Platform support has however always been a significant limitation, particularly for Apple devices such as iPhones with iOS.
Guided by some insights shared by industry friends, I discovered that HLS with VP9 has been enabled on iOS by Apple, although not publicly acknowledged. One of the clear hints can be found when analyzing YouTube’s traffic to iPhone devices. YouTube seems to stream HLS with VP9 to iPhone devices, playable in Safari's video element. While it’s unclear how long this has been going on, this observation triggered me big time.
Did Apple change its position on VP9? No, at least not publicly. Former TN2224, now known as the HTTP Live Streaming (HLS) Authoring Specification for Apple Devices, still mentions you should use h.264 and h.265 to operate on iOS. That’s where NAB is great. Over the past week, I’ve been able to discuss from various angles if this is just a fluke, or if we are seeing intentional behavior here. The only conclusion I can come to is that this is absolutely an intentional change. Given VP9 support in iOS is now a real thing, I see no reason to not leverage this.
Using this information as a guide, I dug deeper, discovering that VP9 in ISOBMFF/CMAF/MP4 containers works well with HLS in a native way. Additionally, VP9 support on iPadOS and macOS, though less straightforward than on iPhone, is still achievable with HLS. I was even able to implement this into our player product, resulting in stunning performance and the ability to play VP9 everywhere. To make things even better, I already implemented the HLS with AV1 combination in some forward compatibility for those platforms where AV1 is already enabled (Apple IS a part of AOM after all, and indications are good that support for this is coming as well, but I did not find a way to enable this on iOS… yet at least).
Furthermore, after running new builds of our player on different devices using our automated testing platform, I found that our current changes enable VP9 in HLS on Tizen and webOS. Indications are strong that we can extend this support to all older devices we support, including Tizen 2.3 (2015 TVs) and webOS 3.0 (2016 devices). It's not surprising that VP9 works flawlessly on other major platforms such as Android TV, FireTV, and Roku.
Based on my current observations, it's now possible to run HLS streams with VP9 in ISOBMFF on all major platforms supported by our player product. Given that we support nearly every relevant platform for the bulk of the streaming services out there, that’s pretty good. (Note to self, we should update Can I Use, which currently lists a support rate of "80.13% +17.21% = 97.34." where the 17.21% indicates only partial support on iOS for webRTC.)
Some further work I’m doing is validating all of this with DRM and perhaps pumping this into the HESP protocol to do VP9 in live with sub-second latency glass-to-glass. Indications are very good that this will work as well, and I expect to have an update here soon once I get the time to craft some streams.
I hope this article didn’t come over as too disorganized (but hey, I warned you at the start), but I must admit I’m quite excited about the findings here. Let’s thank H.264 for its great service over the past years and look towards finally using some more efficient encoding.