Hi everyone,
I’d like to share with you a new library from the Membrane team - Boombox. It’s a simple streaming tool built on top of Membrane. It’s not as flexible as Membrane, but simpler to learn ![]()
For example, receiving an RTMP stream and broadcasting it via HLS is as simple as
Mix.install([:boombox])
Boombox.run(input: "rtmp://localhost:5432", output: "index.m3u8")
Boombox also allows you to interact with media in the Elixir code using a Stream-based API. For example, here’s how to generate a video and send it to a browser over WebRTC using Boombox and Image:
Mix.install([:boombox, :image, :req])
image =
Req.get!("https://avatars.githubusercontent.com/u/25247695?s=200&v=4").body
|> Image.open!()
angle = Stream.iterate(0, fn a -> rem(a + 3, 360) end)
timestamps =
Stream.iterate(0, fn pts -> pts + div(Membrane.Time.seconds(1), 60) end)
Stream.zip(angle, timestamps)
|> Stream.map(fn {angle, pts} ->
image = Image.rotate!(image, angle) |> Image.thumbnail!(200)
%Boombox.Packet{kind: :video, payload: image, pts: pts}
end)
|> Boombox.run(
input: {:stream, video: :image, audio: false},
output: {:webrtc, "ws://localhost:8830"}
)
And there’s much more - see examples.
More info in the blog post.
We hope that Boombox will make media streaming in Elixir easier for everyone and smooth out the learning curve for Membrane ![]()
Happy streaming!






















