Serious Dabbler

UCOSP – Freeseer Wrap Up

with one comment

Another term has come to an end and with it comes the completion of our project work on Freeseer. The project was a joint project with Mike Chong of the University of Waterloo. In this post I will summarize what we had intended to do, the various problems, solutions, and lessons learned, and what we had ultimately accomplished. I will also comment a bit on the UCOSP experience.

The original design of our 10 week project consisted of 3 parts:

1) Set up Freeseer to output a working RTMP stream.
2) Set up the GUI required to configure the output plugin.
3) Integrate with Youtube Live Events for one-step live-streaming from Freeseer.

Based on the initial schedule and breakdown it seemed like a manageable project. Unfortunately, like always, the actual time required was much longer due to a variety of unforeseen issues, that, in hindsight, should have been weighted more highly when creating the plan.

What ended up happening is that Mike mostly worked on the gstreamer pipeline in pygst in the freeseer plugin to output rtmp, and I mostly worked on porting the gstreamer rtmp plugin to Windows (see here). I’m sure Mike has faced his share of problems, but here are the main ones I had encountered (mostly regarding the scheduling in the project proposal).

First of all, I should have done more research into cross-platform compatibility of the technologies we were planning on using. It completely slipped my mind to check whether the rtmp plugin was available on Windows until Thanh commented, and thus the time needed to actually get the plugin ported to Windows was not part of my calculations.

Secondly, I should stop trying to use Cygwin for everything. Unfortunately, it seems like Cygwin is a setup that is not suited for developments of medium to large sized projects with many dependencies – almost surely some dependency package for Linux will fail to install, and interfacing with Windows dlls and exes from Cygwin is not such a great thing (I have wpython and python corresponding to the windows version of python and the linux version of python, for example). Trying to get things set up on Cygwin only ended up wasting a lot of time and getting nowhere.

Thirdly, I did not consider the time required to set up a test server for the rtmp streaming. I had assumed that it should be easy to set up an rtmp server that just relays the stream (and it should be!) but that ended up being a very wrong assumption. I spent easily 2 weeks struggling with Flash Media Server before finally Mike got a Red5 server running for us. Well, it didn’t help that because I was working with a plugin that I ported myself, I was not able to easily tell whether it was the plugin that had a bug or if FMS really was not working well for us.

I guess the main takeaway is, always plan for the unexpected. Other than that, I believe our project was successful. We were able to output a working stream from freeseer, through the server Mike set up, and finally receive the stream locally through VLC. Thus, we had fulfilled the first two of the three goals, and I am very satisfied with the result.

Future work is to optimize the streaming to reduce latency and improve quality, to test out the stream with Youtube Live Events, and to create an integrated UI for interacting with Youtube.

On the UCOSP experience itself, since it was not my first time working on a software project or using git, I did not find it much different, except for the fact that everyone lived very far from each other. I definitely enjoyed the freedom I had in this project, freed from the confines and requirements of a structured software engineering project, and able to work on a real world application with real world technologies. Most of all, I enjoyed the lack of having to attend lectures two to three times a week! I would highly recommend everyone to try out UCOSP.

I’m undecided if I want to continue working on Freeseer afterwards, because I seem to have a lot planned next term, so we’ll see.


Written by jonathanasdf

November 30, 2012 at 7:15 PM

Posted in Programming, School

Tagged with ,

One Response

Subscribe to comments with RSS.

  1. I lol’d at your second point, “I should stop trying to use Cygwin for everything.” I think someone at the code sprint mentioned to not use Cygwin since it looked like it was complicating things (or something along those lines).

    Anyway, great post and thanks for all your hard work! If you’re too busy to contribute next term, you can always join us another time.

    P.S. I’ll look for you on the live stream of the ICPC finals.

    Dennis Ideler

    December 1, 2012 at 12:08 AM

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s