SRS 携手 OBS WHIP 实现 200ms 超低延迟直播推流实战

发布时间:2026/9/10 8:27:12
SRS 携手 OBS WHIP 实现 200ms 超低延迟直播推流实战 SRS 携手 OBS WHIP 实现 200ms 超低延迟直播推流实战【免费下载链接】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 实时媒体服务器的 WHIP 推流能力为核心讲解如何通过 OBS Studio 的 WHIP 协议将直播延迟从传统 RTMP 的约 1 秒压缩到 200 毫秒级别涵盖 SRS 服务启动、OBS 推流配置、浏览器 WHEP 拉流播放三步完整链路并结合仓库源码剖析 WHIP 在 SRS 中的实现原理与低延迟编码参数调优。读完本文你将能独立搭建一套OBS → SRS(WHIP) → 浏览器(WHEP)的超低延迟直播方案。WHIP 为何能把延迟降到 200msOBS 官方已正式合并 WHIP 支持补丁预计随 OBS 30 发布这为直播推流打开了全新的可能。对比三种典型直播链路的端到端延迟方案推流协议拉流协议典型延迟传统 RTMPRTMPRTMP/HTTP-FLV/HLS约 1000ms1 秒RTMP WebRTC 转推RTMP 进、WebRTC 出WebRTC约 500msOBS WHIPWHIPWebRTC 封装WHEPWebRTC 播放约 200msWHIPWebRTC-HTTP Ingestion Protocol将 WebRTC 的推流信令封装为标准 HTTP 交互OBS 直接以 WebRTC 的 UDP/SRTP/DTLS 通道把音视频流推进服务器全程无 RTMP 中转因此延迟可降至 200ms 左右即使在网络状况不佳或跨公网推流时OBS WHIP 也能维持稳定且持续的低延迟表现。SRS 已完整实现 WHIP 推流与 WHEP 拉流两种 WebRTC 信令端点本文演示的正是这条OBS WHIP 推流 SRS 服务 浏览器 WHEP 播放的完整闭环。前置准备开始前请安装以下软件OBS Studio官方下载页面获取最新版本。需要注意的是WHIP 支持已合并进 OBS 的 master 分支将于 OBS 30 正式发布若使用旧版本可从 OBS 30.0.0-rc1 预发布版本获取带 WHIP 支持的构建。第一步启动 SRS 并开启 WHIP 能力SRS 通过rtmp2rtc模式同时启用 RTMP 与 WebRTC 双通道使 WHIP 推流、RTMP 推流与 WHEP 播放可以互通。使用 Docker 一键启动CANDIDATE192.168.1.10 docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 \ --env CANDIDATE$CANDIDATE -p 8000:8000/udp \ ossrs/srs:5 ./objs/srs -c conf/rtmp2rtc.conf请务必将CANDIDATE设置为你自己的服务器 IP。CANDIDATE 是 SRS WebRTC 模块对外通告的 ICE 候选地址浏览器端需要靠它完成 UDP 媒体通道的连通配置错误将导致推流/播放无法建立。对照仓库中的 rtmp2rtc.conf上述命令各端口与配置的对应关系如下端口/配置作用配置文件对应项1935 (TCP)RTMP 推流/拉流入口rtmp { listen 1935; }1985 (TCP)HTTP APIWHIP/WHEP 信令挂载点http_api { listen 1985; }8080 (TCP)HTTP 服务托管播放器页面http_server { listen 8080; }8000 (UDP)WebRTC 媒体传输端口rtc_server { listen 8000; }$CANDIDATEICE 候选地址从环境变量注入rtc_server { candidate $CANDIDATE; }在vhost __defaultVhost__中rtc { rtmp_to_rtc on; rtc_to_rtmp on; }开启了 RTMP 与 WebRTC 流的双向互转这意味着即使没有 WHIP 推流端也能用 RTMP 推流、WebRTC 拉流反之亦然。而 WHIP 信令本身由 HTTP API 进程承载其服务端点实现位于 srs_app_rtc_api.cpp 中的SrsGoApiRtcWhip类——SRS 收到 WHIP 的 HTTP POST 请求后解析 SDP Offer创建 RTC 会话并回传 SDP Answer 与 201 状态码同时在该类中实现了基于token校验的会话删除DELETE 请求逻辑。第二步在 OBS 中配置 WHIP 推流启动 OBS 后按如下步骤配置打开 OBS点击设置Settings。在左侧边栏点击推流Stream。在服务Service下拉框中选择WHIP。将服务器Server设置为http://localhost:1985/rtc/v1/whip/?applivestreamlivestream该地址即 SRS 的 WHIP 信令端点/rtc/v1/whip/applive与streamlivestream指定了推流目标的应用名与流名可按需修改。点击确定OK保存设置。点击开始推流Start Streaming开始推流。如果实测延迟仍然偏大请按低延迟方向调整 OBS 的输出编码设置编码器选择x264在高级设置中将GOP关键帧间隔设为 1 秒Preset 选择fastProfile 选择baselineTune 选择zerolatency。这里的关键在于GOP 设为 1sWebRTC 播放端需要等到关键帧才能开始解码1 秒的关键帧间隔保证了播放器加入时能快速出画而zerolatency调优参数则要求编码器放弃缓冲、逐帧即时输出从编码端进一步压缩延迟。这些参数组合在一起是 OBS WHIP 达到 200ms 级延迟的最后一环。第三步浏览器播放WHEP推流建立后在浏览器中打开以下地址即可实时观看http://localhost:8080/players/whep.html该播放器是仓库自带的 WHEP 拉流页面源码位于 whep.html。WHEPWebRTC-HTTP Egress Protocol与 WHIP 一一对应负责以同样的 WebRTC 通道从 SRS 拉取音视频流。从源码可见SRS 将/whep/与/whip-play/两种路径统一解析为 WebRTC 播放会话见 srs_app_rtc_api.cpp 中对路径后缀/whip-play/与/whep/的判断因此该页面既可作为 WHIP 推流后的验证工具也可作为常规 WebRTC 播放器使用。端到端延迟链路回顾整条超低延迟链路中延迟的削减来自三个环节的协同推流侧OBS 以 WHIP 直推 WebRTC省去 RTMP 的 TCP 累积缓冲与转封装环节服务侧SRS 的rtmp_to_rtc/rtc_to_rtmp保持 RTMP 兼容性的同时对 WebRTC 会话走原生的 RTC 通道UDP/SRTP/DTLS不引入额外转码延迟播放侧WHEP 以 WebRTC 拉流播放器可即时解码 1s GOP 的关键帧配合zerolatency编码实现从摄像头到屏幕约 200ms 的端到端体验。结语通过以上三步——启动 SRSrtmp2rtc.conf、配置 OBS WHIP 推流、用 WHEP 播放器拉流——即可获得约 200ms 的稳定超低延迟直播体验相比传统 RTMP 的 1 秒延迟有质的提升非常适合互动直播、远程协作等对实时性敏感的场景。若需在公网快速搭建 WHIP 服务也可参考 SRS 生态中 Oryx 的一键 WHIP 服务能力见同仓库博客 Oryx OBS WHIP 服务。SRS 的 WHIP 能力全部开源配置与实现均可直接查阅仓库源码与 rtmp2rtc.conf 示例进行二次验证与定制。【免费下载链接】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),仅供参考