Google Cast:从音频设备获取当前正在播放的歌曲
Posted
技术标签:
【中文标题】Google Cast:从音频设备获取当前正在播放的歌曲【英文标题】:Google Cast: Get Currently Playing Song from Audio Device 【发布时间】:2016-12-14 10:39:55 【问题描述】:我正在尝试使用 Google Cast SDK 编写一个小型应用程序。 这个应用程序应该能够显示我的音频系统当前正在播放的(谷歌播放的)歌曲。 这应包括有关曲目标题、长度、艺术家、专辑等的信息。
使用 ios 类,我设法通过GCKDiscoveryManager
连接到正确的GCKDevice
。但是如何获取当前正在播放的曲目的数据呢?
我更喜欢 iOS 类的答案,但我也非常感谢任何关于使用 Chromecast 浏览器扩展实现相同目标的提示。
插件:
在 Cast Developers +-Group 中,我被指向 this link,感谢 Leon!我看到我应该注册一个GCKRemoteMediaClientListener
,如果我有一个GCKRemoteMediaClient
object,我可以这样做。获得它的唯一方法似乎是通过GCKSession
。我可以从头开始创建这样的会话,但属性remoteMediaClient
是nil
。或者我可以要求GCKCastContext.sharedInstance().sessionManager
为我开始一个会话。但如果我这样做,设备会立即停止播放。
所以我对如何实现最初的目标还是有点迷茫。
有什么帮助吗?
【问题讨论】:
【参考方案1】:在 Cast Developer Group 的 Leon 提供了更多帮助后,我已经解决了这个问题。关键信息是在我的音频设备上运行的应用程序的 ID。我通过不推荐使用的 2.0 API 发现了这一点,这就是为什么我不会添加这个细节的原因。 所以假设你有那个键,你可以通过
初始化yiur cast contextlet options = GCKCastOptions.init(receiverApplicationID: applicationID)
GCKCastContext.setSharedInstanceWith(options)
接下来是找到您的设备。这不是太难(我自己想出的唯一丁字裤:o),GCKCastContext.sharedInstance().discoveryManager
是你的朋友。
如果您现在通过GCKCastContext.sharedInstance().sessionManager
开始会话,它将不会停止播放。事后看来完全合乎逻辑,让我想知道我之前用我使用的随机应用程序 ID 启动了哪个应用程序......
会话开始后,您可以将该会话转换为转换会话并添加会话侦听器。
if let session = sessionManager.currentSession as? GCKCastSession
session.add(self)
当该会话通知其活动时,如
中所述func castSession(_ castSession: GCKCastSession, didReceive activeInputStatus: GCKActiveInputStatus)
您现在可以找到失散已久的remoteMediaClient
并注册他的珍贵活动
if let client = castSession.remoteMediaClient
client.add(self)
这将通过调用您的委托方法结束漫长的旅程
func remoteMediaClient(_ client: GCKRemoteMediaClient, didUpdate mediaMetadata: GCKMediaMetadata)
如果你像我一样幸运的话,媒体数据是相当不完整的。 我的只包含标题和发布日期,没有其他内容。 谢谢 Deezer!
但也许我可以使用一些在整个过程中获得的 id 或其他从 Deezer 服务器获取丢失的数据?时间会证明一切。
与此同时,我希望这可以帮助一些幸运的人。
【讨论】:
以上是关于Google Cast:从音频设备获取当前正在播放的歌曲的主要内容,如果未能解决你的问题,请参考以下文章