下载地址:https://download.csdn.net/download/XiBuQiuChong/93185154
目录
- 产品简介
1.1 概述
1.2 主要特性
1.3 典型应用场景
- 运行环境要求
2.1 服务器
2.2 推流端
2.3 观看端
- 安装
3.1 程序包内容
3.2 目录结构
- 配置
4.1 编辑 config.ini
4.2 PublicIP 设置
- 启动服务器
5.1 启动程序
5.2 确认 IP 显示
5.3 启动服务
5.4 停止服务
- 推流(WHIP)
6.1 WHIP URL 格式
6.2 使用 FlashRtcClient(推荐)
6.3 使用 OBS Studio
6.4 停止推流
- 拉流播放(WHEP)
7.1 打开 Web 播放器
7.2 播放流
7.3 播放器按钮说明
7.4 统计面板说明
7.5 停止播放
- 多人观看
8.1 操作步骤
- 故障排查
9.1 服务器无法启动
9.2 推流端无法连接
9.3 观看端无法播放
9.4 IP 地址问题
- API 参考(高级用户)
10.1 WHIP 推流示例(cURL)
10.2 WHEP 拉流示例(cURL)
-
常见问题(FAQ)
-
快速上手
1. 产品简介
1.1 概述
FlashRtcServer 是一款面向 Windows 平台的轻量级 WebRTC 流媒体服务器。它通过 WHIP 协议接收来自推流端(浏览器、OBS、FlashRtcClient)的实时音视频流,并通过 WHEP 协议将流转发给多个观看者。适用于低延迟直播、视频监控、远程显示以及一对多分发等场景。
1.2 主要特性
- 采用 WHIP/WHEP 标准协议,原生兼容浏览器和 OBS
- 基于 WebRTC,端到端延迟低于 1 秒
- 支持 H.264 视频 + Opus 音频
- UDP 与 TCP 双传输,共用端口,对 NAT 友好
- 内置 Web 播放器,观看者无需安装任何软件
- NACK 重传 + 关键帧快起,弱网下播放流畅
- IOCP 高性能网络,可支持数百路并发观看
1.3 典型应用场景
|------------|----------------------|-------------|
| 场景 | 推流端 | 观看端 |
| 网络直播 | OBS / FlashRtcClient | 浏览器 Web 播放器 |
| 远程屏幕 / 摄像头 | FlashRtcClient | 浏览器 Web 播放器 |
| 监控(IP 摄像头) | FFmpeg / GStreamer | 浏览器 Web 播放器 |
| 一对多分发 | 单个 WHIP 推流 | 多个 WHEP 观看者 |
2. 运行环境要求
2.1 服务器
|--------|--------------------------------------|
| 项目 | 要求 |
| 操作系统 | Windows 10 及以上版本(x86 / x64) |
| 运行时库 | Visual C++ Redistributable 2019(x86) |
| 网络 | 观看者可访问的公网 IP,或仅局域网使用 |
| 防火墙 | 放行服务端口(默认 1985)的 TCP 和 UDP |
| 硬件 | 双核 2GHz+、2GB 内存起步;推荐四核 4GB+ |
2.2 推流端
- FlashRtcClient(Windows,推荐)- 支持 H.264 硬件编码
- OBS Studio 30 及以上版本(内置 WHIP 输出)
- 支持 WHIP 的浏览器(Chrome / Edge 94+)
2.3 观看端
- 现代浏览器:Chrome / Edge / Firefox(推荐 Chrome / Edge)
- 无需安装任何插件,直接打开 Web 播放器即可
3. 安装
3.1 程序包内容
部署包包含以下文件,请将它们放在同一目录下(例如 C:\FlashRtcServer\):
FlashRtcServer.exe # 主程序
config.ini # 配置文件
web\index.html # Web 播放器(必须位于 web 子目录下)
libcrypto-1_1.dll # OpenSSL
libssl-1_1.dll # OpenSSL
srtp2.dll # SRTP 库
mfc140u.dll # MFC 运行时(Debug 版为 mfc140ud.dll)
msvcp140.dll # VC++ 运行时(Debug 版为 msvcp140d.dll)
vcruntime140.dll # VC++ 运行时(Debug 版为 vcruntime140d.dll)
ucrtbase.dll # 通用 C 运行时(Debug 版为 ucrtbased.dll)
提示
若使用 Debug 模式从源码编译,需要带 "d" 后缀的 DLL(mfc140ud.dll、msvcp140d.dll 等)。若要在其他机器上部署,建议使用 Release 版本,以免依赖调试运行时。
3.2 目录结构
C:\FlashRtcServer\
+-- FlashRtcServer.exe
+-- config.ini
+-- *.dll
+-- web\
+-- index.html <-- Web 播放器必须放在此处
重要
web 子目录必须与 FlashRtcServer.exe 在同一目录下。若 Web 播放器页面无法打开,请检查 web\index.html 是否存在。
4. 配置
4.1 编辑 config.ini
使用文本编辑器(记事本等)打开 config.ini,默认内容如下:
RTC
; Public IP address to announce in SDP candidates.
; Set this to your server's public IP if behind NAT (e.g. cloud servers).
; Leave empty or delete the line to auto-detect via STUN / local interface.
PublicIP=192.168.0.100
4.2 PublicIP 设置
PublicIP 字段用于告知观看者向哪个地址发送媒体数据,请根据实际部署场景设置:
|-------------|-----------------|---------------|
| 部署场景 | PublicIP 取值 | 示例 |
| 云服务器(公网 IP) | 服务器公网 IP | 192.168.0.100 |
| 仅局域网使用 | 服务器局域网 IP | 192.168.1.100 |
| 自动检测(仅本地) | 留空 | PublicIP= |
警告
PublicIP 设置错误将导致观看者无法连接。云服务器必须填写公网 IP;局域网测试填写局域网 IP;留空则自动检测本机 IP,仅适用于局域网场景。
5. 启动服务器
5.1 启动程序
- 双击 FlashRtcServer.exe
- 主对话框弹出,显示端口(默认 1985)和 IP 信息
5.2 确认 IP 显示
"公网 IP" 输入框显示的是 config.ini 中的 IP。启动前请确认其与服务器实际 IP 一致。
提示
如 IP 显示不正确,请关闭程序,修改 config.ini 后再重新启动。
5.3 启动服务
- 点击"Start"(启动)按钮
- 状态栏显示"Server running on port 1985"
- 日志面板显示"Server started successfully"
5.4 停止服务
- 点击"Stop"(停止)按钮
- 所有连接被关闭,HTTP 服务停止
- 状态栏显示"Server stopped"
重要
同一端口只能运行一个实例。若启动失败提示"端口被占用",请关闭其他 FlashRtcServer 实例,或等待 30 秒后重试。
6. 推流(WHIP)
推流是指将摄像头、屏幕或视频文件发送到服务器的过程,服务器随后将流分发给观看者。
6.1 WHIP URL 格式
所有推流端使用相同的 URL 格式:
http://<服务器IP>:<端口>/rtc/v1/whip/?app=<应用名>&stream=<流名>
|--------|-----------------------|---------------|
| 参数 | 含义 | 示例 |
| 服务器IP | 服务器 IP(与 PublicIP 一致) | 192.168.0.100 |
| 端口 | 服务端口(默认 1985) | 1985 |
| app | 应用名(任意字符串) | hk |
| stream | 流名(任意字符串,每路流唯一) | cctv |
示例:
http://192.168.0.100:1985/rtc/v1/whip/?app=hk\&stream=cctv
6.2 使用 FlashRtcClient(推荐)
- 打开 FlashRtcClient
- 将 WHIP URL 设置为上述地址
- 选择视频源(摄像头 / 屏幕 / 文件)
- 推荐编码参数:H.264、1920x1080、30fps、2.5Mbps
- 点击"推流" / "Start"按钮
- 服务器日志面板会显示新增的 WHIP 会话
6.3 使用 OBS Studio
- OBS 30 及以上版本内置 WHIP 输出
- 设置 -> 推流 -> 服务:WHIP
- 服务器:粘贴上述 WHIP URL
- 点击"开始推流"
6.4 停止推流
- 在推流端点击"停止" / "停止推流"
- 或直接关闭推流程序
- 服务器在 30 秒超时后会自动清除该流
7. 拉流播放(WHEP)
7.1 打开 Web 播放器
在任意现代浏览器中(推荐 Chrome / Edge)打开:
http://<服务器IP>:<端口>/
示例:
http://192.168.0.100:1985/
7.2 播放流
- 在页面中输入服务器地址(如 192.168.0.100:1985)
- 输入应用名 App(如 hk)- 必须与推流端一致
- 输入流名 Stream(如 cctv)- 必须与推流端一致
- 点击"Play"(播放)按钮
- 1 秒内出现画面,左上角统计面板显示实时指标
提示
若推流端未运行,播放将失败。请先确保流正在推流,再点击播放。
7.3 播放器按钮说明
|-------------------|--------------|
| 按钮 | 功能 |
| Play(播放) | 连接服务器并开始播放 |
| Stop(停止) | 停止播放并断开连接 |
| Snapshot(截图) | 将当前画面保存为 PNG |
| Mute / Unmute(静音) | 切换音频开关 |
| Fullscreen(全屏) | 进入全屏模式 |
7.4 统计面板说明
画面左上角的覆盖层显示实时连接指标:
|-----------------|--------|----------------|
| 指标 | 含义 | 健康范围 |
| Latency(延迟) | 端到端延迟 | < 500 ms |
| RTT | 网络往返时延 | < 100 ms |
| Resolution(分辨率) | 视频分辨率 | 与推流端一致 |
| Bitrate(码率) | 视频码率 | 约等于推流端设置 |
| FPS(帧率) | 每秒帧数 | 约等于推流端设置(如 30) |
| Loss(丢包率) | 丢包率 | < 1% |
7.5 停止播放
- 点击"Stop"(停止)按钮
- 或直接关闭浏览器标签页
8. 多人观看
FlashRtcServer 支持一个推流端对多个观看者。每个观看者打开 Web 播放器,输入相同的 App + Stream 即可观看同一路流。
8.1 操作步骤
- 推流端推流到 app=hk, stream=cctv
- 观看者 1 打开 http://服务器IP:1985/ 并播放 hk/cctv
- 观看者 2 打开相同 URL 并播放 hk/cctv
- ... 以此类推,增加更多观看者
- 服务器对话框的"Clients"计数器会随观看者增加而递增
注意
每个观看者都会占用与流码率相等的上行带宽。2.5 Mbps 的流,10 个观看者约需要 25 Mbps 服务器上行带宽。
9. 故障排查
9.1 服务器无法启动
|-----------|-----------------------|-------------------------------------------------|
| 现象 | 原因 | 解决方法 |
| 提示"端口被占用" | 其他实例或进程占用了端口 | 关闭其他 FlashRtcServer 实例,等待 30 秒后重试 |
| 对话框立即关闭 | 缺少 DLL 或 VC++ 运行时版本不对 | 安装 VC++ Redistributable 2019(x86);检查所有 DLL 是否齐全 |
9.2 推流端无法连接
|-----------|--------------|---------------------------------------------------------------|
| 现象 | 原因 | 解决方法 |
| WHIP 连接失败 | 服务器 IP 或端口错误 | 核对 URL:http://<服务器IP>:1985/rtc/v1/whip/?app=...&stream=... |
| 连接超时 | 防火墙拦截端口 | 在 Windows 防火墙和云服务器安全组中放行 TCP+UDP 1985 端口 |
| DTLS 握手失败 | 网络拦截 UDP | 服务器同时支持 TCP,浏览器会自动回退 |
9.3 观看端无法播放
|--------------|---------------|-----------------------------------------|
| 现象 | 原因 | 解决方法 |
| 网页打不开 | URL 错误或服务器未启动 | 检查 http://<服务器IP>:1985/ 能否打开;确认服务器已启动 |
| 点击播放无反应 | 流未推流 | 先启动推流端;检查"Streams"计数器是否 >= 1 |
| 有声音但黑屏 | 编码格式不匹配 | 推流端必须使用 H.264 视频和 Opus 音频 |
| 画面卡顿 / 花屏 | 网络丢包 | 查看 Loss 指标;考虑降低推流码率 |
| 延迟过高(> 1 秒) | 网络拥塞或浏览器抖动缓冲 | 刷新页面;检查网络带宽 |
9.4 IP 地址问题
|------------|-------------------------|-------------------------------------------|
| 现象 | 原因 | 解决方法 |
| 外网观看者无法连接 | PublicIP 未设置或错误 | 编辑 config.ini,将 PublicIP 设为服务器公网 IP,重启服务器 |
| 内网可连,外网不可连 | 防火墙拦截或 PublicIP 设为内网 IP | 放行防火墙端口;将 PublicIP 改为公网 IP |
10. API 参考(高级用户)
供需要将 FlashRtcServer 与自定义应用集成的用户参考:
|---------|-------------------------------|----------------------|
| 方法 | URL | 用途 |
| POST | /rtc/v1/whip/?app=X&stream=Y | 推流(WHIP) |
| DELETE | /rtc/v1/whip/resource/<id> | 停止推流 |
| POST | /rtc/v1/whep/?app=X&stream=Y | 拉流(WHEP,带 SDP offer) |
| GET | /rtc/v1/whep/?app=X&stream=Y | 拉流(WHEP,服务器生成 SDP) |
| DELETE | /rtc/v1/whep/resource/<id> | 停止拉流 |
| OPTIONS | /rtc/v1/* | CORS 预检(自动处理) |
| GET | / | Web 播放器页面 |
| GET | /<file> | web/ 下的静态文件 |
10.1 WHIP 推流示例(cURL)
curl -X POST \
-H "Content-Type: application/sdp" \
-d "@offer.sdp" \
"http://192.168.0.100:1985/rtc/v1/whip/?app=hk\&stream=cctv"
响应:201 Created
Location: /rtc/v1/whip/resource/<session-id>
响应体:SDP answer
10.2 WHEP 拉流示例(cURL)
curl -X POST \
-H "Content-Type: application/sdp" \
-d "@offer.sdp" \
"http://192.168.0.100:1985/rtc/v1/whep/?app=hk\&stream=cctv"
响应:201 Created
Location: /rtc/v1/whep/resource/<session-id>
响应体:SDP answer
11. 常见问题(FAQ)
问:服务器是否需要公网 IP?
答:若要供外网访问,必须有公网 IP;若仅局域网使用,内网 IP 即可。请在 config.ini 中正确设置 PublicIP。
问:播放支持哪些浏览器?
答:Chrome、Edge、Firefox 均可。推荐使用 Chrome / Edge,性能和延迟表现最佳。不支持 Internet Explorer。
问:可以用手机浏览器推流吗?
答:可以,前提是浏览器支持 WHIP(Android Chrome、iOS 16.4+ Safari)。如需稳定推流,建议使用桌面端 FlashRtcClient 或 OBS。
问:支持哪些编码格式?
答:视频支持 H.264(packetization-mode=1,profile-level-id=42e01f);音频支持 Opus(48kHz 立体声)。不支持 VP8/VP9/AV1 和 AAC。
问:能支持多少并发观看者?
答:取决于服务器带宽和流码率。粗略估算:2.5 Mbps 的流在 100 Mbps 上行带宽下可服务约 30 个观看者。CPU 占用随观看者数量增加而上升。
问:支持录像或转码吗?
答:不支持。FlashRtcServer 是零转码转发器,将推流端的流原样转发给所有观看者。如需录像,请使用单独的 WHIP 消费者写入磁盘。
问:可以作为 Windows 服务运行吗?
答:当前版本为桌面应用程序(MFC 对话框)。作为服务运行需要额外开发,暂不官方支持。
问:支持鉴权吗?
答:本版本不支持。所有 WHIP/WHEP 端点均为开放状态。如需鉴权,建议在服务器前部署带认证的反向代理。
12. 快速上手
希望 5 分钟内上手?请按以下步骤操作:
步骤 1:将部署包解压到 C:\FlashRtcServer\
(保留 web\index.html 在原位)
步骤 2:编辑 config.ini
PublicIP=<你的服务器 IP>
步骤 3:放行防火墙端口
netsh advfirewall firewall add rule name="FlashRtcServer" \
dir=in action=allow protocol=TCP localport=1985
netsh advfirewall firewall add rule name="FlashRtcServer-UDP" \
dir=in action=allow protocol=UDP localport=1985
步骤 4:运行 FlashRtcServer.exe,点击"Start"
步骤 5:推流(在推流端机器上)
WHIP URL:http://<服务器IP>:1985/rtc/v1/whip/?app=hk&stream=cctv
步骤 6:播放(在任意浏览器中)
打开:http://<服务器IP>:1985/
输入:Server=<服务器IP>:1985,App=hk,Stream=cctv
点击"Play"
需要帮助?
请先查看服务器对话框的日志面板 - 它会显示连接事件、错误信息和会话生命周期。大部分问题可从日志中定位。