Skip to content
LeeO86Public

About

Open-source media functions for MXL (Media eXchange Layer, EBU Dynamic Media Facility / DMF): ST 2110, SRT and SDI gateways, vision and audio mixer, replay, graphics, multiviewer, NMOS. Docker Compose and Kubernetes examples.

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

4 Commits

Folders and files

Repository files navigation

mxl-stack

Open-source broadcast media functions for MXL (Media eXchange Layer), the shared-memory media exchange of the EBU Dynamic Media Facility (DMF). Gateways (SMPTE ST 2110, SRT, SDI), a vision mixer, an audio mixer, replay, graphics, a multiviewer, scopes, monitoring, AV sync measurement and multi-host replication over MXL Fabrics. Every function is a container with AMWA NMOS IS-04/IS-05 (BCP-007-03) control, a web UI and Prometheus metrics.

This repository is the entry point. It holds no media code: it lists the function repositories, explains what a host needs, and gives Docker Compose examples and Kubernetes notes to run them together.

Each function repository stays the source of truth: its README and SPECIFICATION document every setting, port, metric and API. If this page and a function's README disagree, the README wins.

This is an independent community project. It is not part of, or endorsed by, the MXL project, the EBU or the Linux Foundation.

What MXL is

MXL lets media functions on one host exchange uncompressed video, audio and data through shared memory. A writer puts grains (frames) or samples into a ring buffer in a memory-backed file system (a tmpfs); readers map the same files. There is no copy and no network stack between functions on one host. Grain positions are derived from TAI time, so every host needs a disciplined clock. Between hosts, the MXL Fabrics API moves flows over RDMA (or TCP).

The functions here add the parts a facility needs around that: AMWA NMOS IS-04/IS-05 with the MXL transport (BCP-007-03) for discovery and routing, web UIs, Prometheus metrics, and WebRTC previews.

Overview

flowchart LR
  subgraph host-a["host-a"]
    direction LR
    SDI[DeckLink SDI] --> MXLa
    ST[ST 2110 network] <--> GW2110[st2110-gateway] <--> MXLa
    SRT[SRT streams] <--> GWSRT[srt-gateway] <--> MXLa
    TP[test-player] --> MXLa
    BS[browser-source] --> MXLa
    MXLa[(MXL domain<br/>tmpfs /Volumes/mxl)]
    MXLa <--> MV[multiviewer]
    MXLa <--> SC[scopes]
    MXLa <--> AM[audio-mixer]
    MXLa <--> RP[replay]
    MXLa <--> CC[color-corrector]
    MXLa <--> FX[FlowXer vision mixer]
    MXLa --> MON[webrtc-monitor]
    MXLa <--> FA[fabrics-agent]
  end
  FA <-->|RDMA / TCP| FB[fabrics-agent on host-b]
  MON -->|RTSP| MTX[MediaMTX] -->|WebRTC| Browser
  REG[NMOS registry<br/>IS-04] -.registration.- MXLa
  CTRL[NMOS crosspoint<br/>IS-05 controller] -.routing.- REG
Loading
  • Every function is one container and one NMOS node. It writes its own MXL domain and reads any other domain on the host.
  • A controller connects a receiver to a sender with IS-05 (mxl_domain_id, mxl_flow_id). If that flow lives on another host, the fabrics agent on the receiver's host mirrors it locally.
  • Browser previews are low-rate H.264 published to MediaMTX and played over WebRTC (WHEP).

mxl-multiviewer web UI: a 3x3 multiviewer of MXL flows FlowXer vision mixer web UI mxl-audio-mixer console

The single-host example running: multiviewer, FlowXer vision mixer and audio mixer. Every function README has a screenshot of its web UI.

What you can build

Examples of chains made from these functions. Each arrow is an IS-05 connection made in an NMOS controller.

Workflow Chain Start from
A studio on one host test-player or DeckLink → FlowXer (vision mixer) and audio-mixer → multiviewer, webrtc-monitor compose/single-host
ST 2110 facility edge ST 2110 sources → st2110-gateway → MXL functions → st2110-gateway → ST 2110 mxl-st2110-gateway (needs an Intel E810)
Remote contribution SRT in → srt-gateway → replay, browser-source graphics, audio-mixer → srt-gateway → SRT out compose/single-host with --profile extras
Two hosts functions on host-b read host-a's flows; the fabrics agent mirrors them over RDMA compose/multi-host-rdma
Measure a chain avsync generator → chain under test → avsync analyzer (AV offset, latency); scopes for levels mxl-avsync

Media functions

Images are on GitHub Container Registry (ghcr.io/leeo86/<repo>). Release tags are X.Y.Z, X.Y and X; most repos have no latest, so pin a version. The badges show each repository's latest release. The Compose examples pin a set that was run together; see CHANGELOG.md.

Status. All functions below have tagged releases, a container image and a changelog, are tested on real hardware, and several run continuously on a multi-host Kubernetes test platform. They are proofs of concept for MXL-based production, not certified products. Features a README marks as planned are not in the image yet.

Gateways and I/O

Function What it does Needs License Release
mxl-st2110-gateway SMPTE ST 2110 (-20, -30, -40, 2022-7) ↔ MXL with MTL/DPDK; two NMOS nodes Intel E810, DPDK, hugepages, PTP MIT release
mxl-srt-gateway SRT (MPEG-TS) ingest and egress to and from MXL CPU; NVDEC/NVENC optional MIT (image GPL-2.0+, x264/x265) release
mxl-decklink Blackmagic DeckLink SDI input and output as MXL flows DeckLink card, Desktop Video driver MIT release

Sources and graphics

Function What it does Needs License Release
mxl-test-player TAI-locked test source: video, audio, timecode, fill/key CPU MIT release
mxl-browser-source Offscreen Chromium (CEF) web page as MXL video, key and audio, frame-locked to TAI; OGraf graphics CPU; NVIDIA GPU optional MIT release

Production

Function What it does Needs License Release
FlowXer Vision mixer: up to 4 MEs, keyers and DME boxes, clip players, stingers, tally (TSL), WebRTC preview, widgets NVIDIA GPU Apache-2.0 tag 19.26.68
mxl-audio-mixer Broadcast audio engine: routable matrix, channel strips, DSP, loudness, control room, VCAs CPU MIT release
mxl-replay Live slow-motion replay, clip player, shotbox and playlists NVIDIA GPU recommended; records and plays clips without one GPL-3.0 release
mxl-color-corrector Colour correction (gain, pedestal, saturation, gamut clip), AVX2/AVX-512 CPU MIT release

FlowXer is developed in its own GitHub account; see its repository for releases and licensing.

Monitoring and measurement

Function What it does Needs License Release
mxl-multiviewer Multiviewer with up to 32 inputs, tally (TSL), as an MXL flow CPU; CUDA optional Apache-2.0 release
mxl-webrtc-monitor Watch and listen to any MXL flow in a browser (WebRTC/HLS) CPU; NVENC optional MIT release
mxl-scopes Video scopes (waveform, parades) as an MXL flow and a WebRTC widget CPU (AVX2/AVX-512) MIT release
mxl-avsync AV sync and latency measurement: test signal generator and analyzer; phone apps in testing CPU MIT release

Infrastructure and libraries

Project What it does Needs License Release
mxl-fabrics-agent Per-host agent that mirrors flows between hosts over MXL Fabrics, following NMOS connections RDMA NIC (or TCP) MIT release
mxl-nmos Rust crate: NMOS node (IS-04, IS-05, BCP-007-03) for MXL media functions. Early, 0.x — Apache-2.0 release

Infrastructure used by the examples (third party)

Component Purpose Image
nmos-cpp registry NMOS IS-04 registry (registration and query) docker.io/gemini2350/nmos-cpp-registry (pinned digest in the compose files)
dmf-app-nmos-crosspoint NMOS controller with a crosspoint view; connects ST 2110 and BCP-007-03 MXL senders and receivers over IS-05. Fork of nmos-crosspoint_v3; see upstream for licensing ghcr.io/qvest-digital/dmf-app-nmos-crosspoint:4.36
MediaMTX RTSP/WebRTC/HLS server for the browser previews bluenviron/mediamtx:1.20.1

Getting started

  1. Prepare the host: docs/requirements.md (tmpfs MXL root, TAI time, inotify limit, optional GPU).
  2. Run the single-host example: compose/single-host. It needs no special hardware: a Linux x86-64 host with Docker is enough for the test player, multiviewer, scopes, audio mixer, replay, browser source and WebRTC monitor.
  3. Two hosts over RDMA: compose/multi-host-rdma.
  4. Kubernetes notes: docs/kubernetes.md.

New to MXL itself? Start with the SDK documentation and the CBC/Radio-Canada hands-on workshop (below), then come back here.

Related projects

Complementary open-source work around MXL, maintained by others:

Security

The function APIs are unauthenticated by design: run them on a protected network only.

Contributing

See CONTRIBUTING.md. Issues about one function belong in that function's repository.

License

MIT, see LICENSE. Each function repository and image has its own license and third-party notices (see the License column above).

About

Open-source media functions for MXL (Media eXchange Layer, EBU Dynamic Media Facility / DMF): ST 2110, SRT and SDI gateways, vision and audio mixer, replay, graphics, multiviewer, NMOS. Docker Compose and Kubernetes examples.

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors