A few weeks ago the Guru saw fit to defend AVI’s honor. I thought this would be a good opportunity to pen this ode to Apple’s QuickTime file format. As many of my open source multimedia brethren well know, I’m QuickTime’s biggest fan in our little community.
The feature of QuickTime that I have always liked best is the simple fact that you know that the metadata block contains all the information you need to know in order to play it completely. It’s a trade-off, though– traditionally, this feature has made QuickTime somewhat less resilient to corruption. But if you do have a complete metadata block (moov atom), you know you will have complete audio and video codec information and timestamps as well as all keyframe locations. I especially like knowing where the keyframes live since it makes random seeking so much simpler. (It was also critically important when I first started writing demuxers and thought that I needed to develop a full profile of the multimedia stream before beginning playback; what a mess that was.) Certainly, sorting out the frame timestamps is a little tricky. And that’s not even taking into account that sinister wart on the spec named edit lists. Ugh. But console yourself with the knowledge that most files don’t have those.
Many attack QuickTime as being absolutely gargantuan. The PDF of the spec is hundreds of pages and it’s not even complete as it does not consider any of the ISO MPEG extensions. The spec is loaded with all kinds of stuff you would never think to use, like sprites, MIDI, and VRML. Fortunately, no one cares about these either so implementing them becomes a non-issue. Sort of stick-your-head-in-the-sand approach to spec implementation. Eventually, I hope to have a more relevant and accessible spec written up at the MultimediaWiki.
As anyone who has downloaded QuickTime movie trailers since about QT version4 knows, QT supports all kinds of interaction and multiple audio/video tracks (it probably supported these features all along but v4 trailers really started taking advantage of them). In fact, if anyone understood how the features worked based on the spec, QT’s interactivity could probably be used to rip and encapsulate an entire DVD, complete with menus and subtitles, and obviate the need for such efforts as Matroska, NUT, and RatDVD.
I like QuickTime’s longevity. I am not sure exactly how long the format has been around but it lives on to this day and will not go away anytime soon. In fact, it has been around so long and there are so many variations, that they’ve had to add a new atom called ‘ftyp’ which appears at the start of a QT file and specifies which subset of the standard the file conforms to. As of this writing, the Apple QuickTime MultimediaWiki page lists 14 different ftyp’s. We’ll get those all documented in the Wiki sooner or later.
I’m extremely proud of my QuickTime work for the xine project. I think it’s the supreme QuickTime demuxer in any open source multimedia program. I even have one movie trailer that my demuxer can play that current versions of Apple’s own QuickTime Player can’t handle!
Why do I love QuickTime so? I don’t know, I guess I just love the format in the same way a mother irrationally loves her obese, smelly, underachieving, video game-addicted, no-girlfriend-having son (that reminds me, I should call my mom). QuickTime was one of my primary inspirations for studying multimedia hacking. I have long enjoyed downloading QuickTime movie trailers as a surrogate for actually watching movies. When I started using Linux full-time in 1999-2000 I wondered why Linux multimedia playback support was lacking. I started to investigate, one thing led to another, and here I am, documenting everything I can about multimedia technology and still championing QuickTime against all criticism.
In fact, I think the new cliche that will come enter common multimedia knowledge will be, “Those who do not understand QuickTime are doomed to reinvent it… poorly.”
Note: NUT is not meant to have interactivity, menus or any of that other snazzy stuff.
Really? I thought all of that was in the NUT charter. Maybe not in the first iteration.