internal-perf-for-srs
Skill29k starsChanged 3 months agoMITView on GitHub
Use for SRS performance work - when asked to load test, benchmark or profile the SRS C++ media server or the Go server (the proxy), find or fix a performance bottleneck, compare performance between versions or changes, or run or resume a performance round. Use from the srs-develop Task Router for performance tasks.
We split this skill into the rules it gives an agent
18 rules. About 0 are common, 10 are distinctive, and 8 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈10
Distinctive · estimate
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 27
When it is unclear which server the user means, ask.
- Very specific: line 58
Temporary images: only srs-perf:local, which every make perf rebuilds, is kept:
- Very specific: line 61
Remove every temporary image and container before a step ends, and log the images left.
- Distinctive: line 100
When a baseline report already exists for the round's commit and setup, such as one made while building the tools, start from it instead of …
- Distinctive: line 104
Follow the target's Start a Round: which scenarios table the round keeps, how long its baseline takes, and how a fix is measured.
- Very specific: line 110
Run make perf-env-check when the image, Docker or the machine changed since the last round.
- Very specific: line 114
Run bash scripts/perf-run.sh -scenario <s>, with the target's flags:
- Distinctive: line 120
Read a capacity as a ramp step, not an exact figure:
- Very specific: line 129
Read each profile hold's files per the target's reference: its Linux perf profiles or Go profiles section.
- Distinctive: line 131
Write the ranking table in the round file: the rank, the code path, its self share at both holds, the syscall counts, and the files and …
- Distinctive: line 132
Start a chain for the new top bottleneck if it has none.
- Distinctive: line 143
Keep: when the tests pass and no measured scenario loses 10% or more in capacity or CPU per client, even when the numbers are flat.
- Very specific: line 144
Drop: when a test fails or a scenario loses 10% or more: restore the changed files with git checkout -- <files>, commit nothing, and log …
- Distinctive: line 146
Add the step to the bottleneck's chain: the change, the commit, the method and window, CPU before and after as mean ± sd, the difference …
- Very specific: line 147
Remove the A/B's baseline image if it was kept (-keep), and log the images left.
- Distinctive: line 148
After a kept change, re-profile and rank again.
- Distinctive: line 154
After the change, the tests the target's Check names.
- Very specific: line 175
When no version bump came between them, it has the baseline's date and version and the -after-docker.md name of the target's Report, with …
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
SRS Performance Rounds
A round measures one server, the target, under many simulated clients, finds the bottlenecks, improves them one by one, and ends with a report. This file holds what every target shares: the rules, the tools, the round file and the workflows. What differs per target, such as its scenarios, profiles, tests and verified capacities, is in the target's reference, chosen by the Target Router.
- Round file: each round has one file
cmd/perf/out/reports/<YYYY-MM-DD>-v<version>-round.mdin this skill's own format, made from references/round-template.md. It holds the round's data, the ranking, one chain per bottleneck, the steps and the work log. Like the reports, it is the round's working output, git-ignored and never committed. It is not an srs-autopilot task file: it has no worktree, tracker row or review table, and only this skill's workflows run it. - Reports: the baseline report, and at the end an after-report, made from references/report-template.md in the git-ignored
cmd/perf/out/reports/. They are not committed: their numbers hold only for the setup that made them. The round file links them. - Profiles: each target's reference explains its profiles and how to rank them: Linux
perffor the C++ server, Go profiles for the Go server.
Skill Dependencies
skills/srs-develop/SKILL.md— every code change, its tests and its commit.
Target Router
A round measures one target, never two: a C++ round and a Go server round each have their own round file and reports. Load the reference of the target being measured:
| Target | Use when | Load |
| C++ media server | The round measures the origin or edge server in trunk/, on any protocol, with Linux perf profiles | references/cpp-server.md |
| Go server | The round measures the Go server in cmd/ and internal/, today the proxy in front of C++ origins, with Go profiles | references/go-server.md |
When it is unclear which server the user means, ask. A new target gets its own reference and a row here; its text never goes into this file.
Rules
- Paths:
scripts/andreferences/resolve relative to the directory containing thisSKILL.md, not the current working directory; repository paths such ascmd/perf/andbin/resolve relative to the repository root. - By hand: a round starts only when the user asks. An SRS version bump in
srs-developasks the user whether to run one for the new version; start it only on a yes. Never from a commit, a PR, CI or a schedule. Nothing here is a pass or fail gate. - One at a time: one scenario, one step, one profile. A run takes minutes, about 10 for RTMP, and a round as long as its tries need. Keep the ramp steps and holds at their usual length, so a run compares with the baseline.
- Alone on the machine: load skews other jobs and they skew the numbers.
perf-run.shwaits for and holds thesrs-developFull-tier lock for the whole run, so it never runs beside a Full tier. - Linux in Docker: the numbers are fair for profiles and for comparing two runs on the same setup, not as the capacity of a real server. Every report says so.
- Flat CBR source: the server's CPU follows the media bitrate, so a VBR source makes two runs, or two servers at different points of the loop, not comparable. Every measurement, on every target and protocol, uses the flat CBR source in
srs-perf:local:/srs/perf/cbr.flv: 60s, H.264 at 200 kbps CBR with a one-frame buffer, 25 fps, an IDR every 2s, no B frames, and AAC 32 kbps./srs/perf/cbr-flatness.json: its flatness, which every report records. The image fails to build when the source is not flat.- Not
doc/source.flv: its video runs from a few kbps to over 1 Mbps in one second. bin/srs-perf runandsmokeread it by default;-media <flv>names another source, which needs its<name>-flatness.jsonbeside it. They refuse a source whose flatness record is missing or not flat, and copy the source and its record into each result's setup.comparetreats two sources as two setups.make perf-env-checkpublishes it too; the containers mount no media.
- Per-second samples:
bin/srs-perf runandsmokesample once a second and keep every sample inresult.json:- The target's CPU is its container's cgroup
cpu.statusage_usec, which counts every thread to the microsecond. The load container runs with--cgroupns hostand finds the cgroup from/proc/<pid>/cgroup; each sample keeps the rawsrs_cpu_usage_usectoo. The fields keep thesrs_prefix for every target. - RSS is from
/proc/<pid>/status, and each worker's CPU from its/proc/<pid>/stat. - Each step has a
windowwith the mean and sd of each metric (CPU, RSS, the workers' average CPU, frames, bytes, lag, failures) over its counted samples; a hold's result carries its step'swindow. - Anything else in the target's container, such as a profiler, counts in its cgroup too, so no profiler runs in a measuring window.
- The target's CPU is its container's cgroup
- Lag in publisher time: a player fails when its newest message is more than 2s behind the publisher's newest:
- SRS's default
time_jitter fullstarts each player's timestamps near zero, so a player that joins after the first IDR gets timestamps about one GOP smaller than the publisher's, though it is live. - The load tool places a player's first video frame in the source by its payload, so every video frame of the source must have a unique payload; a run refuses a source without one.
- SRS's default
- No profiler in the window: a measuring hold lets its clients settle 30s, then counts every sample of its window, 60s by default and 180s for a verdict, with nothing else running in the target's container:
- The profilers run afterwards, in their own profile hold at the same client count, one per hold count.
- A profile hold's CPU includes the profiler, so it is never a measurement: its result has no CPU per client, stays out of
run.json, andcomparerefuses it. - The ramp only probes capacity by health. Its CPU per client includes connecting each step's new clients, so
compareprints it as a note and never flags it.
- A/B preferred, sequential accepted: a comparison of two builds reports each side's CPU mean and sd over its window, and the difference with its 95% CI:
- A/B, preferred: scripts/perf-ab.sh runs both builds at once on their own cores, with the same source, load tool and client count, and pairs their samples per second. Both servers swing with the machine together, so the paired difference removes that shared noise.
- Sequential, accepted: a run of the candidate compared with one recorded earlier under the same conditions: the source, cores, client counts and window. The CI is unpaired and noisier; say so wherever the result is written.
- A verdict on a change uses a 180s window; both sides need the same window.
- Temporary images: only
srs-perf:local, which everymake perfrebuilds, is kept:- A baseline image
srs-perf-ab:<task>-<rev>is removed byperf-ab.shwhen it finishes, or withdocker rmionce its comparison is done when it was kept with-keep. - A build-check image
srs-perf-build:<flag>is removed when its check ends. - Remove every temporary image and container before a step ends, and log the images left. Ask the user before
docker builder prune.
- A baseline image
- Shipped defaults: each server runs with its shipped defaults and is configured only by environment variables, one env file per scenario under
cmd/perf/env/, changed only where the scenario needs it. No config file. A tuning setting is a candidate like any other.
Tools
The shared tools. Each target's reference lists its own scenarios, its -target flag and the tools only it uses.
make perf: builds the imagesrs-perf:localandbin/srs-perf.make perf-unit: runs the load tool's Go unit tests.make perf-smoke SCENARIO=<s>: a short run of 100 clients of one scenario, to check that it works.make perf-smoke: With noSCENARIO,make perf-smokesmokes every scenario of the target in turn and fails if any failed; about 5 minutes.make perf-source-test: checks that the CBR source in the image is flat.make perf-env-check: checks the containers,perfsymbols and the core calibration.bin/srs-perf compare <old.json> <new.json>: compares two results and flags a 10% change. For two holds, it gives each side's mean and sd and the 95% CI of the difference: paired per second for the two sides of one A/B run (-ab-run <id>), otherwise unpaired, which is noisier. The 10% flag uses the mean difference. It refuses two results of different targets.
Scripts, called by the workflows below:
- scripts/perf-run.sh: the load run. A ramp to capacity in 5s steps, up to 40,000 clients (2,000 for SRT and WebRTC), three measuring holds (50%, 50% again for the noise, 90%), each a 30s settle and a
-window <seconds>, then two profile holds intoprofile-<50|90>/. It prints the path ofrun.json. - scripts/perf-ab.sh: the A/B run of two builds at once, the preferred comparison. The baseline is
-baseline <rev>, or HEAD with-revert <commit>, that commit's change to the target taken out; the candidate is the worktree. It buildssrs-perf-ab:<task>-<rev>, removed unless-keep, and writesab.jsonandverdict.txt. - scripts/perf-ab-test.sh: tests the A/B run with HEAD against itself.
- scripts/perf-verify.sh
<run dir>: checks a run before ranking, and prints its top symbols and noise. - scripts/perf-verify-test.sh: tests the run check.
- scripts/perf-cap-check.sh: one 20s hold at the client cap, to check that every player connects.
- scripts/perf-source.sh: encodes the CBR source.
- scripts/perf-source-check.sh
<flv> <target kbps>: checks that a source is flat. - scripts/perf-source-test.sh: the test behind
make perf-source-test. - scripts/perf-env-check.sh: the environment check.
- scripts/perf-skill-test.sh: checks this skill's text and scripts.
Outputs go to the git-ignored cmd/perf/out/<run>/: run.json, each result's result.json and noise, and the profiles in profile-<50|90>/.
Workflows
Each step below names what the target's reference adds, such as its scenarios, profiles, tests and report name.
Start a Round
- Name it from the start date and the version of the server being measured, such as
cmd/perf/out/reports/2026-10-19-v8-round.md, or2026-10-19-v8-rtmp-round.mdfor one protocol; the target's reference gives its name. - Copy references/round-template.md there, and fill every
<...>placeholder: the version, the date, the target, the checkout and branch the round works in (the current one unless the user names another), the scenarios, and the limit on improvements and tries if the user gave one, such as one kept change in at most 3 tries. - When a baseline report already exists for the round's commit and setup, such as one made while building the tools, start from it instead of measuring again:
- Point Background's Baseline at the report and its JSON, and tick the Baseline steps with the run and report they came from.
- Fill the Ranking from the report's Bottlenecks, and Chain 1 for the top one, with its baseline row: capacity, CPU per client and CPU at both holds, and the top symbols with their shares.
- Name the hold client counts of the baseline in Chain 1, since every fix is measured at the same counts.
- Follow the target's Start a Round: which scenarios table the round keeps, how long its baseline takes, and how a fix is measured.
- The round file is in the git-ignored
cmd/perf/out/reports/, so it is never committed.
Build the Tools
- Run
make perf. - Run
make perf-env-checkwhen the image, Docker or the machine changed since the last round. Ifperfgets no samples or no SRS symbols, stop and ask the user; do not buildperf, switch to a VM, or use another profiler on your own.
Run the Load and Profile
- Run
bash scripts/perf-run.sh -scenario <s>, with the target's flags:- One run,
-repeat 1, is the default for a baseline and for a fix; about 10 minutes for RTMP. - The holds follow the run's own ramp. For a fix,
-hold-clients <50%>,<90%>holds at the baseline's counts instead, such as-hold-clients 6400,11520, so the holds compare at the same load. -window <seconds>sets the measuring holds' window: 60 by default, 180 for a fix's verdict. A comparison needs the same window on both sides.- Other flags pass through to
bin/srs-perf runfor the ramp, such as-clientsand-cap.
- One run,
- Record in the round file the run directory, the capacity, each hold's CPU mean and sd and its CPU per client, the noise between the two 50% holds, and the core calibration gap. A gap over 10% marks the run noisy. The run does not measure the gap itself: it copies the one from the last
make perf-env-check, so note that check's date. - Read a capacity as a ramp step, not an exact figure:
- Two runs of the same build can differ by one doubling step, when the step after the capacity reads a point or two from 90% or fails on a connect burst.
- Each target's Verified Scenarios names the ones seen to move.
- Compare two runs by their CPU per client at the same hold counts; never call a one-step capacity difference a gain or a loss on its own.
- Rerun only when a comparison's 95% CI spans the 10% line, such as a −9% difference with a CI of −12% to −6%: run an A/B, or run again with a 180s
-window, and log why.
Rank Bottlenecks
- Run
bash scripts/perf-verify.sh <run dir>. Fix or rerun a run it fails before ranking it. It prints each profile hold's top symbols and the noise between the two 50% holds; a noise of 10% or more is noted, so compare that scenario by an A/B or a 180s rerun. The target's reference says what else it checks. - Read each profile hold's files per the target's reference: its Linux
perfprofiles or Go profiles section. - Rank by cost at the 90% profile hold, grouped into the code path of the target that owns it.
- Write the ranking table in the round file: the rank, the code path, its self share at both holds, the syscall counts, and the files and functions.
- Start a chain for the new top bottleneck if it has none.
Fix the Top Bottleneck
- Take the current #1 of the ranking. Read its numbers and profile from the round file.
- Change the target's code per
srs-develop. - Run Check.
- Measure:
- The verdict: an A/B at the 90% hold count with the default 180s window, such as
perf-ab.sh -baseline HEAD -clients 11520before the commit, or-revert <commit>after it. Itsverdict.txtgives each side's CPU mean and sd and the paired difference with its 95% CI. The target's reference says which hold count fits its A/B. - Capacity and the other scenarios: Run the Load and Profile for each scenario the change targets and each scenario its code path also serves, with
-hold-clientsat the baseline's hold counts, thenbin/srs-perf compare <baseline.json> <run.json>for each. This is a sequential comparison: its CI is unpaired and noisier.
- The verdict: an A/B at the 90% hold count with the default 180s window, such as
- Decide:
- Keep when the tests pass and no measured scenario loses 10% or more in capacity or CPU per client, even when the numbers are flat. A gain may show only after the rest of a bottleneck spread over several functions is fixed.
- Drop when a test fails or a scenario loses 10% or more: restore the changed files with
git checkout -- <files>, commit nothing, and log the numbers and both symbol tables. - A loss counts by the mean difference; when its 95% CI spans the 10% line, rerun per Run the Load and Profile before dropping.
- Add the step to the bottleneck's chain: the change, the commit, the method and window, CPU before and after as mean ± sd, the difference with its 95% CI, the capacity, and the top symbols with their shares.
- Remove the A/B's baseline image if it was kept (
-keep), and log the images left. - After a kept change, re-profile and rank again; the next try fixes the new #1.
- A chain with 5 kept steps and no gain overall is marked "no gain yet, needs review", is not reverted, and the round moves on to the next bottleneck.
- The bottleneck work ends when the top bottleneck is something the target cannot reasonably fix, such as the kernel, syscalls already batched, or crypto in RTC, or when the round's limit is reached.
Check
- After the change, the tests the target's Check names. Every layer must pass.
make perf-unitwhencmd/perfchanged.
Commit
Per the srs-develop commit format, one commit per kept change, on the round's branch; never push. Add the commit to its chain step. The message gives:
- The scenario, the client counts of the holds, and the run directories.
- The comparison's method and window, such as an A/B paired per second over 180s, or sequential and unpaired.
- The target's CPU before and after as mean ± sd, and the difference in points and percent with its 95% CI.
- The before and after capacity and CPU per client, and the
compareflags. - The top symbols with their self shares, before and after, from the profile holds.
Write the Report
- Make the report from references/report-template.md in
cmd/perf/out/reports/, named per the target's Report, and copy the run's combined JSON next to it with the same name and.json. Both are git-ignored and stay on this machine, for the round andbin/srs-perf compare. - The baseline report fills every section except Before and after:
- The Setup's Source is the result's
setup.sourceand its flatness recordsetup.source_flatness: the per-second mean, min and max, the per-frame sd, and the ffmpeg version. - Each hold gives the target's CPU as mean ± sd over its window, from the result's
window.
- The Setup's Source is the result's
- The after-report fills Before and after too, with
bin/srs-perf compareagainst the baseline, the method and 95% CI of each comparison, and the list of the round's commits:- Its final run uses
-hold-clientsat the baseline's hold counts, so every hold has a partner in the compare. - When no version bump came between them, it has the baseline's date and version and the
-after-docker.mdname of the target's Report, with its JSON beside it; link the baseline report from Before and after.
- Its final run uses
- Link it from the round file's Background.
- Flame graphs and profile data stay in
cmd/perf/out/; copy only the top-symbol tables into the report.
Review
The user reviews the round's commits, listed in the chains, asynchronously while the round runs. Looking at the chains, the review keeps the commits that helped and drops the rest; the round needs no approval to go on.
Trending
More talk lately.about the whole repository
Who's talking about ossrs/srs
- 迷途小书童的Note“使用开源视频服务器SRS搭建自己的直播、点播系统”YouTube · Apr 14, 2019 · 4.6k views
- SRS Community“CommCon2023: Sub-Second Latency Streaming Technologies and Applications”YouTube · Jul 28, 2023 · 876 views
- CodeTimelapse“The Birth of SRS: A Real-Time Media Server's First Commit 🚀”YouTube · Oct 2, 2026 · 238 views
- CodeTimelapse“The Birth of SRS: A Real-Time Media Server's First Code Steps ✨”YouTube · Sep 8, 2026 · 54 views
- githubrepo_cloud“🔥 [1 Repo Every Developer Should Know] srs: The Free Tool Taking Over GitHub! #shorts”YouTube · Oct 7, 2026 · 39 views
The biggest 5 of 67 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 67
Talked about on GitHub, Stack Overflow, YouTube and the web (67 times).
On GitHub · 50
- Apr 16, 2023FFmpeg: Add Whip Muxer support for subsecond latency streaming — ossrs/ffmpeg-webrtc22 reactions · 4 comments
- Mar 16, 2017视频直播的技术原理和实现思路方案整理 — f2e-journey/xueqianban18 reactions · 4 comments
- Jan 17, 2024Wishlist for new benchmarks — dtcxzyw/llvm-opt-benchmarksays it tested it5 reactions · 15 comments
- Aug 14, 2024克隆人像和声音,metahuman与GPT-SoVITS接口打通,过程汇总。 — lipku/LiveTalking2 reactions · 4 comments
- Apr 8, 2024srs: init at 5.0-r2 — NixOS/nixpkgs2 reactions · 9 comments
45 more on GitHub
- Apr 8, 2024Package request: srs — NixOS/nixpkgs1 reaction · 2 comments
- Jun 15, 2022编译运行之后日志正常但是sip和rtc的端口都未启动,以服务形式运行则不能正常启动,但是没有有效的错误日志 — ossrs/srs-gb281811 reaction · 1 comment
- Jan 5, 2022GB28181: srs部署再云端的,海康摄像头GB28181配置完成后,显示在线,但是查询所有会话,devices是空的。 #2417 — ossrs/srs-gb281811 reaction
- Apr 18, 2020Support MSG_ZEROCOPY for streaming server. — ossrs/state-threads1 reaction · 9 comments
- Feb 25, 2017Use KCP or go-kcp for realtime transport over UDP — ossrs/httpx-static1 reaction · 1 comment
- Aug 11, 2026Add FFmpeg 8.1.2 with WHIP and Enhanced RTMP HEVC support — ossrs/dev-docker0 reactions
- Jul 25, 2026Add fingerprint rule for simple_realtime_server (SRS) — hexbay/finger-rules0 reactions
- May 22, 2026Evaluate: mediamtx vs SRS (ossrs/srs) for streaming relay — thejoeejoee/co-ansible0 reactions
- Mar 16, 2026fix: update SRS reference link to GitHub repo — thomedw/blog0 reactions
- Aug 27, 2025add ffmpeg 7.1.1 to docker image. — ossrs/dev-docker0 reactions
- Jun 27, 2025fix config hot-reload on k8s — mostlygeek/llama-swap0 reactions · 2 comments
- Nov 1, 2024Let oryx backend by srs origin cluster — ossrs/oryx0 reactions · 3 comments
- Apr 17, 2024srs yum install — wlnmp/wlnmp0 reactions
- Nov 8, 2023Adding extended RTMP support — noirotm/flvmeta0 reactions · 11 comments
- Nov 2, 2023Add WebRTC-HTTP ingestion protocol (WHIP) muxer & WebRTC-HTTP egress protocol (WHEP) demuxer — nativewaves/FFmpeg0 reactions · 2 comments
- Jun 28, 2023使用SRS搭建GB28181服务器 | H5NVR--专注监控视频流在线分发-长沙零天信息科技有限公司 — scdn/gitalk0 reactions
- Jun 28, 2023使用SRS搭建GB28181服务器 | H5NVR--专注监控视频流在线分发-长沙零天信息科技有限公司 — scdn/gitalk0 reactions
- Jun 5, 2023测试用的rtmp服务器 — flxxyz/go-rtmp-to-websocket0 reactions
- May 11, 2023rtmp server和rtmp client能否支持302重定向? — ireader/media-server0 reactions · 1 comment
- Apr 23, 2023SRS编译失败 — ossrs/srs-sctp0 reactions
- Feb 26, 2023Updated single-repositories/github/ossrs/srs.yml — oss-compass/compass-projects-information0 reactions · 2 comments
- Feb 6, 2023Change play url from whip-play to whep — ossrs/srs-unity0 reactions · 1 comment
- Nov 30, 2022About file issue — ossrs/dev-docker0 reactions
- Nov 8, 2022Audio streaming — Wint3rmute/libretakt0 reactions
- Oct 8, 2022Add empty streamid doc in srt-url — ossrs/srs-docs0 reactions
- Aug 31, 2022addpatch: srs 4.0_r2-2 — felixonmars/archriscv-packages0 reactions
- Mar 31, 2022二进制安装的srs_ingest_helper 启动后,浏览器访问http://ip:8086 服务就宕了 这是为什么啊? — alongL/srs_ingest_helper0 reactions · 1 comment
- Jan 24, 2022HLS and HTTP TS stream support in ossrs/srs — aniclover/vrc-aniclover-world0 reactions
- Jan 19, 2022关于replace_startcode_with_nalulen的热点较高 — ossrs/srs-gb281810 reactions
- Jan 5, 2022What about H.265? #2155 — ossrs/srs-gb281810 reactions · 1 comment
- Jan 5, 2022海康gb28181 有流,但是无法用vlc播放 #2841 — ossrs/srs-gb281810 reactions · 1 comment
- Jan 5, 2022GB28181接入NVR,跑一段时间后奔溃,进程退出 #1790 — ossrs/srs-gb281810 reactions · 1 comment
- Jan 5, 2022delchannel chid is not required — ossrs/srs-gb281810 reactions
- Jan 5, 2022Fix #2570, remove useless audio track info in PMT when no audio — ossrs/srs-gb281810 reactions
- Jan 5, 2022GB28181: fixed crash when deleting gb28181 channel — ossrs/srs-gb281810 reactions
- May 8, 2021Add optional tcUrl field for request_connection — KallDrexx/rust-media-libs0 reactions · 1 comment
- Jan 9, 2021srs #2071 这个问题帮忙给个修改思路 谢谢 — xialixin/srs0 reactions
- Jun 28, 2020夏老板,能不能帮忙看看28181的问题 — xialixin/srs0 reactions
- Jun 15, 2020SRS 4.0,大量推流,会有内存泄漏 — chatop2020/SRSManager0 reactions · 3 comments
- Apr 23, 2020Fully implement SRS callback API — chaoswest-tv/portier0 reactions
- Apr 18, 2020Support sendmmsg for UDP. — ossrs/state-threads0 reactions · 2 comments
- Dec 17, 2019feature request: pls add callback function just like srs do — jbl19860422/go_srs0 reactions · 1 comment
- Oct 29, 2018Remove HLS #EXT-X-ALLOW-CACHE deprecated. — lino-network/srs0 reactions
- Mar 13, 2018推流成功后观看视频画面一直花屏 — begeekmyfriend/yasea0 reactions · 1 comment
- May 26, 2017how to support http-flv live stream use nginx-rtmp-module and nginx? — arut/nginx-rtmp-module0 reactions · 2 comments
On Stack Overflow · 8
- Apr 23, 2020SRS (RTMP) authentification with PHP error4 votes · 2 answers
- Oct 15, 2020SRS how enable HTTPS for HLS stream?2 votes · 1 answer
- Mar 21, 2019How to build a stream website like twitch with spring1 vote
- Jan 19, 2019C# Camera stream server with Console App using Raspberry Pi Raspberrian1 vote
- Apr 14, 2022DVR RTMP Stream into HLS (m3u8) in SRS0 votes · 1 answer
3 more on Stack Overflow
- Apr 1, 2022Stream published to open source RTMP servers does not appear on resttream.io0 votes · 1 answer
- Feb 2, 2019Convert MJPEG RTP stream to MP4 RTP stream with FFMPEG - how?0 votes · 1 answer
- Jul 18, 2020How to make project from github-1 votes · 3 answers
On YouTube · 6
- Apr 14, 2019使用开源视频服务器SRS搭建自己的直播、点播系统 — 迷途小书童的Note4.6k views · 21 comments
- Jul 28, 2023CommCon2023: Sub-Second Latency Streaming Technologies and Applications — SRS Community876 views · 2 comments
- Oct 2, 2026The Birth of SRS: A Real-Time Media Server's First Commit 🚀 — CodeTimelapse238 views
- Sep 8, 2026The Birth of SRS: A Real-Time Media Server's First Code Steps ✨ — CodeTimelapse54 views
- Oct 7, 2026🔥 [1 Repo Every Developer Should Know] srs: The Free Tool Taking Over GitHub! #shorts — githubrepo_cloud39 views
1 more on YouTube
- Oct 6, 2026CVE-2026-105486: SRS Streaming Server Hijack Explained — SecureTechIn34 views
On the web · 3
- Nov 5, 2021Chrome screen sharing is streamed to SRS via WebRTC ... — google.com
- Mar 25, 2020Improve Performance for SRS · Issue #1673 · ossrs/srs — google.com
- Oct 18, 2016The SRS server crashed after stopping the stream. · Issue ... — google.com
In this repository9 other files it gives its agents.
- .openclaw/AGENTS.mdAGENTS.md
- internal-audit-for-srsSkill
- internal-chrome-controlSkill
- internal-codemap-for-srsSkill
- internal-docs-for-srsSkill
- internal-obs-controlSkill
- srs-autopilotSkill
- srs-developSkill
- srs-supportSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

