news 2026/9/24 20:14:49

SRS + OBS 五分钟搭建直播推流系统:从部署到避坑实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SRS + OBS 五分钟搭建直播推流系统:从部署到避坑实战指南

1. 为什么选择 SRS + OBS 这套组合

1.1 从一次直播卡顿说起

去年帮一个做在线教育的朋友处理直播卡顿的问题,他当时用的是某云厂商的直播服务,按流量计费,一个月下来账单吓人,而且延迟忽高忽低,学生端经常反馈“老师声音和画面对不上”。我问他有没有考虑过自建流媒体服务器,他第一反应是“那玩意儿是不是很复杂”。实际上,SRS(Simple Realtime Server)加上 OBS Studio 这套组合,从零到跑通推流,熟练的话真的只要五分钟。

这篇文章就是把我这些年反复搭建、调试、踩坑的经验整理出来。SRS 是一个开源的流媒体服务器,支持 RTMP、HLS、HTTP-FLV、WebRTC 等协议,OBS Studio 则是目前最主流的开源推流客户端。两者搭配,你可以用极低的成本搭建一套属于自己的直播推流系统,适用于在线教育、游戏直播、企业内训、活动直播回放等场景。不管你是刚接触流媒体的新手,还是已经用过其他方案想换一套更可控的,这篇内容都能直接抄作业。

1.2 SRS 到底解决了什么问题

很多人第一次听到“流媒体服务器”会觉得离自己很远,其实你可以把它理解成一个“中转站”。OBS 负责把摄像头画面和麦克风声音打包,推送到 SRS 服务器;SRS 再把这份数据分发给所有观看端。没有这个中转站,每个观众都要直接连到你的电脑上,显然不现实。

SRS 的核心优势在于:第一,它是国产开源项目,文档中文友好,社区活跃;第二,资源占用低,一台 2 核 4G 的云主机就能扛住几百路并发;第三,协议支持全,RTMP 推流、HTTP-FLV 和 HLS 拉流、WebRTC 低延迟通话都能搞定。相比动辄按流量计费的商业方案,自建 SRS 的成本几乎只有服务器本身的费用。

1.3 OBS 在推流链路中的角色

OBS Studio 负责的是“采集 + 编码 + 推送”这三件事。采集包括屏幕、摄像头、麦克风、窗口捕获等;编码就是把原始画面压缩成 H.264,音频压缩成 AAC;推送就是通过 RTMP 协议把编码后的数据发给 SRS。OBS 的插件生态也很丰富,比如抠像插件、语音朗读插件、比赛回放插件等,都可以按需加载。

需要特别说明的是,OBS 的版本更新比较频繁,目前常见的有 27.x、28.x、29.x 等。不同版本在界面布局和插件兼容性上会有差异,后面我会专门讲插件目录的问题。另外,网上有人搜“obs 汉化版”,其实 OBS 官方安装包自带简体中文,在设置里切换语言即可,不需要额外下载所谓的汉化版,那些第三方打包的版本反而可能夹带私货。

2. 五分钟搭建 SRS 服务器的完整流程

2.1 服务器环境准备与选型建议

先说服务器。你可以在本地电脑上跑 SRS 做测试,也可以买一台云主机。本地测试的话,Windows 和 macOS 都能用 Docker 跑,Linux 直接编译或下载二进制包。云主机的话,建议选 2 核 4G 起步,带宽根据你的并发观看人数来定。假设每路流码率是 2 Mbps,10 个人同时观看就需要 20 Mbps 的出带宽,这个账要提前算清楚。

操作系统推荐 Ubuntu 20.04 或 22.04,CentOS 7 也可以但已经停止维护了。我实测下来 Ubuntu 的兼容性最好,遇到问题搜资料也方便。如果你用的是华为云、阿里云这类平台,注意安全组要放行相关端口,否则推流会一直连不上。

注意:云主机的公网 IP 和私网 IP 要分清。OBS 里填的推流地址必须是公网 IP 或者绑定的域名,填成私网 IP 只有同内网的机器能访问。

2.2 三种部署方式对比与选择

SRS 的部署方式主要有三种:Docker 部署、二进制包部署、源码编译部署。我整理了一个对比表,你可以根据自己的情况选。

部署方式优点缺点适合人群
Docker一条命令搞定,环境隔离需要先装 Docker新手、快速验证
二进制包解压即用,不依赖 Docker版本更新需手动替换有一定 Linux 基础
源码编译可定制功能,最新特性编译耗时长,依赖多开发者、深度定制

如果你只是想快速跑通,直接用 Docker。命令如下:

docker run -d --name srs \ -p 1935:1935 -p 1985:1985 -p 8080:8080 \ ossrs/srs:5 \ ./objs/srs -c conf/docker.conf

这条命令启动了 SRS 5.0 版本,映射了三个端口:1935 是 RTMP 推流端口,1985 是 HTTP API 端口,8080 是 HTTP-FLV 和 HLS 的播放端口。跑起来之后,用docker logs srs看一下日志,出现 “Server started” 就说明成功了。

2.3 配置文件的关键参数解读

如果你用二进制包或者源码编译,核心配置文件是conf/srs.conf。我挑几个最关键的参数讲一下,这些参数直接决定了你的推流能不能成功、延迟有多高。

listen 1935; max_connections 1000; daemon off; srs_log_tank console; http_server { enabled on; listen 8080; dir ./objs/nginx/html; } vhost __defaultVhost__ { http_remux { enabled on; mount [vhost]/[app]/[stream].flv; } hls { enabled on; hls_path ./objs/nginx/html; hls_fragment 10; hls_window 60; } }

max_connections控制最大连接数,根据你的服务器性能调整。http_remux开启后,可以用 HTTP-FLV 协议拉流,延迟比 HLS 低很多,大概 1 到 3 秒。hls_fragment是 HLS 切片时长,设成 10 秒意味着每 10 秒生成一个 ts 文件,延迟会比较高,但兼容性好,适合对延迟不敏感的场景。hls_window是播放列表长度,60 表示保留最近 60 秒的切片。

提示:如果你追求低延迟,优先用 HTTP-FLV 或者 WebRTC,HLS 的延迟天然就高,这是协议本身决定的,不是配置能解决的。

3. OBS 推流配置的详细步骤

3.1 推流地址与串流密钥的填写规则

OBS 里配置推流的位置在“设置” -> “推流”。服务类型选“自定义”,服务器填你的 SRS 地址,格式是rtmp://你的服务器IP:1935/live,串流密钥填一个你自定义的流名称,比如teststream。注意,这里的live是应用名,可以改,但要和 SRS 配置里的 vhost 对应上。

很多人第一次填的时候会把服务器写成rtmp://IP:1935/live/teststream,然后把串流密钥空着,这样也能推,但规范做法是服务器只写到应用名,流名称放在串流密钥里。两种写法 SRS 都认,但分开写更清晰,后面做多路流管理的时候不容易乱。

推流成功后,你可以用以下地址测试播放:

  • HTTP-FLV:http://你的服务器IP:8080/live/teststream.flv
  • HLS:http://你的服务器IP:8080/live/teststream.m3u8

用 VLC 或者 ffplay 打开这个地址,能看到画面就说明整条链路通了。

3.2 编码参数怎么调才不卡

OBS 的编码设置直接影响到推流质量和服务器压力。在“设置” -> “输出”里,输出模式选“高级”,然后重点调这几个参数:

  • 编码器:优先选硬件编码,比如 NVIDIA NVENC 或者 Intel QSV,比软件编码 x264 省 CPU。如果没有独立显卡,就用 x264,预设选veryfastfaster
  • 码率:720p 建议 2500 到 4000 Kbps,1080p 建议 4500 到 6000 Kbps。码率太高,上行带宽扛不住会丢帧;太低画面会糊。
  • 关键帧间隔:设成 2 秒。这个参数影响拉流端首屏速度和 seek 体验,太大太小都不好。
  • 预设:x264 用veryfast,NVENC 用qualitybalanced

我踩过的一个坑是:码率设了 8000 Kbps,结果家里上行只有 10 Mbps,推流一直重连。后来降到 3500 Kbps,稳定得很。所以推流前一定要测一下自己的上行带宽,留出至少 30% 的余量。

3.3 音频设置与常见误区

音频这块,采样率设 44.1kHz 或 48kHz,声道选立体声或单声道。如果你的内容只是人声讲解,单声道就够了,还能省一半音频码率。音频码率设 128 Kbps 或 160 Kbps 都行,再高意义不大。

常见误区是有人把音频码率拉到 320 Kbps,觉得音质会更好,实际上经过 RTMP 传输和服务器转发,观众端听到的差异微乎其微,反而增加了带宽负担。另外,如果麦克风有底噪,可以在 OBS 里加一个“噪声抑制”滤镜,比后期处理省事得多。

4. 常见问题排查与实战避坑指南

4.1 推流连不上服务器的排查思路

推流连不上是最常见的问题,排查顺序应该是:网络 -> 端口 -> 配置 -> 防火墙。先确认服务器 IP 能不能 ping 通,然后 telnet 一下 1935 端口通不通。如果端口不通,检查云主机安全组和服务器本机防火墙。Ubuntu 上用ufw status看防火墙规则,CentOS 用firewall-cmd --list-ports

如果端口通了但 OBS 还是报错,看 SRS 的日志。日志里会明确告诉你连接是否建立、握手是否成功。常见错误有“RTMP handshake failed”,一般是推流地址写错了;“no app found”,是应用名对不上。我遇到过最隐蔽的一个问题是服务器时间不对,导致 RTMP 握手校验失败,用date命令同步一下时间就好了。

4.2 播放端黑屏、卡顿、延迟高的原因

播放端黑屏但 OBS 显示推流正常,大概率是拉流地址写错了,或者播放器不支持对应的协议。HTTP-FLV 地址必须以.flv结尾,HLS 必须以.m3u8结尾。用浏览器直接打开 FLV 地址是播不了的,需要支持 FLV 的播放器,比如 VLC 或者专门的 Web 播放器。

卡顿的话,先看服务器带宽是否跑满,用iftop或者nload监控一下。如果带宽没问题,再看 OBS 的丢帧情况,OBS 底部状态栏会显示“丢帧”百分比,超过 1% 就说明上行有问题。延迟高的话,HLS 天然延迟在 10 到 30 秒,换成 HTTP-FLV 能降到 1 到 3 秒,WebRTC 可以做到 500 毫秒以内,但配置更复杂。

4.3 OBS 插件目录与版本兼容问题

关于“obs plugin插件放到那个文件夹内”这个问题,不同系统路径不一样:

  • Windows:C:\Program Files\obs-studio\obs-plugins\64bit
  • macOS:/Applications/OBS.app/Contents/PlugIns
  • Linux:/usr/lib/obs-plugins~/.config/obs-studio/plugins

需要注意的是,OBS 27.x 和 28.x 之后的插件接口有变化,有些老插件在新版本上会加载失败。如果你装了插件但 OBS 里看不到,先确认插件版本是否匹配你的 OBS 版本。另外,OBS 29 之后对插件签名有要求,未签名的插件可能被拦截,需要在设置里手动允许。

注意:不要随便下载来路不明的插件包,尤其是所谓的“汉化版”整合包,里面可能捆绑了不需要的软件。官方插件一般发布在 GitHub 上,下载前看一下 issue 区有没有兼容性反馈。

4.4 高频问题速查表

问题现象可能原因解决方法
OBS 推流失败,提示连接超时端口未放行检查安全组和本机防火墙
推流成功但播放黑屏拉流地址错误确认协议和路径后缀
播放卡顿、花屏码率超过上行带宽降低码率或分辨率
延迟十几秒使用 HLS 拉流换 HTTP-FLV 或 WebRTC
插件加载不出来版本不兼容核对 OBS 版本和插件版本
服务器 CPU 跑满软件编码 + 高并发启用硬件编码或升级配置

5. 进阶玩法与场景扩展

5.1 多路推流与回放录制

SRS 支持同一个流被多个客户端拉取,也支持把推流内容录制下来。在 vhost 配置里加上 DVR 相关配置,就能自动把每路流存成 FLV 或 MP4 文件。这个功能对于“比赛回放”这类场景特别实用,直播结束后直接提供点播地址就行。

dvr { enabled on; dvr_path ./objs/nginx/html/[app]/[stream].[timestamp].flv; dvr_plan session; }

dvr_plansession表示按推流会话录制,一次推流生成一个文件。如果选segment,会按时间切片。录制文件默认是 FLV 格式,想转 MP4 可以用 ffmpeg 批量处理。

5.2 结合第三方工具的扩展思路

OBS 的插件生态可以玩出很多花样。比如抠像插件可以做虚拟背景,适合在线教学;语音朗读插件可以把弹幕读出来,适合互动直播;还有各种转场、滤镜插件,能提升画面质感。SRS 这边,可以通过 HTTP API 获取流列表、踢掉某个流、查询在线人数,方便做后台管理。

如果你想把直播嵌入自己的网站,可以用 SRS 提供的 HTTP-FLV 地址配合 flv.js 播放器,几行代码就能搞定。HLS 的话直接用 video.js 或者原生 video 标签就行,兼容性更好但延迟高。

5.3 安全加固与访问控制

默认配置下,任何人知道你的推流地址就能推流,这显然不安全。SRS 支持推流鉴权,可以在 URL 里加 token,服务器校验通过才允许推流。配置方式是在 vhost 里加http_hooks,推流时回调你的鉴权接口。

另外,播放端也可以做防盗链,通过 Referer 白名单或者 URL 签名来限制。如果只是内部使用,最简单的办法是把 RTMP 端口只对特定 IP 开放,其他 IP 一律拒绝。这些安全措施虽然会增加一点配置成本,但能避免流被恶意盗用。

6. 我踩过的那些坑与实操心得

6.1 关于服务器时间同步的教训

前面提过服务器时间不对导致 RTMP 握手失败,这个坑我踩了两次。第一次排查了半天,以为是端口或者配置问题,最后无意中date看了一下,发现时间差了十几分钟。RTMP 握手时会校验时间戳,偏差太大会直接拒绝连接。所以新服务器上手第一件事,就是ntpdate或者chrony同步时间,这个习惯能省很多事。

6.2 码率与带宽的匹配经验

很多人推流卡顿第一反应是服务器不行,其实大部分情况是上行带宽不够。我一般建议按“上行带宽 × 0.7”来设码率。比如上行 10 Mbps,码率最多设 7000 Kbps,留出余量给网络波动。另外,OBS 的“动态码率”功能在 28 版本之后有改进,网络差的时候会自动降码率,但画质也会降,看你能不能接受。

6.3 插件管理的个人建议

插件这东西,够用就行,不要贪多。每装一个插件都会增加 OBS 启动时间和崩溃风险。我自己的习惯是,只装当前项目必须的插件,项目结束就卸载。另外,插件更新前先备份 OBS 的配置目录,万一新版本有问题可以快速回滚。Windows 下配置目录在%APPDATA%\obs-studio,macOS 在~/Library/Application Support/obs-studio

6.4 日志是最好的老师

不管是 SRS 还是 OBS,出问题先看日志。SRS 的日志在./objs/logs/目录下,OBS 的日志在“帮助” -> “日志文件”里可以打开。日志里会记录每一步的状态和错误码,比瞎猜高效得多。我现在的习惯是,每次搭建新环境,先把日志级别调到 debug,跑通之后再调回 info,这样排查问题的时候信息最全。

最后再分享一个小技巧:如果你经常需要给别人演示推流配置,可以把 SRS 和 OBS 的配置做成模板,换服务器的时候只需要改 IP 和流名称,其他参数直接复用。这样五分钟搭建真不是吹的,熟练之后三分钟就能跑起来。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 20:14:27

法国EPR追溯应对指南:从通知识别到合规整改全解析

1. 被追溯通知到手:先分清你遇到的是哪一种"追"法国EPR被追溯,这个事在跨境圈里这两年已经不算新闻了,但每次有卖家把通知截图甩进群里,第一句话永远是同一个:"我是不是要被罚死了?"先…

作者头像 李华
网站建设 2026/9/24 20:13:01

UE5.8私有RAG助手:数据准备与向量化全流程实战

1. 项目概述:这个RAG系统到底要解决什么问题1.1 核心需求解析先说结论:这套系统的目标,是给UE5.8开发者搭建一个私有的AI问答助手,让开发者遇到蓝图节点、材质参数、C API这类问题时,不用再去翻山越岭找文档&#xff0…

作者头像 李华
网站建设 2026/9/24 20:12:44

平潭智能家居性价比排名:本地安装避坑与选型指南

1. 平潭装智能家居,为什么不能直接照搬网上榜单这个标题看着有点营销号的味,但我接下来说的,都是这几年在平潭跑工地、做调试、处理售后之后攒下来的真实经验。上个月给一个刚交付的楼盘做方案沟通,业主进门第一句话就是问我&…

作者头像 李华
网站建设 2026/9/24 20:12:40

T4显卡上YOLO模型1.6ms推理优化实战

1. 先泼一盆冷水:YOLOv12根本不存在,但这个标题背后藏着真问题你点进来的第一反应可能是:“YOLOv12?我怎么没听说?”——这恰恰是整件事最关键的起点。截至2024年10月,官方YOLO系列最新稳定版本是YOLOv8&am…

作者头像 李华
网站建设 2026/9/24 20:12:37

工程机械识别数据集构建与YOLO目标检测实战:从标注到训练排错

简介:面向深度学习目标检测任务,工程机械识别数据集覆盖挖掘机、装载机、自卸卡车、移动式起重机、压路机、推土机和平地机7类常见工程机械,适合施工场景下的设备检测与识别研究。压缩包约361.74MB,共2000个文件,以txt…

作者头像 李华
网站建设 2026/9/24 20:12:34

离线推理框架核心链路拆解:Scheduler与ExecutionEngine的协作艺术

前阵子读 cannn-recipes-infer 源码,我习惯先把一条链路的入口文件铺在桌面上,再顺着日志顺序把类调用过一遍。写这系列笔记第三篇的时候,正好走到离线推理这条最核心的执行链路:OfflineInference - Scheduler - ExecutionEngine …

作者头像 李华