explaingit

ossrs/srs

📈 Trending28,833C++Audience · developerComplexity · 4/5ActiveLicenseSetup · hard

TLDR

Self-hosted media server that receives live video streams and delivers them to viewers across multiple protocols (RTMP, HLS, WebRTC, DASH) and devices.

Mindmap

mindmap
  root((SRS))
    What it does
      Receive streams
      Deliver to viewers
      Multi-protocol support
    Ingest protocols
      RTMP
      SRT
    Delivery formats
      HLS
      WebRTC
      RTMP
      HTTP-FLV
      MPEG-DASH
    Encoding support
      H.264 H.265 AV1
      AAC Opus G.711
      FFmpeg transcoding
    Deployment
      Self-hosted
      Docker
      Cloud VMs
    Use cases
      Live events
      Video platforms
      Low-latency streaming

Things people build with this

USE CASE 1

Run a live streaming platform where broadcasters send video via OBS and viewers watch in their browser.

USE CASE 2

Build a low-latency video chat or live event system using WebRTC delivery to reduce streaming delay.

USE CASE 3

Set up a video-on-demand service that transcodes and distributes content across multiple formats and devices.

USE CASE 4

Deploy a multi-server streaming cluster to handle high viewer loads by distributing traffic across edge nodes.

Tech stack

C++RTMPHLSWebRTCFFmpegSRTDocker

Getting it running

Difficulty · hard Time to first run · 1day+

Requires Docker, FFmpeg compilation, WebRTC stack setup, and multiple protocol implementations; no single quick-start path.

Use freely for any purpose including commercial, as long as you keep the copyright notice.

In plain English

SRS (Simple Realtime Server) is a self-hosted media server written in C++ that handles live video streaming. Its job is to receive a video stream from a broadcaster and deliver it to many viewers simultaneously, acting as the hub between a video source and an audience. The server supports a wide range of streaming protocols. On the ingest side, it accepts streams sent via RTMP (the protocol used by broadcasting tools like OBS) and SRT. On the delivery side, it can serve those streams to viewers in multiple formats: RTMP for desktop players, HLS (HTTP Live Streaming, which plays in browsers and mobile apps), HTTP-FLV (a browser-compatible format), MPEG-DASH (an adaptive streaming format), and WebRTC (for low-latency real-time communication in browsers). This flexibility means the same single incoming stream can be delivered in whatever format different viewers' devices need. For video and audio encoding, SRS handles H.264, H.265, AV1, VP9, AAC, Opus, and G.711. It can also transcode streams using FFmpeg, forward streams to other servers, and cluster into edge-origin configurations to distribute load across multiple machines. A streaming platform, a live event broadcaster, or a developer building a video-on-demand or live chat product who needs a lightweight, open-source alternative to managed streaming services would deploy SRS on their own server. It can be run from source, via Docker, or on cloud virtual machines.

Copy-paste prompts

Prompt 1
How do I set up SRS to accept RTMP streams from OBS and deliver them as HLS to web browsers?
Prompt 2
Show me how to configure SRS to transcode incoming streams with FFmpeg and serve them in multiple formats simultaneously.
Prompt 3
What's the simplest way to deploy SRS in Docker and test it with a sample RTMP stream?
Prompt 4
How do I cluster multiple SRS instances together so one origin server feeds content to edge servers for load distribution?
Prompt 5
Can you explain how to use SRS for low-latency WebRTC streaming instead of HLS?
Open on GitHub → Explain another repo

Generated 2026-05-18 · Model: sonnet-4-6 · Verify against the repo before relying on details.