Video transport over erlang/elixir

Hello everyone. I am very new to Elixir/Erlang but very excited about it. I have been watching and reading about it for few months now and i am planning to start building my first web app very soon. The app i want to build is (surprisingly) for audio/video communication. I have fairly good idea how i want to achieve it but also for one of the functions i need some assistance.

My plan is to use freeswitch for the presenter audio/video part. However there are users that want to have multiple cameras during their events. I would like that to be external service to freeswitch to preserve the CPU for the presenter video/audio.

So my question is - could someone guide me where i can educate myself in transmitting video channel and ultimately the goal will be to create video sfu in Erlang/Elixir? Is it a good idea or a very bad one? I know about Janus and many other open source, free and paid options. I would like to try building it with Elixir/Erlang if that is possible and wise.

Any guidance is appreciated. Please keep in mind i am really a newbie but keen to learn a lot.


While I am not well-versed in the topic of audio/video streaming I have a memory that people in this community are working on something very closely related:

I’d start there and see if the library is viable for my own planned usage. There might be others but I am not aware of them. It’s likely worth it to do a deep dive in GitHub / GitLab / BitBucket and see what you can uncover. Hopefully others chime in and link other related works.

One downside of the Erlang/Elixir ecosystem is that specialised libraries are hard to come by and usually people have to roll their own. But, the runtime is definitely a very capable orchestrator and even if you end up outsourcing the audio/video streaming part to something lower-level – say, Rust libraries (which you can interact with through the excellent Rustler bridge) – you can still benefit a lot from the BEAM VM’s runtime. It can coordinate for you, restart streams if they get disconnected, periodically poll for degrading quality and re-adjust, and what-have-you. It’s excellent for such scenarios.

If you need help on, say, Rustler, or OTP in general (orchestration of services, supervision trees, auto-restarts etc.), give us a shout and we’ll be happy to help.


Thank you Dimitar. I will be looking at these and will decide what way i am going to chose later on.

Thanks again.