【问题标题】:resultcallback for cast.API.pauseMedia times outcast.API.pauseMedia 的 resultcallback 超时
【发布时间】:2013-12-26 20:48:58
【问题描述】:

我正在使用 Chrome API (Cast Chrome) 开发一个非常基本的 HTML5 视频发送器/接收器应用程序,并且在发送器应用程序中的 cast.API.pauseMedia 方法遇到问题。在发送方应用程序中,我有一些按钮可以模仿视频播放器中的按钮来控制接收方的播放。我有一个播放/暂停按钮,它应该根据视频当前正在播放还是暂停来更改它的图像和 onclick 处理程序(playMedia 或 pauseMedia)。为了确保按钮设置为正确的状态,我检查了 playMedia/pauseMedia 的结果,但我遇到的问题是 pauseMedia resultCallback (MediaResult) 总是错误的,带有错误字符串“请求超时”。注意:视频确实在接收器上正确播放/暂停,但暂停总是返回 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}]

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

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

【问题讨论】:

    标签: google-cast chromecast


    【解决方案1】:

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

    【讨论】:

    • 是的,当我调用 getMediaStatus 时,我可以看到正确的播放器状态信息。至于自动查看更改,我不确定您指的是什么。我不知道有任何自动显示此信息的 Cast Chrome 示例(例如,像 onStatusChanged 事件监听器?)。我在这里使用 helloChromecast 示例的修改版本:github.com/googlecast/cast-chrome-sender-helloworld
    • (空间不足)发件人有按钮来获取该信息,但它不是自动的(即单击时调用 getMediaStatus)。我修改了发件人,以便我可以手动输入视频网址并添加我自己的自定义播放器控件。我基本上只是在玩弄它(为了学习 API),并试图制作一个更像 Netflix 或 YouTube 使用的界面。接收器仅稍作修改(添加了缺少的 标签,并添加了 onEnded 函数)。我可以使用其他方法使其工作,但为什么 pauseMedia 的结果从未成功以及如何使用 hasPause?
    • 我不相信你能从“hasPause”中得到什么;它当前不是由接收器设置的(因此为“null”);如果我猜测,我会说这是“打算”用于指示流是否可以暂停(例如,直播电视可能不会暂停)但这纯粹是我的猜测。无论如何,我建议的最好方法是运行一个计时器(重复间隔一秒左右)来获取状态并相应地解释它。一个更好/更清洁的解决方案可能是挂钩到接收器上的“视频”元素的事件并将消息发送回连接的发送器。
    • 是的,我认为你可能是对的,也许 cast.receiver.RemoteMedia 的一些东西还没有完全实现。我只是想也许我错过了一些东西。直接使用 HTML5 视频元素事件听起来可能是一种更好的方法。出于某种原因,我想我不能在接收器上这样做,只能将 RAMP 的东西用于远程视频。感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 2017-11-14
    • 2016-02-06
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 2015-06-30
    相关资源
    最近更新 更多