Atm0s Media Stack
Generated on 8 Apr 2025 from the Atm0s Media Stack catalog page
Decentralized Ultra-Low Latency Streaming Server
A decentralized media server designed to handle media streaming on a global scale, making it suitable for large-scale applications but with minimal cost.
It is developed by 8xFF, a group of independent developers who are passionate about building a new generation of media server and network infrastructure with decentralization in mind. While we have received support from various companies and individuals, we are not affiliated with any specific company. 8xFF is a community-driven project, and we welcome anyone interested in contributing to join us.
For a deep dive into the technical aspects of network architecture, please refer to our Smart-Routing
(Above is a demo video of the version used by Bluesea Network)
Project Status: Alpha
This project is currently in the alpha stage of development. It is actively being developed and may undergo significant changes, including changes to the API. The primary focus at this stage is to make the project stable and reliable.
Our goals for this project can be summarized as follows:
- Goal 1: Cluster: Create a global decentralized media server cluster with multiple zones, support both SDKs for flexible and mainstream protocols (RTMP, SIP, SRT) for compatibility.
- Goal 2: Market: Develop a sharing marketplace for the media server, enabling resource sharing and monetization. This will help scale the media server cluster during peak times and reduce costs during off-peak times. In the feature marketplace fees will be used to fund the development of the project.
- Goal 3: P2P Network: Establish a network between users, where servers only act as fallbacks. This approach aims to significantly reduce infrastructure costs and scale to infinity.
Our primary focus is currently on Goal 1. For details on the current phase plan, please refer to our Roadmap.
Goals 2 and 3 are in the research phase. For more information, you can visit this Repository.
Features
-
🚀 Powered by Rust with memory safety and performance.
-
High availability by being fully decentralized, with no central controller.
-
🛰️ Multi-zone support, high scalability.
-
Support encodings: H264, Vp8, Vp9, H265 (Coming soon), AV1 (Coming soon)
-
Cross-platform: Linux, macOS, Windows.
-
Decentralized WebRTC SFU (Selective Forwarding Unit)
-
Modern, full-featured client SDKs
-
Advanced features including:
- Audio Mix-Minus
- Simulcast/SVC
- SFU
- SFU Cascading (each stream is a global PubSub channel, similar to Cloudflare interconnected network)
- RTMP
- SIP (WIP)
- WebRTC
- Whip/Whep
Software Included
Package | Version | License |
---|---|---|
Atm0s Media Server | Latest | MIT |
Nats | 2.10 | MIT |
Creating an App using the Control Panel
Click the Deploy to DigitalOcean button to install a Kubernetes 1-Click Application. If you aren’t logged in, this link will prompt you to log in with your DigitalOcean account.
Creating an App using the API
In addition to creating Atm0s Media Stack using the control panel, you can also use the DigitalOcean API. As an example, to create a 3 node DigitalOcean Kubernetes cluster made up of Basic Droplets in the SFO2 region, you can use the following doctl
command. You need to authenticate with doctl
with your API access token) and replace the $CLUSTER_NAME
variable with the chosen name for your cluster in the command below.
doctl kubernetes clusters create --size s-4vcpu-8gb $CLUSTER_NAME --1-clicks atm0s-media-stack
Getting Started After Deploying Atm0s Media Stack
Atm0s Media Stack installs the following
-
Atm0s Media Service Pods:
- Gateway: The internal cluster Gateway
- Connector: Handles export logging of cluster’s metrics and stats to external services
- Token Generator: An HTTP Server that handles JWT Token generation for authentication
- WebRTC: A WebRTC Server
- RTMP: A RTMP Server
-
Nats pod: A Nats Server to deliver Connector logs to external services.
Prerequisites
- Kubernetes >= 1.23 (You must have a Kubernetes cluster installed and be able to access it with kubectl.)
- Helm v3 (https://helm.sh/docs/intro/install/)
- A Kubernetes LoadBalancer, you can use Nginx or anything you want.
You can connect to your DigitalOcean Kubernetes cluster by following DOs how-to guide.
For additional instructions on configuring a DigitalOcean Kubernetes cluster, see the following guides:
Firewall
The containers will be using host’s network stacks, so in order for them to communicate properly with each others, you will need to config your host’s inbound firewall rules to allow both TCP and UDP in all ports.
Securing the cluster
To communicate with the cluster or adding a new node, you will need to be authenticated with the right token. The token can be derive with the right secret. By default, in non-secure mode, the cluster is initialized with secret key: insecure
. To use your own secret, enable secure
and update the secret to your own secret. This will setup a token-generator
node.
Generating JWT Session Token
To generate a token for streaming, you need to make a request to the token-generator node through http(s)://your_host/auth/
.
You can check out available authentication endpoints for each feature using swagger in https(s)://your-host/auth/ui/
.
Note that due to URL rewrite, these endpoints will need the be prefixed with /auth
to be able to work properly.
Installing SSL
By default, a self-singed certificate comes with the Atm0s Media Stack.
Custom Certificate
you can replace it with your own certificate as below.
kubectl create -n atm0s-media secret tls ${CERT_NAME} --key ${KEY_FILE} --cert ${CERT_FILE}
Uninstalling the Chart
helm delete atm0s-media-stack -n atm0s-media
Example Usage
helm install atm0s-media-stack 8xff/atm0s-media-stack --set gateway.host=gateway.example.com --namespace atm0s-media --create-namespace
Server Usage
The gateway can be connected under the /gateway/
, so your server URL should be: http://your_host/gateway
or http://your_cluster_lb_ip/gateway
if you have not configured your host.
You can also connect directly to the gateway node using: http://gateway_node_ip:3000/
For more details: https://github.com/8xFF/atm0s-media-server