A live streaming platform based on open source software
This project is a live streaming platform based on open source software. The main goal is to create a platform that can be used by anyone to stream their content, be it a game, a podcast, a talk show, etc.
It plugs many open source projects together to create a seamless experience for video developers.
Among the features that are planned for this project are:
If you are interested in reading my ideas and thoughts about this project, you can read the dev log
The platform is composed of several components:
Let's see how the components interact in detail:
The Management API is used to manage the streams, workers, and metrics. It can be used to defined how the stream will be ingested, and how it will be transcoded.
A Media Server is useful to receive the content from streamers. It supports many ingest protocols like RTMP, RTSP, SRT and so on. Each protocol has its own characteristics. This Media Server can be deployed behind a load balancer to scale horizontally.
Workers are responsible for pulling the stream from the Media Server, transcoding the video, and saving all the data locally in the nodes. The workers can be deployed in a cluster to scale horizontally.
Routing API is used to route the CDN requests to the right origins. It can be used to distribute the requests to the right worker. The Routing API is a module under the Management API.
The platform is built using the following technologies:
All tasks are managed by a Justfile. You can see all the available tasks by running:
just -l
To run the platform, you need to have Docker and docker compose installed. Then, you can run the following command:
docker compose up
To run the test suite:
just test
Integrations test can be run with:
just test-all
To run code linting:
just lint
Feel free to contribute to this project by opening issues or pull requests.
How could you contribute?
If you want to contribute, please read the CONTRIBUTING.md file.
For more advanced contributions, please, create an issue to discuss the feature you want to implement. If it is a complex decision or a big feature, it is better to create an ADR (Architecture Decision Record) to write down the decision and the reasons behind it. Check the adr folder for more information.
Dionysia is a festival in ancient Greece in honor of Dionysus, the god of wine, fertility, and theater. It was a time of celebration, where people would gather to watch plays, dance, and drink wine.
Thank you @josethz00 for the name suggestion!