You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理经AirPlay按钮触发的SharePlay会话移交适配问题

SharePlay移交Apple TV相关问题解答

1. 如何检测SharePlay向Apple TV的移交事件

不要依赖AVPlayer的路由相关通知检测该场景,直接监听当前激活的SharePlay GroupSession实例的路由属性即可:

  • 持有当前活跃GroupSession的强引用,通过Combine或者KVO订阅其$currentRoute属性的变化
  • 当currentRoute枚举值从.local切换为.externalScreen时,即触发了SharePlay会话向外部大屏(含Apple TV)的移交
  • 如需精确识别是否移交到Apple TV,可读取currentRoute关联的routeDescription属性,匹配设备类型标识即可
  • 反向移交(从Apple TV切回当前设备)的时机,可通过currentRoute从.externalScreen切回.local的事件捕获,无需额外注册其他系统通知

2. SharePlay场景下isExternalPlaybackActive的替代检测方案

SharePlay会话移交到Apple TV时不走系统原生的外部播放通道,因此AVPlayer.isExternalPlaybackActive不会更新是符合系统预期的行为,可按以下逻辑替换原有检测:

  • 先判断当前是否存在激活状态的SharePlay GroupSession:
    • 无活跃SharePlay会话时,继续沿用原有AVPlayer.isExternalPlaybackActive逻辑检测常规AirPlay场景即可,原有逻辑无需改动
    • 存在活跃SharePlay会话时,直接通过GroupSession.currentRoute判断播放位置:
      • 值为.local时,播放渲染、控制逻辑均在当前设备执行,和本地播放逻辑一致
      • 值为.externalScreen时,播放已移交到外部设备,此时本地AVPlayer实例会进入挂起状态,直接调用本地实例的pause()、seek()等方法不会同步到外部播放端,需要通过AVPlayer绑定的playbackCoordinator下发控制指令,才能同步操作到Apple TV和同会话的其他参与者
  • 低版本适配提示:iOS 15以下系统不支持SharePlay能力,可直接走原有isExternalPlaybackActive检测逻辑,不存在兼容冲突。

补充说明:移交后本地设备无法直接控制播放是该场景的默认表现,本质是移交后本地AVPlayer实例进入挂起状态,直接调用本地实例的控制接口不会同步到外部播放端,将控制调用切换到playbackCoordinator入口即可修复该问题。

内容的提问来源于stack exchange,提问作者Kai Huppmann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 20:48:28