cast.API.pauseMedia超时的resultcallback

时间:2013-12-26 20:48:59

标签: google-cast chromecast

我正在使用Chrome API(Cast Chrome)制作一个非常基本的HTML5视频发件人/收件人应用程序,而我在发件人应用程序中遇到了cast.API.pauseMedia方法的问题。在发送者应用程序中,我有一些模仿视频播放器中的按钮来控制接收器上的播放。我有一个播放/暂停按钮,应该更改它的图像和onclick处理程序(playMedia或pauseMedia),具体取决于视频当前是播放还是暂停。为了确保按钮设置为正确的状态,我检查playMedia / pauseMedia的结果,但我遇到的问题是pauseMedia resultCallback(MediaResult)始终为false,错误字符串为“Request timeout”。注意:视频在接收器上正确播放/暂停,但暂停时总是返回false,我无法使用结果更新UI。

以下是相关代码:

function playMedia() {
    castApi.playMedia(currentActivityId, new cast.MediaPlayRequest(), function(result) {
            console.log("onPlay [activityId: " +result.activityId + "] [result: " + result.success + "] [ErrorString: " + result.errorString + "] [Status: " + JSON.stringify(result.status) + "]");
            if (result.success) {
                document.getElementById("play-pause").onclick = pauseMedia;
                document.getElementById("play-pause").innerHTML = '<i class="fa fa-pause fa-fw"></i>';                
            }
        });
}

function pauseMedia() {
    castApi.pauseMedia(currentActivityId, function(result) {
        console.log("onPause [activityId: " +result.activityId + "] [result: " + result.success + "] [ErrorString: " + result.errorString + "] [Status: " + JSON.stringify(result.status) + "]");
            if (result.success) {
                document.getElementById("play-pause").onclick = playMedia;
                document.getElementById("play-pause").innerHTML = '<i class="fa fa-play fa-fw"></i>';       
            }  
        });    
}

这是console.log输出:

onPause [activityId: ra06rhvtqgdb] [result: false] [ErrorString: Request timeout] [Status: null]

onPlay [activityId: ra06rhvtqgdb] [result: true] [ErrorString: null] [Status: {"eventSequenceId":85,"activityId":"ra06rhvtqgdb","state":2,"contentId":"http://192.168.1.73/videos/tears_of_steel_1080p.mov","title":null,"imageUrl":null,"timeProgress":false,"position":3,"duration":734.167,"volume":1,"muted":false,"contentInfo":null,"mediaTracks":[],"error":null,"hasPause":null}]

我注意到“status”(MediaPlayerStatus)包含一个“hasPause”字段,该字段为null。我怀疑这可能与问题有关(就是这种情况?),但我不确定控制该字段值的是什么。 “hasPause”的文档说明:“播放器是否支持pauseMedia和playMedia命令。大多数接收器应用程序应支持此功能,但是,某些应用程序可能不支持这些功能。” playMedia和pauseMedia似乎都工作(视频确实在接收器上播放和暂停),但“hasPause”始终为空。我应该在接收器应用程序中自己设置这个值,如果是这样,怎么做?

编辑:添加更多信息,因为评论中没有太多空间。 我在这里使用了helloChromecast示例:https://github.com/googlecast/cast-chrome-sender-helloworld作为起点。我修改了receiver.html以添加一个丢失的</video>标记并添加了一个onEnded函数(因此我在视频播放完毕后会收到通知,等等)。我修改了发件人,以便我可以手动输入视频URL并添加我自己的自定义播放器控件(播放/暂停,搜索栏,视频位置指示器,静音按钮和音量栏等)。我可以使用许多方法来使用这些功能,但这里的目标只是学习API,所以我试图理解为什么它不能使用这里使用的方法。例如如果我只是忽略了pauseMedia的结果,一切正常,我也可以调用getMediaStatus来验证playertate以保持按钮同步等,但这并没有帮助我理解为什么pauseMedia总是返回false,或者为什么hasPause总是空等等。

1 个答案:

答案 0 :(得分:0)

如果您在播放时调用castApi.getMediaStatus(activityId,callback)并暂停播放,那么您在回调中的状态是什么?您应该看到0(用于空闲),1(用于停止)或2(用于播放)。请注意,传递给回调的参数(例如,“result”)具有一个字段状态,其“state”应该为您提供该值:result.status.state  此外,您应该自动查看发件人的状态更改,因为标准接收器会广播播放器的状态更改。你有写自己的接收器吗?您是否在发件人方面看到状态更改消息?