SRS 怎么通过 rtmp2rtc 配置把 RTMP 直播流转成 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你的场景是流已经通过 RTMP 推到 SRS希望浏览器端不走 HLS/HTTP-FLV而是用 WebRTCWHEP 拉流直接观看以降低播放延迟。SRS 的 WebRTC 能力基于 WHIP/WHEP 信令协议并支持协议间转封装——其中rtc.rtmp_to_rtc就是RTMP 进、WebRTC 出的开关。这篇文章按 WebRTC 文档中的 RTMP to RTC 一节给出从配置、启动、推流到浏览器验证的完整操作路径使用的配置是仓库自带的 trunk/conf/rtmp2rtc.conf。配置说明rtmp2rtc.conf 里哪些项在起作用仓库提供的 rtmp2rtc.conf 内容如下max_connections 1000; daemon off; srs_log_tank console; rtmp { listen 1935; } http_server { enabled on; listen 8080; dir ./objs/nginx/html; } http_api { enabled on; listen 1985; } stats { network 0; } rtc_server { enabled on; listen 8000; # UDP port # see https://ossrs.io/lts/en-us/docs/v7/doc/webrtc#config-candidate candidate $CANDIDATE; } vhost __defaultVhost__ { rtc { enabled on; # see https://ossrs.io/lts/en-us/docs/v7/doc/webrtc#rtmp-to-rtc rtmp_to_rtc on; # see https://ossrs.io/lts/en-us/docs/v7/doc/webrtc#rtc-to-rtmp rtc_to_rtmp on; } http_remux { enabled on; mount [vhost]/[app]/[stream].flv; } }与本任务直接相关的配置项rtc_server全局 WebRTC 服务开关。listen 8000是 UDP 媒体端口客户端会直连这个端口收流candidate $CANDIDATE表示候选地址从环境变量CANDIDATE读取它会写进 SDP answer 的 candidate 行是浏览器实际连接的端点。rtc.enabled onrtc.rtmp_to_rtc on这是本场景的核心开关。文档说明rtmp_to_rtc默认为 off开启后 SRS 会把 RTMP 流转封装为 WebRTC 流并将音频从 AAC 转码为 Opus。这份配置同时开启了rtc_to_rtmp反向转封装用于 WebRTC 推流、RTMP 拉流的场景当前任务只依赖rtmp_to_rtc。http_server8080提供 HTTP-FLV 拉流和/players/whep.html播放页dir ./objs/nginx/html指向静态页面目录。http_api1985提供 WHIP/WHEP 信令接口WHEP 播放请求就走这个端口。http_remux把流转封装为[vhost]/[app]/[stream].flv可用于对照验证。candidate是文档反复强调的关键项它必须是一个客户端能直接连通的 IP 地址文档原话是most failure is caused by wrong candidate。除了环境变量方式还可以配置为固定 IP如candidate 192.168.3.6;使用candidate *;或candidate 0.0.0.0;自动探测网卡 IP在拉流 URL 上加?eip192.168.3.10或?eip192.168.3.10:18000强制覆盖 candidate 的 IP 或端口负载均衡、代理后面尤其有用启动 SRS 并推 RTMP 流按文档 RTMP to RTC 一节用 Docker 启动 SRS通过环境变量传入服务器 IP示例值192.168.1.10请替换为你自己的服务器 IPexport CANDIDATE192.168.1.10 docker run --rm --env CANDIDATE$CANDIDATE \ -p 1935:1935 -p 8080:8080 -p 1985:1985 -p 8000:8000/udp \ ossrs/srs:5 \ objs/srs -c conf/rtmp2rtc.conf端口映射对应关系1935收 RTMP 推流1985提供 WHEP 信令8080提供 HTTP-FLV 和播放页8000/udp是 WebRTC 媒体端口——浏览器拿到 candidate 后会直接向这个 UDP 端口收 RTP 包防火墙若放行不了 UDP/8000播放会直接失败。推流端文档给出的示例是用 FFmpeg 容器把仓库里的doc/source.flv循环推到 SRSdocker run --rm -it ossrs/srs:encoder ffmpeg -stream_loop -1 -re -i doc/source.flv \ -c copy -f flv rtmp://host.docker.internal/live/livestream其中host.docker.internal是文档示例中从容器指向宿主机的写法如果 FFmpeg 直接跑在宿主机上则按文档 WebRTC over TCP 一节的本地写法推rtmp://localhost/live/livestreamffmpeg -re -i ./doc/source.flv -c copy -f flv rtmp://localhost/live/livestream用浏览器播放 WebRTC 流并验证RTMP 流推上去后SRS 会按rtmp_to_rtc on自动转封装。文档给出的验证方式是在浏览器打开 WHEP 播放页WebRTC 播放页仓库中的页面文件为 whep.htmlhttp://localhost:8080/players/whep.html?autostarttrue对应的 WHEP 信令地址http://localhost:1985/rtc/v1/whep/?applivestreamlivestream页面能正常播出现场画面即说明 RTMP 推流与 WebRTC 转封装链路打通。同一时刻可以打开 HTTP-FLV 地址http://localhost:8080/live/livestream.flv对照确认两条链路拉的是同一路live/livestream。如果 SRS 不在本机文档说明 WHEP 拉流仍可以用 HTTP只有 WHIP 推流端在非 localhost 环境下必须使用 HTTPS可参考文档中 HTTPS API 或用 Nginx 反代的说明本场景只做拉流HTTP WHEP 不受此限制。播放失败时的排查与限制candidate 不正确文档指出连接失败大多由 candidate 配置错误引起。确认 SDP answer 返回的 candidate形如acandidate:0 1 udp 2130706431 192.168.3.6 8000 typ host里的 IP:port 是客户端能直连的地址拿不准时用candidate *;让 SRS 自动探测网卡 IP或在 WHEP URL 上追加?eipip[:port]显式指定。UDP/8000 不可用如果网络不支持 UDP文档给出的替代方案是 WebRTC over TCP通过环境变量启用docker run --rm -it -p 8080:8080 -p 1985:1985 -p 8000:8000 \ -e CANDIDATE192.168.3.82 \ -e SRS_RTC_SERVER_TCP_ENABLEDon \ -e SRS_RTC_SERVER_PROTOCOLtcp \ -e SRS_RTC_SERVER_TCP_LISTEN8000 \ ossrs/srs:v5注意这属于另一条操作链TCP 传输配置与 UDP 默认链路二选一不要把两种端口映射混在同一次启动里。音频转码行为开启rtmp_to_rtc后RTMP 流中的 AAC 音频会被转码为 Opus 再走 WebRTC这是文档对该开关的明确说明验证播放时音频走的是转码后的 Opus。端口必须放行 UDP8000/udp是媒体面端口与信令用的 1985/8080TCP相互独立只放通 HTTP 端口而漏掉 UDP 媒体端口是配置层面最容易漏的一项。完成以上步骤后推 RTMP、播 WebRTC 的低延迟链路即部署完成后续如果要反过来做 WebRTC 推流 RTMP 拉流同一份配置里已开启的rtc_to_rtmp对应的文档章节为 RTC to RTMP。【免费下载链接】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),仅供参考