从零搭建OBS+SRS流媒体服务器:实现WebRTC低延迟直播全攻略
1. 环境准备选择适合你的操作系统搭建流媒体服务器的第一步是选择操作系统。我实测过Windows和Linux两种环境发现Linux系统更适合长期稳定运行。如果你用的是Windows 10/11可以通过Docker快速部署SRS但Windows Server会遇到虚拟化限制。阿里云等云服务商的Windows Server镜像默认不支持嵌套虚拟化这也是为什么我最终选择了Ubuntu 20.04 LTS作为生产环境。对于新手来说建议直接从Linux入手。不仅因为SRS在Linux下的性能更好更重要的是能避开很多Windows特有的兼容性问题。我用的是一台2核4G的阿里云ECS系统盘选择40GB SSD这个配置足够支撑中小规模的直播场景。注意购买云服务器时一定要检查安全组规则提前放行1935(RTMP)、8080(HTTP)、8000(UDP)等端口否则后面测试时会遇到连接失败的问题。2. 安装与配置SRS服务器2.1 源码编译安装SRS相比直接下载二进制包我更推荐源码编译安装。这样能确保获得最新特性也方便后续自定义修改。以下是具体步骤# 安装编译依赖 sudo apt update sudo apt install -y git g make python3 # 下载源码国内用户推荐使用镜像源 git clone https://gitee.com/ossrs/srs.git cd srs/trunk # 编译安装添加--with-ssl支持HTTPS ./configure --with-ssl --with-hls --with-ffmpeg make -j$(nproc)编译过程大概需要5-10分钟完成后你会看到objs目录下生成的可执行文件。这里有个小技巧如果编译失败先执行make clean再重试通常能解决90%的问题。2.2 配置文件深度优化SRS的配置文件srs.conf藏在trunk/conf目录里。我建议先备份原始配置然后重点修改这些参数listen 1935; max_connections 1000; daemon on; pid ./objs/srs.pid; http_server { enabled on; listen 8080; dir ./objs/nginx/html; } rtc_server { enabled on; listen 8000; candidate $YOUR_PUBLIC_IP; }其中candidate参数最容易出错必须填写服务器的公网IP。我曾经因为这个配置没改导致WebRTC连接始终失败排查了半天才发现问题。3. OBS推流实战技巧3.1 视频参数的科学设置打开OBS后别急着推流先调整这些关键参数基础分辨率1920x1080根据实际需求可降为1280x720帧率25或30fps超过30会增加服务器负担码率控制CBR恒定码率关键帧间隔2秒WebRTC推荐值在输出选项卡里建议使用以下编码设置编码器NVIDIA NVENC有显卡时或x264 码率2500-4000 Kbps1080p 预设quality Profile: high3.2 推流地址的玄机在OBS的设置→直播中服务器地址格式为rtmp://你的服务器IP/live/流名称流名称可以自定义比如livestream。但有个隐藏技巧在流名称后添加?secret你的密码可以实现简单鉴权比如rtmp://192.168.1.100/live/demo?secret1234564. WebRTC低延迟拉流实现4.1 播放器配置要点SRS自带WebRTC播放器访问http://服务器IP:8080/players/rtc_player.html即可使用。重点注意流地址格式为webrtc://你的服务器IP/live/流名称必须使用HTTPS访问页面可用自签名证书首次加载需要3-5秒建立连接4.2 延迟优化实战要实现1秒内的超低延迟需要调整SRS的RTC配置rtc_server { # 启用TWCC传输层拥塞控制 twcc_enabled on; # 设置NACK重传抗丢包 nack_enabled on; # 关键帧请求间隔 pli_interval 3s; }在客户端推荐使用video标签的playsinline和autoplay属性video idplayer autoplay playsinline muted/video script new WebRTCPlayer(player, { url: webrtc://your-server/live/stream }); /script5. 常见问题排坑指南5.1 黑屏问题排查流程当播放器黑屏时按这个顺序检查用VLC测试RTMP流是否正常地址rtmp://ip/live/stream检查SRS日志tail -f ./objs/srs.log确认OBS的推流状态显示为直播中测试服务器端口连通性telnet your-ip 1935 nc -vzu your-ip 80005.2 音画不同步解决方案遇到音画不同步时可以尝试在OBS中启用同步视频和音频时间戳调整SRS的音频缓存rtc_server { audio_buffer_time 200; }降低OBS的输出分辨率6. 企业级部署进阶技巧6.1 集群化部署方案单节点SRS最多支持1000并发超过需要集群部署。最简单的方案是用Origin-Edge架构OBS → SRS Origin → [SRS Edge1, SRS Edge2...]Edge节点配置示例vhost __defaultVhost__ { cluster { mode remote; origin 主服务器IP; } }6.2 监控与日志分析建议启用SRS的Prometheus监控http_api { enabled on; listen 1985; }然后通过Grafana导入SRS的监控看板关键指标包括连接数输入/输出码率帧率波动延迟分布我在实际项目中发现当输出帧率低于输入帧率80%时就需要考虑扩容服务器了。