最近在做 WebRTC 音视频会议,在调试的时候遇到了问题
本地调试能够获取摄像头列表,也能正常加载摄像头
我想着,让另外一台电脑也访问前端页面,看看能不能获取到摄像头
结果我通过 RDP 桌面远程另外一台电脑,发现死活拿不到摄像头
后来发现,关了 RDP 桌面远程,直接在那台电脑上能够打开摄像头
🧠 背后原理
Windows 的会话机制大致如下:
| 场景 | 会话编号 | 能否访问物理摄像头 |
|---|---|---|
| 本地登录 | Session 1 | ✅ 可以 |
| RDP 登录 | Session 2 (远程会话) | ❌ 不行 |
| 断开 RDP、返回本地 | 回到 Session 1 | ✅ 恢复正常 |
✅ 问题本质:RDP 登录会锁定或虚拟化本地会话 (Console Session)
这其实是 Windows 的一个"陷阱"问题:
当你通过 RDP 登录时,Windows 会把你从 物理控制台会话(Session 1) 切换到一个新的 远程会话(Session X)。
而 摄像头设备(如 USB Camera、Integrated Camera) 是绑定到 控制台会话 的。
👉 所以:
- 当 物理登录(显示器+键盘) 时,摄像头属于 Session 1;
- 当通过 RDP 登录 时,系统切换到 Session 2;
- 摄像头不会映射进 Session 2,浏览器在这个会话里自然就"看不到摄像头"。
这就是为什么:
🔹 本地登录(或退出 RDP)后浏览器能获取摄像头;
🔹 一旦 RDP 登录,摄像头立即消失。
简单一句话,RDP 桌面远程 和 摄像头 不在同一个会话中
解决办法:折腾了半天,最终妥协 ------> 用 向日葵 远程