我打算用javascript写一个DLNA(upnp)客户端。我想首先知道这是否可行。
如果是,那我可以从哪里开始?开始时我需要知道什么?任何文档和教程的链接将受到高度赞赏。我试过谷歌搜索,但没有发现很多有用的内容。
我只需要朝着正确的方向努力。
谢谢! :)
答案 0 :(得分:12)
最佳起点是UPnP论坛docs bundle中的UPnP设备架构文档。这将协议分成许多区域:
总而言之,只有在您可以使用本机代码来处理设备发现时,才可能使用JavaScript UPnP客户端。如果您决定尝试此操作,则存在开源UPnP堆栈,以便为您处理大部分发现工作。
答案 1 :(得分:4)
查看Plug.Play.js - 用于与通过W3C网络服务发现API获得的通用即插即用(UPnP)服务进行通信的JavaScript API
https://github.com/rexboy7/plug.play.js
和ssdp.js - (简单服务发现协议)基于W3C Raw Socket API的网络服务发现API实现
https://github.com/schien/ssdp.js
以下是使用上述内容的DLNA客户端的示例实现:https://github.com/mozilla-b2g/gaia/tree/master/tv_apps/dlna-player
答案 2 :(得分:1)
编辑:基于Firefox OS。
环顾这个主题并根据AndréFiedler的回答,我发现他发布的图书馆位于MDN的UDPSocket。
在主页面中,您可以看到发现示例:
var SSDP_PORT = 1900;
var SSDP_ADDRESS = "239.255.255.250";
var SSDP_DISCOVER_MX = 2;
var SEARCH_TARGET = "urn:schemas-upnp-org:service:ContentDirectory:1";
var SSDP_DISCOVER_PACKET =
"M-SEARCH * HTTP/1.1\r\n" +
"HOST: " + SSDP_ADDRESS + ":" + SSDP_PORT + "\r\n" +
"MAN: \"ssdp:discover\"\r\n" +
"MX: " + SSDP_DISCOVER_MX + "\r\n" +
"ST: " + SEARCH_TARGET + "\r\n" +
"\r\n";
var searchSocket = new UDPSocket({
loopback: true
});
searchSocket.joinMulticastGroup(SSDP_ADDRESS);
searchSocket.onmessage = function (e) {
var msg = String.fromCharCode.apply(null, new Uint8Array(e.data));
console.log(msg);
};
searchSocket.opened.then(function() {
searchSocket.send(SSDP_DISCOVER_PACKET, SSDP_ADDRESS, SSDP_PORT);
setTimeout(function () { searchSocket.close(); }, SSDP_DISCOVER_MX * 1000);
});