1

ChromeCast API にカスタム コマンドを追加できた人はいますか? TicTacToe の例を開発者 ID と変更されたプロトコル文字列 (クライアントとサーバーの両方で変更) で動作させることに成功しました。

Android 側では、動作する既存の「join」コマンドがあり、新しい「image」コマンドを追加しています。

public final void join(String name) {
    try {
        Log.d(TAG, "join: " + name);
        JSONObject payload = new JSONObject();
        payload.put(KEY_COMMAND, KEY_JOIN);
        payload.put(KEY_NAME, name);
        sendMessage(payload);
    } catch (JSONException e) {
        Log.e(TAG, "Cannot create object to join a game", e);
    } catch (IOException e) {
        Log.e(TAG, "Unable to send a join message", e);
    } catch (IllegalStateException e) {
        Log.e(TAG, "Message Stream is not attached", e);
    }
}

public final void sendImage(String sURL) {
    try {
        Log.d(TAG, "sendImage");
        JSONObject payload = new JSONObject();
        payload.put(KEY_COMMAND, KEY_IMAGE);
        payload.put(KEY_URL, sURL);
        sendMessage(payload);
    } catch (JSONException e) {
        Log.e(TAG, "Cannot create object to send image", e);
    } catch (IOException e) {
        Log.e(TAG, "Unable to send an image message", e);
    } catch (IllegalStateException e) {
        Log.e(TAG, "Message Stream is not attached", e);
    }
}

join コマンドを呼び出すと、正常に動作し、ブラウザーのコンソールを介してログに記録されたメッセージを確認できます。しかし、sendImage 関数を呼び出すと、次のエラーが発生します。

「onEnded がチャネルに接続できませんでした: プロトコル エラー」

ChromeCast 側では、有効なコマンドがいつ受信されたかを確認できます。この関数は、結合コマンドを送信すると呼び出されますが、カスタムの「イメージ」コマンドを送信すると呼び出されません。

/**
 * Message received event; determines event message and command, and
 * choose function to call based on them.
 * @param {event} event the event to be processed.
 */
onMessage: function(event) {
  console.log('***== pre onMessage ==***');
  var message = event.message;
  var channel = event.target;
  console.log('********onMessage********' + JSON.stringify(message));
  console.log('mPlayer1: ' + this.mPlayer1);
  console.log('mPlayer2: ' + this.mPlayer2);

  if (message.command == 'join') {
    this.onJoin(channel, message);
  } else if (message.command == 'leave') {
    this.onLeave(channel);
  } else if (message.command == 'move') {
    this.onMove(channel, message);
  } else if (message.command == 'queue_layout_request') {
    this.onQueueLayoutRequest(channel);
  } else if (message.command == 'image') {
    this.onImage(channel, message);
  } else if (message.command == 'video') {
    this.onVideo(channel, message);
  } else if (message.command == 'song') {
    this.onSong(channel, message);
  } else {
    cast.log.error('Invalid message command: ' + message.command);
  }
},

何か案は?カスタム コマンドを定義する必要がある場所は他にありますか?

編集済み: onImage プロトタイプも表示:

/**
 * Image event: display an image
 * @param {cast.receiver.channel} channel the source of the move, which
 *     determines the player.
 * @param {Object|string} message contains the URL of the image
 */
onImage: function(channel, message) {
  console.log('****onImage: ' + JSON.stringify(message));

  //Hide video and show image 
  mVideo.style.visibility='hidden';
  mImage.style.visibility='visible';
  mImage.src = message.url;

},
4

1 に答える 1

1

これは通常、受信側で JavaScript エラーが発生したことを意味します。ChromeCast デバイスの IP アドレスのポート 9222 で Chrome を開き、Chrome 開発者ツールを使用して問題をデバッグします。

メッセージ ハンドラのレシーバ プロトタイプで新しい関数「onImage」を宣言しましたか?

于 2013-08-15T23:22:57.597 に答える