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,如果我有一个GCKRemoteMediaClientobject,我可以这样做。获得它的唯一方法似乎是通过GCKSession。我可以从头开始创建这样的会话,但属性remoteMediaClientnil。或者我可以要求GCKCastContext.sharedInstance().sessionManager 为我开始一个会话。但如果我这样做,设备会立即停止播放。 所以我对如何实现最初的目标还是有点迷茫。

有什么帮助吗?

【问题讨论】:

【参考方案1】:

在 Cast Developer Group 的 Leon 提供了更多帮助后,我已经解决了这个问题。关键信息是在我的音频设备上运行的应用程序的 ID。我通过不推荐使用的 2.0 API 发现了这一点,这就是为什么我不会添加这个细节的原因。 所以假设你有那个键,你可以通过

初始化yiur cast context
let 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:从音频设备获取当前正在播放的歌曲的主要内容,如果未能解决你的问题,请参考以下文章

投射音频流时投射设备冻结

解决在Android设备播放音频与其他应用重音的问题,并监听耳机的控制按钮

获取设备播放信息

c#/.NET - 录制当前正在播放的音频

如何检测断开的蓝牙音频设备是当前播放音乐流的设备?

Google cast youtube 嵌入视频