Current status: RTMP (classic + enhanced) ingest of H.264/H.265/AV1 + AAC works
end-to-end into HLS — MPEG-2 TS or CMAF/fMP4 segments, optionally LL-HLS (partial
segments + blocking playlist reload) — served over HTTP by Spangle.MediaServer
with per-stream routing (/hls/{stream}/playlist.m3u8).
See docs/ARCHITECTURE.md for the data flow, the data formats at each boundary, and where state lives.
Quick try:
$ dotnet run --project src/Spangle.MediaServer
$ ffmpeg -re -f lavfi -i testsrc=size=640x360:rate=30 -f lavfi -i sine=frequency=440 \
-c:v libx264 -g 60 -pix_fmt yuv420p -c:a aac -f flv rtmp://localhost:1935/live/test
# then open http://localhost:8080/ (test player) or http://localhost:8080/hls/playlist.m3u8- Ingest
- RTMP (+ Enhanced)
- RTSP (very low priority)
- SRT
- Web Origin
- HLS
- LL-HLS
- DASH (low priority)
- LL-DASH (CMAF Chunked-Transfer) (low priority)
- Codecs
- H.264
- H.265
- AV1
- AAC
- Opus
- Control multiple servers
- Easy monitoring
- Setting editor
- DRM
- Transcoder integration (Hardware, x26X)
- Target mainly UGC content
- Almost pure C#
- High performance
- Highly customizable (plugin, fork, etc...)
- Fail over with very little gap (Goal of Effort)
- Out-of-the-box support for timed metadata