July 6, 2015 - Anton Obzhirov and Julien Isorce
Announcing a New Gstreamer Backend for Chromium
We’re excited to announce the open source release of a built-in GStreamer backend for Chromium that is now available on GitHub. This is the result of a research project that was kicked off last April by the Web Engine R&D team located in the Samsung UK office.
One of our initial goals for this project was to make it open source, but we decided we needed to get basic playback working with sandboxing first in order to generate interest after its open source launch. Our solution is the first of its kind and enables all of the versatility and flexibility of GStreamer on the Chromium media player. We seek involvement from any company, organization, or individual that uses GStreamer as their main multimedia engine.
How Did We Build It?
Our design follows the sandbox requirements of the Chromium infrastructure, meaning it can only access the resources that are vital to its operation. Specifically, the GStreamer pipelines live in the new Media Process which filters all system calls and limits access to the platform resources. For example, this backend can’t open a network connection to the outside.
Video frames are rendered using OpenGL and the calls are forwarded to Chromium’s GPU Process through a command buffer. This is all wrapped into GStreamer to reduce the complexity of using built-in gst elements. In the end, playbin is nearly the only element that’s accessed through GstPlayer: the new thin layer. It’s possible to enable and disable this backend in the chromium browser settings, and when it’s disabled the chromium browser will use the default media backend.
Where We’re Going, and How You Can Get Involved
From a technical perspective, our next step will be to put the needed plumbing in place to support MSE in order to play YouTube videos. Eventually, we also plan to add zero-copy decoding support in later stages of this project.
The ultimate goal of this project is to make GStreamer a fully-functional choice for a media player in the Chromium Browser, but it still has quite a ways to go. We want this to be a collaborative project, so we are open to discussion and are willing to reconsider any part of the design. If you’d like to get involved in the development of this brand new project, feel free to join us in our discussions about its architecture. We’ve published our roadmap on GitHub, and we are more than willing to expand or change it’s scope.
If you’d like to learn more about this project, we’ve thoroughly documented its API and architecture on Github. You can report any bugs or problems on our issue tracker. We’ve setup a mailing list for communication: Chromiumgstreamerbackend[at]lists.s-osg.org. Finally, we spend much of our time on the #gstreamer and #chromium IRC channels on freenode, look for capOM (Julien), and aobzhirov (Anton).
Meet Our Guest Authors
Anton Obzhirov is a multimedia and graphics expert/team leader who works for Samsung R&D Center in London. He has always enjoyed programing and dissecting challenging video and graphics algorithms for various systems and embedded devices. Anton saw open source software as the best way to enter the innovative technology community, and he contributes to the WebKit and GStreamer open source projects. You can find some of his recent work on GitHub.
Julien Isorce is a Senior Software engineer who specializes in media and graphics for the Samsung R&D Center in London. He always enjoys new challenges and thrives in cutting-edge development. He is an evangelist for open source software practices and standards, and is a co-maintainer of the GStreamer GL library. His long term goal is to develop leadership of the entire Linux graphic stack from metal to application in an effort to provide the best user experience possible. He recently contributed to a project aimed at improving browser media playback on the Raspeberry Pi.Image Credits: Christophe Dumas -via Wikimedia Commons
Image Credits: Christophe Dumas -via Wikimedia Commons