Saturday, March 30, 2013

Infiltrator E46 - Video Playback

Those of you who checked out my Infiltrator pre-alpha demo video awhile back probably know that I had a spiffy animated background with circuit patterns on the main menu. Those of you who didn't: I had a spiffy animated background with-you get the point. I bet you guys didn't know that I don't have that anymore, did you? I'm hoping to get it back at some point, but the problems that led to its removal are deep and annoying.

Let's talk about them!

The library I use to handle all of the media and perhipheral IO is called SFML. I like it a lot. It is thoroughly featured, has OpenGL support(for making full use of graphics cards), is very fast, easy to use, and designed in a way that quite well complements this project's design. It is missing one pretty important feature though. That feature is encoded video file loading and playback.

If I want a cutscene, background animation in a menu, level with a long animated pre-rendered background, or anything like that, the best solution is use of encoded video files. Now while SFML does not have anything to help me do this by itself, there is a community-accepted SFML dependent library called sfeMovie that does. So I get me the sfeMovie source(because the binary installation is a broken joke) compile it, incorporate it into my game, and immediately get a game crash. I can't even start my game up without it dying.

The console output tells me that it can't find a certain part of libav, a library used for video encoding.  Thus, the program cannot continue because that library is missing extra code it needs. Examination of that library tells me that it's a-okay though, and at a fairly new version. Why is my program now crashing? Because sfeMovie doesn't use the version of that library that you have installed on your system. It ships with source code to automatically compile it's own version of that library and then install it over your current one.

This is stupid. Like, seriously. It is not an intelligent decision, it is a foolish decision. This isn't the kind of stupid that your big brother calls you when you argue with him and he can't hit you because adults are watching, it is the seriously naive and detrimental kind of stupid. What the bork were they thinking?

Allow me to elaborate: sfeMovie was created by a single programmer. This programmer decided that they were fed up with having to install libraries before certain programs could work in Linux, so they would ship this program with their own versions of the libraries it needed the way most Windows programs do it. But Linux is not designed to be used that way, and that is one of the reasons I like it better. When a program has it's own special version of a library, then the programs can't keep track of which is whose. Your libraries are all over the filesystem, and resolving library issues is a real pain in the face. I won't elaborate on what that pain is like though, because I think you get the point.

In the end, I gave up trying to make this library work. Sometimes I would get it working fine, and then it would break after I rebooted. It is simply not worth the extreme effort, largely because I can't ship my game like this because target systems won't be meticulously hacked up to make this single library work.

What is super aggravating about this is that I found a comment from years ago to the author about this project, complaining about this exact thing. The author responded with what I complained about in the two paragraphs ago, clearly stating that things were going to stay that way. So now I've shelved Infiltrator video playback. I will be concentrating on the assault master... again.


No comments:

Post a Comment