Today, WebM/VP8 was announced at Google IO. The last month I have been working on adding support for Opera and we have now released labs builds for Windows, Mac and Linux. We have also published an article for web developers who want to start using WebM <video>. Here’s what it looks like, the Sintel trailer on YouTube playing in Opera with WebM <video>. No Flash!
Previously I’ve posted on Opera Core Concerns, but this time I want to share some personal reflections. (In other words: any views expressed are my own, not those of Opera Software.) What follows is the (quite geeky) history of me and the various codecs and organizations I’ve come into contact with over the past 8 years.
Back in gymnasiet I was a compulsive MP3 collector and was very picky about my bitrates. 128 kbps sounded (still sounds) horrible and it pained me, so when I learned about the Vorbis audio codec I was very excited. Not only was it technically superior, it was also completely free. I re-ripped all of my CDs as Vorbis, told all my friends to do the same and started listening to Machinae Supremacy simply because they offered Ogg downloads. I was a fanboy.
In June 2002 On2 released VP3 to the world. It was my summer holidays and I spent most days inside on an extra slow dial-up connection. I clearly remember that upon reading the news I literally bounced out of my chair and threw my hands in the air out of joy. (Remember, I was 17.) The first thing I did when there was code I could compile and run (packaged by Xiph I believe) was to encode and watch Star Trek: First Contact. The example decoder could neither pause or play in fullscreen, so instead I changed my screen resolution and just watched.
At the time I couldn’t do much to help out, but I wanted to be part of this cool community. One of the first pieces of C code I ever wrote was oggsplit, a not-so-useful tool for splitting multiplexed Ogg streams into separate files. I never used it much, but was quite proud to see it in Xiph’s ogg-tools package.
Fast forward. In the summer of 2006 I began working as a summer intern at Opera Software in Linköping, where I wrote an example plugin for video playback on Opera Devices SDK. I picked GStreamer as the backend and by the time I was done I must have watched A New Computer ~1000 times.
In February 2007 Opera proposed <video> and released a proof-of concept Ogg Vorbis+Theora build. I had no part in this, so it came as somewhat of a surprise. Initially thought that they had used my plugin, but that turned out to not be the case – it was libogg, libvorbis and libtheora integrated directly into the browser. The most exciting part was the strong stance for open standards, something that I obviously agree with.
What happened after that is pretty well known: the <video> tag makes obvious sense, so it quickly got implemented in other browsers. When I joined Opera’s core department (part time) in the summer of 2008, <video> hadn’t been touched much for over a year, so I was tasked with bringing it back to life. Loving both audio/video and the web, it would be hard to find a more suitable and fun job. I ended up porting my then 2-year old plugin and thus Opera is now using GStreamer internally. The Codec Wars™ were always a pain, but we did finally release Opera 10.50 with support for Ogg Vorbis+Theora.
After Google announced that they were buying On2 there was lots of speculation that they would release VP8. I have certainly hoped it would happen, but it seemed a bit too good to be true. Therefore, my reaction when it was confirmed was similar to when VP3 was released – bouncing like a 17-year old. That Vorbis is the chosen audio codec for WebM only makes things better. How lucky I am, that this time I get to actually be part of the release event. It’s been immensely fun working on this, in secrecy, then seeing everything happen in a maelstrom of releases, tweets and blog posts today. Håkon is at Google IO running my code on stage, but just a few weeks ago he was in Opera’s Beijing office, watching sunflowers in one of the first Opera VP8 builds:
While not yet 100% bug-free, VP8 in Opera is well on its way and will be in an official release soon. Today is a good day for open video and the open web. Many thanks to everyone who have worked to make this possible. Live long and prosper, WebM!
Really great job Philip -- during testing the new builds and writing the articles for dev.opera.com, I’ve been really impressed with your work. You are one of those annoyingly clever people. And you’re only 25? sheeeesh! 😉
Pingback: Gyorshír: Nyílt lett a VP8! « Bot « LavX Blog
Great works guys, you all change the web this day :')
Is VP8 implemented as a GStreamer plugin, too?
If yes, is it open-source, like your GStreamer modifications?
Will your implementation get more efficient?
Currently VP8-360p: 50-55% CPU (i.e. a full core)
and Flash-360p:20-25% CPU
Fantastiskt. Man får väl nästan säga grattis! 🙂
Hi, I’m from Brazil. Wonderful work. Congratulations!
Pingback: Megérkezett a WebM <video>! « Bot « LavX Blog
Martin, yes we know that performance sucks, it will be improved. Yes, we have already contributed our changes to upstream GStreamer and they are publicly available from http://sourcecode.opera.com/gstreamer/
Cool! Are the original changes that Opera did to GStreamer upstream, too?
I.e. can I now compile the original GStreamer source and use it directly in Opera?
I’m not too excited about VP8 because it pretty much sucks: http://x264dev.multimedia.cx/?p=377
But of course it’s a big improvement over Theora, but still.
And why did you encode those MP3s in 128kbs in the first place? Even back in those days 192kbps were pretty much transparent. Now LAME and -V2 switch produce high quality.
Martin, any changes which would be generally useful are submitted to upstream GStreamer. To get something you can use in Opera, however, you need to build from http://sourcecode.opera.com/, as we’ve customized some things (mostly removed things we don’t want/need).
Finally, video without FLASH! Now I don’t have to spend hours and hours finding a way to introduce Flash DLL’s to my portable version of Opera every time I install a new version! n.n
Hopefully, this will be the beginning of a new age of audio/video on the internet -- and, even more hopefully, it may be the beginning of higher quality videos also. I can’t wait to see this on sites like YouTube.
I have the impression the reason for the bad performance is GStreamer...
When I open the same file in Windows Media Player, after having installed the 0.9.5 DShow Filters, I get no more than 15% CPU.
It would be really great if you could get a similar performance before releasing this in a Final release...
Martin, no, GStreamer is not to blame for our performance, the reason is that we are copying and blitting each frame in software, which is an enormous performance hit. We’ll solve this by using the 3D hardware in clever way.
Yes, congrats. Nice history 😉
Another one from Brazil!
One more reason for looking forward to hardware acceleration in Opera 🙂
Not only is he clever, he’s a very nice guy too. Proud to know you, Philip! And congrats!
Great work guys!
Congrats from Brazil!
Good work Philip. VP8 isn’t perfect encoder, but considering all pros and cons it is probably best curenntly freely available option right now. So good move. Thanks for greate gift from Google and really big supprise that Google was cooperating with such broad and big number of market (both software and hardware vendors).
Keep working, and please push this work into gstreamer upstream as fast as possible (and into -good codec branch) ! Thanks again.
I’m curious, why does Opera do these extra frame buffer copies and blitting? Is it for the video controls?
Dillon, it’s not related to controls, it’s just what you have to do to draw without hardware acceleration. The problem is just that it’s not very optimized (yet). Expect both faster software rendering and eventually hardware rendering to really get the speed up.
Thanks, I’m looking forward to it!
keep it growing -- you simply ROCK 🙂
I have another question 🙂 Is there any interest in the Opera team of implementing the forthcoming FFmpeg VP8 decoder instead of the one provided by Google? It’s smaller and expected to perform better on both x86 and PPC soon.
Dillion, we’ll have to wait and see how much faster it is.
Hi Philip, congratulations from Brazil again!!!!
I have a little question, this feature will be improved on Opera mobile/mini ?
Keep working. 😉
I “attended” your July 25 HTML 5 webinar. I want to replace the flash videos on my sites with HTML5 ASAP. I realize it may take a while for all browsers to support it, nevertheless, I wanted to make some tests immediately, SO...
I loaded a QT movie (.mov) into the Miro Video Converter you recommended and selected the WebM (vp8) option and clicked Convert. I uploaded the converted .webm file to my website and copied the link into Opera and hit Return.
I am not a techie, but I can usually feel my way through the video upload process. I do it with JW’s Flash Player, with all sorts of other tools, but this is a real mystery. It would seem, from what you said, that the file should load and play, but it doesn’t. I loaded the URL into Chrome and Safari. Same non-result. Opera wants me to download the file. Safari, however, loads a long gibberish text file into a window. What am I doing wrong?
It sounds like you are doing two things wrong. First, your server isn’t configured to use the MIME type video/webm for .webm files and is instead sending it as text/plain. Neither Firefox or Opera will accept that, so you need to fix that. Second, you need to embed the video in an actual HTML page, not just point the browser to it. A page with just <video src="video.webm" controls></video> will be enough for testing. (We will eventually handle navigation directly to video files just like for images, but it’s not a high priority.)
Thanks, Philip. So how do I configure my server to use the MIME type video/webm for .webm files? Is that something I can do?
If it’s an Apache server I recommend having a look at http://diveintohtml5.org/video.html#video-mime-types If you’re not in control of the server then hopefully using a .htaccess file should be enough.
Will Opera/GStreamer be getting any benefits from Googles new WebM code drop?
30% decoding improvement performance sounds tasty!!!
Sure, once we upgrade to the latest release we’ll get that 30% improvement too 🙂