我想使用Chromecast显示网页。目前页面非常简单(只是“Hello World!”),但我希望能让它更复杂,并且可能与第二个屏幕交互。但是,我发现如果我不创建媒体管理器(new cast.receiver.MediaManager(window.mediaElement)
),会话会立即在我的发件人上过期(function sessionUpdateListener(false)
被调用)。页面仍然显示,但我无法再与其进行交互,包括停止应用程序。
我想知道这是设计,错误,还是我做错了什么?
以下是我的自定义接收器的代码......
<html>
<head>
<title>Hello World Chromecast App</title>
<style type="text/css">
*
{
color: white;
}
</style>
</head>
<body>
<div>Hello World!</div>
<script src="//www.gstatic.com/cast/sdk/libs/receiver/2.0.0/cast_receiver.js"></script>
<script type="text/javascript">
window.onload = function () {
window.castReceiverManager = cast.receiver.CastReceiverManager.getInstance();
window.castReceiverManager.start();
}
</script>
</body>
</html>
答案 0 :(得分:2)
诀窍是你需要在创建消息总线后调用start。一旦你这样做,那么会话将在发送者身上保持活力。
<script type="text/javascript">
(function () {
var mgr;
var bus;
window.onload = function () {
mgr = cast.receiver.CastReceiverManager.getInstance();
bus = mgr.getCastMessageBus('urn:x-cast:com.sample.hello');
mgr.start();
}
})();
</script>
答案 1 :(得分:1)
这是设计的。您有两种选择:
1)创建媒体管理器。
window.mediaElement = document.getElementById('receiverVideoElement');
window.mediaManager = new cast.receiver.MediaManager(window.mediaElement);
或......
2)为消息总线创建自定义命名空间。
// create a CastMessageBus to handle messages for a custom namespace
window.messageBus =
window.castReceiverManager.getCastMessageBus(
'urn:x-cast:com.google.cast.sample.firework');
否则您的接收方终止发送方会话。请注意,如果没有满足上述条件,则转换操作仍然有效,但发送方无法与接收方进一步通信。
答案 2 :(得分:1)
为了在发送方和接收方之间交换消息,您需要定义一个通信通道和协议(命名空间)来执行此操作。
当要使用的协议与媒体相关(LOAD,PLAY,PAUSE ...)或您可以创建自己的协议时,可以使用MediaManager为您执行此操作。 MediaManager在幕后创建了一个CastMessageBus。
要创建自己的通讯渠道和协议,您需要获得CastMessageBus或CastChannel。
如果您未注册任何通信渠道和协议(名称空间),则发件人将无法与您的申请进行通信。
对于样本接收器,请查看TicTacToe。如您所见,它创建了自己的CastMessageBus来交换JSON消息:
TicTacToe.PROTOCOL ='urn:x-cast:com.google.cast.demo.tictactoe'; this.castMessageBus_ = this.castReceiverManager_.getCastMessageBus(TicTacToe.PROTOCOL, cast.receiver.CastMessageBus.MessageType.JSON);
协议只是一个唯一的字符串,以'urn:x-cast:'开头,你可以定义,接收者和发送者必须使用它来识别协议。