Logo

Algora TV

The interactive livestreaming & video sharing service for developers.
Website · Discord · Twitter · YouTube · Issues

Open Bounties Rewarded Bounties

## Architecture ### Overview ```mermaid graph Streamers{Streamers} --> Fly Fly[Fly
Elixir App] --> RTMP Fly --> Web[Phoenix
Web Server] Fly --> Db[Fly
Postgres] RTMP[Membrane
RTMP Server] -->|First mile delivery| Tigris[Tigris
Object Storage] Viewers{Viewers} -->|Last mile delivery| Tigris Viewers --> Fly ``` ### Livestream pipeline ```mermaid graph Encoder{Encoder
e.g. OBS} -->|RTMP| Source[FLV Demuxer] Source -->|video| H264Parser[H264 Parser] Source -->|audio| AACParser[AAC Parser] H264Parser --> H264Payloader[H264 Payloader] AACParser --> AACPayloader[AAC Payloader] H264Payloader --> CMAFMuxerVideo[CMAF Muxer] AACPayloader --> CMAFMuxerAudio[CMAF Muxer] CMAFMuxerVideo --> fMP4 CMAFMuxerAudio --> fMP4 fMP4[Fragmented MP4] -->|HLS| Tigris{Tigris Object Storage} ``` ## Getting Started To get a local copy up and running, please follow these steps. ### Prerequisites Here is what you need to be able to run Algora TV. - Elixir (Version: >=1.12) - OTP - PostgreSQL - FFmpeg ## Development ### Setup 1. Clone the repo into a public GitHub repository (or fork https://github.com/algora-io/tv/fork). ```sh git clone https://github.com/algora-io/tv.git ``` 2. Go to the project folder ```sh cd tv ``` 3. Install dependencies with mix ```sh mix deps.get ``` 4. Set up your `.env` file - Duplicate `.env.example` to `.env` - Add your environment variables in the `.env` file 5. Create and migrate your database with mix ```sh mix ecto.setup ``` 6. Start your development server ```sh env $(cat .env | xargs -L 1) iex -S mix phx.server ``` ## License Distributed under the [AGPLv3 License](https://github.com/algora-io/tv/blob/main/LICENSE). See `LICENSE` for more information. ## Acknowledgements Special thanks to these amazing projects which help power Algora TV: - [Tigris](https://www.tigrisdata.com/) - [Fly.io](https://fly.io/) - [Phoenix Framework](https://www.phoenixframework.org/) - [Ecto](https://github.com/elixir-ecto/ecto) - [Membrane](https://membrane.stream/) - [FFmpeg](https://ffmpeg.org/) - [Tailwind CSS](https://tailwindcss.com/)