For the last two months I have been spending a lot of time working on a new program called, for lack of a better name, Livestream Processor. The plan is to be able to process video, mostly from livestreams, in a few specific ways. The inspiration comes from my Ludum Dare livestreams, I want to to make a timelapse out of them so I can upload them on youtube.
Doing that requires three steps:
- Download the videos from twitch.tv
- Concatenate all the video parts together (twitch.tv splits videos up into two hour segments)
- Speed up the video by quite a bit to condense 48 hours into ~15mins
If you were to check the repository, you would notice that my commits aren't very frequent and if you were to compile and run the program you would notice that it doesn't do very much yet; even though I said I've been spending a lot of time. So far it only concatenates videos.
This is because a lot of my time was spent, not coding, but setting up a few build tools so I can do it 'right.' Essentially, when large projects are put together, they have fancy scripts put together to download all the dependencies and compile then package the finished product for all of the supported platforms with no intervention. I decided that I wanted to learn how to set up something like this and ended up re-working my build system several times before finally getting one working correctly. I didn't know what I was doing and now I do.
If you're interested in the full story, I started off saying I wanted to do this project professionally, with test cases and ant. I quickly learned that I need something to manage dependencies since I'm using two different libraries with multiple downloads depending on the build platform and that's something that ant can't really do on its own. So I started looking into Ivy because one of my dependencies, Xuggler recommended it in their install instructions.
At that point I started setting up Ivy for my project, it took an entire weekend of reading documentation and searching on Google. Eventually, after asking how to do multi-platform builds and how to manage different dependencies for each platform on freenode's ##java channel, I learned that my project was a bit too complicated to set up in Ivy and I had to move to Maven.
With that knowledge in hand, I was ready to spend another weekend setting up Maven and hopefully it would work this time. The thing is I ran into trouble in the same place I ran into trouble with Ivy and didn't solve my problems in just one weekend. I then spent the next weekend fixing the build scripts which I actually managed to do fairly quickly. However for my second dependency, SWT, I had to make my own Maven repository since the only public repositories that even have SWT in them have old versions and I needed the new one due to a problem I was having with running my program by simply double clicking it. After I got that set up, my build scripts were essentially final and I had a super fancy automated dependency management and packaging system.
I'm writing this post now, because I have essentially all of the technical issues worked out. Which means now I can focus on the features, which are admittedly fairly trivial to implement. I really don't want to abandon this project, but I do want to move on to something else.