Chromecast не загружает мое приложение-приемник. Запрос на флешку находится на рассмотрении

Я взял образец приложения cast-chrome-sender-helloworld с сайта https://github.com/googlecast/cast-chrome-sender-helloworld и вставил мой идентификатор приложения. Идентификатор приложения связан с URL-адресом, который указывает на http://<server>/<path>/chromecast, и обратите внимание на отсутствие окончания «/» или «.html», что я сделал специально, потому что это, по сути, сервлет, который обрабатывает получатель.

Мое приложение-отправитель отправляет запрос на Chromecast. Используя отладчик в Chrome, я вижу, что получен запрос на запуск определенного приложения, связанного с моим идентификатором APP, и флешка пытается загрузить принимающее приложение с вышеупомянутого URL-адреса. Однако я вижу, что HTTP-запрос GET выполняется, но некоторое время находится в состоянии «ожидает», прежде чем (я полагаю) истечет время ожидания.

Может ли эта ошибка загрузить приложение-получатель из-за того, что URL-адрес в белом списке не содержит ".html"?

** Отредактировано 27 сентября.

Я все еще вижу, что браузер Chromecast выдает правильный URL-адрес запроса, но он «зависает» с сообщением о состоянии сети «ожидает». На мой сервер Apache нет запросов. Если я использую ноутбук для отправки того же запроса в той же сети Wi-Fi, я получаю следующий правильный ответ (с использованием CURL):

curl -vvv http://server.domain.com/path/device/chromecast
* About to connect() to server.domain.com port 80 (#0)
*   Trying 192.168.1.42...
* connected
* Connected to server.domain.com (192.168.1.42) port 80 (#0)
> GET /path/device/chromecast HTTP/1.1
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.5
> Host: server.domain.com
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Fri, 27 Sep 2013 06:46:23 GMT
< Server: Apache-Coyote/1.1
< Content-Type: text/html;charset=ISO-8859-1
< Content-Length: 1850
< Set-Cookie: JSESSIONID=81A3A6184F014A7FBEC60C0B6375E8B0; Path=/client-portal/; HttpOnly
< 
<!DOCTYPE html>
<html>
<head>
  <script src="https://www.gstatic.com/cast/js/receiver/1.0/cast_receiver.js">
  </script>
  <script type="text/javascript">

    cast.receiver.logger.setLevelValue(0);

    // Initialize and start the media playing receiver
    var receiver = new cast.receiver.Receiver(
        'REPLACED_WITH_MY_APPID', 
        [cast.receiver.RemoteMedia.NAMESPACE],
        "",
        5);
    var remoteMedia = new cast.receiver.RemoteMedia();
    remoteMedia.addChannelFactory(
        receiver.createChannelFactory(cast.receiver.RemoteMedia.NAMESPACE));

    receiver.start();

    window.addEventListener('load', function() {
      var elem = document.getElementById('vid');
      remoteMedia.setMediaElement(elem);

      var checkStatus = function() {
        var status = document.getElementById('status');
        var st = remoteMedia.getStatus()['state'];

        if( st == 0 || remoteMedia.getStatus()['current_time'] == 0 ) {
            status.style.display = 'block';
        }
        else {
            if( st == 1 && remoteMedia.getStatus()['current_time'] > 0 ) {
                status.innerHTML = 'Paused...';
                status.style.display = 'block';
            }
            else {
                status.innerHTML = remoteMedia.getStatus()['current_time'];
                status.style.display = 'none';
                elem.style.display = 'block';
            }
        }
      }
      setInterval(checkStatus, 1000);
    });
  </script>
  <title>Media Player App</title>
</head>
  <body>
    <video id="vid"
           style="position:absolute;top:0;left:0;height:100%;width:100%"></video>
    <div id="status" style="display:none; font-size:300%; position:absolute;top:40%;left:40%;">
      <img src="/images/chrome_loading.gif" width="60%">
    </div>
  </body>
* Connection #0 to host server.domain.com left intact
</html>* Closing connection #0f

Отладчик просто показывает следующее перед перезагрузкой экрана «замораживание мозга»: Снимок экрана, на котором изменены имена хостов


person tchristensen    schedule 26.09.2013    source источник
comment
.html не требуется, у меня работает аналогичная настройка. Вы пробовали, работает ли URL-адрес получателя, просто открывая его в браузере (потому что это все, что действительно делает chromecast)?   -  person Scarygami    schedule 26.09.2013
comment
В той же сети я могу открыть тот же URL и получить контент. Однако он отправляется как text / plain вместо text / html, но запрос, отправленный из Chromecast, принимает все. Я посмотрю, смогу ли я убедить Apache, что это должен быть text / html.   -  person tchristensen    schedule 26.09.2013
comment
@tchristensen: Убедитесь, что вы правильно настроили Chromecast, используя Отправить серийный номер этого Chromecast при проверке обновлений.?   -  person Squonk    schedule 27.09.2013
comment
Только что проверил еще раз. Устройство отправляет серийный номер. Один из способов проверить это - подключиться с помощью отладчика. Если можно, это означает, что устройство внесено в белый список, т.е. серийник отправлен.   -  person tchristensen    schedule 27.09.2013
comment
Я по-прежнему вижу, что браузер Chromecast выдает правильный URL-адрес, но он зависает с ожидающим сообщением о состоянии сети. На мой сервер Apache нет запросов. Если я использую ноутбук для отправки того же запроса в той же сети Wi-Fi, я получаю следующий правильный ответ (см. Вопрос)   -  person tchristensen    schedule 27.09.2013


Ответы (1)


Оказывается, Chromecast не использует DNS локального Wi-Fi роутера, а полагается на внешний. Моя проблема заключалась в том, что хост, с которым я связывался, имел другой IP-адрес в моей локальной сети. (Спасибо Google за помощь в отладке).

В документации по https://developers.google.com/cast/whitelisting указано, что это нормально. однако, чтобы внести адреса NAT в белый список, я не понимаю, как это может работать, поскольку внешний DNS обычно не знает об этом:

Два (2) URL-адреса для местоположения вашего приложения-получателя, обычно один для QA и один для производства, на вашем сервере. Получатель - это веб-страница HTML5, на которой размещается ваш контент на устройствах Chromecast. URL-адреса хорошего получателя обычно выглядят как https://website.com/rcvr/myreceiver.html или https://website.com/qarcvr/myreceiver.html (ваш приемник может быть на внутреннем (NAT) IP-адресе, но не на локальном хосте. Они редко бывают доменами верхнего уровня.

Я решил эту проблему, используя pagekite.net, который позволяет мне иметь общедоступный адрес, доступный для внешнего DNS, и при этом получать доступ к моему локальному веб-сервер машин разработки.

person tchristensen    schedule 09.10.2013