Google Cast:从音频设备获取当前正在播放的歌曲

Google Cast: Get Currently Playing Song from Audio Device

我正在尝试使用 Google Cast SDK 编写一个小应用程序。 此应用程序应该能够显示我的音频系统当前正在播放的(Google 播放的)歌曲。 这应该包括有关曲目的标题、长度、艺术家、专辑等的信息。

使用 iOS 类 我已经设法通过 GCKDiscoveryManager 连接到正确的 GCKDevice。但是如何获取当前正在播放的曲目的数据呢?

我更喜欢 iOS 类 的答案,但我也非常感谢任何关于使用 Chromecast 浏览器扩展程序实现相同目的的提示。

插件:

在 Cast Developers +-Group 上,我被指向 this link,谢谢 Leon!我看到我应该注册一个 GCKRemoteMediaClientListener,如果我有一个 GCKRemoteMediaClientobject,我可以这样做。获得它的唯一方法似乎是通过 GCKSession。我可以从头开始创建这样一个 session,但是 属性 remoteMediaClientnil。或者我可以请 GCKCastContext.sharedInstance().sessionManager 为我启动一个 session。但如果我这样做,设备会立即停止播放。 所以我对如何实现我最初的目标还是有点迷茫。

有什么帮助吗?

在 Cast Developer Group 的 Leon 的更多帮助下,我弄明白了这一点。关键信息是应用程序的 ID,它在我的音频设备上是 运行。我通过已弃用的 2.0 API 计算出这一点,这就是为什么我不会添加此细节的原因。 因此,假设您拥有该密钥,您可以通过

初始化 yiur cast 上下文
let options = GCKCastOptions.init(receiverApplicationID: applicationID)
GCKCastContext.setSharedInstanceWith(options)

接下来是找到您的设备。这并不太难(我自己想出的唯一丁字裤 :o)而且 GCKCastContext.sharedInstance().discoveryManager 是你的朋友。 如果您现在通过 GCKCastContext.sharedInstance().sessionManager 启动 session,它将 而不是 停止播放。事后看来完全合乎逻辑,让我想知道我之前用我使用的那个随机应用程序 ID 启动了哪个应用程序......

启动 session 后,您可以将 session 转换为 session 并添加 session 侦听器。

if let session = sessionManager.currentSession as? GCKCastSession {
    session.add(self)
}

当 session 通知其活动时,如

中所述
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服务器获取丢失的数据?时间会证明一切。

与此同时,我希望这能帮助到一些运气更好的人。