Skip to content

feat: bridge CarPlay playback and seeking to browser Media Session - #37

Merged
fython merged 3 commits into
mainfrom
feat/browser-media-session
Oct 23, 2026
Merged

fython merged 3 commits into
mainfrom
feat/browser-media-session

Conversation

@fython

@fython fython commented Oct 23, 2026 •

Copy link
Copy Markdown
Owner

已配对车机浏览器此前无法将 CarPlay 的歌曲信息、播放状态和控制接入系统媒体会话。本 PR 通过 WebSocket 推送 iPhone 的 Now Playing 状态,并用 Web Media Session API 发布标题、歌手、专辑、封面、播放状态和进度,支持播放/暂停/切歌及按手机能力启用的进度跳转。

  • 浏览器与原生 Android 的 seek 通过 iAP2 0x5003 参数 0 发送 uint32 毫秒位置,依据 LIVI、Nocturne 和 MacPlay 的公开实现;有线/无线 identification 同步声明能力。
  • 连续拖动合并并保留最终目标;连接、controller、曲目、配对权限及传输队列检查阻止过期请求。暂停时跳转保持暂停,界面进度始终以手机回报为准。
  • 已同步最新主线 9490523,保留浏览器 GPS 转发及连接生命周期。审查发现并修复连续相对跳转在回执先于进度回报时重复落到原目标的问题。

验证(最终提交 e5de83c):

  • 167 项 Node 测试及真实 Chromium 验证通过,覆盖生产 CSP、媒体控制、seek、封面、重连及画面/触控回归。
  • 全量 Android/JVM 测试通过:shared 427 项 + common 346 项 = 773 项,无失败或跳过。
  • :mobile:lintDebug 通过:0 错误、18 警告。
  • :mobile:assembleDebug 和 :common:assembleDebugAndroidTest 通过;已核对两个 APK 内的媒体脚本与最终源码一致。instrumentation APK 已构建,本地未执行设备 instrumentation。
  • git diff --check 通过。GitHub Actions 的构建和 Android 模拟器检查见本 PR 的 Checks。

Code Review 记录:本次实现自审,已复现并修复 1 个 P2 连续相对跳转问题;最终复核未发现其他阻塞性问题。

尚未进行车机/iPhone 实机验收:系统媒体卡片与实体按键、手机音乐应用的 seek 执行和进度回报、跳转后本地/浏览器声音连续性仍需确认。协议与验证记录见 docs/MEDIA_SESSION.md 和 docs/VALIDATION.md。

@fython fython left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review 已完成(本次实现的自审,审查提交 e5de83c)。

发现并修复 1 个 P2 问题:连续相对跳转时,传输回执可能先于 iPhone 的位置回报到达。原代码在回执后清空目标,导致两次“前进 10 秒”重复发送同一位置。修复后短暂保留目标用于连续操作,手机回报、失败、超时或身份边界会将其清除,显示进度仍由手机决定。新增测试先复现 30000 != 40000,再验证修复,以及回报确认、失败和超时行为。

复核覆盖:浏览器 API 缺失/部分支持、毫秒编码及能力声明、暂停时跳转、最终拖动请求保留、配对权限复查、controller/连接/曲目隔离、iAP2 背压队列中过期请求丢弃、封面 capability 生命周期,以及与主线 GPS 功能的整合。目前未发现其他需要修改的阻塞性问题。

167 项 Node 测试、真实 Chromium 验证、shared 全量 427 项测试已通过。common 全量测试和 Android 打包/lint 仍在本地运行,GitHub CI 也已启动;最终结果会补充到 PR 描述。

实机验收尚未完成:目标车机的系统媒体卡片/按键、手机应用实际 seek 与进度回报、跳转后的声音连续性。自动化通过不代表这些硬件行为已验证。

@fython
fython merged commit b7d028a into main Oct 23, 2026
4 of 6 checks passed
@fython
fython deleted the feat/browser-media-session branch October 23, 2026 11:24
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