Google Cast:检测无法加载的 QueueItem

Posted

技术标签:

【中文标题】Google Cast:检测无法加载的 QueueItem【英文标题】:Google Cast: Detect QueueItems that fail to load 【发布时间】:2015-08-26 09:59:23 【问题描述】:

我有一个 Chrome 发送应用程序,它使用 Styled Media Receiver 播放排队的音轨列表。

为了排队/自动播放项目,我预先创建了一个QueueLoadRequest,其中包含列表中每个项目的 URL。在播放过程中的某个时刻(例如,URL 已过期),曲目可能无法加载。

我希望能够检测到这种情况 - 队列中的项目无法加载,但我找不到任何简洁的方法。

例如,如果您当前正在播放一个音轨(track 1),很快就会自动播放到 track 2,它的 URL将无法加载:

使用Media.addUpdateListener() 注册的侦听器将在track 2 加载失败时被调用,但只会报告playerState of '空闲'idleReason 永远作为'Interrupted'给出。

为了确定是否存在任何类型的错误,当发现'空闲' 状态时,您必须调用Media.getStatus()。在此调用的成功回调中,如果再次检查playerState,仍然报告为'Idle',但现在给出的原因为'Error' .在这一点上,我们必须做出一个相当大的假设,即这是由媒体 URL 加载失败引起的。

一定有更好的办法吗?

远程调试器日志

当跳到失败的轨道时,远程调试器日志显示 401 发生并建议发送了 LOAD_FAILED 消息,但它似乎从未在发件人中实现。

GET http://<REDACTED_URL_THAT_THROWS_A_401> 401 (Unauthorized)g.load @ cast_receiver.js:64X.tc @ cast_receiver.js:119Wc @ player.js:50Nc @ player.js:46Y.O @ player.js:40h.ta @ player.js:58id @ cast_receiver.js:118qd @ cast_receiver.js:126g.Cc @ cast_receiver.js:135X.sb @ cast_receiver.js:106R.tb @ cast_receiver.js:35Db @ cast_receiver.js:24g.dispatchEvent @ cast_receiver.js:23g.ub @ cast_receiver.js:33Db @ cast_receiver.js:24g.dispatchEvent @ cast_receiver.js:23g.ub @ cast_receiver.js:30
cast_receiver.js:40  [ 50.331s] [cast.receiver.MediaManager] Load metadata error: [object Object]$b @ cast_receiver.js:40Yb.hc @ cast_receiver.js:40B.log @ cast_receiver.js:13J @ cast_receiver.js:14X.qb @ cast_receiver.js:123g.qb @ cast_receiver.js:61zb @ cast_receiver.js:20wb @ cast_receiver.js:21(anonymous function) @ cast_receiver.js:19
cast_receiver.js:40  [ 50.890s] [cast.receiver.IpcChannel] IPC message sent: "namespace":"urn:x-cast:com.google.cast.system","senderId":"SystemSender","data":"\"type\":\"setappstate\",\"statusText\":\"Now Casting: <REDACTED_AUDIO_TITLE>\""
cast_receiver.js:40  [ 50.918s] [cast.receiver.MediaManager] Sending error message to 
cast_receiver.js:40  [ 50.924s] [cast.receiver.IpcChannel] IPC message sent: "namespace":"urn:x-cast:com.google.cast.media","senderId":"","data":"\"requestId\":0,\"type\":\"LOAD_FAILED\""
cast_receiver.js:40  [ 50.934s] [cast.receiver.MediaManager] MediaManager message received
cast_receiver.js:40  [ 50.940s] [cast.receiver.MediaManager] Dispatching MediaManager getStatus event
cast_receiver.js:40  [ 50.945s] [cast.receiver.MediaManager] onGetStatus
cast_receiver.js:40  [ 50.950s] [cast.receiver.MediaManager] onGetStatus: "mediaSessionId":1,"sessionId":"5D841D2B-AB1E-4CD3-ACC9-B308A164E77C","requestId":70783069
cast_receiver.js:40  [ 50.957s] [cast.receiver.MediaManager] Sending status message to 11:client-99231
cast_receiver.js:40  [ 50.964s] [cast.receiver.IpcChannel] IPC message sent: "namespace":"urn:x-cast:com.google.cast.media","senderId":"11:client-99231","data":"\"type\":\"MEDIA_STATUS\",\"status\":[\"mediaSessionId\":1,\"playbackRate\":1,\"playerState\":\"IDLE\",\"currentTime\":0,\"supportedMediaCommands\":15,\"volume\":\"level\":1,\"muted\":false,\"media\":\"contentId\":\"https://<REDACTED_URL_THAT_THROWS_A_401>\",\"streamType\":\"BUFFERED\",\"contentType\":\"audio/mp3\",\"metadata\":\"type\":3,\"metadataType\":3,\"title\":\"<REDACTED_AUDIO_TITLE>\",\"artist\":\"<REDACTED_ARTIST>\",\"trackNumber\":2,\"images\":[\"url\":\"//<REDACTED_IMAGE_URL>\"],\"currentItemId\":2,\"idleReason\":\"ERROR\"],\"requestId\":70783069"

【问题讨论】:

当项目加载失败时,您能否从接收器控制台发布日志(确保先启用日志记录)。 谢谢 - 不幸的是我无法从远程调试器中得到任何东西。我可以在端口 9222 上连接并点击链接到 Remote Debugging (AppEngine),这会调出控制台,但我没有收到任何反馈。控制台中什么都没有,没有元素,也没有网络操作?在控制台输入cast.receiver.logger.setLevelValue(cast.receiver.LoggerLevel.DEBUG);后没有变化 您是否单击了输入 url 的框中的盾牌图标(靠近该框的末尾)?如果没有,请执行此操作,然后在显示的弹出窗口中单击按钮授予访问权限,看看是否有帮助。 谢谢,我在原帖中添加了一些日志。 我看到了这个问题。我将开一张内部票来解决这个问题;我们可能会改变行为,以便您自动获得带有 IDLE 状态的状态更新广播,原因是 ERROR,我想这会满足您的需求,对吗? 【参考方案1】:

根据上述 cmets,这已作为 Cast SDK 的问题提出。

【讨论】:

此问题已在最新的 SDK 版本中得到修复:developers.google.com/cast/docs/release-notes

以上是关于Google Cast:检测无法加载的 QueueItem的主要内容,如果未能解决你的问题,请参考以下文章

由于数据类型,无法查询从 Google 表格加载的 BigQuery 表

Google Cast:加载元数据错误并且不存在 Access-Control-Allow-Origin 标头

发送方和接收方的 google-cast-sdk 音频和字幕手动处理

Google Cast SDK 开发者控制台

在 iOS 上监听 Google Cast 会话事件

用于检测 Google Chrome 的预加载请求的 HTTP 标头