2011-02-03 5 views
7

私はネットワーク上でUPnPデバイスをスキャンするために素晴らしいClingライブラリを使用しています。私の目標は、小さなDLNAライブラリブラウザを一緒に投げてテクノロジーを学ぶことです。ネットワークをスキャンしてUPnPデバイスを接続し、2.各リモートデバイスをスキャンし、DLNAサービスが実行されているかどうかを判断し、3.既知のノードの直下の子をブラウズすることができました。要するに、これはこのすべてを実行することができます私の方法である:ClingのすべてのDLNAルートストレージディレクトリを取得しますか?

public void remoteDeviceAdded(Registry registry, RemoteDevice device) { 
     logger.debug("remote device added: {}[{}]", device.getDetails().getFriendlyName(), 
      device.getType().getType()); 

     if (device.getType().getType().equals("MediaServer")) {   
      for (RemoteService service : device.getServices()) { 
       if (service.getServiceType().getType().equals("ContentDirectory")) { 
//    '1' is Music, '2' is Video, '3' is Pictures 
        this.service.getControlPoint().execute(new Browse(service, "3", BrowseFlag.DIRECT_CHILDREN) { 
         @Override public void received(ActionInvocation arg0, 
           DIDLContent didl) { 
          logger.debug("found {} items.", didl.getItems().size()); 
         } 

         @Override public void updateStatus(Status arg0) { }; 

         @Override public void failure(ActionInvocation arg0, UpnpResponse arg1, String arg2) { }; 
        }); 
       } 
      } 
     } 
    } 

私が知っている、それはおそらく恐ろしい混乱のように見える、それはですが、私は、デバッガにドロップすると、それは:)作品、I私が得たものを見ることができます。しかし、ガイドhereの指示とは異なり、私は実際のメディア項目を返さず、ブラウズ結果のストレージディレクトリだけを返します。 DLNAはそうのような階層に物事を整理すると、この種のは理にかなって:

Music 
    All Music 
    Artists 
     Fleetwood Mac 
     ... 
    Albums 
    ... 
Video 
    All Video 
    Folders 
... 

私の質問はこれで、階層を介してこれらのフォルダを参照して登るための最も簡単な方法は何ですか?私はすでに私が探していたUPnP DLNAサーバーに接続しているところですが、これらのルートストレージディレクトリはどうやって取得できますか?上記のbrowseコマンドでは、実際には、 "Music"や "Video"などを取得するために、いくつかのインデックスの文字列表現を渡す必要があります。どのようにストレージディレクトリのトップレベルを取得したら、それらのディレクトリのそれぞれをどのようにブラウズできますか?私の目標は、少なくともシンプルなブラウザを構築することです。

答えて

8

[OK]をクリックすると、Clingメーリングリストのヘルプの結果として私自身の質問に答えることができます。

明らかに、DLNAのすべての要素に固有のID番号があり、これを使用してClingで参照することができます。 /を取得するには、ノード「0」を要求する必要があります。 /../(一番上の!?)よりアクセスするには、ノード "-1"を要求することができます。 DLNA仕様が存在しないので、はこの点では無用です。これは慣例によるものです。だから、ノード "0"を要求する本当には最上位のノードを取得する必要がありますが、誰が知っていますか?それはあなたに赤いニシンや猛烈なムース、あるいは世界の終わりをもたらすかもしれません。リスクは私たちが生きているものです。いずれの場合においても

、このような作品のDLNA「ファイルシステム」の種類:

したがって
/[0] 
    Browse Folders/[1] 
    Music/[2] 
     All Music/[5] 
      Heart Is Hard To Find[6] 
      ... 
     ... 
    Pictures/[3] 
    Video/[4] 

、私は順次ノードである「すべての音楽」に自分の道を閲覧したい場合は「5」、私は」最初に '0'を要求し、子コンテナーを表示し、次にユーザー対話でノード '2'にブラウズし、次にユーザー対話でノード '5'をブラウズし、次にノード '6'を選択して、それに対して何らかのアクションを実行します。

DLNAがどのように動作するかを理解することは、このすべてを容易にする上で重要です。重要なことはすべてHTTP経由で提供され、ピアの検出はUPnP上で容易になります。まず、ネットワーク上のすべてのUPnPクライアントを見つけて、すべてのクライアントを並べ替え、DLNAを実行しているものを特定してからブラウズします。あなたが探しているものを見つけ、それをHTTP上でストリーミングして再生します。勝つための理論。

+1

アイテムを入手したら、どのようにファイルリストを取得できましたか?私はコンテナを持っていますが、getItems()は常に空です。 – Nifhel

+0

didl.getContainers()。get(0).getItems()は常に空です – Nifhel

関連する問題