Skip to content

Boombox requirementsΒ #1

@mat-hek

Description

@mat-hek

MVP

Boombox features

πŸ‘ - let's do it
πŸ‘Ž - not for MVP
πŸͺ - do it hacky

  • Input and output up to one audio and video stream πŸ‘
  • Detecting stream type by protocol (like rtsp://my.stream:2137/stream) or file type (like file.mp4) πŸ‘
  • Determine when to transcode, allow force enabling and disabling transcoding πŸͺ
  • Determine when to use real-time, allow force enabling real-time πŸ‘
  • APIs:
    • Command line πŸͺ
    • Elixir πŸ‘
    • Membrane Bin (0.2.0)
    • Python (TBD)
  • Delivery:
    • Precompiled binary, usable via cmd (πŸ‘ ), as an Elixir node or via Port (πŸ‘Ž )
    • Elixir dependency - should it contain the precompiled binary? plugins as optional deps? (πŸ‘Ž )
  • Inspect metrics with KinoMembrane πŸ‘ - if for free
  • Work on Mac OS, Debian & friends (GlibC and MUSL (πŸ‘Ž )), and Windows via WSL (possibly without AV capture/playback)
  • Drop dependency on FFmpeg (?) πŸ‘Ž
  • Demos & examples TBD
    • Cmdline usage
    • Livebook
    • Integrating with Nx / Axon / ...
    • Integrating with Membrane Pipeline
    • Integrating with FFmpeg / some SFUs (Janus?)

Membrane features

Name Features Comments
H264/5 decode βœ…, encode βœ…, RTP βœ…, MP4 βœ…, CMAF βœ…, FLV βœ… Encoder and decoder are FFmpeg-based
VP8 decode ⏳, encode ⏳ , RTP βœ…, IVF βœ… Community POC encoder and decoder: https://github.com/spscream/membrane_vp8_ffmpeg_plugin
Opus decode βœ…, encode βœ…, RTP βœ…, OGG demux βœ…, OGG mux βœ… , MP4 βœ… elixir_webrtc has OGG muxing and demuxing implemented
AAC decode βœ…, encode βœ…, RTP βœ…, MP4 βœ…, CMAF βœ…, FLV βœ…, ADTS βœ…
FLAC decode βœ…, encode βœ…, save/read from file βœ…
MP3 decode βœ…, encode βœ…, ID3 βœ…, save/read from file βœ…
WAV decode βœ…, encode βœ…, ID3 βœ…, save/read from file βœ…
Raw audio Play βœ…, record βœ…, resample βœ… Play & record not working on WSL, resample FFmpeg-based
Raw video Play βœ…, capture βœ…, overlay βœ…, scale βœ… Capture and scaling is FFmpeg-based, not sure if play and capture work on WSL
MP4 demux βœ…, mux βœ…
FLV demux βœ…, mux βœ…
MSR demux βœ…, mux βœ… Membrane Stream Recording, used by Jellyfish
WebRTC receive βœ… , send βœ… , WHIP/WHEP ❌ both are currently implemented in elixir_webrtc but not in the plugin
RTMP receive βœ…
HLS send βœ…
RTSP receive βœ…
HTTP receive βœ…, Send βœ…
File read βœ…, Write βœ…, Stdio βœ… Stdio may not work correctly with Mix.install
Elixir receive ❌, send ❌ Send / receive a stream from an Elixir process
Thumbnails ❌ low priority
Kino Membrane ⏳ It basically works, but only in Chrome and it's not released

Roadmap

The first thing to do should be to implement a basic version of Elixir API and support for one input and one output endpoint (see the Endpoints section below). Then, the development can be split in the following phases. Tasks in each phase can be done in parallel.

  1. When we have basic Elixir API and one input and output endpoint:
  • Implement lacking features in Membrane
  • Add more endpoints
  • Create a precompiled binary and interface to it
  1. When we have at least a few endpoints and more or less stable Elixir API:
  • Add detecting stream type by protocol
  • Add realtime options
  1. When we have most endpoints implemented:
  • Make sure we transcode when needed
  • Implement the rest of the APIs
    • Cmdline
  • Integrate with KinoMembrane
  • Test integration with FFmpeg / Some SFU / ?
  • Create examples

Endpoints

Boombox should have multiple endpoints - inputs and outputs:

Status Endpoint Type Missing features
WebRTC input, output WHIP/WHEP
RTMP input
HLS output
File input, output
HTTP input, output
RTP input, output
Elixir input, output Elixir process plugin
RTSP input

Elixir endpoints should support the following payload:

  • Raw audio
  • Raw video

Post-MVP

Boombox 0.2.0

  • Membrane Bin
  • Whip
  • RTP input & output
  • Add transcoding
  • HTTP, File endpoints should support the following payload:
    • MP4
    • OGG
    • IVF
    • AAC
    • H264
    • WAV
    • Membrane Stream Recording

Boombox future features considerations:

  • integration with Python
  • Multiple output protocols
  • Multivariant inputs and outputs

Membrane Features

Name Features Comments
AV1 decode ❌, encode ❌, RTP ❌, MP4 ❌
MKV mux ❓, demux ❓ Could allow keeping VP8/9 and Opus, currently unstable
RTSP send ❌ We could have an RTSP server and no major tool has it
RTMP send βœ… FFmpeg-based
LL HLS ❌ Implemented in Jellyfish (R.I.P.)
VP9 decode βœ…, encode βœ…, RTP ❌, IVF βœ…
Audio mix βœ… Would require support for multiple audio streams

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions