phonypianistのメモ

調査したことなどをメモ代わりに書いています

UPnPアイテムのIDを指定してのメディアの詳細確認

前回は、ディレクトリ階層の末端にあるアイテムの一覧を取得したが、それぞれのアイテムのIDから、その情報を取ることもできる。

アイテムのIDがわかっていると、それをObjectIDに指定して、BrowseFlagを「BrowseMetadata」にして電文を送信すればよい。

例えば、アイテムのIDが「AUDIO-0-0-1950-PARENT-112-0-0-0-0」の情報を取得するには、次の電文を送信する。

<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <s:Body>
    <u:Browse xmlns:u="urn:schemas-upnp-org:service:ContentDirectory:1">
      <ObjectID>AUDIO-0-0-1950-PARENT-112-0-0-0-0</ObjectID>
      <BrowseFlag>BrowseMetadata</BrowseFlag>
      <Filter>*</Filter>
      <StartingIndex>0</StartingIndex>
      <RequestedCount>0</RequestedCount>
      <SortCriteria></SortCriteria>
    </u:Browse>
  </s:Body>
</s:Envelope>

すると、次のような電文を返してくる。
Resultタグの中身のみ抜粋して掲載している。

<DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:pxn="urn:schemas-panasonic-com:pxn">
<item id="AUDIO-0-0-1950-PARENT-112-0-0-0-0" parentID="AUDIO-1-0-112-PARENT-0-0-0-0-0" refID="AUDIO-0-0-279" restricted="1">
  <dc:title>xxxxxxxxxx</dc:title>
  <dc:creator>xxxxxxxxxx</dc:creator>
  <upnp:writeStatus>NOT_WRITABLE</upnp:writeStatus>
  <upnp:recordable>0</upnp:recordable>
  <upnp:class name="audioItem">object.item.audioItem</upnp:class>
  <res protocolInfo="http-get:*:audio/x-flac:DLNA.ORG_OP=01;DLNA.ORG_FLAGS=01500000000000000000000000000000" duration="0:08:00" size="38572329">http://xxx.xxx.xxx.25:60014/AUDIO-0-0-1950-PARENT-112-0-0-0-0_BDY_1.flac</res>
  <upnp:originalTrackNumber>1</upnp:originalTrackNumber>
  <upnp:genre>xxxxxxxxxx</upnp:genre>
  <upnp:album>xxxxxxxxxx</upnp:album>
  <upnp:artist>xxxxxxxxxx</upnp:artist>
  </item>
</DIDL-Lite>

前回試した、アイテム一覧を取得するときと同じ情報が取れる。

が、プログラム側としては、アイテムのIDさえ保持しておけば、DLNAサーバからいつでもリクエストを送信してメタ情報が取れるので、他の情報をすべて常に保持しておく必要はない。

もちろん、通信が伴うこともあり多少処理に時間がかかるため、作成するプログラムの特性に応じて、メタ情報をキャッシュするのか都度取得するかを使い分ければよい。