我有一个问题,当我的应用程序进入后台时,chromecast iOS api 的 GCKSocket 关闭,我从 api 得到了这个错误类型
-[GCKCastSocket socketDidDisconnect:withError:] socketDidDisconnect:withError: "(null)"
然后如果我将应用程序置于前台,api 会自动创建套接字并将播放状态设置为暂停。如果我现在尝试再次播放视频,它会正常播放。
我正在像这样在后台线程上开始播放媒体。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,
0), ^ {
[[CastViewController instance] castMedia:self.media];
});
如何在应用程序进入后台时保持播放?
这是来自 api 的日志记录
2014-02-25 17:19:01.388 CastVideos[28470:60b] -[GCKCastSocket disconnect] disconnect
2014-02-25 17:19:01.391 CastVideos[28470:60b] -[GCKCastSocket doTeardownWithError:] doTeardownWithError
2014-02-25 17:19:01.395 CastVideos[28470:60b] -[GCKCastSocket doTeardownWithError:] notifying delegate that socket is disconnected
2014-02-25 17:19:01.399 CastVideos[28470:60b] -[GCKHeartbeatChannel didDisconnect] disconnected - stopping heartbeat timer if necessary
2014-02-25 17:19:01.457 CastVideos[28470:60b] -[GCKCastSocket socketDidDisconnect:withError:] socketDidDisconnect:withError: "(null)"
最佳答案
目前,当您进入后台时,Cast iOS SDK 会关闭套接字,目前这不是可配置的项目。但是,这并不意味着 Cast 设备上的媒体播放应该停止;事实上正确的行为如下:
- 如果用户明确将自己与转换设备断开连接,并且如果她是接收方最后连接的设备,则接收方应停止播放,否则接收方应继续播放。
这里的关键是“显式”部分;例如,如果发送方超出 wifi 范围并断开连接,或者如果发送方进入休眠状态并断开连接,这些都被视为“隐式”断开连接,不应导致接收方停止。
换句话说,实际上是接收器应该有逻辑来决定它是否必须停止自己或继续播放,并且为了让它起作用,它必须能够决定设备断开连接是隐式还是明确地。在当前的接收器 SDK API 中,不幸的是,它没有包含在接收器获取的 onSenderDisconnected 事件中;在接收器的下一次左右更新中,它会发生变化,以便接收器可以看到为什么会发生断开连接,至少需要区分显式和隐式断开连接。然后它可以实现逻辑。同时,发送方需要有一个带外 channel 来发送消息,表明其明确的意图。
更新:Receiver SDK 已更新,包含可以判断发送方是隐式还是显式断开连接的信息,请参阅 docs .
关于ios - ChromeCast后台视频播放支持iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22011821/