ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

SRS 生态中的 Oryx:一体化直播与 WebRTC 平台的架构、部署与运维实践

SRS 生态中的 Oryx:一体化直播与 WebRTC 平台的架构、部署与运维实践 SRS 生态中的 Oryx一体化直播与 WebRTC 平台的架构、部署与运维实践【免费下载链接】srsSRS is a simple, high-performance, AI-driven real-time media server supporting RTMP, WebRTC, HLS, HTTP-FLV, HTTP-TS, SRT, MPEG-DASH, and GB28181, with codec support for H.264, H.265, AV1, VP9, AAC, Opus, and G.711.项目地址: https://gitcode.com/GitHub_Trending/sr/srs本文基于 SRS 仓库内skills/srs-support/references/oryx-overview.md这篇 Oryx 概览文档撰写覆盖 Oryx 的定位与组件架构、双向协议支持矩阵、最小化 Docker 部署流程、完整环境变量与端口配置、以及单机化设计的边界与限制。读完后你可以独立完成 Oryx 的部署、推流/拉流全链路验证、OpenAPI 自动化接入并清楚知道它与独立 SRS 的配置差异和能力边界。一、Oryx 是什么SRS 之上的开箱即用一体化方案Oryx前身名为 SRS Stack是一个一体化、开箱即用的开源视频解决方案用于在云端或自托管环境中构建直播与 WebRTC 服务。它的核心设计思想是把一整条直播技术栈压进一个单机应用SRS提供底层媒体服务器能力接收、转封装、分发Oryx 在其之上补齐面向最终用户的工作流认证、自动 HTTPS、录像、多平台再推流、虚拟直播、摄像头推流、转码、HTTP API、回调以及 AI 媒体能力。一个关键的产品区分Oryx 基于 SRS但它不是独立 SRS 的另一个名字。独立 SRS 通过手工编辑.conf配置文件本仓库trunk/conf/下有完整示例如 full.conf和1985端口的/api/v1/API 直接运维而 Oryx 主要通过 Web 控制台操作内部由 Go 后端动态生成 SRS 与 NGINX 配置。仓库中 skills/srs-support/SKILL.md 明确将二者划为两个独立产品的支持范围并强调不要把 Oryx 控制台工作流翻译成裸 SRS 配置。因此选型原则是如果你需要精细控制媒体服务器边缘集群、自定义 vhost、直接操作/api/v1/用独立 SRS如果你要快速搭一个带界面、带 HTTPS、带录像和再推流的直播站点用 Oryx。二、工作流与数据通路从源到目的地Oryx 的数据通路可以概括为多种来源 → Oryx 中枢 → 三类目的地原文档给出的架构示意如下2.1 支持的输入来源Sources来源协议/方式说明OBS、FFmpeg、vMixRTMP / SRT / WHIP传统编码推流工具按各自能力选择协议浏览器WHIP采集摄像头与麦克风推流前提是已启用 HTTPS安全上下文IP 摄像头、流 URLRTSP 等Oryx 通过受管的 FFmpeg 任务拉取源如 RTSP再送入 Oryx 或转发到外部平台视频文件本地/上传上传的文件或位于容器/data目录下的文件可用于虚拟直播和 AI 配音2.2 Oryx 内部集成的服务组件职责Dashboard 与 OpenAPI通过 Web 界面或/terraform/v1/API 配置和运维 OryxSRS通过 RTMP、SRT、WebRTC、HLS、HTTP-FLV 接收、转换并分发直播流FFmpeg承担再推流、虚拟直播、摄像头拉流、转码、录像后处理、AI 媒体管线Redis存储 Oryx 配置与任务状态落在持久化的/data卷NGINX提供 HTTP/HTTPS 访问、反向代理、Web 与媒体资源分发OpenAI 服务可选由用户自行配置后为转写、语音助手、配音、OCR 提供能力2.3 支持的输出目的地Destinations浏览器与播放器通过 WHEP、HLS、HTTP-FLV、RTMP 或 SRT 播放取决于播放器能力网站与应用内嵌浏览器播放器、WordPress 插件SRS Player或自研应用直播平台将直播源或虚拟直播再推到 YouTube、Twitch、Facebook 等文件与集成保存录像、导出配音成品与字幕、通过 HTTP 回调推送推流/录像/OCR 事件。三、协议支持矩阵哪些能推、哪些能拉Oryx 文档将协议明确分为双向协议既支持推流进 Oryx也支持从 Oryx 拉流与单向协议只在特定场景中作为输入或输出。3.1 双向协议输入 输出协议传输层典型用法RTMPTCP用 OBS、FFmpeg、vMix 或任意 RTMP 编码器推流用 RTMP 兼容软件拉流。传统直播工作流SRTUDP用 OBS、vMix、FFmpeg、ffplay 等 SRT 兼容工具推流和拉流。为不完美网络设计的可靠低延迟传输WebRTCUDP媒体浏览器、OBS 或兼容应用通过WHIP推流、WHEP拉流。Oryx 中延迟最低的工作流浏览器推流必须有 HTTPS 等安全上下文3.2 单向协议文档化场景HLS 与 HTTP-FLV由已推入的直播流生成的播放输出在标准 Oryx 工作流中不作为推流输入RTSPIP 摄像头场景的输入。Oryx 用 FFmpeg 拉取摄像头流再转推/转发并不把 RTSP 作为通用播放输出暴露。这里可以与独立 SRS 做一个对照本仓库 trunk/doc/Resources.md 列出的 SRS 标准端口为1935/TCPRTMP、1985/TCPHTTP API、8080/TCPHTTP-FLV/HLS、8000/UDPWebRTC 媒体。Oryx 沿用了其中的 1935 与 8000/UDP另加了 10080/UDPSRT而 1985/8080 这类 SRS 原生端口在 Oryx 里被收敛到 NGINX 反代之后的 80/443 上见下文端口映射。四、最小化部署实战Docker 四步走Oryx 文档给出的最简工作流是跑起 Docker 镜像 → 从 OBS 推一路 RTMP → 用控制台生成的浏览器链接播放。完整步骤如下。步骤 1带持久化存储运行 Oryxdocker run --restart always -d -it --name oryx -v $HOME/data:/data \ -p 80:2022 -p 443:2443 -p 1935:1935 -p 8000:8000/udp -p 10080:10080/udp \ ossrs/oryx:5$HOME/data:/data挂载是必需的管理员密码、推流密钥publish secret、证书、Redis 数据、录像、上传文件和各项功能配置都保存在/data下容器重建后只有靠这个挂载才能保住。步骤 2设置管理员密码打开http://localhost按提示设置管理员密码。远程服务器请换成可达的 IP 或域名并确保主机防火墙与云安全组放行所需端口。步骤 3从控制台获取推流地址在 Dashboard 中进入Scenarios Streaming RTMP: OBS or vMix复制生成的Server与Stream Key填入 OBS 开始推流。注意Stream Key 中包含了 Oryx 的全局推流密钥应按敏感信息对待——不要出现在日志或截图里也不要把它拼进播放 URL。步骤 4使用控制台生成的播放链接通过 HLS、HTTP-FLV、WebRTC/WHEP 或其他方式预览直播。若要启用浏览器 WHIP 推流需配置 HTTPS且对外地址要使用可达的内网 IP、公网 IP 或域名而不是localhost/127.0.0.1WebRTC 候选地址与浏览器安全上下文都依赖它同时放行 UDP 8000 端口。默认暴露端口速查宿主机端口容器内端口用途80/TCP2022/TCPHTTP 控制台、OpenAPI 与 HTTP 媒体分发443/TCP2443/TCPHTTPS 控制台、API、信令与加密 HTTP 媒体分发1935/TCP1935RTMP 推流与播放8000/UDP8000WebRTC 媒体传输10080/UDP10080SRT 推流与播放如果修改了宿主机端口映射务必使用不冲突的端口并同步设置HTTP_PORT、RTMP_PORT、RTC_PORT、SRT_PORT让控制台生成的 URL 与实际部署一致。五、核心组件与依赖Oryx 以一体化应用分发通常就是ossrs/oryxDocker 镜像用户无需单独安装其内部依赖。核心组件SRS— RTMP、SRT、WebRTC、HLS、HTTP-FLV 的媒体服务器引擎FFmpeg 与 ffprobe— 处理录像、再推流、虚拟直播、摄像头拉流、转码、转写、配音与 OCR 工作流的媒体Redis— 存储配置、认证数据与持久任务状态数据经/data挂载保留NGINX— HTTP/HTTPS 代理与 Web/媒体资源服务另有一个独立的可选 NGINX HLS CDN 工作流Go— Oryx 后端与 HTTP 服务的实现语言React— Web 控制台编译后的静态资源打进发布镜像LEGO— Lets Encrypt 证书的自动申请与续期youtube-dl— 为接受远程视频源的工作流下载在线媒体。按功能启用的外部服务OpenAI 服务— 可选仅当配置了转写、语音助手、配音或 OCR 时必需直播平台— 仅再推流、虚拟直播或摄像头转发场景需要YouTube、Twitch、Facebook 或同类目标云存储— 仅当录像配置为云端目标而非本地/data时需要。部署与开发Docker— 推荐部署方式也是运行完整 Oryx 技术栈的最简途径Helm— 面向 Kubernetes 的另一种文档化部署方式Go 与 Node.js 工具链— 仅从源码构建后端和 React 控制台时需要运行官方 Docker 镜像不需要。六、功能全景6.1 直播与分发多协议直播— RTMP、SRT 或 WHIP/WebRTC 推入RTMP、SRT、WHEP/WebRTC、HLS、HTTP-FLV 拉出Web 控制台— 生成推流/播放 URL提供面向场景的配置与状态视图无需手写 SRS 配置网站集成— 浏览器播放、自研应用以及 WordPress 的 SRS Player 插件HLS 分发— 生成兼容性好的 HLS并提供可选的 NGINX HLS CDN 工作流应对更大量级的分发。6.2 安全与运维管理员认证— 保护 Oryx 控制台与管理功能推流认证— 生成一个全局推流密钥校验 RTMP、SRT、WHIP 推流端文档化标准工作流不把密钥加到播放 URL 上自动 HTTPS— 通过 LEGO 申请与续期 Lets Encrypt 证书支撑安全控制台访问与浏览器摄像头/麦克风使用持久化状态— 配置、证书、Redis 数据、录像、上传与生成媒体全部落/dataHTTP OpenAPI— 暴露文档化的/terraform/v1/API并以 Oryx 认证代理部分 SRS API/api/前缀HTTP 回调— 把推流、停止推流、录像、OCR 事件推送到外部应用。6.3 媒体工作流录像— 录制指定直播流支持流过滤器与合并推流会话产出 MP4可保存到本地磁盘或文档化的云存储目标多平台再推流— 把直播转发到 YouTube、Twitch、Facebook 等目标当前源停止时可选切换到另一个可用输入虚拟直播— 把预录文件等其他媒体源循环/直播化输出支持 7×24 连续工作流IP 摄像头直播— 拉 RTSP 摄像头流并转发到 Oryx 或外部平台纯视频摄像头可按需附加静音音轨直播转码— 用受管 FFmpeg 任务修改码率、分辨率或加滤镜再把处理后的流推回 Oryx。6.4 AI 能力直播转写— 语音识别生成字幕支持烧录字幕与 HLS WebVTT 输出语音助手— 面向直播间的浏览器语音/文字助手可做语言陪练、翻译等提示词驱动的对话视频配音— 转写、翻译、语音合成、音段调整并导出多语种视频直播 OCR— 用可配置的指令从直播画面中抽取文字、物体或场景描述结果经控制台或 HTTP 回调送达。注意AI 能力依赖用户自行配置支持的 OpenAI 服务语音助手、配音、OCR 文档标注为 beta 功能且不同 Oryx 版本可用性可能不同。七、配置体系以 /data 为核心的持久化与环境变量Oryx 主要通过 Web 控制台配置各场景页与系统页不要把它当作一台可以随意手改配置的独立 SRS 来对待。7.1 持久化配置要点宿主机目录挂载到/data标准 Docker 命令即$HOME/data:/dataOryx 的环境文件、生成的 SRS/NGINX 配置、SSL 文件、Redis 数据与功能状态都存放在/data下主环境文件是/data/config/.env修改后需重启 Oryx才生效/data/config/.env可能包含管理员密码等敏感值必须加以保护不要用独立 SRS 的示例配置直接替换 Oryx 生成的文件除非版本匹配的 Oryx 文档明确指引你这么做。7.2 常用环境变量变量作用与默认值MGMT_PASSWORD设置管理员密码按机密对待REACT_APP_LOCALE控制台语言en或zh默认enHTTP_PORT/RTMP_PORT/RTC_PORT/SRT_PORTDocker 端口映射与默认不一致时告知 Oryx 对外端口保证生成的 URL 正确MGMT_LISTEN/PLATFORM_LISTEN/HTTPS_LISTEN内部控制 HTTP 服务监听端口文档化默认分别为 2022、2024、2443CANDIDATE自动按请求主机解析 WebRTC 候选地址不适用时手动覆盖候选地址NAME_LOOKUP是否按 HTTP 请求主机解析候选地址默认onAUTO_SELF_SIGNED_CERTIFICATE是否自动创建自签名证书默认onSRS_FORWARD_LIMIT/SRS_VLIVE_LIMIT并发再推流任务数与虚拟直播任务数上限默认均为 10REDIS_PASSWORD/REDIS_PORT不使用默认内置 Redis 时配置 Oryx 的 Redis 连接开发期变量NODE_ENV、LOCAL_RELEASE、PLATFORM_DOCKER、PUBLIC_URL、BUILD_PATH、GO_PPROF在生产 Docker 部署中不应改动。7.3 OpenAPI 自动化在System OpenAPI中获取 Bearer Token用于调用受保护的/terraform/v1/API公开的版本与健康检查端点不需要管理 Token。仓库内 skills/srs-support/SKILL.md 的运维排障章节列出的诊断命令即走这条路径例如curl http://localhost/terraform/v1/mgmt/versions版本与curl http://localhost/terraform/v1/mgmt/check健康检查绝不把 Bearer Token、推流密钥、目标平台 Stream Key 或 OpenAI Key 写进公开脚本、日志、截图或文档。八、边界与限制单机一体化设计的代价理解 Oryx 的以下限制才能在容量规划与多实例部署时避坑单机设计— Oryx 是一体化单机应用不是内置媒体集群。可以在一台或多台机器上跑多个 Docker 实例但实例彼此隔离需要各自独立的端口、/data目录和外部协调机制对比独立 SRS 可通过 origin/edge 集群原生扩展如本仓库 origin-for-edge.conf 所示的集群模式共享推流密钥— 文档化认证模型是一条流共享一个全局推流密钥不提供逐流独立密钥手动升级— Oryx 不会从控制台自升级Docker、Helm、脚本、aaPanel 部署各走各自的平台升级流程持久存储是运维硬性要求— 不带持久/data挂载运行容器被替换时密码、推流密钥、证书、Redis 数据、录像、上传与功能配置全部可能丢失容量受单台主机约束— 并发直播流、FFmpeg 任务、录像、转码、AI 处理与对外分发共享同一台机器的 CPU、内存、磁盘与带宽AI 服务是外部依赖且部分为 beta— 受外部 OpenAI 服务的可用性、延迟、配额与成本影响语音助手、配音、OCR 标注为 beta版本间可能有差异。此外Oryx 5 的 README 将GB28181、WebRTC 面对面聊天、WebRTC 视频房间、集成 Prometheus/node-exporter 监控列为未完成工作。需要这些能力前先核对实际部署版本的文档不要默认它们仍然存在缺口注意 GB28181 在独立 SRS 中已是完整功能本仓库trunk/conf/gb28181.conf与 3rdparty/srs-bench/gb28181 中都有相应支持两个产品的能力边界要分清。九、结语SRS 与 Oryx 的分工与选择维度独立 SRSOryx定位简单、高性能的实时媒体服务器基于 SRS 的一体化视频应用平台配置方式手工.conf参考 full.conf/api/v1/Web 控制台 /terraform/v1/OpenAPI端口模型1935 / 1985 / 8080 / 8000(UDP) / 10080(UDP)80→2022、443→2443、1935、8000(UDP)、10080(UDP)扩展方式origin/edge 集群多实例隔离部署 外部协调附加能力由集成方自行实现内置录像、再推流、虚拟直播、摄像头、转码、AI 工作流Oryx 的价值在于把媒体服务器 应用平台这一整层工作压缩成一个容器一条 Docker 命令、一个控制台、一个/data卷。而独立 SRS 的价值在于给需要深度定制与集群化分发的团队留下完整的底层控制面。两者同源于本仓库维护的 SRS 内核按业务场景二选一或组合使用是 SRS 生态最常见的两种落地姿势。【免费下载链接】srsSRS is a simple, high-performance, AI-driven real-time media server supporting RTMP, WebRTC, HLS, HTTP-FLV, HTTP-TS, SRT, MPEG-DASH, and GB28181, with codec support for H.264, H.265, AV1, VP9, AAC, Opus, and G.711.项目地址: https://gitcode.com/GitHub_Trending/sr/srs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进