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>
2.4 KiB
Codebase Structure
This document provides an overview of the Go codebase organization.
Directory Structure
/
├── cmd/proxy/
│ └── main.go # Application entry point
└── internal/
├── debug/ # Go profiling support
├── env/ # Configuration management
├── errors/ # Error handling with stack traces
├── lb/ # Load balancer (memory/Redis)
├── logger/ # Logging and request tracing
├── protocol/ # Protocol servers (RTMP, HTTP, WebRTC, SRT, API)
├── rtmp/ # RTMP protocol implementation
├── signal/ # Graceful shutdown handling
├── sync/ # Concurrency utilities
├── utils/ # Common utilities
└── version/ # Version information
Internal Packages
debug
Go profiling support via pprof, controlled by GO_PPROF environment variable.
env
Configuration management using environment variables. Loads .env file and provides defaults for all server settings.
errors
Enhanced error handling with stack traces. Provides error wrapping and root cause extraction.
lb
Load balancer system supporting both single-proxy (memory-based) and multi-proxy (Redis-based) deployments.
lb.go- Core interfaces and typesmem.go- Memory-based load balancerredis.go- Redis-based load balancerdebug.go- Default backend for testing
logger
Structured logging with context-based request tracing. Provides log levels: Verbose, Debug, Warning, Error.
protocol
Protocol server implementations for all supported streaming protocols:
rtmp.go- RTMP protocol stackhttp.go- HTTP streaming (HLS, HTTP-FLV, HTTP-TS)rtc.go- WebRTC server (WHIP/WHEP)srt.go- SRT serverapi.go- HTTP API server
rtmp
Low-level RTMP protocol implementation including handshake and AMF0 serialization.
signal
Graceful shutdown coordination. Catches SIGINT/SIGTERM and implements timeout-based shutdown.
sync
Thread-safe generic Map wrapper around sync.Map for connection tracking and caching.
utils
Common utility functions for HTTP responses, JSON marshaling, and parsing.
version
Version information and server identification.