延迟与性能
通过 USB 从摄像头到 OBS 大约 60 ms,1080p 和 4K 都是如此;Wi-Fi 更高,波动也更大。这个数字是持续实测的,而非估算,并显示在“状态”字段、状态栏和日志中。
延迟从哪里来#
| 阶段 | 大约 | 说明 |
|---|---|---|
| 拍摄与曝光 | 一帧 | 场景越亮,曝光越快,差别就体现在这里。 |
| 硬件编码 | 几 ms | VideoToolbox。无需调整。 |
| 链路 | USB:小且稳定。Wi-Fi:不稳定 | 好的配置和令人头疼的配置,差别就在这一环。 |
| 解码 | 几 ms | 默认使用 GPU,自动回退到软件解码。 |
| 进入场景 | GPU 管线下不到 1 ms | 否则需要从 GPU 显存复制出来再传回去。 |
降低延迟#
- 使用 USB。最稳定,不受 Wi-Fi 拥堵影响,还能给手机充电。
- 给场景打光。昏暗的房间会延长曝光时间,这会直接计入延迟。
- 保留默认设置。低延迟模式和硬件解码出厂即已开启。
- 不要过度设置规格。如果画面只是场景中一个 1000 px 宽的人物口播画面,1080p 并不算妥协。
- 用长焦镜头代替大倍率数码变焦。放大后噪点多的视频压缩效果差,表现为码率和延迟的尖峰。
拥堵时丢弃,而不是排队。链路卡顿时,LensLink 会丢帧并短暂降低画质,而不是积压数据,因此延迟保持平稳,不会在推流过程中逐渐攀升。
查看数据#
- OBS 状态栏:
LensLink: iPhone 60 fps · 11.9 Mb/s · 43 ms,每个直播中的来源一条。 - LensLink 停靠窗口(视图 → 停靠窗口):每个来源一行。
- 手机上:直播界面状态菜单中的统计会显示同样的一行。把纯净画面设为空闲显示时,控制项淡出后它会特意保持可见。
- “状态”字段在连接时显示实测的拍摄到解码延迟。
这个数字是真实的:每秒进行一次 NTP 式的时钟偏差交换,自动音画同步也正是靠它实现的。
GPU 解码管线(测试版)#
通常,每个解码后的帧都要从 GPU 下载到系统内存,交给 OBS,再立即上传回 GPU 进行合成。在 4K60 下,这相当于每秒白白搬运约 2 GB 的像素。测试版管线把帧作为纹理直接交给 OBS,省去这一来回。
在工具 → LensLink 设置中开启。所有来源会一起切换,在重启 OBS 后生效。
实测结果#
十二种配置,每种约 25 秒实时视频,使用同一台 PC 和同一台手机,通过 Wi-Fi 连接。所有 GPU 管线测试中,像素复制量均为 0.00 MB/s。
| 配置 | 每帧开销(ms) | 像素复制(MB/s) | OBS CPU |
|---|---|---|---|
| 720p 60 HEVC | 0.81 → 0.09 | 163 → 0 | 2.2% → 1.4% |
| 1080p 60 H.264 | 2.11 → 0.10 | 370 → 0 | 2.3% → 1.6% |
| 1080p 60 HEVC | 1.42 → 0.09 | 373 → 0 | 2.6% → 1.4% |
| 4K 30 HEVC | 4.96 → 0.14 | 721 → 0 | 2.9% → 1.5% |
| 4K 60 H.264 | 7.54 → 0.10 | 1221 → 0 | 4.1% → 1.8% |
| 4K 60 HEVC | 4.75 → 0.10 | 1439 → 0 | 4.1% → 1.6% |
每帧开销下降 89–99%,而且分辨率越高收益越大:在 4K60 HEVC 下,标准管线每秒要让约 1.4 GB 数据经过系统内存,新管线将其完全去除,OBS 进程的 CPU 占用大约减半。延迟和帧率没有系统性差异,它们取决于网络和手机的编码器,而不是渲染路径。
各平台说明#
| Windows | 任何 OBS 32 支持的系统(Windows 10 1909+),使用共享的 D3D11 纹理。 |
| macOS | 任何 OBS 32 支持的系统(macOS 13+),通过 IOSurface 实现。10 位视频流是例外:VideoToolbox 会自行把它们转换为 8 位,因此 HDR 和 Apple Log 走标准路径,而不是这条管线。 |
| Linux | 需要 OBS 运行在 EGL 上(Wayland 和当前 X11 版本的默认设置),以及 VAAPI 驱动:Intel 和 AMD 的已内置在 Mesa 中;NVIDIA 需要 nvidia-vaapi-driver。 |
| 多 GPU | 在不同 GPU 上解码和渲染时无法共享纹理;来源会自动回退。 |
回退按来源自动进行:最坏的情况就是标准管线,并在日志中写明原因。
GPU 品牌重要吗?#
没有操作系统那么重要。在所有现代 GPU 上,解码都由固定功能单元完成,插件调用的是平台自己的 API,而不是任何厂商专有的接口。
| Windows | 与厂商无关。任何当前 GPU 上使用 D3D11VA,回退方案为 DXVA2。 |
| macOS | VideoToolbox,Apple 芯片和 Intel Mac 均可。 |
| Linux,Intel 或 AMD | VAAPI 已包含在 Mesa 中,无需安装任何东西。 |
| Linux,NVIDIA | 需要 nvidia-vaapi-driver;回退方案为 VDPAU。这是唯一一处由品牌决定 GPU 管线能否启用的情况。 |
| 双 GPU 笔记本电脑 | 如果解码落在一块 GPU 上,而 OBS 在另一块上渲染,就无法共享纹理,来源会自行回退。 |
| 较旧的 GPU | 没有 HEVC Main10 解码器的 GPU 会对 10 位视频流回退到软件解码;8 位不受影响。 |
同时接入多台手机是解码负载,而不是编码负载。NVIDIA 对同时进行的 NVENC 会话数量的限制在这里不适用,因为电脑上没有任何编码。真正的限制是解码吞吐量和内存带宽,而这正是 GPU 管线所节省的。
以上测量数据来自一台配备 NVIDIA 显卡的 Windows 电脑。这条管线之所以仍是测试版,部分原因在于其他组合(macOS IOSurface、Mesa VAAPI、nvidia-vaapi-driver 以及多 GPU 回退)更需要的是实际使用报告,而不是更多代码。
自己动手测量#
工具 → LensLink 设置 → 记录管线基准测试会每秒向插件的配置文件夹写入一行 CSV(路径见日志),并每五秒写一条摘要。每种配置推流十秒,然后比较一对结果:
python3 tools/bench-report.py BEFORE.csv AFTER.csv
任何向 LensLink 提出的性能改动,都应附上这样的对比结果。