MediaServer ContentDirectoryでルートをBrowseMetadataする(Net::UPnP::ControlPointを利用)
このサンプルはObjectID "0" (ルートコンテナ)のメタデータを取得しているのに対して、BrowseDirectChildrenの方はルートコンテナの下にあるオブジェクト一覧を表示しています。
サンプルコード
サンプルです。
このサンプルはBrowse Actionに対するResponseに入っている結果をArgument毎に表示します。
#!/usr/bin/perl
use Net::UPnP::ControlPoint;
$upnp = Net::UPnP::ControlPoint->new();
@devs = $upnp->search(st => 'upnp:rootdevice', mx => 3);
foreach $dev (@devs) {
$type = $dev->getdevicetype();
if ($type ne 'urn:schemas-upnp-org:device:MediaServer:1') {
next;
}
$serv = $dev->getservicebyname(
'urn:schemas-upnp-org:service:ContentDirectory:1');
unless ($serv) {
next;
}
print $dev->getfriendlyname();
print "\n\n";
$inarg{'ObjectID'} = "0";
$inarg{'BrowseFlag'} = "BrowseMetadata";
$inarg{'Filter'} = "";
$inarg{'StartingIndex'} = "0";
$inarg{'RequestedCount'} = "10";
$inarg{'SortCriteria'} = "";
$resp = $serv->postaction('Browse', \%inarg);
if ($resp->getstatuscode() != 200) {
print "ERROR : status code ";
print $resp->getstatuscode();
print "\n";
next;
}
$args = $resp->getargumentlist();
print $args->{'Result'};
print "\n";
print $args->{'NumberReturned'};
print "\n";
print $args->{'TotalMatches'};
print "\n";
print $args->{'UpdateID'};
print "\n";
}
exit;