In Membrane environment, basic entities are called Elements. Every Element is created to solve problems like converting raw audio to encoded format, reading data from a file and passing it to other elements or sending data from an application via UDP socket. Elements have pads (their inputs & outputs) and capabilities, which define a type of data that is expected. Multiple linked elements can be enclosed in containers called pipelines.
Membrane Framework was created to provide support in the development of multimedia processing applications. Below are some use cases of our framework.
programming tools for broadcasting
24/7 in a dozen radio stations
real-time mixing, high availability, distributed architecture
The Membrane has been used in production by RadioKit since 2017.
A case study of live video streaming from iOS devices with Elixir & Membrane Framework
Membrane Team combines knowledge, passion for coding & industry expertise.
Below we’ve provided a bit of information about Membrane Framework.
GStreamer has been a great inspiration for us regarding the abstraction layer it provides. However, we have decided to take a different approach to implementation. First of all, GStreamer, in our opinion, would not excel in highly scalable applications due to its monolithic design, dependency on GLib with its MainLoop and lack of Virtual Machine giving the benefit of real-time inspection as well as failure isolation preventing a single error from causing total system shutdown. Membrane is written in Elixir which means it is based on battle-tested Erlang VM. Moreover, GStreamer has grown big - it supports virtually every format being in use – but that functionality comes at the expense of quality. We prefer to maintain a smaller set of higher quality elements. We also have chosen a different release strategy. We don’t bundle plugins in huge packages like GStreamer does, but each plugin is a separate library you can easily link to your application without adding too many dependencies.
FFmpeg is a vast library, containing multiple stream processing tools. It exports a low-level API in C, thus making it possible to do almost anything with multimedia, it requires significant effort to develop various non-trivial solutions, such as establishing a complex live stream. Membrane Framework provides a high-level API in Elixir, which enables it to make linking following elements comfortable and convenient, taking care of fluent data flow, concurrency and fault tolerance. While supported tools are not as numerous as in the case of FFmpeg, making them work with one another is straightforward. The way they cooperate is configurable, and if needed, new ones can be painlessly implemented. It is also possible to wrap functionality of other libraries, such as FFmpeg, in Membrane elements.
Elixir is a young language, but it has already proven that it can easily bring benefits of the underlying Erlang VM (BEAM) to the masses. BEAM is one of the best VMs available – it is well tested, has excellent design. There are several benefits such as preemption, per-process garbage collector, etc. that are hard to find anywhere else.
Yes, the Community Edition of Membrane Framework is published as an Open-Source project under Apache License V.2.0, and therefore, it is free to use. On the other hand, some unique needs of customers can be fulfilled with the Enterprise Edition of Membrane Framework. Our team will gladly fulfill any challenging requests for an additional fee.