Swift iOS应用中如何检测Chromecast媒体的播放/暂停状态?
Swift 场景下 Chromecast 远程媒体客户端播放状态判断方法
核心实现逻辑
Chromecast SDK 本身就提供了可直接读取的播放状态属性,完全不需要自己在调用play()/pause()方法时手动维护本地状态标记。等效于 AVPlayer 中timeControlStatus的判断入口,藏在remoteMediaClient实例的mediaStatus嵌套属性里:
- 当
mediaStatus.playerState为GCKMediaPlayerState.playing时,代表媒体正处于正在播放状态 - 当
mediaStatus.playerState为GCKMediaPlayerState.paused时,代表媒体正处于暂停状态
其余枚举值(如idle、buffering、loading等)代表媒体处于非播放/暂停的其他过渡、闲置状态。
代码示例
guard let remoteMediaClient = GCKCastContext.sharedInstance().sessionManager.currentSession?.remoteMediaClient, let currentMediaStatus = remoteMediaClient.mediaStatus else { // 无有效投射会话、未加载媒体时的兜底逻辑 return } switch currentMediaStatus.playerState { case .playing: // 正在播放的处理逻辑 case .paused: // 暂停状态的处理逻辑 default: // 缓冲、加载、闲置等其他状态的处理逻辑 }
关键注意事项
- 该属性的层级比 AVPlayer 直接暴露的
timeControlStatus要深一层,需要穿过mediaStatus中间对象才能访问,很多人查SDK文档时很容易忽略这个路径 - 不要在本地调用完
play()/pause()方法后立刻读取playerState做判断,因为远端接收器的状态反馈存在网络延迟,此时读取到的可能是未更新的旧状态 - 需要实时同步播放状态时,可通过实现
GCKRemoteMediaClientListener协议的remoteMediaClientDidUpdateMediaStatus(_:)回调,在SDK收到远端最新状态推送时再读取playerState值,即可保证本地获取的状态和远端播放器实际状态完全一致
内容的提问来源于stack exchange,提问作者Charlie Fish
相关产品推荐
相关产品推荐

