Skip to content

8xFF/atm0s-media-server

atm0s-media-server

atm0s-media-server is a Rust workspace for a decentralized low-latency media server. The current runtime is a single binary with multiple server modes that can run together in standalone mode or as separate console, gateway, connector, and media nodes.

The project is in a refactoring-era state around sans-io-runtime. Trust the source tree over older nested docs where they disagree.

Current Runtime

The binary is atm0s-media-server from bin/.

Current subcommands:

  • standalone: starts in-process console, gateway, connector, and media nodes for local development.
  • console: serves the console UI/API and SDN cluster views.
  • gateway: serves token APIs, WebRTC/WHIP/WHEP/RTPengine media APIs, node APIs, metrics APIs, and sample assets.
  • media: runs media workers and WebRTC/RTPengine transports.
  • connector: stores connector events in SQL storage and handles record/hook related connector work.
  • cert: writes self-signed certificate/key files for QUIC-related development utilities.

Implemented source-backed integrations include WebRTC SDK protobuf APIs, WHIP, WHEP, RTPengine-style APIs, recording upload/convert components, connector hooks, console APIs, and multi-tenancy sync storage. RTMP and SIP are not current in-repo server modes or transport crates.

Quick Start From Source

Prerequisites:

  • Rust 1.84.0 with rustfmt and clippy from rust-toolchain.toml.
  • Linux packages used by CI: libsoxr-dev, libopus-dev, and libssl-dev.
  • protoc for all-features builds.
  • wget if using download-geodata.sh.
  • Node 20 and pnpm if building the console frontend directly.

Download the GeoIP database used by gateway routing:

./download-geodata.sh

Run a local standalone stack from the bin/ directory. Running from bin/ also matches the debug sample asset path used by the HTTP server:

cd bin
cargo run -- \
  --sdn-zone-node-id 1 \
  --workers 1 \
  standalone \
  --geo-db ../maxminddb-data/GeoLite2-City.mmdb \
  --max-cpu 100 \
  --max-memory 100 \
  --max-disk 100

Default local ports in standalone mode:

  • Console UI/API: http://localhost:8080
  • Gateway media/token APIs: http://localhost:3000

Useful API docs are served by running nodes:

  • Gateway token docs: http://localhost:3000/token/ui
  • Gateway WHIP docs: http://localhost:3000/whip/ui
  • Gateway WHEP docs: http://localhost:3000/whep/ui
  • Gateway WebRTC docs: http://localhost:3000/webrtc/ui
  • Gateway RTPengine docs: http://localhost:3000/rtpengine/ui
  • Node APIs: http://localhost:3000/api/node/ui
  • Metrics APIs: http://localhost:3000/api/metrics/ui

Build And Check

From the repository root:

cargo build --release --package atm0s-media-server
cargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all-features --workspace

Frontend console commands live in packages/media_console_front/react-app:

pnpm install
pnpm lint
pnpm build

Documentation

Start with these current top-level docs:

The mdBook source is docs/** and the generated output is book/**. Do not edit book/** manually.

Known Caveats

  • --http-tls is parsed by the CLI, but it is not passed into the inspected HTTP server startup paths.
  • --rtpengine-cmd-addr is parsed by gateway args, but no runtime use was found in the inspected gateway flow.
  • External release download URLs and external SDK/sample repositories were not verified in this documentation pass.
  • Some older nested docs still describe removed or stale concepts. The top-level docs above are the current entry points.

Contributing

See CONTRIBUTING.md and docs/CONTRIBUTING.md.

License

This project is licensed under the MIT License. See LICENSE.