Google Video: Pragmatism at work
Google loves Open Source solutions, the cost savings for them are certainly immense. The original implementation of Google Video was using a custom plugin which was based on VLC. VLC in itself is heavily lending code from the ffmpeg project to decode and encode a number of video streams, an effort originally driven by Fabrice Bellard, while most of the real interesting stuff is now done by Michael Niedermayer. ffmpeg incidentally has support for Flash 7 video, supporting the .FLV and .SWF file formats. So the step from going from a VLC based solution to using FLV was probably a small one. At least on the encoding and other server side tasks.
What Google was really lacking with the VLC plugin is in my opinion penetration and a stable client. I tried the VLC plugin and ran into some minor problems on some machines, making me think it would have taken major engineering efforts to make it really stable (granted the Flash Player has its problems too, although more and more problems are fixed as we go along). IMO these are probably the main two reasons Google picked Flash. I do not think that porting the VLC plugin to Mac or Linux would have been such a big deal since the NetScape plugin API is supported on all of them.
Another small issue could have been the license fees which come with encoding MPEG-4 and MPEG-2 streams. Google did not use these format and actively disabled handling of these codecs. Still, the source code for encoding with non patent encumbered file formats is pretty much shared and intermixed with the MPEG-4 and MPEG-2 code, and so probably legally questionable in some countries. Do take my word for it though, this is just an assumption.
There are more reasons though why using Flash Video makes sense for such a large undertaking I think. One of these is that the .FLV file format is by design using the KISS (Keep it simple stupid) approach. It's neither offering the high fidelity or the flexibility file formats like QuickTime or Windows Media offer. But it does what it does well and that is playing back simple video streams with some meta information. In fact it's so simple that was able to write a perl script in less than 20 minutes which determines the length of a .FLV file, not having touched Perl for a really long time. Some customer had troubles interpreting the public FLV file format specification, so this helped them tremendously, they ported it to Java though for performance reasons. ;-) With some simple changes this can be modified to do splitting, merging and many other tasks.
As to Google not using the Flash Media Server, I got to give them some slack. Their whole backbone is probably based on serving HTTP streams, so not handling RTP at this early stage makes somehow sense. I hope though that at some point they'll feel more comfortable with Flash and see the benefits of going RTP once more complex client experiences are planned. On my side I would love to see Google Mail offering the ability to record and view video messages and Google Talk could easily be integrated into that experience also. Flash has everything you need to do so, on most of the common platforms. Certainly on more platforms that are currently supported by Google Earth and Google Desktop ;-) And new ones will be added too...
