feedboard

Feedboard multiview

I spin up MediaMTX instances a few times a year to solve various media problems. The tool makes it easy to route media between different vendors, provide remote monitoring, and host GStreamer pipelines. The app runs on just about everything and is the perfect tool for solving these little problems on-the fly.

MediaMTX has no web UI. All config happens via YAML and an API provides hooks for rolling your own integrations like auth. I thought it would be cool to have a MediaMTX backed lightweight streaming platform that provided web-based multiview, stream management, and ingest tools. So I created Feedboard!

Feedboard multiview

Features

  • Multiview layouts (1x1 to 4x4, plus custom layouts)
  • WebRTC (WHEP) and HLS playback
  • Local camera/screen/tab capture with WHIP publishing
  • Real-time thumbnails
  • User authentication with JWT tokens
  • Stream keys for RTMP/SRT/webRTC ingress/egress
  • VU meters and stream stats overlay
  • Live annotation and drawing overlay
  • Keyboard shortcuts for fast operation
demo

Architecture

The main part of feedboard is a web frontend. In its simplest form, this queries the MediaMTX API and renders a list of available feeds. The UI provides a drag-and-drop way to organize feeds, clocks, and local sources.

There are a few optional components that add additional functionality.

authproxy is a small SQLite-backed go program that provides user and stream key management. This is done via the MediaMTX API auth hook.

thumbnailer provides periodic thumbnails for active streams. The program gets a list of active feeds and periodically captures thumbnails via FFmpeg. These are pushed via websocket to the feedboard frontend.

mermaid
graph LR
  B[Browser] --> C[Caddy]
  C --> SPA[Feedboard SPA]
  C --> MTX[MediaMTX]
  C --> AP[authproxy · Go]
  C --> TH[thumbnailer · Go]
  AP --> DB[(SQLite)]
karlcswanson/feedboard