我打算用javascript编写一个DLNA(upnp)客户端。我想首先知道这是否可能。
如果是,那么我可以从哪里开始?我需要知道什么才能开始?任何文档和教程的链接都将受到高度赞赏。我试过谷歌搜索,但没有找到太多有用的内容。
我只需要一个正确方向的刺激。
谢谢!:)
我打算用javascript编写一个DLNA(upnp)客户端。我想首先知道这是否可能。
如果是,那么我可以从哪里开始?我需要知道什么才能开始?任何文档和教程的链接都将受到高度赞赏。我试过谷歌搜索,但没有找到太多有用的内容。
我只需要一个正确方向的刺激。
谢谢!:)
最好的起点是来自 UPnP 论坛的文档包中的 UPnP 设备架构文档。这将协议拆分为多个区域:
总而言之,JavaScript UPnP 客户端只有在您可以使用本机代码来处理设备发现时才有可能。如果您决定尝试这一点,则存在开源 UPnP 堆栈来为您处理大部分发现工作。
看看 Plug.Play.js - 一个 JavaScript API,用于与通过 W3C 网络服务发现 API 获得的通用即插即用 (UPnP) 服务进行通信
https://github.com/rexboy7/plug.play.js
和 ssdp.js - (Simple Service Discovery Protocol) 基于 W3C Raw Socket API 的网络服务发现 API 实现
https://github.com/schien/ssdp.js
这是使用上述内容的 DLNA 客户端的示例实现:https ://github.com/mozilla-b2g/gaia/tree/master/tv_apps/dlna-player
编辑:基于火狐操作系统。
环顾这个主题并根据 André Fiedler 的回答,我发现他发布的库位于MDN webarchive上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);
});