当前位置: 代码迷 >> 综合 >> UPNP sdk中ContentDirectory service中Browse方法解析
  详细解决方案

UPNP sdk中ContentDirectory service中Browse方法解析

热度:71   发布时间:2023-12-09 21:52:05.0

原文在:http://4895268.blog.51cto.com/4885268/1048617

Browse 方法是 ContentDirectory  Service中的常用方法,它的主要参数含义在这里总结一下,以防以后搞混;

BrowseFlag

 

 

 

 1)是输入参数

 

2)  BrowseMetadata:仅仅返回该OBJECT的所有属性。为BrowseDirectChildren返回该OBJECT的 child节点OBJECT的属性。

 

Filter

1)是输入参数

2)  过滤器,规定一些返回结果的属性,如果可以得到这些属性的话,应该返回Filter中的属性。

例如 Filter的值如下:

dc:title,dc:date,@childCount,res,res@resolution,upnp:album,upnp:genre,upnp:albumArtURI,upnp:albumArtURI@dlna:profileID,dc:creator,res@size,res@duration,res@bitrate,res@protocolInfo,upnp:class

输出的结果如下:

<?xml version="1.0"?>

<u:BrowseResponse xmlns:u="urn:schemas-upnp-org:service:ContentDirectory">

<Result><DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"

 xmlns:sec="http://www.sec.co.kr/dlna"

 xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/"

 xmlns:dc="http://purl.org/dc/elements/1.1/"

 xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/">

<container id="D" parentID="0" childCount="3" searchable="0" restricted="1">

  <upnp:class> object.container</upnp:class>

  <dc:title> Shared Contents</dc:title>

  <upnp:objectUpdateID> 5</upnp:objectUpdateID>

   <sec:initUpdateID> 5</sec:initUpdateID>

   <sec:classCount class="object.container"> 0</sec:classCount>   //文件夹个数

   <sec:classCount class="object.item.imageItem"> 0</sec:classCount> //  图片个数

    <sec:classCount class="object.item.audioItem"> 0</sec:classCount>  // 音频个数

    <sec:classCount class="object.item.videoItem"> 0</sec:classCount>   //  视频个数

  </container>

<container id="1" parentID="0" childCount="8" searchable="1" restricted="1">

<upnp:class> object.container</upnp:class>

<dc:title> Shared Folder</dc:title>

<upnp:objectUpdateID> 14611</upnp:objectUpdateID>

<sec:initUpdateID> 2</sec:initUpdateID>

<sec:classCount class="object.container"> 8</sec:classCount>

<sec:classCount class="object.item.imageItem"> 0</sec:classCount>

<sec:classCount class="object.item.audioItem"> 0</sec:classCount>

<sec:classCount class="object.item.videoItem"> 0</sec:classCount>

</container>

</DIDL-Lite>

</Result>

<NumberReturned>2</NumberReturned>

<TotalMatches>2</TotalMatches>

<UpdateID>14653</UpdateID>

</u:BrowseResponse>

 

 

 NumberReturned , TotalMatchesStartingIndexRequestedCount说明

1) StartingIndexRequestedCount为输入参数,NumberReturnedTotalMatches为输出参数。

2) 在正常情况下:

a)      一般情况下RequestedCount = 0StartingIndex =0,下面不加特殊说明也就是如此设置。

RequestedCount设为0表示返回的NumberReturned不受限制,是多少返回多少。StartingIndex设为0,表示从第一个OBJECTList所有的OBJECT 信息。

b)      TotalMatches返回的是实际的OBJECT个数。如果BrowseFlag是“BrowseDirectChildren”,

TotalMatches返回的就是当前OBJECTChild Object数目。如果当前OBJECT下一级目录有10OBJECT, TotalMatches = 10;如果BrowseFlagBrowseMetadata”,那么TotalMatches恒为1

c)       StartingIndex表示Resopnse包中第一个OBJECT的序号,还以上面为例,如果BrowseFlag是“BrowseDirectChildren”,StartingIndex  = 1,那么Response包中就没有第一个OBJECT的信息,NumberReturned =  9TotalMatches = 10

d)      RequestedCount为最多可返回的OBJECT个数,即NumberReturned <= RequestedCount,

c)中例子,如果RequestedCount5,那么NumberReturned也为5,如果RequestedCount大于实际的OBJECT个数,那么NumberReturned为实际数目。

3) 在异常情况下:

如果在有些特殊情况下,比如文件数过多,一时无法计算出NumberReturned个数,但是已经找到匹配的Object,这时 NumberReturned个数为0TotalMatch表示返回的Object个数;如果没有找到匹配的Object,返回720错误。

 


  相关解决方案