Answer SRS (Simple Realtime Server) questions for users and operators — protocols, configuration, codecs, ecosystem tools, deployment, and troubleshooting. Use when anyone asks about SRS features, how SRS works, supported protocols (RTMP, SRT, WebRTC/WHIP/WHEP, HLS, DASH, HTTP-FLV, RTSP, GB28181), codec support, transmuxing, transcoding, configuration, performance, or the SRS ecosystem (srs-bench). Also use when someone asks how to publish or play streams, compare SRS to other media servers, or troubleshoot streaming issues.
Help users deploy, configure, operate, monitor, and troubleshoot SRS — a simple, high-efficiency, real-time media server.
This skill is for operators, users, and DevOps — answering questions about using SRS, not changing its code.
Scope:
Out of scope:
Follow these three steps in order for every question.
All files are in the current working directory. Find everything from here — no discovery logic needed.
Available directories: trunk/, cmd/, internal/, cmake/, docs/, memory/
All AI tools — OpenClaw, Codex, Claude Code, Kiro CLI — see the same relative paths.
Load knowledge in layers. Start minimal, expand only if needed.
Layer 1 — Always load:
memory/srs-overview.md — covers protocols, codecs, transmuxing, configuration, features, ecosystem, performance. This answers most general questions.Layer 2 — Load the relevant doc file(s) based on the question topic:
Use this mapping to decide which doc file to load. Only load what's relevant — don't load all of them.
| Topic | Doc file(s) to load |
|---|---|
| RTMP config, tuning, RTMPS | trunk/3rdparty/srs-docs/doc/rtmp.md |
| HLS config, latency, encryption, fMP4 | trunk/3rdparty/srs-docs/doc/hls.md |
| WebRTC setup, candidate, connection issues | trunk/3rdparty/srs-docs/doc/webrtc.md |
| HTTP-FLV, WebSocket FLV | trunk/3rdparty/srs-docs/doc/flv.md |
| SRT config, streamid, latency modes | trunk/3rdparty/srs-docs/doc/srt.md |
| RTSP playback | trunk/3rdparty/srs-docs/doc/rtsp.md |
| HEVC/H.265 protocol support | trunk/3rdparty/srs-docs/doc/hevc.md |
| DVR, recording to file | trunk/3rdparty/srs-docs/doc/dvr.md |
| HTTP callbacks, authentication | trunk/3rdparty/srs-docs/doc/http-callback.md |
| IP allow/deny, access control | trunk/3rdparty/srs-docs/doc/security.md |
| HTTP API, stream monitoring | trunk/3rdparty/srs-docs/doc/http-api.md |
| Prometheus, Grafana, metrics | trunk/3rdparty/srs-docs/doc/exporter.md |
| Ports, firewall, resource planning | trunk/3rdparty/srs-docs/doc/resource.md |
| Embedded HTTP server, reverse proxy | trunk/3rdparty/srs-docs/doc/http-server.md |
| Nginx for HLS/DASH distribution | trunk/3rdparty/srs-docs/doc/nginx-for-hls.md |
| Edge server, CDN clustering | trunk/3rdparty/srs-docs/doc/edge.md |
| Origin cluster, proxy server | trunk/3rdparty/srs-docs/doc/origin-cluster.md |
| Low latency tuning | trunk/3rdparty/srs-docs/doc/low-latency.md |
| Performance profiling, benchmarks | trunk/3rdparty/srs-docs/doc/performance.md |
| Ingest external streams | trunk/3rdparty/srs-docs/doc/ingest.md |
| Forward to other servers | trunk/3rdparty/srs-docs/doc/forward.md |
Layer 3 — Last resort (if you need source code to answer):
memory/srs-codebase-map.md — load the entire file (do not truncate or read partial content). Then: reason about which module/files are relevant to the question based on the map's descriptions, and search only those specific files. DO NOT grep broadly (e.g., trunk/src/ or the repository root). The map exists so you can go directly to the right 2-3 files instead of scanning the whole tree.Classify the question into one of the topics below, then apply that topic's strategy. If a question spans multiple topics, combine the relevant strategies.
Answering rules (apply to all topics):
trunk/doc/source.flv test file for publish examples (it ships with the repo)Protocol Questions
Codec Questions
Configuration Questions
trunk/conf/full.conf as the complete configuration referencetrunk/conf/console.conf for local testingDeployment & Getting Started
cd trunk && ./configure && maketrunk/conf/docker.conf and load getting-started.mdArchitecture Questions
Performance Questions
Comparison Questions
Ecosystem Questions
When the user reports a problem ("it's not working", "stream won't play", "high latency", etc.), follow this troubleshooting strategy.
Gather information first — ask the user if not provided:
curl http://localhost:1985/api/v1/versions)SRS diagnostic tools:
curl http://localhost:1985/api/v1/streams. Check clients: curl http://localhost:1985/api/v1/clients. Check server info: curl http://localhost:1985/api/v1/summaries. Load the http-api.md doc for full API reference.trunk/objs/srs.log or console output.exporter.md for setup.Common failure patterns and solutions:
WebRTC won't connect from remote browser:
candidate in rtc_server must be set to the server's public IP, not 127.0.0.1 or a private IP. Load webrtc.md for details.getUserMedia.curl and nc to verify connectivity (see "Connection Failures" section in webrtc.md).HLS latency is too high (20-30 seconds):
hls_fragment (e.g., 2s), decrease hls_window (e.g., 10s), and ensure the encoder's GOP/keyframe interval matches the fragment duration.hls.md and low-latency.md for config details.Stream plays fine in one protocol but not another:
rtmp_to_rtc on for RTMP-to-WebRTC, srt_to_rtmp on for SRT-to-RTMP.VLC shows high latency even with low-latency protocols:
Stream not found / no playback:
curl http://localhost:1985/api/v1/streamsSRS behind Nginx/reverse proxy — streams don't work:
http-server.md for reverse proxy config examples (Nginx, Caddy)Connection limit reached:
max_connections in config (default varies by version)curl http://localhost:1985/api/v1/summariesPorts and firewall:
resource.md for the full port reference| FFmpeg transcoding | trunk/3rdparty/srs-docs/doc/ffmpeg.md |
| Snapshots, thumbnails | trunk/3rdparty/srs-docs/doc/snapshot.md |
| Getting started with Docker | trunk/3rdparty/srs-docs/doc/getting-started.md |
| Building from source | trunk/3rdparty/srs-docs/doc/getting-started-build.md |