# SRS

MIT real-time media server for RTMP, WebRTC, HLS, SRT and more, with an HTTP API.

SRS is a C++ media server that takes live streams in over RTMP, WebRTC (WHIP), SRT and others, and serves them out as HLS, HTTP-FLV, WebRTC and more. Behavior such as HLS, DVR, transcoding, forwarding and edge clusters is set in conf files. A JSON HTTP API reports state and can kick off clients, and HTTP hooks tell your own service about publish and play events.

- Capabilities: adaptable, operable
- Vertical: video-streaming
- Shape: product
- Form factor: api
- Execution model: deterministic
- Provenance: unknown (recorded, never ranked)
- Repo: https://github.com/ossrs/srs (MIT), 29427 stars, last commit 2026-10-31
- Last activity: 2026-10-31
- Page: apps/ossrs--srs.html
- JSON: apps/ossrs--srs.json

## Use it when

- you need your own live ingest and playback server instead of paying a streaming platform
- your agent should watch streams and kick clients through an API

## Gotchas

- HTTP API auth is off by default; enable the http_api auth block before exposing port 1985
- The API reads state and kicks clients; config changes need conf edits plus a reload
- No MCP server or A2A endpoint found in the repo
- 6.0 is the stable line and the one the docs link and Docker command use; 7.0 and 8.0 are unstable. API paths match, and 8.0 adds /api/v1/forwards and bearer auth

## Editions

- Free: Free, open source
  - source: https://github.com/ossrs/srs
  - container: docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 -p 8000:8000/udp -p 10080:10080/udp ossrs/srs:6

## Adaptable: make it yours

Effort: config-only (16 things to edit)

Behavior lives in conf files, with documented examples in trunk/conf: HLS, DVR, transcode, forward, ingest, edge and origin clusters, and http_hooks. Many keys can also be overridden by SRS_* env vars, for example HLS, DVR, hooks and the HTTP API login.

- Env vars: SRS_HTTP_API_RAW_API_ENABLED, SRS_HTTP_API_RAW_API_ALLOW_RELOAD, SRS_HTTP_API_AUTH_ENABLED, SRS_HTTP_API_AUTH_TYPE, SRS_HTTP_API_AUTH_TOKEN, SRS_HTTP_API_AUTH_USERNAME, SRS_HTTP_API_AUTH_PASSWORD, SRS_VHOST_HLS_ENABLED, SRS_VHOST_DVR_ENABLED, SRS_VHOST_HTTP_HOOKS_ENABLED
- Config files: trunk/conf/srs.conf, trunk/conf/hls.conf, trunk/conf/dvr.segment.conf, trunk/conf/ffmpeg.transcode.conf, trunk/conf/forward.master.conf, trunk/conf/http.hooks.callback.conf
- Prompt files: none
- Accounts you'll need: none

## Operable: what an agent can drive

Operability: official. Interface: api at https://ossrs.io/lts/en-us/docs/v6/doc/http-api (published by the builder, local).

### Reach (partial coverage)

- Check server health and stats: reachable. GET /api/v1/summaries, /rusages, /meminfos in the HTTP API docs
- List and inspect streams and vhosts: reachable. GET /api/v1/streams and /api/v1/vhosts
- List clients and kick one off: reachable. GET /api/v1/clients and DELETE /api/v1/clients/{id}
- Reload the server config: reachable. GET /api/v1/raw?rpc=reload, needs http_api.raw_api.enabled and allow_reload on; both are off by default (srs_app_http_api.cpp)
- Publish a stream over WebRTC: reachable. POST /rtc/v1/whip/?app=live&stream=livestream with an SDP body
- React to publish and play events: reachable. http_hooks on_publish, on_unpublish, on_play, on_stop call your URL (conf/http.hooks.callback.conf)
- Change HLS, DVR, transcode, forward or cluster settings: not reachable. Edited in conf files only; the raw API accepts only rpc raw, reload, reload-fetch and reopen-log, and query and update are always off (issue 2653 note in the docs)
- Start or stop an ingest or forward target: not reachable. No such call. On v8 GET /api/v1/forwards lists forwards and is read-only; the code comment says a forward ends by kicking its publisher. Ingest and forward are conf blocks.

## Code stack

- Languages: C++, Go
- Frameworks: none
- Package manager: none
- Database: none
- Hosting target: docker, binary

## Skills

bundled: srs-support answers operator questions on SRS config, deployment and troubleshooting; srs-develop, srs-autopilot and the internal-* skills are for people changing the SRS code.
- Paths: skills/srs-support/SKILL.md

## Evidence and confidence

- formFactor: README: real-time media server; Docker run command (confidence 0.85)
- executionModel: no model in the serving path; conf-driven (confidence 0.9)
- operability: ossrs.io v6 and v8 HTTP API docs and trunk/src/app/srs_app_server.cpp on develop: same /api/v1 and /rtc/v1 paths, basic auth block, WHIP endpoint, kickoff DELETE. v8 adds forwards and bearer auth. (confidence 0.95)
- effort: trunk/conf has per-feature conf files; http-api doc shows SRS_* env override comments; checked that the conf blocks change stream behavior (confidence 0.8)
- editions: LICENSE MIT; ossrs.io/lts/en-us/product says all paid support services ended in January 2025 and no paid services are provided. Docker command is the README one; tags 6, 7 and 8 are on Docker Hub. (confidence 0.9)
- active: gh api: last commit 2026-10-31; releases 2026-10-30
- reach:  (confidence 0.9)
- provenance:  (confidence 0.2)

## Sources

- https://ossrs.io (sourcing:video-streaming:github)
- https://ossrs.io (sourcing:video-streaming:curated)
- https://github.com/ossrs/srs (analysis)
- https://ossrs.io/lts/en-us/docs/v8/doc/http-api (verification)
- https://ossrs.io/lts/en-us/product (verification)
