原文在: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 , TotalMatches,StartingIndex,RequestedCount说明
1) StartingIndex和RequestedCount为输入参数,NumberReturned和TotalMatches为输出参数。
2) 在正常情况下:
a) 一般情况下RequestedCount = 0,StartingIndex =0,下面不加特殊说明也就是如此设置。
RequestedCount设为0表示返回的NumberReturned不受限制,是多少返回多少。StartingIndex设为0,表示从第一个OBJECT起List所有的OBJECT 信息。
b) TotalMatches返回的是实际的OBJECT个数。如果BrowseFlag是“BrowseDirectChildren”,
TotalMatches返回的就是当前OBJECT的Child Object数目。如果当前OBJECT下一级目录有10个OBJECT, TotalMatches = 10;如果BrowseFlag是“BrowseMetadata”,那么TotalMatches恒为1。
c) StartingIndex表示Resopnse包中第一个OBJECT的序号,还以上面为例,如果BrowseFlag是“BrowseDirectChildren”,StartingIndex = 1,那么Response包中就没有第一个OBJECT的信息,NumberReturned = 9,TotalMatches = 10
d) RequestedCount为最多可返回的OBJECT个数,即NumberReturned <= RequestedCount,
以c)中例子,如果RequestedCount是5,那么NumberReturned也为5,如果RequestedCount大于实际的OBJECT个数,那么NumberReturned为实际数目。
3) 在异常情况下:
如果在有些特殊情况下,比如文件数过多,一时无法计算出NumberReturned个数,但是已经找到匹配的Object,这时 NumberReturned个数为0,TotalMatch表示返回的Object个数;如果没有找到匹配的Object,返回720错误。