Skip to content

文档

工作原理

控制面与实时面分离、直连优先的连接策略,以及一帧画面的完整链路。


Nearshell 把”低延迟”当成第一目标来设计。这里讲清楚它为达到这个目标做了哪些取舍——不涉及具体实现代码,只讲设计。

控制面与实时面分离

Nearshell 的一个核心设计,是把有序、可靠的控制低延迟、可丢弃的实时数据分成两条路:

  • 控制面(可靠):终端开关、模式切换、采集偏好、系统操作等,走可靠有序的通道,保证不丢不乱序;
  • 实时面(低延迟):视频、键鼠输入、光标位置、终端文本,追求最低延迟,允许丢弃过期事件。

两者要求几乎相反,混在一起必然互相拖累;分开之后,各自都能做到最好。

让延迟”感觉不到”

除了通道分离,Nearshell 还用了几项手段专门对抗往返延迟:

  • 8ms 有界事件合并:发送端永远不积压过期的移动 / 滚动事件,同时保留小数滚动余量;
  • 本地光标预测:iPhone 端在画面上本地预测并绘制光标,不必等 Mac 回传,指针因此跟手;
  • 窗口切换不重连:在全屏与”跟随焦点窗口”之间切换时不重启媒体连接,无缝过渡。

直连优先,就近兜底

连接优先尝试点对点直连(P2P);只有当双方的网络无法直接打通时,才回退到经我们就近的 TURN 节点中转。无论走哪条路,内容都是端到端加密的——中转节点转发的只是密文。

诊断页会明确标记当前是 Direct 还是 TURN,你随时能看到自己走的是哪条路。

一帧画面的链路

ScreenCaptureKit  →  编码(60fps · 最长边 1920 · 端到端加密)
        │                          │
     Mac 采集                直连 / 就近 TURN
                                   ↓
                        iPhone 解码 → Metal 渲染
                                   ↓
                         叠加本地预测的光标

聚焦窗口模式

除了整屏采集,Nearshell 还支持只采集并操控当前焦点窗口:减少画面与带宽负担,也让你在手机小屏上更聚焦。切换时不重启媒体连接;无焦点时冻结最后一帧并暂停输入。

更多安全细节见安全模型;隐私边界见首页的隐私一节。