{
  "version": "2",
  "generatedAt": "2026-11-06T20:51:57.517Z",
  "listing": {
    "slug": "ossrs--srs",
    "name": "SRS",
    "tagline": "MIT real-time media server for RTMP, WebRTC, HLS, SRT and more, with an HTTP API.",
    "shortTagline": "Real-time media server",
    "description": "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",
    "alternativeTo": [],
    "shape": "product",
    "formFactor": "api",
    "executionModel": "deterministic",
    "provenance": "unknown",
    "codeStack": {
      "languages": [
        "C++",
        "Go"
      ],
      "frameworks": [],
      "packageManager": null,
      "database": [],
      "hostingTarget": [
        "docker",
        "binary"
      ]
    },
    "modelStack": null,
    "repos": [
      {
        "url": "https://github.com/ossrs/srs",
        "owner": "ossrs",
        "name": "srs",
        "license": "MIT",
        "stars": 29427,
        "lastCommit": "2026-10-31"
      }
    ],
    "interface": {
      "kind": "api",
      "url": "https://ossrs.io/lts/en-us/docs/v6/doc/http-api",
      "official": true,
      "hosted": "local"
    },
    "operability": "official",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "Check server health and stats",
        "reachable": true,
        "evidence": "GET /api/v1/summaries, /rusages, /meminfos in the HTTP API docs"
      },
      {
        "job": "List and inspect streams and vhosts",
        "reachable": true,
        "evidence": "GET /api/v1/streams and /api/v1/vhosts"
      },
      {
        "job": "List clients and kick one off",
        "reachable": true,
        "evidence": "GET /api/v1/clients and DELETE /api/v1/clients/{id}"
      },
      {
        "job": "Reload the server config",
        "reachable": true,
        "evidence": "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)"
      },
      {
        "job": "Publish a stream over WebRTC",
        "reachable": true,
        "evidence": "POST /rtc/v1/whip/?app=live&stream=livestream with an SDP body"
      },
      {
        "job": "React to publish and play events",
        "reachable": true,
        "evidence": "http_hooks on_publish, on_unpublish, on_play, on_stop call your URL (conf/http.hooks.callback.conf)"
      },
      {
        "job": "Change HLS, DVR, transcode, forward or cluster settings",
        "reachable": false,
        "evidence": "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)"
      },
      {
        "job": "Start or stop an ingest or forward target",
        "reachable": false,
        "evidence": "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."
      }
    ],
    "editions": [
      {
        "name": "Free",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/ossrs/srs"
          },
          {
            "kind": "container",
            "url": "https://hub.docker.com/r/ossrs/srs/tags",
            "command": "docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 -p 8000:8000/udp -p 10080:10080/udp ossrs/srs:6"
          }
        ]
      }
    ],
    "skills": {
      "kind": "bundled",
      "paths": [
        "skills/srs-support/SKILL.md"
      ],
      "install": null,
      "note": "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."
    },
    "customization": {
      "summary": "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.",
      "envVars": [
        "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"
      ],
      "configFiles": [
        "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"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "editCount": 16
    },
    "useWhen": [
      "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"
    ],
    "accounts": [],
    "active": true,
    "lastActivity": "2026-10-31",
    "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"
    ],
    "fit": {
      "adaptable": 3,
      "operable": 2
    },
    "evidence": {
      "formFactor": "README: real-time media server; Docker run command",
      "executionModel": "no model in the serving path; conf-driven",
      "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.",
      "effort": "trunk/conf has per-feature conf files; http-api doc shows SRS_* env override comments; checked that the conf blocks change stream behavior",
      "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.",
      "active": "gh api: last commit 2026-10-31; releases 2026-10-30"
    },
    "confidence": {
      "formFactor": 0.85,
      "executionModel": 0.9,
      "operability": 0.95,
      "effort": 0.8,
      "reach": 0.9,
      "editions": 0.9,
      "provenance": 0.2
    },
    "openQuestions": [],
    "sources": [
      {
        "url": "https://ossrs.io",
        "foundBy": "sourcing:video-streaming:github"
      },
      {
        "url": "https://ossrs.io",
        "foundBy": "sourcing:video-streaming:curated"
      },
      {
        "url": "https://github.com/ossrs/srs",
        "foundBy": "analysis"
      },
      {
        "url": "https://ossrs.io/lts/en-us/docs/v8/doc/http-api",
        "foundBy": "verification"
      },
      {
        "url": "https://ossrs.io/lts/en-us/product",
        "foundBy": "verification"
      }
    ],
    "published": true,
    "lastCheckedAt": "2026-11-06",
    "research": {
      "stage": "verified",
      "verdict": "approve",
      "reason": "Gates pass: MIT, 29,427 stars, security fixes and releases on 2026-10-30 and 31. v8 API paths match v6 in source and docs. No paid edition: the Builder ended paid services in January 2025. Conf files change stream behavior, so config-only holds.",
      "disputed": []
    },
    "url": "apps/ossrs--srs.html",
    "coverage": "partial",
    "paid": false,
    "source": "research/verified/ossrs--srs.json"
  }
}
