6

私はJavaScriptでDLNA(upnp)クライアントを書くことを計画しています。そもそもこれが可能かどうか知りたいのですが。

はいの場合、どこから始めればよいですか?始めるために何を知る必要がありますか?ドキュメントやチュートリアルへのリンクをいただければ幸いです。私はグーグルを試しましたが、あまり役立つコンテンツに出くわしませんでした。

私は正しい方向に製品が必要です。

ありがとう!:)

4

3 に答える 3

13

開始するのに最適な場所は、UPnPフォーラムのドキュメントバンドルにあるUPnPデバイスアーキテクチャのドキュメントです。これにより、プロトコルがいくつかの領域に分割されます。

  • 発見。これには、マルチキャストUDPパケットを送信し、ユニキャストUDPを受信する機能が必要です。JavaScriptからこれを行うことはできないため、ネットワークを検索してネットワーク上で見つかったデバイスを制御することを提案する場合は、この部分をカバーするネイティブヘルパーアプリが必要になります。または、ターゲットデバイスのアドレスがすでにわかっている場合は、このセクションをスキップできます。
  • 説明。デバイスのアドレスを指定して、その機能のxml概要をフェッチ(http get)します。これはJavaScriptから簡単に実行できます。
  • コントロール。特定のデバイスに特定のアクションを実行するように指示します。httppostとsoapを使用して実装されました。これはJavaScriptから簡単に実行できます。
  • 総合馬術。デバイスの状態の変化を通知するメカニズム。JavaScriptから実行できないように、tcpサーバーを実行する必要があります。幸い、ほとんどのデバイスサービスは、クライアントがイベントの代わりに状態ゲッターをポーリングできるように設計されているため、これはオプションであることがよくあります。そのため、JavaScriptからこれを行うことができますが、アプリの効率はネイティブアプリよりも低くなります。
  • プレゼンテーション。一部のデバイスは、制御を可能にするWebアプリを提供します。これはブラウザでホストされているため、JavaScriptを使用します。これは、作成したい種類の制御アプリが可能であることを示す良い例です。

要約すると、JavaScript UPnPクライアントは、ネイティブコードを使用してデバイス検出を処理できる場合にのみ可能です。これを試すことにした場合は、オープンソースのUPnPスタックが存在し、ほとんどの検出作業を処理します。

于 2012-09-10T08:09:59.453 に答える
4

Plug.Play.jsをご覧ください-W3CネットワークサービスディスカバリAPIを介して取得したユニバーサルプラグアンドプレイ(UPnP)サービスと通信するためのJavaScript API

https://github.com/rexboy7/plug.play.js

およびssdp.js-(Simple Service Discovery Protocol)W3C RawSocketAPIに基づくネットワークサービス検出APIの実装

https://github.com/schien/ssdp.js

そして、これが上記を使用したDLNAクライアントのサンプル実装です:https ://github.com/mozilla-b2g/gaia/tree/master/tv_apps/dlna-player

于 2015-07-16T21:44:41.127 に答える
1

編集:FirefoxOSに基づいています。

このトピックについて見て、AndréFiedlerの回答に基づいて、彼が投稿したライブラリはMDNwebarchiveUDPSocketからのものであることがわかりました。

メインページでは、発見の例を見ることができます:

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);
});
于 2016-05-02T01:00:42.833 に答える