Chromecast 自定义命令不起作用

Posted

技术标签:

【中文标题】Chromecast 自定义命令不起作用【英文标题】:Chromecast Custom Commands Not Working 【发布时间】:2013-08-15 20:40:01 【问题描述】:

是否有人能够在 ChromeCast API 中添加自定义命令?我成功地将井字游戏示例与我的开发人员 ID 以及修改后的协议字符串(在客户端和服务器上都更改了)一起工作。

android 端,我有现有的“加入”命令,我正在添加一个新的“图像”命令:

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;

,

【问题讨论】:

【参考方案1】:

这通常意味着您的接收器中存在 javascript 错误。在 ChromeCast 设备的 IP 地址的端口 9222 上打开 Chrome,并使用 Chrome 开发人员工具来调试问题。

您是否在消息处理程序的接收器原型中声明了一个新函数“onImage”?

【讨论】:

是的,我一直在查看 chrome 开发人员工具,并在收到 join 命令时看到控制台消息。当我最初遇到 javascript 错误时,我会在控制台中看到它们。但是现在我在发送该图像命令时看不到任何新行 - 就像它没有达到 javascript 那样。上面的代码是我添加接收器原型的地方。你说的还有别的地方吗? 建议您重启 ChromeCast 设备。有时它似乎会缓存旧版本的接收器。另外,请在开发者工具设置中启用“导航时保留日志”,以防接收器因某种原因关闭。 我每次更改 javascript 代码时都重新启动了 ChromeCast 设备,但它没有帮助。但几个小时后回来后,我现在看到 ChromeCast 上实际正在处理“图像”命令。也许缓存发生在谷歌服务器上?我在想 ChromeCast 设备是直接从我的网络服务器获取的——但也许不是。感谢您的帮助!

以上是关于Chromecast 自定义命令不起作用的主要内容,如果未能解决你的问题,请参考以下文章

asp.net core kendo ui 网格自定义命令模板不起作用

Magento 2:自定义属性不起作用

“Ctrl + F6”的默认处理在自定义 MDI 应用程序中不起作用

自定义操作不起作用 msiexec /a - Visual Studio 安装项目

Heroku 上的 Django manage.py 自定义命令

为啥不和谐机器人适用于默认表情符号,而当我放置自定义表情符号时不起作用?