ABYSS - the genesis of a fully free streaming software package used at LibrePlanet
"Make it better every year."
As an FSF intern during the winter and spring of 2016, I had the opportunity to be around FSF's tech team during LibrePlanet preparation, and we spent a lot of time making the streaming and recording work as well as possible so that people who were not in each talk could still watch it (all the recordings are already up on media.libreplanet.org).
Each room at the LibrePlanet conference has a streaming set-up staffed by a volunteer. There are many skilled volunteers, but we need to minimize the risk of failed recordings due to over-complex or error-prone software systems. So, in order to improve streaming we decided to quickly develop a GPLv3 program to provide a seamless interface for an audio and/or video streaming console.
As a newcomer to the free software community, I have been looking for ways to contribute by coding. The huge amount of projects in progress have overwhelmed me a bit. So, when it was proposed to create a piece of software to be used directly by the community at the conference, I was full of joy about beginning a project.
How it works
It all began with creating a new prototype, named ABYSS Broadcast Your Stream Successfully (ABYSS), for LibrePlanet 2016. The first goal of ABYSS was to move past command-line based streaming, by automating what we could. The second goal was to provide audio/video feedback for the volunteer at the station to monitor the streaming. I chose to write ABYSS in Python 3.4, using the Gstreamer 1.0 and GTK3+ modules.
Gstreamer pipelines are the core element of ABYSS. They allows ABYSS to behave slightly differently according to user actions or loss of the feed. With the GTK3+ graphical user interface, it is easy to switch from test mode -- for testing the audio and video chain without broadcasting -- to stream mode, which broadcasts the feeds. In the event of main camera source failure, ABYSS changes the pipeline to fetch the video source from a backup USB webcam and then starts broadcasting again. In addition, each stream is actually recorded locally in three forms to allow easy post-processing: audio-only, raw-video, and audio-video.
This early version (which I consider v0.1) was definitely a proving ground for ABYSS. It was used in each room during LibrePlanet (except for the Snowden opening keynote) and it performed well despite the relative lack of testing and some network problems at the venue.
The next version
ABYSS version 1.0 will integrate plenty of new functionality like:
- better input/output devices management
- a complete strategy in case of main feed loss
- more resilient GStreamer pipelines
- a control-room mode
- a monitoring mode
The last two bullets are the most visible ones for users. Control-room mode will allow a user to effectively control several streams from a single computer. This will be an extension of the functionality of ABYSS 0.1. The monitoring mode, unlike control-room mode, will be a completely new functionality. It will allow users to simply watch what is being streamed on the computer next to the camera, so that user can check the framing/focus of the camera, for example, instead of worrying if feeds are even being broadcast. This mode is designed to cooperate with control-room mode. The stream will be launched/stopped only from the control-room computer and monitoring mode users will be free to focus on improving the quality of the stream by focusing only on the video and/or audio as inputs and leaving the remaining operations to the control-room mode user.
For a smaller set-up, the control-room mode will work as a standalone. Nevertheless, the real advantage of using computers for monitoring and one computer as a control-room is that you can centralize heavy duty feeds processing on one powerful control-room computer. The more powerful your workstation is, the better the stream quality will be.
Hack on ABYSS
If this post whets your appetite you can download ABYSS at https://vcs.fsf.org/?p=libre-streamer.git;a=summary. Disclaimer: this is version 0.1, tested only on x86 computers running Trisquel 7. This is not a package, and you will probably have to download some other software to get it running.
I would like to end here with a special thanks to some people at the FSF: Lisa Marie Maginnis, senior sysadmin, for proposing this project to me and letting me do things my way. Ruben Rodriguez, senior sysadmin, for providing a working pipeline for LibrePlanet 2016 and giving ideas and advice on the upcoming ABYSS 1.0. And John Sullivan, executive director, for giving me the opportunity to do an internship at FSF headquarters. Nothing would have been done without them.
See you in one year at the next LibrePlanet, when ABYSS 1.0 will emerge from the depths.