Membrane - a new framework for multimedia processing

I am pleased to announce an initial release of the Membrane Framework - an Elixir-based framework with special focus on processing multimedia streams.

It is heavily inspired by architecture of GStreamer but aims at providing implementation of way higher reliability and scalability as well as to avoid many of its shortcomings.

We have just released v0.1 which contains just small set of elements that can be used to do simple audio processing, but a great effort was put into its core in order to lay down a good architecture for developing it further. v0.2 is planned to be available in 2-3 months and it should support video processing including patterns for easily implementing hardware acceleration and tons of other improvements.

I hope in the long run we’re going to provide a seamless experience for developers involved in multimedia processing and another boost for the quickly growing Elixir community.

It is already being used in production in broadcasting software that aims at 24/7 availability for a few months.

More information:

PS. Just a few words about credits: it is a spin-off from RadioKit and it is now developed and professionally backed up by the Software Mansion.

Looking forward for feedback,

Founder,

Marcin Lewandowski

43 Likes

Ooo, this looks quite useful!

4 Likes

Looks really good! :023:

Love the name, logo and branding too!! :003:

2 Likes

Hi folks!

In case you were wondering how Membrane Farmework has evolved in 2019 so far, here is our latest Update on Q2 and Q3..

The most important news are of course new releases, including some breakthrough features such as

  • A/V stream synchronization
  • improved way to define pads
  • new testing API

and many more, not to mention new additional Packages.

All news regarding Membrane can be found on our Blog

Stay tuned for Q4 update soon!

Tomasz Zawada
membraneframework.org

11 Likes

Sounds like some really neat stuff in there. Is there a high-level overview or examples of the types of programs that could be built with membrane?

1 Like

We’re currently building a Twitch clone using Membrane. In such case, Membrane handles all server-side processing and recording of the live streams.

In the roadmap we have an apps for managing CCTV recordings (automatic analysis of the stream, cutting out the most interesting parts etc.).

8 Likes

Oooh, that’s pretty neat. So it seems it would be possible to build a video chat based on Membrane also.

Indeed. We’re working on WebRTC. Currently we have a working signalling server, so you can set up a peer to peer video chat in the browser, and we’re preparing Membrane to be able to act as a peer.

4 Likes

Can Membrane be used in a Nerves system to broadcast the video from the PiCam over the network and maybe to online streaming services? Like an always-on-stream?

2 Likes

Sounds like a good use case for Membrane :slight_smile:

4 Likes

Nice, I might actually try that in the next year. Now I know who to bug if I run into difficulties. :smiley:

1 Like

Hi everyone!

Latest update on Membrane Framework for Q4 2019.

The biggest change is the introduction of bins which enables creating reusable modules and further optimizes your workflow with Membrane.

Be also sure to check the new packages.

Let us use this opportunity to wish you all the best in 2020! Enjoy exciting projects, new ventures, happy users and most of all - enjoy using Membrane!

Tomasz Zawada
membraneframework.org

9 Likes

Hi, smolcatgirl here!

I tried setting up something simple with this project to learn about the project and I am getting this error:

== Compilation error in file lib/membrane_test/pipeline.ex ==
** (CompileError) lib/membrane_test/pipeline.ex:24: Membrane.ParentSpec.__struct__/1 is undefined, cannot expand struct Membrane.ParentSpec

when I have this in the pipeline file:

spec = %ParentSpec{
      children: children,
      links: links
    }

In the top of the file I have this line use Membrane.Pipeline. Please help me out here. I also tried changing to %Membrane.ParentSpec{}

Edit: here are my deps

    [
      {:membrane_core, "~> 0.4.0"},
      {:membrane_element_file, "~> 0.2.3"},
      {:membrane_element_portaudio, "~> 0.2.3"},
      {:membrane_element_ffmpeg_swresample, "~> 0.2.3"},
      {:membrane_element_mad, "~> 0.2.3"}
    ]

Thanks for your time

Hi @smolcatgirl! The Membrane.ParentSpec struct has been introduced in version 0.5.0 of Membrane Core. Bump the dependency and your code should work fine :wink:

EDIT:
Other deps need to be bumped as well, you can check out the updated guide chapter https://membraneframework.org/guide/v0.5/pipeline.html and copy-paste the snippet from there

2 Likes

Hi @mspanc, I was wondering if you had completed work enabling Membrane Elements to be WebRTC peers - I noticed your team’s work here which seems like preparation for it.

Is there anywhere I can track that work (a repo, etc.)? We’re evaluating Membrane for a large many party audio conferencing solution and I’d love to take a look, contribute, etc.

Really enjoyed your talk at the BEAM conference last year, thanks so much for your work!

1 Like

Hi @ben-pr-p, we’re closer than ever to be able to use Membrane as WebRTC peers. Many parallel elements (SRTP, Opus etc…) are in progress, and most of them are in the very last stage.

Right now, we do not have any publicly available tracker that would have clearly shown progress when it comes to the WebRTC but I think we might prepare such summary soon.

Thanks :slight_smile:

5 Likes

This would amazing!!!

Hi people, sorry if it was already explained or pointed out but am planning to create a web app that enables people to created a room, add people and play using video and audio. I don’t want to go for any of the actual solutions and would like to make my own server to process media. How can I see an example using Membrane?

Thanks!

Hi @gastonrey, if the app is supposed to work in the browser, you most likely need to use WebRTC protocol. If the rooms you mentioned are going to be quite small (at most up to ~10 people) and you need no server-side processing, Membrane WebRTC signalling server is a way to go. Otherwise, you need a WebRTC gate to connect the server as a peer. The gate is quite a big thing and we’re still working on it. For now, you can try to integrate a non-membrane solution, such as Janus, however it may be quite cumbersome.

5 Likes

Thanks @mat-hek will take a look, looks promising!

1 Like