按键映射与群控高级应用
云手机不仅支持鼠标点击,在重度操控场景下,键盘按键映射(Keymapping)和高帧率群控同步是直接影响商业应用落地的重要技术。
⌨️ 可视化按键映射(Keymapping)系统
在 Web UI V2 版本中,我们集成了强大的可视化改键编辑器。用户只需按下物理键盘按键,即可将其绑定到云手机屏幕的特定虚拟坐标上。
1. 按键类型与实现机制
按键映射引擎目前支持以下四大核心按键类型的定义与向量换算:
- Tap (点击型):
- 将单个物理键盘按键(例如
Space)绑定到屏幕的固定坐标(X, Y)。 - 按键按下 ➔ 发送
ACTION_DOWN。 - 按键抬起 ➔ 发送
ACTION_UP。
- 将单个物理键盘按键(例如
- Joystick (摇杆型 - 轮盘移动):
- 用于游戏中的虚拟跑图轮盘(通常绑定
WASD四个键)。 - 编辑器记录摇杆中心坐标(
CenterX, CenterY)及触控偏移半径(Radius)。 - 引擎检测
W/A/S/D的组合状态,动态计算 8 轴运动的单位方向向量,并自动在中心坐标附近快速滑移,实现云端操控丝滑跑步: $$\vec{V} = (\cos\theta, \sin\theta)$$
- 用于游戏中的虚拟跑图轮盘(通常绑定
- Swipe (线性滑移型 - 预设轨迹):
- 支持绑定一条自定义起点至终点的线性滑动轨迹(如映射
F键执行向右滑屏)。 - 包含
Duration变量(滑移时长),用于平滑模拟物理滑动手势。
- 支持绑定一条自定义起点至终点的线性滑动轨迹(如映射
- Command (系统命令直连型):
- 直接与系统物理指令连接。例如:将物理键盘的
Esc键直接转化为 Android 物理的BACK按键,无需模拟屏幕点击。
- 直接与系统物理指令连接。例如:将物理键盘的
📄 按键配置文件 JSON 格式规范
按键映射方案以 JSON 配置文件的形式管理,保存在浏览器的 localStorage 中。下面是一个标准的配置文件数据样本:
json
{
"profileName": "刺激战场默认键位",
"mappings": [
{
"key": "KeyF",
"type": "tap",
"x": 860,
"y": 420,
"label": "捡装备"
},
{
"key": "KeyW",
"type": "joystick",
"keys": {
"up": "KeyW",
"left": "KeyA",
"down": "KeyS",
"right": "KeyD"
},
"x": 200,
"y": 800,
"radius": 80,
"label": "移动轮盘"
}
]
}👥 高帧率群控大盘机制
群控大盘支持管理员同时管理几十甚至上百台在线虚机。我们在前端和通信层引入了精密的流优化:
1. 批量同步逻辑 (主从控制)
- 主控节点定义:用户从大盘矩阵中选定一台主设备。
- 事件抓取与广播:主控画面捕获用户的全部鼠标点击、拖拽以及改键行为。
- 事件通道并行分发:主设备画面产生的输入事件,不仅下发给自己的
input-channel,还会同步克隆、并广播下发到所有从设备的 WebRTCinput-channel数据通道中,实现上百台手机毫秒级的动作完全一致性。
2. 积压熔断与降帧预览机制
当大盘同时加载上百台虚机时,多路高码率 WebRTC 视频流会瞬间吃满开发机的 CPU 解码与显卡渲染,引起浏览器奔溃。
- 快照静默监视:非控制态下的从设备,在闲置状态下默认关闭 WebRTC 视频流。
- 二进制高效上报:闲置设备每隔 10s 通过 Agent 底层的高效 NN 处理,上报 30KB 大小的 JPEG 快照,维持大盘仪表盘矩阵的静默监视。
- 按需激活与视频降级:只有在用户选中多开同步或进入详情控制时,才按需热启动 WebRTC 视频流,并自动协商将视频帧率(
-max-fps)和码率(-bitrate)降级,确保大盘整体流畅稳定。