It may not be apparent to those who aren’t working behind the scenes, but there’s a battle going on in the world of online video right now. It’s in many ways reminiscent of the fight between Blu-Ray and HD DVD a couple years ago, with the main difference being that, in this case, users aren’t being asked to choose. Instead, end users are being insulated by developers who are being thrown back into the dark ages of the web where browser-specific implementations reigned supreme.
For years there was no standard way to embed video into a web page. People would embed Quicktime, or Windows Media or MPEG videos directly. If your computer supported it, it would play. If not, you were out of luck. Eventually, the de-facto standard became to use Flash to play back a video that was either encoded in Adobe’s proprietary Flash Video format, or the blandly named but widely used H.264 format.
This approach was anything but fitting the open nature of HTML and the internet, but it worked. The in-progress HTML5 standard was posed to offer a truly standardized way of handling video, but it had been in the draft stages for what seemed like forever and browser adaption was essentially non-existent. After all, the Flash approach had the advantage of, well, actually being working solution.
Then came the iPad, and with it, a philosophy shunning all things Flash. Safari, Apple’s web browser, came with support for the HTML5 video tag. The iPad included dedicated hardware for decoding H.264 video, hugely extending battery life when playing back video.
H.264 was anything but new at this point but suddenly websites were scrambling to update their Flash-only video solutions to make them iPad compatible. Browser support for HTML5 video started to get some real attention.
Today most modern browsers support HTML5 video, but what they don’t all do is agree what format that video should be in. There are two formats being argued for:
- H.264 – Efficient, widely used and a recognized, openly documented standard, but patented and subject to licensing for certain uses.
- WebM – Open and unencumbered by patents, but not as well supported and (currently) not as efficient.
Initially Apple, Google and Microsoft all supported H.264, while Mozilla and Opera were backing WebM. Given that H.264 was more efficient, had all the big names behind it, was already widely used online, and was even more widely used offline – Blu-Ray being one example – it looked like declaring a victor was going to be a mere formality. Then on January 11th, Google announced they were removing support for H.264 from Chrome, and would be supporting WebM exclusively.
With this latest move a resolution will likely be a long time coming. The only certainty is that developers are going to have to continue feeling their way through the dark ages, making things work differently depending on what browser people are using.
There are a couple different ways that video can be handled at the moment:
- Encode videos exclusively in H.264. Use HTML5 for browsers which support H.264 directly, and fall back on using Flash to play the H.264 video for browsers which don’t.
- Encode and store two copies of each video, one in WebM, and one in H.264. Use HTML5 with the WebM video for browsers which support it, and HTML5 with the H.264 video for browsers which support that. Oh, and fall back on Flash to play the H.264 video for browsers which support neither WebM or H.264 directly.
Both approaches will work on virtually all browsers, but the second one is more work for no practical gain. While I’ve never been a fan of software patents or the abuses they make possible, expecting developers to double the storage requirements for their applications and do the same thing in three different ways is just ridiculous.
It’s almost enough to make you wish for a closed but de-facto standard again.