GStreamer Conference 2019
by Pablo Marcos
We attended the 10th GStreamer Conference and its following GStreamer Autumn Hackfest from 31st October till 3rd November. Both took place in Lyon, France, and we at Fluendo sent part of our development team to assist the show: Marek Olejnik, Nacho García, Manel Jimeno, Andoni Morales and myself.
First of all, a huge thanks to everyone involved in the organization of both events. Organizing such an endeavour for so many people in a successful way is a big challenge and never easy. It involved stages, stands, volunteers to assist people, food and recording of the talks. So, credit where credit it's due. Also, I would like to thank all the sponsors and speakers who made this experience possible. We participated as a gold sponsor and we gave a talk about how to extend Cerbero, the build aggregator for GStreamer behind the curtains. You know, that software that brings all the pieces together making sure dependencies are satisfied across platforms and making sure the final product is compiled and packaged properly.
The conference was kicked off by Tim-Philipp Müller with GStreamer state of the union. The main points I took from this talk are the following:
What's already on master:
- 1.16 was released in April 2019 after moving to GitLab and 1.18 is expected before Christmas or most likely in Q1 2020
- Autotools has been completely removed (yay!) in exchange for Meson. So, the coming 1.18 will be Meson only
- Switch documentation from gtk-doc to hotdoc.
- WebRTC has already landed to GStreamer, to enable streaming video to web browsers
- AV1 video codec support
- NVCodec: nvdec + nvenc merged into a single plugin for video encoding/decoding for NVidia
- Browser source. Capture a video page as a video stream with OpenGL acceleration
- Latency, RTP, MPEG-TS, RTSP and Vulkan improvements
- HDR video
- Windows improvements: binary packages built using MSVC with build checks on CI
- Additions and improvements to GStreamer Editing Services library
- GStreamer Rust bindings + plugin modules now officially upstream
What the future holds:
- SCTE-35 support in MPEG-TS library and muxer/demuxer
- New dash sink element in the pipeline
- More Windows improvements: Direct3D gst lib? Windows Media Foundation elements? Native Cerbero builds on Windows
- Overall performance optimizations
- RTMP. New RTMP elements?
- More Rust in the future
- Make it easier to write "simple servers"
- Stream API
- KLV, metadata for video
- Make hardware-accelerated video encoding/decoding more robust, more automatic and less painful
- Do more with tracers
- Discussion about having a proper forum. Not only mailing list and IRC. Something like Discourse
You can take a look yourself at this and the rest of the presentations on the GStreamer Conference video archive. Also, you can check all the talks along with their descriptions here. I can't enumerate them all, but I found extremely insightful the talk from Edward Hervey titled HDR: Seeing the World As It Is. Also, I think the narrative of Vivia Nikolaidou behind the bug tracking story was very compelling in GStreamer Bug Extermination Techniques. As usual, Nirbheek Chauhan entertained us all with his GStreamer, Windows UWP, and Firefox on the HoloLens 2. It caught me by surprise the number of limitations to develop Windows UWP.
Our talk was given by Andoni and myself. It was called Extending Cerbero to build and package products based on GStreamer. You can check out the video here. We did our best to keep it casual and as non-boring as one can do when talking about build systems. So yes, it does include lots of gifs and a few bad jokes.
Long story short, we wanted to provide some background about the problems we are trying to solve at Fluendo due to the heterogeneous systems we work with where most of the time we need to compile everything from sources for the different platforms we support to be able to hotfix and patch as fast as possible. Having said that, we went into how you can easily extend Cerbero to add custom recipes, commands, create packages, deploy and whatnot. The main idea is to reuse as much code as possible by inheriting wherever it's possible. As a summary, I'd say: it's Python and the architecture is simple, so extending it is quite straightforward.
The last part of the talk presented something we have been working on lately. It's called fridge. As you may be aware, Cerbero's naming goes with kitchen-related stuff. So, there are recipes (dependencies) cooked (built) in the oven. The fridge is the place where you store the meals (packages) once they are cooked. Fridge aims to solve one of the problems we face every single day: compilation times. Especially on Windows. Oh my, compiling on Windows using MSYS and autotools is maddening. Using fridge, we were able to reduce the time it takes to bootstrap GStreamer from 4 hours and 21 minutes to around 5 minutes and 40 seconds. A ~47x improvement. And roughly half of the time is now taken by downloading MinGW toolchain. Even though we created the merge request a while ago, we've continued working on it internally to improve it, so expect an update once the work is rock-solid.
I think I have a lot of room for improvement giving talks, but it's a start. It wasn't easy to fit 70+ slides in a 40min talk, but thanks to Andoni's contributions we got out of there alive.
During the hackfest, we contributed to the community with different tasks:
- Andoni added support for ZSH in cerbero and updated pygobject branch
- Manel, along with Andoni worked on compiling gettext-tools with Visual Studio to improve build speed
- Nacho did a little improvement in Cerbero's shell to allow quick jump into host sources directory and an addition to Meson in order to allow to specify the python executable used to run g-ir-scanner
- As to myself, I fixed asyncio calls to keep Cerbero working with Python 3.5, added the import_file and import_recipe we showed during the talk and added a new command to create dependency graphs
Wrapping it up
As usual, the best part of the experience was the networking and the interesting chit-chat that happened after the presentations in a causal way. We met people who are dealing with similar problems and exchanged ideas.
I look forward to attending more of these events and I will do my best to improve the experience we had. For instance, we could have worked on a single bigger project as a team during the hackfest, rather than picking small tasks for each one of us. I also look forward to keeping working and contributing to the community on whatever makes our lives easier. We’ve been focused lately on workflow improvements to build and work with GStreamer on Windows.Fridge aside, we've been experimenting with Windows Subsystem for Linux (WSL) v1 and v2. Stay tuned for future updates regarding that.
That's it! I leave you with a nice picture I took of Lyon :)