In case you don’t know telegony is a belief that all offspring of a female will look like her first partner (there’s nothing wrong with it unless you know biology). In the metaphorical sense it means that the original circumstances of the company or project founding (i.e. who, with what goal and such) will affect its development to the end. Like there was a small company producing so-called “ever sharp” pencils that’s still afloat after a century—but who cares about pencils from that Sharp Corporation nowadays? Anyway, let’s talk about various opensource multimedia projects and see how it applies to them.
FFmpeg. The project was created by FFabrice Bellard who’s known for his brilliant software with horrible source code (he’s won IOCCC twice after all). FFmpeg obviously follows the suit and still has a lot of horrible code that people can’t clean up to this day. And yet it’s as ubiquitous as LZEXE packer back in DOS days or even more.
MPlayer. The project was originally created because its author could not find a video player that would support MPEG-2 video and AVI codecs at the same time—so he hacked something from libmpeg2
and avifile
. And what do you know, after all these years it strives to play everything by means of ugly hacks. Those include but not limited to: catching SIGSEGV
during MPEG-2 video decoding and restarting decoder, patching loaded VfW/DShow/DMO decoders based on .dll name, calling private internals of bundled FFmpeg.
MPlayer forks. mplayer2
was created by Uoti Urpala who had his disagreements with the original MPlayer team and made his own version with streamlined build system and throwing out many hacks of the original code. mpv
seems to follow the suit and I guess if the next fork appears it’ll be also done by a disgruntled developer who wants to throw more hacks out and make it more average-user-friendly.
libvpx. Originally (VP3 times) it was a codec using rather well known coding methods, definitely not state of the art, with a confusing source code that was opensourced without any format description beside source code because the company didn’t care about it but wanted it to become multimedia standard anyway. The company name was On2 then, mind you! But if you look at VP8 or VP9 nothing has changed much (I still have the impression that VP9 format specification was written by engineers from that company implementing hardware decoder and benevolently edited and released by Baidu when they don’t care about VP9 any more because there’s VP X coming).
Derek B. A brilliant reverse engineer who did his first codec (VBLE) by struggling with disassembly and then asking the codec author for the sources. I’ve mentioned before that his best decoders were REd in a very original way: by declaring the intent to do that and waiting for somebody else to do it. Obviously not a project but his story fits so I thought it’s appropriate to mention him here.
VLC. As you might remember the project started to justify a high-speed LAN in some French École Abnormale (because it was not the only high school in France named École Normale in case you wonder). And what do you know—the project went fine as a business project and does so till this day. Though if they ever switch from Discworld-themed naming to Ubuntu-like they should go with Glorified Gstreamer. Why? Because while venerable old projects like XAnim, Xine or MPlayer demonstrated high-class by having their own codec reverse engineering work, VideoLAN went the way similar to the previous story—waiting until somebody does it elsewhere and then announcing support for that format.
Moral of the story: think before you start a project, people may make fun of it afterwards.
To be more charitable, I sincerely believe the horrendous designs that many multimedia players evolve has more to do with having to incorporate more and more format edge cases. Start with a nice, linear multimedia player, that can play MPEG and AVI, then have to deal with transmitting ExtraData chunks of different varieties around, then handle multiple audio tracks, then subtitles, then DVD or QuickTime menus, and then some header-less format that requires a special command line option to properly play because there’s no header to automatically detect…
It’s a tall order, all in the pursuit of the almighty all-in-1 multimedia player.
You are becoming spreading useless rants “hero”.
Well, I have two objections to that statement. First, I’ve never been a “hero” or hero (that’s not my type of activity and hardly anybody reads this blog for me to be any relevant). Second, I’m not “beginning”—about half of my posts belong to the “Useless Rants” category (and half of “Uncategorized” posts too).
And it would be wrong to expect anything different from me, especially nowadays: my work is no longer relevant, the only interesting codecs I know take more than my threshold of patience to RE and I don’t know what to do next (and I don’t feel the urge to do anything either). So I don’t have non-trivial technical stuff to write about, I’ve not accumulated enough experience to write something new about trains, I have neither experience nor desire to write memoirs and all that’s left is venting out my frustration. And that’s what I do.
No need to go and insult people. Projects fine but it’s hurtful to insult people directly.
The projects are not fine or I’d not mention them here. And sometimes people are the problem too but I hope I avoided baseless slander (if not please point it out and I’ll correct it). I don’t like people in general though.
I was an early user of Xine and MPlayer. At the time they were a pain to compile and extremely unstable.
VLC was a breath of fresh air. VLC did a much better job with their build system and dependency management. VLC used a mature UI framework (wxWidgets) and standard widget which made it much more stable than Xine.
The VLC team Created the best media player on multiple platforms. It was a pretty big advancement for desktop Linux.
They deserve a lot more credit than you are giving them.
Funny thing—personally I never had much problems with MPlayer build system and there’s very streamlined build process for mplayer2/mpv. And VLC people admit their build process is still complicated (I’ve never tried to build it myself though). Also I never cared much about UI so MPlayer is fine with me.
It all boils down to your experience—from purely user experience VLC deserves more credit than I gave it indeed but since it’s my experience I judge it knowing how much they contributed to open-source multimedia in general (hint: very little) and thus it got what it got.