【问题标题】:Chromecast custom receiver without media没有媒体的 Chromecast 自定义接收器
【发布时间】:2014-04-26 16:30:31
【问题描述】:

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

【问题讨论】:

    标签: google-cast chromecast


    【解决方案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');
    

    否则您的接收方会终止发送方会话。请注意,在不满足上述任一条件的情况下,强制转换操作仍然有效,但发送方无法与接收方进一步通信。

    【讨论】:

    • 我已经尝试过了,但没有帮助(bus = mgr.getCastMessageBus('urn:x-cast:com.redwerb.hello', cast.receiver.CastMessageBus.MessageType.JSON );)。我什至向我的发件人添加了一个监听器 (_session.addMessageListener('urn:x-cast:com.redwerb.hello', messageListener.bind(this));) 并且会话仍然立即退出,在 Chrome 开发人员中没有记录任何错误安慰。我错过了什么?如果你愿意,我可以给你一个我项目的 zip 文件(只有 3 个文件),告诉我放在哪里。
    • 顺便说一句,我将项目附加到我创建的票证上,以防您想查看它 (code.google.com/p/google-cast-sdk/issues/detail?id=208)。
    【解决方案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>
    

    【讨论】:

      【解决方案3】:

      为了在发送者和接收者之间交换消息,您需要定义一个通信通道和协议(命名空间)。

      当要使用的协议与媒体相关(加载、播放、暂停...)时,您可以使用 MediaManager 为您执行此操作,或者您可以创建自己的协议。 MediaManager 在后台创建一个CastMessageBus

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

      如果您没有注册任何通信通道和协议(命名空间),那么发送方将无法与您的应用程序通信。

      有关接收器示例,请查看TicTacToe。如您所见,它创建了自己的 CastMessageBus 来交换 JSON 消息:

      TicTacToe.PROTOCOL = 'urn:x-cast:com.google.cast.demo.tictactoe'; this.castMessageBus_ = this.castReceiverManager_.getCastMessageBus(井字游戏.PROTOCOL, cast.receiver.CastMessageBus.MessageType.JSON);

      协议只是一个唯一的字符串,以 'urn:x-cast:' 开头,您可以定义它并且必须由接收方和发送方使用来识别协议。

      【讨论】:

        猜你喜欢
        • 2014-10-15
        • 1970-01-01
        • 2014-04-22
        • 2014-10-04
        • 2014-12-25
        • 2021-12-10
        • 2014-03-28
        • 2014-03-10
        相关资源
        最近更新 更多