中文文档常见问题

常见问题

需要自己搭服务器吗?

需要。插件只做客户端。WHIP/WHEP 用 SRS、ZLMediaKit 或 MediaMTX;房间语义用 LiveKit 服务端;自建则实现 RtcSignaling / RtcSession。

一定要部署 TURN 吗?

只要出了自己的局域网,就必须。摄像头与机器人的 NAT 常常是对称型或在 CGNAT 之后, 单靠 STUN 打不通。RelayPlanner 会在直连失败 relayAfterAttempts 次后升级到 RelayMode.forced。

为什么我的摄像头切不了清晰度?

因为它只推单层码流,单层流没有软件清晰度切换能力。要么服务端转码,要么把主/子码流 发布成不同 stream id(_sd / _hd / _fhd),插件会在其间切换(有 1~2s 闪断)。

为什么 UI 显示”已连接”但画面是冻结的?

ICE 状态不等于媒体状态。这正是 MediaHealthMonitor 存在的意义:它从 stats 判定 frozen,并逐级升级到请求关键帧、重建订阅。LinkPhase.degraded 必须渲染为告警, 不能显示成”已连接”。

为什么切网时插件要重建 peer connection?

WHIP/WHEP(RFC 9725)禁止在初始 SDP 之后重协商,因此 ICE 重启只能表达为”用全新 ICE 配置重建连接”。换轨道不走这条路——它用 replaceTrack。

为什么恢复必须由人确认?

因为不确认会有危险。中断前采集到的指令(比如应用后台期间摇杆被推到左边),在链路 恢复时已经不再有效。PauseResumeGate 在每次暂停时递增 epoch,让这些操作失效,并 要求显式确认才能开启新的 epoch。

可以关掉暂停 / 恢复流程吗?

可以不传 gate(退回旧行为),或在自定义策略中调用 resumeImmediately(afterReconnect: true)。两者都是显式退出,且都不是默认行为。

为什么 BLE 配网没有用官方 ESP 包?

esp_provisioning_ble 锁定 protobuf ^3,与 livekit_client 的 protobuf ^4/^6 冲突。插件直接用 cryptography 实现了 protocomm Security1 (lib/src/device/protocomm.dart),彻底移除该依赖。

iOS 能用 NFC 碰一碰配网吗?

只能读,且需要 entitlement com.apple.developer.nfc.readersession.formats(付费账号 + 显式 App ID,不支持 通配符)。iOS 不能模拟标签(HCE)。

iOS 能自动连设备热点吗?

不能。Apple 禁止程序化加入 Wi-Fi,只能引导用户去设置页操作。

Android 14 后台录音为什么崩?

缺 FOREGROUND_SERVICE_MICROPHONE 与 foregroundServiceType="microphone", Android 会在启动服务时抛 SecurityException。插件已内置 RtcLinkForegroundService 并合并声明。

模拟器能测吗?

只能测 UI 与逻辑。iOS 模拟器没有摄像头 / NFC / 蓝牙;Android 模拟器无法做 BLE、 NFC 与 SoftAP。设备管理能力必须有真机。

英文文档在哪?

站点根路径(可返回 English。