Skip to content
CAI
Software that uses CAICheck a score

membraneframework/membrane_demo

42.5

Weak · 18 September 2026

4k

lines of production code

Elixir

with JavaScript

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This repository is a curated collection of Elixir-based demo applications built on the Membrane Framework, designed to illustrate real-time media processing and streaming capabilities. It provides concrete examples for ingesting, transcoding, and serving audio and video via protocols such as RTMP, RTP, RTSP, and WebRTC, as well as converting streams to HLS. The system also integrates AI and machine learning features, including speech-to-text transcription, object detection, and voice conversations, demonstrating how to embed these models into media pipelines.

How it got here

2018–2019 — Repository restructuring and demo expansion

7 changes.

The project underwent a significant reorganization, shifting from a single sample pipeline to a categorized collection of Membrane Framework examples under the Apache 2.0 license. This period focused on expanding the demo library with new applications for embedded systems, adaptive streaming, and secure RTP, while removing obsolete legacy code and placeholder tests.

2020–2021 — demo application expansion

6 changes.

This period focused on expanding the project's demonstration suite with new standalone applications for RTP-to-HLS streaming, simple audio pipelines, and custom element creation. It also enhanced the existing RTP demo by adding dedicated send and receive pipelines for H.264 and Opus streams, including optional SRTP encryption support.

2022–2026 — Expansion of streaming and AI demos

11 changes.

This period focused on significantly expanding the project's demo library with new applications for live video streaming, including camera, RTMP, and WebRTC integrations. It also introduced AI-powered examples for speech-to-text, voice conversations, and object detection, alongside foundational updates to configuration and core plugin usage.

Features

Add Camera to HLS Nerves demo

Introduces a new demo application for Raspberry Pi running Nerves that captures video from a camera module and broadcasts it via HLS. The project includes the necessary Elixir/Erlang configuration, a Membrane pipeline for video processing, and an embedded web server to serve the stream at http://nerves.local:8000/stream.html.

_camera\_to\_hls\nerves · high confidence

Add RTMP to Adaptive Bitrate HLS demo application

This change introduces a new demo application that receives an RTMP stream, transcodes it into multiple adaptive bitrate variants, and serves them as an HLS playlist via a web interface. The server listens for RTMP input on port 9006 and exposes the resulting HLS streams on port 4000, where a Vidstack-based web player allows viewers to switch between quality levels based on network conditions.

_rtmp\_to\_adaptive\hls · high confidence

Add RTP video and audio sending/receiving demo pipelines

The RTP demo now includes dedicated send and receive pipeline implementations that handle H.264 video and Opus audio streams over UDP. The send pipeline reads local sample files, parses and payloads the media into RTP packets, and transmits them via UDP, while the receive pipeline listens on UDP ports, demuxes and depayloads the RTP streams, decodes the media, and plays it back. Both pipelines support optional SRTP encryption via ExLibSRTP when configured.

rtp/lib · high confidence

Add WebRTC LiveView demo application

Introduces a new \webrtc\_live\_view\ application that demonstrates real-time video streaming using Phoenix LiveView and the Membrane WebRTC plugin. The demo captures local media via the browser, processes it through a Membrane pipeline (including contour detection via Evision/Vix), and streams the result back to the client. It includes the necessary Phoenix web stack (router, endpoint, layouts, core components) and JavaScript hooks (\Capture\, \Player\) to manage the WebRTC connection and media rendering within the LiveView interface.

_webrtc\_live\view · high confidence

Add speech-to-text Livebook demo using Membrane and Bumblebee

A new Livebook example has been added to the speech\_to\_text directory, demonstrating real-time speech-to-text conversion. The demo uses the Membrane Framework for audio pipeline management (capturing input via PortAudio) and Bumblebee with the OpenAI Whisper model for transcription. It includes a custom Membrane filter that handles audio preprocessing, voice activity detection, and model inference using the EXLA backend.

_speech\_to\text · high confidence

Added RTP send/receive demo with SRTP support

The rtp location now includes a functional demo for sending and receiving RTP streams, featuring scripts (send.exs, receive.exs) that launch Membrane pipelines for video and audio. Users can run the sender and receiver locally to view a video player, or use external tools like GStreamer to send streams to the receiver. The demo also supports secure streaming via SRTP by passing a --secure flag, utilizing a hardcoded SRTP key for demonstration purposes.

rtp · high confidence

Added audio buffer counting demo with configurable interval and divisor

The simple\_element demo now includes a new Counter element that tracks incoming audio buffers and emits a notification with the count (divided by a configurable divisor) at a specified time interval. The demo pipeline processes an MP3 file through a decoder and format converter, feeds the audio into the Counter element, and outputs to PortAudio, allowing users to observe buffer processing rates in real-time.

_simple\element/lib · high confidence

Added audio mixing demo script

A new Elixir script (\mix\_audio.exs\) has been added to demonstrate mixing two WAV audio tracks into a single AAC file. The script uses the Membrane pipeline framework to read two input files, parse them as WAV, mix the audio streams (with the second stream offset by 2 seconds), encode the result using the FDK AAC encoder, and save the output to \output.aac\. This requires Elixir and the FDK AAC library to be installed.

_mix\audio · high confidence

Initial release of the Simple Pipeline demo

This change introduces the \simple\_pipeline\ demo, a standalone Elixir project that demonstrates how to build a Membrane pipeline to play an MP3 file. The demo includes the necessary project structure (\.formatter.exs\, \.gitignore\, \config/config.exs\), a \run.exs\ script for execution, and the core pipeline implementation in \lib/membrane\_demo/simple\_pipeline.ex\. The pipeline reads an MP3 file, decodes it using the MAD decoder, converts the audio format using FFmpeg's SWResample, and outputs the audio via PortAudio. A README provides prerequisites and usage instructions.

_rtsp\_to\_hls, simple\pipeline · high confidence

Introduce RTMP to HLS streaming demo with Phoenix web interface

The rtmp\_to\_hls location now provides a complete, runnable demo application that receives an RTMP stream (listening on localhost:9006), converts it to HLS segments, and serves the resulting manifest and chunks via a Phoenix web server (available on localhost:4000). The pipeline uses Membrane to ingest RTMP via a TCP source, transcode audio to AAC and video to H264, and write HLS output to the local 'output' directory. A web UI embeds the HLS.js player to stream the converted content, and the README includes setup instructions for OBS, including the required Keyframe Interval setting.

_rtmp\_to\hls · high confidence

New AI and media processing demos added

Added several new Livebook and script-based demos demonstrating AI integration and media handling: an audio mixer that blends beep sounds into background music; a messages source and sink example for Erlang message-driven pipelines; an OpenAI Realtime API integration using WebRTC for browser-based voice conversations; an RTMP sender and receiver pair for streaming video; a real-time soundwave visualizer using Vega-Lite; a neural network style transfer demo with rotating styles via WebRTC; a Google Gemini voice conversation demo; a Whisper-based speech-to-text transcriber for live mic and file input; and a YOLO object detection demo with bounding box overlays. These additions expand the available examples for building real-time audio, video, and AI-powered applications.

(repo-wide) · high confidence

New RTP to HLS streaming demo

Added a new demo application in the rtp\_to\_hls directory that demonstrates converting RTP streams into HLS format. The solution includes a receiver script (rtp\_to\_hls.exs) that listens for UDP input on port 5000, demultiplexes H.264 video and AAC audio, and outputs HLS segments to an 'output' directory served via a local HTTP server on port 8000. A companion sender script (send.exs) is provided to generate test RTP traffic from a sample MP4 file. The entry also includes a web player (stream.html) for browser-based playback and standard project configuration files.

_rtp\_to\hls · high confidence

New camera\_to\_hls demo script for live HLS streaming

Added a new standalone Elixir script (camera\_to\_hls.exs) that captures raw video from a local camera, encodes it to H.264, and broadcasts it via HLS. The script uses Membrane plugins for capture, conversion, and encoding, serving the resulting stream via a local HTTP server on port 8000. It includes a simple HTML player (stream.html) for browser-based playback and documentation (README.md) with setup instructions and debugging tips for camera access.

_camera\_to\hls · high confidence

New simple\_element demo for Membrane Core v1.0

Added a new demo project (\simple\_element\) that demonstrates how to create a simple Membrane element and integrate it into a pipeline. The demo uses Membrane Core v1.0, includes a sample MP3 file, and features a counter element that tracks buffer processing while playing audio. It provides a \.formatter.exs\ configuration, a \.gitignore\, and a \run.exs\ script to start the pipeline.

_simple\element · high confidence

Removals

Removal of MP3 playback demo and configuration file

The application no longer includes the sample Membrane pipeline for playing MP3 files via PortAudio, nor the associated configuration file. Users relying on this specific demo for audio playback functionality will need to implement their own pipeline or use alternative solutions, as the \MembraneMP3Demo.Pipeline\ module and \config/config.exs\ have been deleted.

config, lib · high confidence

Behavioural changes

Configures RTP module logger level to info

The RTP configuration file now explicitly sets the logger level to :info for the :logger application. This ensures that informational logs are captured for the RTP module, aiding in debugging and monitoring of RTP-related activities.

rtp/config · high confidence

RTSP to HLS demo now uses the new RTSP plugin

The RTSP to HLS demo has been updated to use the latest RTSP plugin, replacing the previous implementation. This change introduces a new pipeline structure that explicitly handles audio and video tracks, configuring AAC encoding for audio and H.264 for video with 4-second segment durations. The demo now relies on the \Membrane.RTSP.Source\ element for stream ingestion and \Membrane.HTTPAdaptiveStream.SinkBin\ for HLS output, ensuring compatibility with the updated core framework.

_rtsp\_to\hls/lib · high confidence

Repository restructured with new demos and Apache 2.0 license

The repository has been reorganized from a single sample pipeline into a collection of categorized Membrane Framework examples (Basics, Audio, Streaming protocols, and AI), including new additions like the Gemini audio chatbot and various RTMP/HLS/WebRTC demos. The project is now licensed under the Apache License, Version 2.0, and the README provides updated instructions for running these examples, many of which utilize Livebook.

(repo-wide) · high confidence

Standardized application configuration and logging setup

The application now uses a structured configuration system with environment-specific settings for development, production, and testing. The main config file imports environment-specific configurations, allowing for tailored behavior in each environment. Logging is configured to include request IDs in the console output for development, while production and test environments are set to debug level for detailed logging.

_rtsp\_to\hls/config · high confidence

Fixes

1 commit (1 fix) fixing rtp/samples

A fix in rtp/samples — 1 commit (1 fix), 2 files.

rtp/samples · medium confidence · unverified

Test coverage

Added test helper for ExUnit initialization; Added test helper for RTP tests; Removed obsolete default test file.

Dependencies

New Nerves and Phoenix-based demo applications

Added two new demo projects: \camera\_to\_hls\_nerves\, which streams Raspberry Pi camera footage to HLS using the Nerves embedded systems framework (targeting Raspberry Pi 4), and \rtmp\_to\_adaptive\_hls\, which converts RTMP streams to adaptive bitrate HLS using Phoenix and Membrane plugins. Both demos include their \mix.exs\ and \mix.lock\ files, establishing the dependency trees for these new capabilities.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 43.

Lenses

  • Code Health 68
  • Architecture 92
  • Maturity 59
  • Readiness 26
  • Security 64
  • Accessibility 49

Changes since last survey

  • 300 commits — 268 feature/other, 32 fixes

By area

  • webrtc/videoroom_advanced — 59 commits
  • (repo) — 39 commits
  • webrtc/videoroom — 16 commits
  • rtsp_to_hls/hls_proxy_api — 14 commits
  • camera_to_hls/README.md — 12 commits
  • rtsp_to_hls/lib — 11 commits
  • (root) — 10 commits
  • livebooks/rtmp — 7 commits
  • livebooks/audio_mixer — 6 commits
  • rtmp_to_hls/README.md — 6 commits
  • rtp/lib — 6 commits
  • webrtc_to_hls/README.md — 6 commits
  • .circleci/config.yml — 5 commits
  • simple_element/README.md — 5 commits
  • camera_to_hls/lib — 4 commits
  • rtp_to_hls/lib — 4 commits
  • rtsp_to_hls/README.md — 4 commits
  • simple_pipeline/README.md — 4 commits
  • webrtc_to_hls/lib — 4 commits
  • webrtc_videoroom/README.md — 4 commits

Notable commits

  • fix: Fix CLI bug
  • fix: Fix Elixir Formatter issue
  • fix: Fix ex_libnice dependency version
  • fix: Fix framerate (#179)
  • fix: Fix minor errors in rtmp_to_hls readme
  • fix: Fix simultaneous joining to the room
  • fix: Fixed :new_rtp_stream notification handling.
  • fix: Fixed CI.
  • fix: Fixed env variables.
  • fix: Fixed playback.
  • fix: Fixed virtual host to use runtime variable (#154)
  • fix: Merge branch 'master' into fix-deploy
  • fix: Merge branch 'master' into fix-deploy
  • fix: Merge pull request #156 from membraneframework/fix-cli-fail
  • fix: Merge pull request #162 from membraneframework/fix-deploy
  • fix: Merge pull request #173 from membraneframework/bug-fixes
  • fix: Merge pull request #183 from membraneframework/revert-changes-commited-directly-to-master
  • fix: Merge remote-tracking branch 'origin/master' into fix-deploy
  • fix: Revert "Iterate over video devices, until find first working one"
  • fix: Revert "Revert "[webrtc_to_hls] Add instructions for installing native deps on Ubuntu (#234)""
  • …and 280 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

membraneframework/membrane_demo was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 18 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit b45f479716827a03169a1ec6037fd38b9af950d6 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-5d04157a340d.