Chromecast 网络实现细节,并用 roku 复制它

Posted

技术标签:

【中文标题】Chromecast 网络实现细节,并用 roku 复制它【英文标题】:Chromecast Network Implementation Details, and kinda duplicating it with a roku 【发布时间】:2013-11-12 04:29:36 【问题描述】:

入门:我正在尝试将“类似”功能复制为 roku 中的 chromecast,对于我的项目,我需要发现 roku(使用 udp),然后发送一个 http post 请求来控制它。

我最近受到 chromecast 的启发(来自我最近参加的一个开发盛会),发现它使用 SSDP 被发现,这让我开始写(修改比任何东西都多)一个可以找到我的 roku 的扩展,所以我有那个 vworking。

然而控制它已被证明是困难的,由于相同的来源策略(我认为),我似乎无法发送到不同的端口(使用 XMLHttpRequest 对象通常为:8060),所以我想知道是否有人知道chromecast 的工作原理以及该方法是否能够适应我的项目,或者您是否有解决方案来让我的扩展程序使用 /keypress/Select 的路径向 :8060 发送 http post 请求(例如)

注意:如果我只发送一个带有 IP 地址(无端口)的 XMLHttpRequest,它至少会成功返回 200,但它不控制 roku,我的理解是你必须拥有端口,所以它知道要做什么做。

【问题讨论】:

我不熟悉 roku 的内部结构,所以我不知道它提供了哪些 API。无论如何,我不确定我是否了解您遇到相同来源问题的情况。您能否解释一下谁在向谁发送 XHR 请求?作为旁注,您可以使用适当的标志启动 chrome 浏览器以禁用同源安全检查。 所以 Chrome 扩展程序应该 发送一条 POST 消息到路径 /keypress/Select 我已经在 nodejs 中完成了它(发送消息的函数我试图“复制”在扩展中:github.com/onaclov2000/roku/blob/master/roku.js#L128)我能够发送一个 json 对象(这里:github.com/onaclov2000/roku/blob/master/roku.js#L112)我只是不确定如何从我的扩展中进行类似的操作。如果我想将此扩展提供给其他用户,他们不需要那些相同的安全检查标志吗? Chromecast 如何解决这个问题? 您为什么要在扩展程序和设备之间复制 chromecast 消息?你为什么不自己写最适合你的?我想这会比尝试复制 chromecast 所做的更容易。 我并不是从字面上复制 chromecast 的功能,但我假设当您从扩展程序向 chomecast 设备发送命令时,它必须“发布”一个请求,如果可行,我想要知道怎么做,所以我可以在我的(根据 SDK 的发布请求命令 roku)。他们必须以某种方式解决相同的起源问题。 旁注,我不是专业的网络开发人员,因此如何将发布请求发送到具有不同端口的另一个站点的一些概念并不完全是“常识”我,所以我只是想把问题分解成最小的部分,现在我需要能够以这种方式发布,而且 似乎 chromecast 正在实现我的目标尝试做,我对他们如何做很感兴趣。 【参考方案1】:

长话短说,我对如何处理我的输入有些困惑,今晚我玩得更多了,所以这对我有用:

var xmlhttp = new XMLHttpRequest();

xmlhttp.open("POST","http://" + <ip>:<port> + "/keypress/Select",true);
xmlhttp.send();

所以是的,显然我一直在玩一个打包的应用程序,所以一旦我转换为扩展,我似乎不能使用“套接字”,所以我仍然在类似的船上,我想知道 chromecast 是如何设法解决它仍然是一个扩展。

【讨论】:

以上是关于Chromecast 网络实现细节,并用 roku 复制它的主要内容,如果未能解决你的问题,请参考以下文章

如何从颤振应用程序中投射屏幕?

Roku 频道主屏幕上带有搜索按钮的侧边菜单

应用找不到 chromecast

如何从 Android 应用程序中发现 Roku 设备以进行投射

本地网络上的 Chromecast

铸造设备开发