Skip to content

feat: 实现多输入源框架、CarPlay 适配与三类诊断源 - #33

Merged
fython merged 2 commits into
mainfrom
feat/28-multi-source
Oct 23, 2026
Merged

fython merged 2 commits into
mainfrom
feat/28-multi-source

Conversation

@fython

@fython fython commented Oct 21, 2026 •

Copy link
Copy Markdown
Owner

此前 Web、触控和后台媒体依赖 CarPlay 控制器,缺少 MFi 资源时连浏览器宿主也无法启动。本 PR 引入协议无关的投影会话与输入路由,包装现有 CarPlay,并提供 H.264、Surface、framebuffer 三类诊断源。无 MFi 时可以启动 Web 和诊断源,CarPlay 连接仍保留认证检查。

Refs #28。本 PR 落地 P0–P2 的代码基础;P3–P5 的真实协议接入仍待完成,不关闭整个跟踪 Issue。已同步 main b7d028a。

实现

  • 单活动源运行时管理资源、异步打开/停止和切源;停止或启动清理失败时保留资源,拒绝新源接管。
  • CarPlay 使用兼容适配器,保留原协议、音频和媒体控制;解密器工厂移出浏览器视频接口。等待协议、媒体工作线程和离屏输出退出后才释放资源。
  • 支持压缩访问单元、Surface producer 和有序 framebuffer 增量合成。复用原 WebRTC 直通、图像回退及关键帧恢复;Surface/framebuffer 当前走 JPEG/WebP。
  • 浏览器协商 0–10 个触点,保留 sessionId/videoEpoch 校验;切源取消旧手势、撤销租约,旧帧和旧输入不能进入新会话。无音频/麦克风能力的源不启用相关路由。
  • 手机连接页面增加诊断源选择与停止入口。实现说明、设备验收步骤和后续接入边界见 docs/PROJECTION_IMPLEMENTATION.md。

验证

提交 defa30f 验证通过:

  • Android 单测:shared 437 项、common 350 项,共 787 项,0 失败。
  • :mobile:assembleDebug、:mobile:lintDebug 通过。
  • npm test:167 项通过;npm run check 通过。
  • npm run test:browser:media:真实 Chromium/WebSocket 测试通过,覆盖多触点、只读源、图像回退、会话隔离及浏览器媒体控制。
  • 用户已确认人工测试通过,并授权合并。未提供具体设备型号及逐项测试记录。

CI:构建检查和 Android 36 浏览器运行时测试通过。Android 28 任务重跑后仍在模拟器启动后的 adb shell input keyevent 82 返回 137,测试 APK 尚未安装、测试尚未执行,因此该项没有取得验证结果。日志:https://github.com/fython/wheelplay/actions/runs/39947590039/job/120404648595

范围与限制

本 PR 未接入 AA、ICCOA、桌面或 VNC 协议;ICCOA 仍需要外部专有 SDK。

切源会断开当前浏览器观看连接,需要重新连接,以兼容没有会话版本字段的旧浏览器。

Add protocol-neutral session and input contracts, retain CarPlay through a compatibility adapter, and exercise encoded, Surface and framebuffer ingress. Keep resource ownership until teardown completes and allow the Web host without MFi provisioning.

Refs #28; real Android Auto, ICCOA and desktop/VNC adapters remain follow-up stages.
@fython
fython marked this pull request as ready for review October 23, 2026 12:06
@fython
fython merged commit 4a68a2e into main Oct 23, 2026
7 of 9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants