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

时间:2016-12-14 10:39:56

标签: chromecast google-cast

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

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

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

附加组件:

在Cast Developers + -Group上我被指向this link,感谢Leon!我知道如果我有一个GCKRemoteMediaClientListener对象,我应该注册一个GCKRemoteMediaClient。获得它的唯一方法似乎是通过GCKSession。我可以从头创建这样的会话,但属性remoteMediaClientnil。或者我可以要求GCKCastContext.sharedInstance().sessionManager为我开始一个会话。但如果我这样做,设备会立即停止播放。 所以我仍然对如何实现我的初步目标感到有些失落。

请帮忙吗?

1 个答案:

答案 0 :(得分:1)

在Cast开发者小组的Leon的一些帮助之后,我已经想出了这个。关键信息是我的音频设备上运行的应用程序的ID。我想通过弃用的2.0 API,这就是为什么我不会添加这个细节。 因此,假设您拥有该密钥,您可以通过

初始化yiur强制转换上下文
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服务器获取丢失的数据?时间会证明。

与此同时,我希望这能帮助更多运气的人。