Proxy: restructure repo as Go project with proxy as first module (#4652)

Reorganize the SRS (Simple Realtime Server) repository to
follow a conventional Go project structure, setting the stage for a
progressive transition from a C++ project to a Go project. The proxy,
which was once contained within its own `proxy/` subdirectory, will now
be converted into the initial Go module located at the root of the
repository, serving as a template for subsequent Go modules.

- **Go module at repo root:** `go.mod` moved to repo root, module
renamed from `proxy` to `srsx`. The repo is now a proper Go project with
`cmd/` and `internal/` at the top level.
- **Elevation of Proxy Code:** Move the proxy code from
`proxy/cmd/proxy-go/` to `cmd/proxy/`, and from `proxy/internal/` to
`internal/`. The proxy serves as the inaugural application; subsequent
modules (for instance, `cmd/origin`) will mimic this arrangement.
- **Documentation Restructured:** Transfer the documentation from
`proxy/docs/` to `docs/proxy/`, revise the main README to endorse
OpenClaw as the preferred AI tool, and update `proxy/README.md` to point
to the new documentation locations.
- **Build and config:** `Makefile` moved to root, `PROXY_STATIC_FILES`
default path corrected for the new layout, `.gitignore` consolidated.
- **Cleanup:** removed standalone `proxy/LICENSE` (repo-level license
applies), all internal imports updated to `srsx/internal/...`.
- **OpenClaw workspace:** added community bot info, git workflow
conventions, and support group behavior guidance.

This restructuring was performed by OpenClaw orchestrating Claude Code
and Codex via ACP.

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>
This commit is contained in:
Winlin 2026-03-22 07:54:25 -04:00 committed by winlin
parent aa3da620dc
commit ebf8b712c9
46 changed files with 164 additions and 132 deletions

5
.gitignore vendored
View File

@ -39,3 +39,8 @@ cmake-build-debug
/build
/cmake/build
/trunk/cmake/build
# proxy (Go)
srs-proxy
.go-formarted
.env

1
.kiro/skills Symbolic link
View File

@ -0,0 +1 @@
../openclaw/skills

4
.vscode/launch.json vendored
View File

@ -62,8 +62,8 @@
"type": "go",
"request": "launch",
"mode": "auto",
"cwd": "${workspaceFolder}/proxy",
"program": "${workspaceFolder}/proxy"
"cwd": "${workspaceFolder}/cmd/proxy",
"program": "${workspaceFolder}/cmd/proxy"
},
{
"name": "Debug SRS (macOS, CodeLLDB) console.conf",

View File

@ -4,20 +4,20 @@ all: build
build: fmt ./srs-proxy
./srs-proxy: cmd/proxy-go/*.go internal/**/*.go
go build -o srs-proxy ./cmd/proxy-go
./srs-proxy: cmd/proxy/*.go internal/**/*.go
go build -o srs-proxy ./cmd/proxy
test:
go test ./...
fmt: ./.go-formarted
./.go-formarted: cmd/proxy-go/*.go internal/**/*.go
./.go-formarted: cmd/proxy/*.go internal/**/*.go
touch .go-formarted
go fmt ./...
go fmt ./cmd/... ./internal/...
clean:
rm -f srs-proxy .go-formarted
run: fmt
go run ./cmd/proxy-go
go run ./cmd/proxy

View File

@ -7,7 +7,7 @@ import (
"context"
"os"
"proxy/internal/bootstrap"
"srsx/internal/bootstrap"
)
func main() {

23
docs/proxy/README.md Normal file
View File

@ -0,0 +1,23 @@
# Proxy
Proxy is a common proxy server (`cmd/proxy`) for any media servers with RTMP/SRT/HLS/HTTP-FLV and WebRTC/WHIP/WHEP protocols support. More programs like `cmd/origin` will be added in the future.
## Usage
This project is managed by AI. We recommend OpenClaw by default, but you can use any AI agent that supports skills, such as Claude Code, OpenAI Codex, Kiro CLI, or similar tools that can read code and docs as context. Setup your AI code tool and ask questions like:
- How to use this project?
- How to run the proxy server?
- How to build an Origin Cluster for production?
You can not only use AI to show you the usage of this project, but also use AI to guide you to learn the details of this project, to understand the design and protocols, to learn each documents in docs directory.
## AI Guidelines
- AI assistants should ignore [ignore-worklog.md](ignore-worklog.md) as it's a personal work log that may contain misleading information, hallucinations, or falsehoods. Never rely on this file as a reference.
- For usage of proxy server and end to end test it, you should load [proxy-usage.md](proxy-usage.md). This is the first step for new users to learn how to use this project. It provides a general and overall view of the proxy server, including practical usage examples and end-to-end testing procedures.
- For proxy full usage to build an Origin Cluster for SRS media server, please load [proxy-origin-cluster.md](proxy-origin-cluster.md). This is an advanced topic about how to use the proxy server to build the SRS Origin Cluster. Users should read this document to learn more details and architectures about proxy and Origin Cluster.
- For proxy server: To understand proxy system design, you should load the [proxy-design.md](proxy-design.md). To understand the proxy protocol details, you should load the [proxy-protocol.md](proxy-protocol.md). To understand how load balance works, you should load [proxy-load-balancer.md](proxy-load-balancer.md). To understand the code structure and packages, you should load [proxy-files.md](proxy-files.md).
William Yang<br/>
June 23, 2025

View File

@ -0,0 +1,7 @@
# Work Log
> Important notes for AI assistants: This file might includes misleading information, hallucinations, or even falsehoods, since it's just a personal work log. So AI should never rely on this file as a reference.
SRSX is not only the next generation of SRS (Simple Realtime Server), and it's also an approach to leverage AI to manage the project as a whole. So it's not just a useful open source project, but also a demostration of how AI can help develop, manage, and maintain a complex project.
Since AI is relatively a new tool for open source project development, I use this work log to record my thoughts, ideas, experiments, and even failures along the way, while integrating AI into this open source project.

View File

@ -2,7 +2,7 @@
## Overview
**proxy-go** is a stateless media streaming proxy with built-in load balancing that enables building scalable origin clusters. The proxy itself acts as the load balancer, routing streams from clients to backend origin servers.
**proxy** is a stateless media streaming proxy with built-in load balancing that enables building scalable origin clusters. The proxy itself acts as the load balancer, routing streams from clients to backend origin servers.
```
Client → Proxy (with Load Balancer) → Backend Origin Servers

View File

@ -6,7 +6,7 @@ This document provides an overview of the Go codebase organization.
```
/
├── cmd/proxy-go/
├── cmd/proxy/
│ └── main.go # Application entry point
└── internal/
├── debug/ # Go profiling support

View File

@ -2,7 +2,7 @@
## Overview
The proxy-go load balancer distributes client streams across multiple backend origin servers. It provides a pluggable interface with two implementations:
The proxy load balancer distributes client streams across multiple backend origin servers. It provides a pluggable interface with two implementations:
1. **Memory Load Balancer** - For single proxy deployments
2. **Redis Load Balancer** - For multi-proxy deployments with shared state
@ -159,4 +159,3 @@ PROXY_REDIS_DB=0
| **Complexity** | Simple | Moderate |
| **Fault Tolerance** | Single point of failure | Multiple proxies |
| **Best For** | Moderate traffic | High traffic, high availability |

View File

@ -1,11 +1,13 @@
module proxy
module srsx
go 1.18
go 1.24
require github.com/go-redis/redis/v8 v8.11.5
require (
github.com/go-redis/redis/v8 v8.11.5
github.com/joho/godotenv v1.5.1
)
require (
github.com/cespare/xxhash/v2 v2.1.2 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/joho/godotenv v1.5.1 // indirect
)

View File

@ -3,15 +3,24 @@ github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0=
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=

View File

@ -7,14 +7,14 @@ import (
"context"
"time"
"proxy/internal/debug"
"proxy/internal/env"
"proxy/internal/errors"
"proxy/internal/lb"
"proxy/internal/logger"
"proxy/internal/protocol"
"proxy/internal/signal"
"proxy/internal/version"
"srsx/internal/debug"
"srsx/internal/env"
"srsx/internal/errors"
"srsx/internal/lb"
"srsx/internal/logger"
"srsx/internal/protocol"
"srsx/internal/signal"
"srsx/internal/version"
)
// Bootstrap defines the interface for application bootstrap operations.

View File

@ -7,8 +7,8 @@ import (
"context"
"net/http"
"proxy/internal/env"
"proxy/internal/logger"
"srsx/internal/env"
"srsx/internal/logger"
)
func HandleGoPprof(ctx context.Context, environment env.Environment) {

View File

@ -9,8 +9,8 @@ import (
"github.com/joho/godotenv"
"proxy/internal/errors"
"proxy/internal/logger"
"srsx/internal/errors"
"srsx/internal/logger"
)
// Environment provides access to environment variables.
@ -196,7 +196,7 @@ func buildDefaultEnvironmentVariables(ctx context.Context) {
// The API server of proxy itself.
setEnvDefault("PROXY_SYSTEM_API", "12025")
// The static directory for web server, optional.
setEnvDefault("PROXY_STATIC_FILES", "../trunk/research")
setEnvDefault("PROXY_STATIC_FILES", "./trunk/research")
// The load balancer, use redis or memory.
setEnvDefault("PROXY_LOAD_BALANCER_TYPE", "memory")

View File

@ -8,8 +8,8 @@ import (
"os"
"time"
"proxy/internal/env"
"proxy/internal/logger"
"srsx/internal/env"
"srsx/internal/logger"
)
// NewDefaultSRSForDebugging initialize the default SRS media server, for debugging only.

View File

@ -9,10 +9,10 @@ import (
"math/rand"
"time"
"proxy/internal/env"
"proxy/internal/errors"
"proxy/internal/logger"
"proxy/internal/sync"
"srsx/internal/env"
"srsx/internal/errors"
"srsx/internal/logger"
"srsx/internal/sync"
)
// MemoryLoadBalancer stores state in memory.

View File

@ -14,9 +14,9 @@ import (
// Use v8 because we use Go 1.16+, while v9 requires Go 1.18+
"github.com/go-redis/redis/v8"
"proxy/internal/env"
"proxy/internal/errors"
"proxy/internal/logger"
"srsx/internal/env"
"srsx/internal/errors"
"srsx/internal/logger"
)
// RedisLoadBalancer stores state in Redis.

View File

@ -12,12 +12,12 @@ import (
"sync"
"time"
"proxy/internal/env"
"proxy/internal/errors"
"proxy/internal/lb"
"proxy/internal/logger"
"proxy/internal/utils"
"proxy/internal/version"
"srsx/internal/env"
"srsx/internal/errors"
"srsx/internal/lb"
"srsx/internal/logger"
"srsx/internal/utils"
"srsx/internal/version"
)
// srsHTTPAPIServer is the proxy for SRS HTTP API, to proxy the WebRTC HTTP API like WHIP and WHEP,

View File

@ -15,12 +15,12 @@ import (
stdSync "sync"
"time"
"proxy/internal/env"
"proxy/internal/errors"
"proxy/internal/lb"
"proxy/internal/logger"
"proxy/internal/utils"
"proxy/internal/version"
"srsx/internal/env"
"srsx/internal/errors"
"srsx/internal/lb"
"srsx/internal/logger"
"srsx/internal/utils"
"srsx/internal/version"
)
// srsHTTPStreamServer is the proxy server for SRS HTTP stream server, for HTTP-FLV, HTTP-TS,

View File

@ -15,12 +15,12 @@ import (
stdSync "sync"
"time"
"proxy/internal/env"
"proxy/internal/errors"
"proxy/internal/lb"
"proxy/internal/logger"
"proxy/internal/sync"
"proxy/internal/utils"
"srsx/internal/env"
"srsx/internal/errors"
"srsx/internal/lb"
"srsx/internal/logger"
"srsx/internal/sync"
"srsx/internal/utils"
)
// srsWebRTCServer is the proxy for SRS WebRTC server via WHIP or WHEP protocol. It will figure out

View File

@ -11,13 +11,13 @@ import (
"strings"
"sync"
"proxy/internal/env"
"proxy/internal/errors"
"proxy/internal/lb"
"proxy/internal/logger"
"proxy/internal/rtmp"
"proxy/internal/utils"
"proxy/internal/version"
"srsx/internal/env"
"srsx/internal/errors"
"srsx/internal/lb"
"srsx/internal/logger"
"srsx/internal/rtmp"
"srsx/internal/utils"
"srsx/internal/version"
)
// srsRTMPServer is the proxy for SRS RTMP server, to proxy the RTMP stream to backend SRS

View File

@ -13,12 +13,12 @@ import (
stdSync "sync"
"time"
"proxy/internal/env"
"proxy/internal/errors"
"proxy/internal/lb"
"proxy/internal/logger"
"proxy/internal/sync"
"proxy/internal/utils"
"srsx/internal/env"
"srsx/internal/errors"
"srsx/internal/lb"
"srsx/internal/logger"
"srsx/internal/sync"
"srsx/internal/utils"
)
// srsSRTServer is the proxy for SRS server via SRT. It will figure out which backend server to

View File

@ -11,7 +11,7 @@ import (
"math"
"sync"
"proxy/internal/errors"
"srsx/internal/errors"
)
// Please read @doc amf0_spec_121207.pdf, @page 4, @section 2.1 Types Overview

View File

@ -14,7 +14,7 @@ import (
"io"
"sync"
"proxy/internal/errors"
"srsx/internal/errors"
)
// The handshake implements the RTMP handshake protocol.

View File

@ -10,9 +10,9 @@ import (
"syscall"
"time"
"proxy/internal/env"
"proxy/internal/errors"
"proxy/internal/logger"
"srsx/internal/env"
"srsx/internal/errors"
"srsx/internal/logger"
)
func InstallSignals(ctx context.Context, cancel context.CancelFunc) {

View File

@ -22,9 +22,9 @@ import (
"strings"
"syscall"
"proxy/internal/errors"
"proxy/internal/logger"
"proxy/internal/version"
"srsx/internal/errors"
"srsx/internal/logger"
"srsx/internal/version"
)
func ApiResponse(ctx context.Context, w http.ResponseWriter, r *http.Request, data any) {

3
openclaw/.gitignore vendored
View File

@ -1,3 +1,4 @@
/.openclaw/workspace-state.json
/.clawhub
/skills/llm-switcher
/skills/llm-switcher
/personal

View File

@ -77,6 +77,7 @@ In group chats where you receive every message, be **smart about when to contrib
**Respond when:**
- Directly mentioned or asked a question
- In SRS support groups, if someone mentions you with a technical SRS question, answer directly — do not wait, paraphrase, or hold back unless you're missing critical facts
- You can add genuine value (info, insight, help)
- Something witty/funny fits naturally
- Correcting important misinformation

View File

@ -1,7 +1,6 @@
# MEMORY.md - SRSBot's Long-Term Memory
## Workspace Conventions
- Git commit titles start with: `OpenClaw:`
- **No auto-commit** — Never automatically git commit. Only commit when William explicitly tells me to.
- **No guessing** — William will teach me everything about SRS. Don't speculate or fill in gaps. Wait for him to explain.
@ -24,6 +23,14 @@
- Goal: a very active, well-supported community where every developer has an AI assistant trained with William's knowledge
- This is not just project maintenance — it's a new model for open source sustainability
## SRS Community Bot (OpenClaw)
- William set up an OpenClaw robot for the SRS community (2026-03-20)
- **Telegram group:** https://t.me/+RiynvKOxpQ42MGJl
- **Discord server:** https://discord.gg/yZ4BnPmHAd
- Users join the group and **@ the SRS Robot** to interact
- Purpose: scale William's expertise to the community without him answering every question
- **Recommended: Telegram over Discord** — Telegram lets users create small focused groups and invite the bot in. Each small group = clean context window. Big groups mix unrelated messages and confuse the bot's context. Small groups → better answers, better support.
## What Matters to William
- SRS project health, development, and community
- Open source sustainability and contributor experience
@ -61,6 +68,16 @@ The three layers are what William controls; the external conditions are what the
- `docs/ideas.md` is the scratch pad for early-stage thinking that doesn't belong anywhere else yet
- Ideas may grow into major features or directions over time
## Changelog & Version
- **Changelog:** `trunk/doc/CHANGELOG.md`
- **Version file:** `trunk/src/core/srs_core_version7.hpp` — bump `VERSION_REVISION` to match the new changelog entry
- **When to update:** When a PR is merged — not per commit
- **Workflow:** Feature branch → multiple commits → create PR → merge PR → update changelog + version
- Individual commits on a branch do NOT get changelog entries
- The changelog entry is for the PR merge, not the individual commits within it
- **Both files must be updated together** — changelog entry version must match `VERSION_REVISION`
- Format follows existing pattern: `* v7.0, YYYY-MM-DD, Merge [#NNNN](url): Description. vX.Y.Z (#NNNN)`
## SRS Knowledge Base
Detailed SRS knowledge in `memory/srs-*.md` files:
- `srs-overview.md` — What SRS is, protocols, ecosystem tools, and **Features section** with all SRS features, versions, and dates

View File

@ -40,6 +40,23 @@ Skills are shared. Your setup is yours. Keeping them apart means you can update
- Channel: `telegram`, accountId: `srs` (SRS bot)
- When sending to William's Telegram: `channel: "telegram"`, `accountId: "srs"`
### Git Commit Workflow
- **Never `git add`** — William stages files himself
- **Never `git push`** — William pushes himself
- **Commit workflow:** `git diff --cached` → understand the changes → write title/description → `git commit -m "OpenClaw: ..."`
- Title prefix: `OpenClaw:`
- **Co-author for ACP Claude Code:** If Claude Code (ACP) was used to make the changes, add:
`Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>`
- **Co-author for ACP Codex:** If Codex (ACP) was used to make the changes, add:
`Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>`
### Go (GVM)
- Go is managed via **GVM** (Go Version Manager), NOT Homebrew
- Before running any `go` command: `source ~/.gvm/scripts/gvm`
- **Never** use `brew install go` — always use GVM
---
Add whatever helps you do your job. This is your cheat sheet.

10
proxy/.gitignore vendored
View File

@ -1,10 +0,0 @@
.idea
.claude
.vscode
srs-proxy
.go-formarted
# For AI to ignore these files.
.env
docs/ignore-worklog.md

View File

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2025 ossrs
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,23 +1,3 @@
# Proxy
Proxy is a common proxy server (`cmd/proxy-go`) for any media servers with RTMP/SRT/HLS/HTTP-FLV and WebRTC/WHIP/WHEP protocols support. More programs like `cmd/origin-go` will be added in the future.
## Usage
This project is managed by AI. By default we use Kiro (Amazon Q) CLI, but you can use any other AI tools that read code and docs as context. Setup your AI code tool and ask questions like:
- How to use this project?
- How to run the proxy server?
- How to build an Origin Cluster for production?
You can not only use AI to show you the usage of this project, but also use AI to guide you to learn the details of this project, to understand the design and protocols, to learn each documents in docs directory.
## AI Guidelines
- AI assistants should ignore [docs/ignore-worklog.md](docs/ignore-worklog.md) as it's a personal work log that may contain misleading information, hallucinations, or falsehoods. Never rely on this file as a reference.
- For usage of proxy server and end to end test it, you should load [docs/proxy-usage.md](docs/proxy-usage.md). This is the first step for new users to learn how to use this project. It provides a general and overall view of the proxy server, including practical usage examples and end-to-end testing procedures.
- For proxy full usage to build an Origin Cluster for SRS media server, please load [docs/proxy-origin-cluster.md](docs/proxy-origin-cluster.md). This is an advanced topic about how to use the proxy server to build the SRS Origin Cluster. Users should read this document to learn more details and architectures about proxy and Origin Cluster.
- For proxy server: To understand proxy system design, you should load the [docs/proxy-design.md](docs/proxy-design.md). To understand the proxy protocol details, you should load the [docs/proxy-protocol.md](docs/proxy-protocol.md). To understand how load balance works, you should load [docs/proxy-load-balancer.md](docs/proxy-load-balancer.md). To understand the code structure and packages, you should load [docs/proxy-files.md](docs/proxy-files.md).
William Yang<br/>
June 23, 2025
Moved to [code](../cmd/proxy/main.go) and [doc](../docs/proxy/README.md).

View File

@ -7,6 +7,7 @@ The changelog for SRS.
<a name="v7-changes"></a>
## SRS 7.0 Changelog
* v7.0, 2026-03-22, Merge [#4652](https://github.com/ossrs/srs/pull/4652): Proxy: restructure repo as Go project with proxy as first module. v7.0.139 (#4652)
* v7.0, 2026-03-05, Merge [#4643](https://github.com/ossrs/srs/pull/4643): OpenClaw: add and refine ST knowledge-base and learning/review skills. v7.0.138 (#4643)
* v7.0, 2025-12-31, Merge [#4618](https://github.com/ossrs/srs/pull/4618): HLS/DASH: Fix dispose() to cleanup files even after on_unpublish() sets enabled_ to false. v7.0.137 (#4618)
* v7.0, 2025-12-07, Merge [#4602](https://github.com/ossrs/srs/pull/4602): HLS: Fix audio-only fMP4 playback skipping. v7.0.136 (#4602)

View File

@ -9,6 +9,6 @@
#define VERSION_MAJOR 7
#define VERSION_MINOR 0
#define VERSION_REVISION 137
#define VERSION_REVISION 139
#endif