私は素晴らしいCling
ライブラリを使用して、UPnP デバイスのネットワークをスキャンしています。私の目標は、小さな DLNA ライブラリ ブラウザーをまとめて、テクノロジーを学べるようにすることです。これまでのところ、1. ネットワークをスキャンして接続された UPnP デバイスを取得する、2. 各リモート デバイスをスキャンして DLNA サービスが実行されているかどうかを判断する、3. 既知のノードの直下の子を参照することができました。要するに、これはこれらすべてを実行できる私の方法です:
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) { };
});
}
}
}
}
私は知っています、それはおそらくひどい混乱のように見えますが、それは機能します:) デバッガーにドロップすると、何が得られたかがわかります。ただし、こちらのガイドの指示とは異なり、実際のメディア アイテムは返されず、ブラウズ結果のストレージ ディレクトリのみが返されます。DLNA は次のように階層に編成するため、この種のことは理にかなっています。
Music
All Music
Artists
Fleetwood Mac
...
Albums
...
Video
All Video
Folders
...
私の質問は、これらのフォルダーを参照して階層をたどる最も簡単な方法は何ですか? 探していた UPnP DLNA サーバーに既に接続していますが、これらのルート ストレージ ディレクトリを取得するにはどうすればよいですか? 上記のブラウズ コマンドでは、"Music" や "Video" などを取得するために、インデックスの文字列表現を実際に渡す必要があります。最上位のストレージ ディレクトリを取得するにはどうすればよいですか。次に、これらのディレクトリのそれぞれを参照するにはどうすればよいですか? 私の目標は、少なくとも単純なブラウザーを構築することです。