Пользовательский ресивер 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>

person Brian    schedule 20.03.2014    source источник


Ответы (3)


Хитрость в том, что вам нужно вызвать 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>
person Brian    schedule 21.03.2014

Чтобы обмениваться сообщениями между отправителем и получателем, вам необходимо определить канал связи и протокол (пространство имен) для этого.

Вы можете использовать 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:, которую вы можете определить и которая должна использоваться получателем и отправителем для идентификации протокола.

person MMind    schedule 21.03.2014

Это сделано намеренно. У вас есть два варианта:

1) Создайте медиа-менеджер.

window.mediaElement = document.getElementById('receiverVideoElement');
window.mediaManager = new cast.receiver.MediaManager(window.mediaElement);

OR ...

2) Создайте собственное пространство имен для шины сообщений.

// create a CastMessageBus to handle messages for a custom namespace
window.messageBus =
  window.castReceiverManager.getCastMessageBus(
    'urn:x-cast:com.google.cast.sample.firework');

В противном случае ваш получатель завершит сеанс отправителя. Обратите внимание, что действие приведения по-прежнему работает без выполнения любого из вышеперечисленных условий, но отправитель не может дальше общаться с получателем.

person ssgg Google Developer Platform    schedule 21.03.2014
comment
Я уже пробовал это, но это не помогло (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 файла), просто скажите, куда его положить. - person Brian; 21.03.2014
comment
Кстати, я прикрепил проект к созданному мною тикету на случай, если вы захотите его посмотреть (code.google.com/p/google-cast-sdk/issues/detail?id=208). - person Brian; 21.03.2014