phonypianistのメモ

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

UPnP コンテンツのURIの取得

前回は、DLNAサーバのコンテンツの辿り方について確認した。 今回はファイルのURIを取得する。

といっても、前回のように辿っていけば、いずれ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:dlna="urn:schemas-dlna-org:metadata-1-0/" xmlns:pxn="urn:schemas-panasonic-com:pxn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/ http://www.upnp.org/schemas/av/didl-lite-v2-20060531.xsd urn:schemas-upnp-org:metadata-1-0/upnp/ http://www.upnp.org/schemas/av/upnp-v2-20060531.xsd">
<item id="AUDIO-0-0-1590-PARENT-89-0-0-0-0" parentID="AUDIO-1-0-89-PARENT-0-0-0-0-0" refID="AUDIO-0-0-316" 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:02:02" size="8428596">http://xxx.xxx.xxx.25:60014/AUDIO-0-0-1590-PARENT-89-0-0-0-0_BDY_1.flac</res>
  <upnp:originalTrackNumber>1</upnp:originalTrackNumber>
  <upnp:genre>xxxxxxxxxx</upnp:genre>
  <upnp:album>xxxxxxxxxx</upnp:album>
  <upnp:albumArtURI dlna:profileID="JPEG_TN">http://xxx.xxx.xxx.25:60014/AUDIO-6-0-1590_BDY.jpg</upnp:albumArtURI>
  <upnp:artist>Vladimir Ashkenazy</upnp:artist>
</item>
<item>
  ...

ディレクトリの場合はcontainerタグだったが、ファイルはitemタグで返ってくる。

あとは簡単。resタグにファイルのURIが入っているので、それを取得するのみ。

resタグのprotocolInfo属性には、ファイルの種類等が「プロトコル:ネットワーク:コンテンツフォーマット:追加情報」の形式で記載されている。 通常、プロトコルは「http-get」、つまりHTTPのGETリクエストで取得可能ということ。 ネットワークは「*」になっていることがほとんど(のはず)。 コンテンツフォーマットはMIME-typeなので、「audio/mp3」のような文字列。Google HomeURIを渡して再生する場合には、このMIME-typeも合わせて渡すことになる。 追加情報は・・・よくわかりません💦

参考:http://upnp.org/specs/av/UPnP-av-ConnectionManager-v1-Service.pdf

次回は、アイテムのIDを指定してのメタ情報取得について。