Chromecast定制接收器,无需媒体

时间:2014-03-20 03:03:03

标签: google-cast chromecast

我想使用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>

3 个答案:

答案 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

要创建自己的通讯渠道和协议,您需要获得CastMessageBusCastChannel

如果您未注册任何通信渠道和协议(名称空间),则发件人将无法与您的申请进行通信。

对于样本接收器,请查看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:'开头,你可以定义,接收者和发送者必须使用它来识别协议。