[Модуль] DLNA (app_dlna)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: [Модуль] DLNA

Сообщение nick7zmail » Пн фев 19, 2018 7:41 am

А тем скриптом хромкаста ищутся?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: [Модуль] DLNA

Сообщение directman66 » Пн фев 19, 2018 7:50 am

Обнаруживается этим (https://github.com/ChrisRidings/CastV2i ... /index.php):

Код: Выделить всё

require_once("/var/www/modules/CastV2inPHP-master/Chromecast.php");
print_r(Chromecast::scan()); 
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: [Модуль] DLNA

Сообщение directman66 » Пн фев 19, 2018 7:53 am

Сканер ресурсов dnla

Код: Выделить всё

require('/var/www/modules/app_dlna/upnp/vendor/autoload.php');
use jalder\Upnp\Mediaserver;
$mediaserver = new Mediaserver();
print('searching...'.PHP_EOL);
$servers = $mediaserver->discover();
if(!count($servers)){
    print_r('no upnp mediaservers found'.PHP_EOL);
}
foreach($servers as $server){
    $browse = new Mediaserver\Browse($server);
    $directories = $browse->browse();
    $info = $server['description']['device'];
    $summary = $info['friendlyName'].', '.$info['modelDescription'].', '.$info['modelName'].', '.$info['UDN'];
echo "<br>_________<br>";  
print_r($summary)    ;
echo "<br> Directories:<br>"; 
print_r($directories);
}
на выходе имеем

Код: Выделить всё

searching... 
Warning: Invalid argument supplied for foreach() in /var/www/modules/app_dlna/upnp/vendor/jalder/upnp/src/Mediaserver/Browse.php on line 55

Warning: Invalid argument supplied for foreach() in /var/www/modules/app_dlna/upnp/vendor/jalder/upnp/src/Mediaserver/Browse.php on line 55

Warning: Invalid argument supplied for foreach() in /var/www/modules/app_dlna/upnp/vendor/jalder/upnp/src/Mediaserver/Browse.php on line 55

Warning: Invalid argument supplied for foreach() in /var/www/modules/app_dlna/upnp/vendor/jalder/upnp/src/Mediaserver/Browse.php on line 55

Warning: Invalid argument supplied for foreach() in /var/www/modules/app_dlna/upnp/vendor/jalder/upnp/src/Mediaserver/Browse.php on line 55

Warning: Invalid argument supplied for foreach() in /var/www/modules/app_dlna/upnp/vendor/jalder/upnp/src/Mediaserver/Browse.php on line 55

Warning: Invalid argument supplied for foreach() in /var/www/modules/app_dlna/upnp/vendor/jalder/upnp/src/Mediaserver/Browse.php on line 55

Warning: Invalid argument supplied for foreach() in /var/www/modules/app_dlna/upnp/vendor/jalder/upnp/src/Mediaserver/Browse.php on line 55

Warning: Invalid argument supplied for foreach() in /var/www/modules/app_dlna/upnp/vendor/jalder/upnp/src/Mediaserver/Browse.php on line 55

Warning: Invalid argument supplied for foreach() in /var/www/modules/app_dlna/upnp/vendor/jalder/upnp/src/Mediaserver/Browse.php on line 55

Warning: Invalid argument supplied for foreach() in /var/www/modules/app_dlna/upnp/vendor/jalder/upnp/src/Mediaserver/Browse.php on line 55

_________
DiskStation, Synology DLNA/UPnP Media Server, DS211j, uuid:00113209-7ecf-0011-cf7e-cf7e09321100
 Directories:
Array ( [21] => Array ( [parentID] => 0 [#text] => [dc:title] => Music [upnp:class] => object.container ) [32] => Array ( [parentID] => 0 [#text] => [dc:title] => Photo [upnp:class] => object.container.storageFolder [upnp:storageUsed] => -1 ) [33] => Array ( [parentID] => 0 [#text] => [dc:title] => Video [upnp:class] => object.container.storageFolder [upnp:storageUsed] => -1 ) ) 
_________
Plex Media Server: DMSHOME, Plex Media Server, Plex Media Server, uuid:9e1becde-4773-ac02-af35-c6f715bf87db
 Directories:
Array ( [94467912-bd40-4d2f-ad25-7b8423f7b05a] => Array ( [parentID] => 0 [dc:title] => Video [dc:creator] => Unknown [upnp:genre] => Unknown [dc:description] => Video [upnp:class] => object.container.storageFolder ) [abe6121c-1731-4683-815c-89e1dcd2bf11] => Array ( [parentID] => 0 [dc:title] => Music [dc:creator] => Unknown [upnp:genre] => Unknown [dc:description] => Music [upnp:class] => object.container.storageFolder ) [b0184133-f840-4a4f-a583-45f99645edcd] => Array ( [parentID] => 0 [dc:title] => Photos [dc:creator] => Unknown [upnp:genre] => Unknown [dc:description] => Photos [upnp:class] => object.container.storageFolder ) )
Полного пути к потоку с данными пока не нашел.

Поидее надо как то открыть контейнер Video [upnp:class] => object.container.storageFolder )

John Alder красавчик!
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: [Модуль] DLNA

Сообщение nick7zmail » Пн фев 19, 2018 8:41 am

Попробуй хромкасты этим скриптом поискать https://github.com/jalder/UPnP/blob/mas ... efault.php
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: [Модуль] DLNA

Сообщение directman66 » Пн фев 19, 2018 8:52 am

Уже пробовал.

Код: Выделить всё

searching... no chromecasts found via SSDP
Видимо чем-то отличается google home от хромкаст. Хотя приложению bubbleUpnp монопинесуально.


Пока пытаюсь понять, как получить список медиа-файлов серверов. Контейнер есть (object.container.storageFolder), а как его посмотреть до меня не доходит.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: [Модуль] DLNA

Сообщение nick7zmail » Пн фев 19, 2018 8:56 am

Интересно...надо искать отличия в конечном сообщении от этой библиотеки, и от той, что в модуле.

Отправлено с моего Xperia XZ1 Compact через Tapatalk
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: [Модуль] DLNA

Сообщение directman66 » Пн фев 19, 2018 9:06 am

Пока в приоритете телевизор и dnla browse.

Насколько я понимаю, dnla сервер должен отдать xml файл контейнер со списком файлов, который можно разобрать с помощью formatXml($directory)

Но по какому адресу его искать, я пока не понимаю.

upd: пожоже надо куда-то послать xml запрос вида

Код: Выделить всё

<?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>0</ObjectID>
      <BrowseFlag>BrowseDirectChildren</BrowseFlag>
      <Filter>*</Filter>
      <StartingIndex>0</StartingIndex>
      <RequestedCount>0</RequestedCount>
      <SortCriteria></SortCriteria>
    </u:Browse>
  </s:Body>
</s:Envelope>
и в ответ должен прилететь список файлов

Вот еще что нашел:
METHOD: POST http://192.168.2.6:1400/MediaServer/Con ... ry/Control
HEADER: SOAPACTION: "urn:schemas-upnp-org:service:ContentDirectory:1#Browse"
BODY:

<?xml version="1.0" encoding="utf-8"?>
<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>A:ARTIST</ObjectID>
<BrowseFlag>BrowseDirectChildren</BrowseFlag>
<Filter>*</Filter>
<StartingIndex>0</StartingIndex>
<RequestedCount>10</RequestedCount>
<SortCriteria>*</SortCriteria>
</u:Browse>
</s:Body>
</s:Envelope>


This gets all Artists (since we are using * for a filter) and shows the first 10 results. The ObjectID can be strings like A:ALBUM (to search for albums), A:TRACKS (to search for tracks), or A:PLAYLISTS (to search playlists). The range of ObjectID values can be found from one of the other actions in the Media Server/ContentDirectory service.
Только как это сделать библиотекой еще вопрос )

На самом деле в описании протокола четко описано как производится запрос. http://upnp.org/specs/av/UPnP-av-Conten ... ervice.pdf Пункт 2.8.3

Библиотека Jaldera его несколько сокращает.

Код: Выделить всё

 $args = array(
            'ObjectID'=>$base,
            'BrowseFlag'=>$browseflag,
            'Filter'=>'',
            'StartingIndex'=>$start,
            'RequestedCount'=>$count,
            'SortCriteria'=>'',
        );
В библиотеке отсутсвуют запросы поиска по имени, исполнителю и т.д.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: [Модуль] DLNA

Сообщение directman66 » Пн фев 19, 2018 3:47 pm

В общем удалось получить список контента. Через библиотеку так и не удалось.
СпойлерПоказать

Код: Выделить всё

$host="192.168.1.31";
$port=32469;
//$controlURL='/X_MS_MediaReceiverRegistrar/9e1becde-4773-ac02-af35-c6f715bf87db/control.xml';
$controlURL='/ContentDirectory/9e1becde-4773-ac02-af35-c6f715bf87db/control.xml';

$ObjectID = "c104054e5a4c8c3c046e"; //GetValue(); 
$BrowseFlag = "BrowseDirectChildren"; //GetValue(); 
$Filter = "*"; //GetValue(); 
$StartingIndex = "0"; //GetValue(); 
$RequestedCount = "100"; //GetValue(); 
$SortCriteria = "+dc:title"; //GetValue(); 

$xml='<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:Browse xmlns:u="urn:schemas-upnp-org:service:ContentDirectory:1"><ObjectID>'.$ObjectID.'</ObjectID><BrowseFlag>'.$BrowseFlag.'</BrowseFlag><Filter>'.$Filter.'</Filter><StartingIndex>'.$StartingIndex.'</StartingIndex><RequestedCount>'.$RequestedCount.'</RequestedCount><SortCriteria>'.$SortCriteria.'</SortCriteria></u:Browse></s:Body></s:Envelope>
'; 


$asnw=sendpacket($host,$port,$controlURL,'Browse', $xml);
echo $asnw;
////////////////////////////////


function sendpacket($host,$port,$AVTransport, $command, $xml){
///browse
$body=$xml;
$headers = 'POST '.$AVTransport.' HTTP/1.1
Soapaction: "urn:schemas-upnp-org:service:ContentDirectory:1#Browse"
CONTENT-TYPE: text/xml; charset="utf-8"
HOST: '.$host.':'.$port;
$content=$headers . '
Content-Length: '. strlen($body) .'

'. $body;
 
 //echo $content;
//echo $host.":". $port;
$fp = fsockopen($host, $port , $errno, $errstr, 10);
        if (!$fp)
        {echo "Error opening socket: ".$errstr." (".$errno.")<br>";} else 
        {            
$ret = "";
$buffer = "";
         
//        fputs ($fp, $content);
//        while (!feof($fp)) {
//            $buffer = fgets($fp,128);
//            echo "\n;" . $buffer . ";\n"; 
//            $ret.= $buffer;

fwrite($fp, $content);
//while (!feof($fp)) {
//$buffer = fgets($fp,128);
//echo fgets($fp, 128);
//$ret.= $buffer; 
$buffer = stream_get_contents($fp, -1); 
//    }
    fclose($fp);
        }

// echo "\n\nReturn:" . $ret . "!!\n";

fclose($fp); 
 return $buffer;
 }
Ответ от Plex:
СпойлерПоказать

Код: Выделить всё

Warning: fclose(): supplied resource is not a valid stream resource in /var/www/modules/scripts/scripts.class.php(142) : eval()'d code on line 61
 HTTP/1.1 200 OK Ext: Date: Mon, 19 Feb 2018 12:43:04 GMT Content-Length: 40299 Content-Type: text/xml; charset="utf-8" Server: UPnP/1.0 DLNADOC/1.50 Platinum/1.0.5.13  <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/"><item id="01bebf4b306373657d08" parentID="c104054e5a4c8c3c046e" restricted="1"><dc:title>American Made (2017)</dc:title><dc:creator>Doug Liman</dc:creator><dc:date>2017-08-17</dc:date><upnp:actor>Tom Cruise</upnp:actor><upnp:actor>Sarah Wright</upnp:actor><upnp:actor>Domhnall Gleeson</upnp:actor><upnp:actor>Alejandro Edda</upnp:actor><upnp:actor>Mauricio Mejía</upnp:actor><upnp:actor>Jayma Mays</upnp:actor><upnp:actor>Jesse Plemons</upnp:actor><upnp:actor>Lola Kirke</upnp:actor><upnp:actor>Jayson Warner Smith</upnp:actor><upnp:actor>William Mark McCullough</upnp:actor><upnp:actor>Lara Grice</upnp:actor><upnp:actor>Frank Licari</upnp:actor><upnp:actor>Jed Rees</upnp:actor><upnp:actor>Caleb Landry Jones</upnp:actor><upnp:actor>Connor Trinneer</upnp:actor><upnp:actor>April Billingsley</upnp:actor><upnp:actor>Benito Martinez</upnp:actor><upnp:actor>Kayla Perkins</upnp:actor><upnp:actor>Justice Leak</upnp:actor><upnp:actor>Sharon Conley</upnp:actor><upnp:actor>Mike Pniewski</upnp:actor><upnp:actor>Robert Pralgo</upnp:actor><upnp:actor>E. Roger Mitchell</upnp:actor><upnp:actor>Michael Mercaldi</upnp:actor><upnp:actor>Morgan Hinkleman</upnp:actor><upnp:actor>Patti Schellhaas</upnp:actor><upnp:actor>Courtney Lakin</upnp:actor><upnp:actor>Chris Gann</upnp:actor><upnp:actor>Fredy Yate Escobar</upnp:actor><upnp:actor>Robert Farrior</upnp:actor><upnp:actor>Alberto Ospino</upnp:actor><upnp:actor>Felipe Bernedette</upnp:actor><upnp:actor>Daniel Lugo</upnp:actor><upnp:actor>Lauren Boyd</upnp:actor><upnp:actor>Lauren Revard</upnp:actor><upnp:actor>Marcus Hester</upnp:actor><upnp:actor>Alex Collins</upnp:actor><upnp:actor>Scott Poythress</upnp:actor><upnp:actor>Alpha Trivette</upnp:actor><upnp:actor>Kevin L. Johnson</upnp:actor><upnp:actor>DeVere Jehl</upnp:actor><upnp:actor>Emilio Sierra</upnp:actor><upnp:actor>Leon Lamar</upnp:actor><upnp:actor>Maria Howell</upnp:actor><upnp:actor>Darla Delgado</upnp:actor><upnp:actor>Mickey Sumner</upnp:actor><upnp:actor>Daniel Thomas May</upnp:actor><upnp:actor>Chloe Swan Sparwath</upnp:actor><upnp:actor>Alex Quarles</upnp:actor><upnp:actor>Trip McCarthy</upnp:actor><upnp:genre>боевик</upnp:genre><upnp:genre>комедия</upnp:genre><upnp:genre>криминал</upnp:genre><upnp:genre>история</upnp:genre><upnp:albumArtURI dlna:profileID="JPEG_MED">http://192.168.1.31:32469/proxy/cb337220f78068f6a959/albumart.jpg</upnp:albumArtURI><dc:description>American Made (2017)</dc:description><upnp:longDescription>Он был самым юным пилотом Боинга 747 в США, а уже через несколько лет стал одним из богатейших людей в Америке. Его стиль жизни был столь же экстремальным, как и его бизнес. Закрытые приемы, роскошные блондинки, крутые тачки и рисковые сделки. Он обладал талантом делать деньги из воздуха.</upnp:longDescription><upnp:icon>http://192.168.1.31:32469/proxy/4c8c1f754a89a60cc0ab/icon.jpg</upnp:icon><res duration="1:54:58.000" size="10799641557" resolution="1920x1036" bitrate="1565375" nrAudioChannels="6" protocolInfo="http-get:*:video/x-matroska:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000">http://192.168.1.31:32469/object/01bebf4b306373657d08/file.mkv</res><upnp:class>object.item.videoItem.movie</upnp:class></item><item id="df4b8e517919aa1f643c" parentID="c104054e5a4c8c3c046e" restricted="1"><dc:title>Aritmija Web Dl</dc:title><dc:creator>Unknown</dc:creator><upnp:genre>Unknown</upnp:genre><upnp:albumArtURI dlna:profileID="JPEG_MED">http://192.168.1.31:32469/proxy/f998486b9fb1ea19aac6/albumart.jpg</upnp:albumArtURI><dc:description>Aritmija Web Dl</dc:description><upnp:icon>http://192.168.1.31:32469/proxy/062976924bbff270270c/icon.jpg</upnp:icon><res duration="1:55:52.000" size="4810724267" resolution="1920x1038" bitrate="692000" nrAudioChannels="6" protocolInfo="http-get:*:video/x-matroska:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000">http://192.168.1.31:32469/object/df4b8e517919aa1f643c/file.mkv</res><upnp:class>object.item.videoItem.movie</upnp:class></item><item id="f5cdc90412660f1d70d2" parentID="c104054e5a4c8c3c046e" restricted="1"><dc:title>The Best Offer (2013)</dc:title><dc:creator>Giuseppe Tornatore</dc:creator><dc:date>2013-01-01</dc:date><upnp:actor>Geoffrey Rush</upnp:actor><upnp:actor>Jim Sturgess</upnp:actor><upnp:actor>Sylvia Hoeks</upnp:actor><upnp:actor>Donald Sutherland</upnp:actor><upnp:actor>Maximilian Dirr</upnp:actor><upnp:actor>Philip Jackson</upnp:actor><upnp:actor>Dermot Crowley</upnp:actor><upnp:actor>Liya Kebede</upnp:actor><upnp:actor>Hannah Britland</upnp:actor><upnp:actor>Brigitte Christensen</upnp:actor><upnp:actor>Kiruna Stamell</upnp:actor><upnp:actor>Caterina Capodilista</upnp:actor><upnp:actor>Gen Seto</upnp:actor><upnp:actor>Klaus Tauber</upnp:actor><upnp:actor>Laurence Belgrave</upnp:actor><upnp:actor>Sean Buchanan</upnp:actor><upnp:actor>John Benfield</upnp:actor><upnp:genre>драма</upnp:genre><upnp:genre>мелодрама</upnp:genre><upnp:genre>криминал</upnp:genre><upnp:genre>детектив</upnp:genre><upnp:albumArtURI dlna:profileID="JPEG_MED">http://192.168.1.31:32469/proxy/2064696e6392cc718022/albumart.jpg</upnp:albumArtURI><dc:description>The Best Offer (2013)</dc:description><upnp:longDescription>Вёрджил Олдмен — управляющий директор ведущего аукционного дома. Время от времени со своим партнёром Билли на глазах у всего мира он проворачивает хитроумные аферы, ловко манипулируя и вводя в заблуждение как продавцов, так и покупателей. В секретном зале своей виллы он собрал сотни бесценных картин из разных эпох. Однажды таинственная женщина, скрывающая свою личность, просит его продать антиквариат её семьи. Среди многочисленных произведений искусства раз за разом Олдман обнаруживает частицы давно утерянного механизма. В своё время поговаривали, что для того, чтобы его оживить создатели прибегали к помощи высших сил… Складывая как пазл найденные детали, вместе со своим гениальным другом Робертом, они пытаются разгадать этот секрет. Но Олдмен заинтересован не только предметами старины…</upnp:longDescription><upnp:icon>http://192.168.1.31:32469/proxy/9aecfe8443e6017488c2/icon.jpg</upnp:icon><res duration="2:09:32.000" size="6238057649" resolution="1280x536" bitrate="802625" nrAudioChannels="6" protocolInfo="http-get:*:video/x-matroska:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000">http://192.168.1.31:32469/object/f5cdc90412660f1d70d2/file.mkv</res><upnp:class>object.item.videoItem.movie</upnp:class></item><item id="61606ac31f27786b07af" parentID="c104054e5a4c8c3c046e" restricted="1"><dc:title>Blade Runner 2049 (2017)</dc:title><dc:creator>Denis Villeneuve</dc:creator><dc:date>2017-10-04</dc:date><upnp:actor>Ryan Gosling</upnp:actor><upnp:actor>Harrison Ford</upnp:actor><upnp:actor>Ana de Armas</upnp:actor><upnp:actor>Robin Wright</upnp:actor><upnp:actor>Jared Leto</upnp:actor><upnp:actor>Sylvia Hoeks</upnp:actor><upnp:actor>Mackenzie Davis</upnp:actor><upnp:actor>Carla Juri</upnp:actor><upnp:actor>Lennie James</upnp:actor><upnp:actor>Dave Bautista</upnp:actor><upnp:actor>David Dastmalchian</upnp:actor><upnp:actor>Barkhad Abdi</upnp:actor><upnp:actor>Hiam Abbass</upnp:actor><upnp:actor>Wood Harris</upnp:actor><upnp:actor>Edward James Olmos</upnp:actor><upnp:actor>Tómas Lemarquis</upnp:actor><upnp:actor>Sallie Harmsen</upnp:actor><upnp:actor>Sean Young</upnp:actor><upnp:actor>Loren Peta</upnp:actor><upnp:actor>Mark Arnold</upnp:actor><upnp:actor>Krista Kosonen</upnp:actor><upnp:actor>Elarica Johnson</upnp:actor><upnp:actor>Kingston Taylor</upnp:actor><upnp:actor>David Benson</upnp:actor><upnp:actor>Ben Thompson</upnp:actor><upnp:actor>Suzie Kennedy</upnp:actor><upnp:actor>Stephen Triffitt</upnp:actor><upnp:actor>Ellie Wright</upnp:actor><upnp:genre>детектив</upnp:genre><upnp:genre>фантастика</upnp:genre><upnp:genre>триллер</upnp:genre><upnp:albumArtURI dlna:profileID="JPEG_MED">http://192.168.1.31:32469/proxy/57619c28590a32b93b68/albumart.jpg</upnp:albumArtURI><dc:description>Blade Runner 2049 (2017)</dc:description><upnp:longDescription>Продолжение культового фильма «Бегущий по лезвию», действие которого разворачивается через несколько десятилетий. Офицер полиции Кей (Райан Гослинг) становится обладателем секретной информации, которая ставит под угрозу существование всего человечества. Желая найти ключ к разгадке, он решает разыскать Рика Декарда (Харрисон Форд), бывшего офицера специального подразделения полиции Лос-Анджелеса, который бесследно исчез много лет назад.</upnp:longDescription><upnp:icon>http://192.168.1.31:32469/proxy/ffbda9337008159e4dcc/icon.jpg</upnp:icon><res duration="2:43:27.000" size="13701201829" resolution="1920x800" bitrate="1397000" nrAudioChannels="6" protocolInfo="http-get:*:video/x-matroska:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000">http://192.168.1.31:32469/object/61606ac31f27786b07af/file.mkv</res><upnp:class>object.item.videoItem.movie</upnp:class></item><item id="fd175b4405e57e1259ca" parentID="c104054e5a4c8c3c046e" restricted="1"><dc:title>Foreigner (2010)</dc:title><dc:creator>Fabien Gaillard</dc:creator><dc:date>2010-10-19</dc:date><upnp:actor>Jenevieve Chang</upnp:actor><upnp:actor>Barbie Han</upnp:actor><upnp:actor>Gauthier Roubichou</upnp:actor><upnp:genre>Unknown</upnp:genre><upnp:albumArtURI dlna:profileID="JPEG_MED">http://192.168.1.31:32469/proxy/291018646e4a9b9c57ba/albumart.jpg</upnp:albumArtURI><dc:description>Foreigner (2010)</dc:description><upnp:longDescription>A love story between a Chinese woman and a French expatriate in Shanghai.</upnp:longDescription><upnp:icon>http://192.168.1.31:32469/proxy/5d0fd941741b7438b776/icon.jpg</upnp:icon><res duration="1:53:52.000" size="13977442259" resolution="1920x804" bitrate="2045875" nrAudioChannels="6" protocolInfo="http-get:*:video/x-matroska:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000">http://192.168.1.31:32469/object/fd175b4405e57e1259ca/file.mkv</res><upnp:class>object.item.videoItem.movie</upnp:class></item><item id="b71076680577d4dfd03d" parentID="c104054e5a4c8c3c046e" restricted="1"><dc:title>Geostorm (2017)</dc:title><dc:creator>Dean Devlin</dc:creator><dc:date>2017-10-13</dc:date><upnp:actor>Gerard Butler</upnp:actor><upnp:actor>Alexandra Maria Lara</upnp:actor><upnp:actor>Jim Sturgess</upnp:actor><upnp:actor>Abbie Cornish</upnp:actor><upnp:actor>Ed Harris</upnp:actor><upnp:actor>Andy García</upnp:actor><upnp:actor>Zazie Beetz</upnp:actor><upnp:actor>Eugenio Derbez</upnp:actor><upnp:actor>Robert Sheehan</upnp:actor><upnp:actor>David S. Lee</upnp:actor><upnp:actor>Talitha Bateman</upnp:actor><upnp:actor>Daniel Wu</upnp:actor><upnp:actor>Adepero Oduye</upnp:actor><upnp:actor>Amr Waked</upnp:actor><upnp:actor>Richard Schiff</upnp:actor><upnp:actor>Billy Slaughter</upnp:actor><upnp:actor>Tom Choi</upnp:actor><upnp:actor>Mare Winningham</upnp:actor><upnp:actor>Daniella Garcia-Lorido</upnp:actor><upnp:actor>Ritchie Montgomery</upnp:actor><upnp:actor>Judd Lormand</upnp:actor><upnp:actor>Corey Mendell Parker</upnp:actor><upnp:actor>Catherine Ashton</upnp:actor><upnp:actor>Arnold Chun</upnp:actor><upnp:actor>Randall Newsome</upnp:actor><upnp:actor>Sean Paul Braud</upnp:actor><upnp:actor>Anastasiya Rul</upnp:actor><upnp:actor>Julia Denton</upnp:actor><upnp:actor>Carlos Antonio</upnp:actor><upnp:actor>Joe Drago</upnp:actor><upnp:actor>Douglas M. Griffin</upnp:actor><upnp:actor>Blake Burt</upnp:actor><upnp:actor>Derek Roberts</upnp:actor><upnp:genre>боевик</upnp:genre><upnp:genre>фантастика</upnp:genre><upnp:genre>триллер</upnp:genre><upnp:albumArtURI dlna:profileID="JPEG_MED">http://192.168.1.31:32469/proxy/cf8d5cdd4bc459752966/albumart.jpg</upnp:albumArtURI><dc:description>Geostorm (2017)</dc:description><upnp:longDescription>После беспрецедентной серии стихийных бедствий, обрушившихся на нашу планету, лидеры мировых держав объединили усилия, чтобы создать разветвленную сеть орбитальных спутников по контролю над климатом для предотвращения природных катаклизмов. Но что-то пошло не так — система, выстроенная для защиты Земли, теперь угрожает ей. Начинается гонка наперегонки со временем, в которой надо успеть обнаружить реальную угрозу до того, как всемирный Геошторм сотрет с лица Земли все живое… и всех живых заодно.</upnp:longDescription><upnp:icon>http://192.168.1.31:32469/proxy/8a78cf082aea3c120248/icon.jpg</upnp:icon><res duration="1:49:07.000" size="8891217175" resolution="1920x800" bitrate="1358000" nrAudioChannels="6" protocolInfo="http-get:*:video/x-matroska:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000">http://192.168.1.31:32469/object/b71076680577d4dfd03d/file.mkv</res><upnp:class>object.item.videoItem.movie</upnp:class></item><item id="a97b4baf9ee77470b877" parentID="c104054e5a4c8c3c046e" restricted="1"><dc:title>How Viktor "The Garlic" Took Alexey "The Stud" to the Nursing Home (2017)</dc:title><dc:creator>Alexander Hant</dc:creator><dc:date>2017-07-06</dc:date><upnp:actor>Aleksey Serebryakov</upnp:actor><upnp:actor>Evgeniy Tkachuk</upnp:actor><upnp:actor>Olga Lapshina</upnp:actor><upnp:actor>Andrey Smirnov</upnp:actor><upnp:actor>Alina Nasibullina</upnp:actor><upnp:actor>Olga Oblasova</upnp:actor><upnp:actor>Olga Ozollapinya</upnp:actor><upnp:actor>Nataliya Vdovina</upnp:actor><upnp:genre>драма</upnp:genre><upnp:albumArtURI dlna:profileID="JPEG_MED">http://192.168.1.31:32469/proxy/e39c283dba797bd09904/albumart.jpg</upnp:albumArtURI><dc:description>How Viktor "The Garlic" Took Alexey "The Stud" to the Nursing Home (2017)</dc:description><upnp:longDescription>Витька Чесноков – бывший детдомовец. Сирота при живом Отце, и одиночка при Жене и Сыне. Витькина мечта сбежать из семьи неожиданно становится реальностью. Парень встречает своего отца-уголовника, а теперь еще и инвалида, который совсем недавно вышел из тюрьмы. Сын решает снова определить отца в «казенный дом», на этот раз в дом инвалидов. Мужчины отправляются в путь, не подозревая какие приключения и опасности ждут их по дороге.</upnp:longDescription><upnp:icon>http://192.168.1.31:32469/proxy/6a2e0b15651d9b356c65/icon.jpg</upnp:icon><res duration="1:29:47.000" size="9252930589" resolution="1920x1080" bitrate="1717625" nrAudioChannels="6" protocolInfo="http-get:*:video/x-matroska:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000">http://192.168.1.31:32469/object/a97b4baf9ee77470b877/file.mkv</res><upnp:class>object.item.videoItem.movie</upnp:class></item><item id="9895cd224645b43365ad" parentID="c104054e5a4c8c3c046e" restricted="1"><dc:title>Jigsaw Web Dl</dc:title><dc:creator>Unknown</dc:creator><upnp:genre>Unknown</upnp:genre><upnp:albumArtURI dlna:profileID="JPEG_MED">http://192.168.1.31:32469/proxy/212160a5f48f718146d3/albumart.jpg</upnp:albumArtURI><dc:description>Jigsaw Web Dl</dc:description><upnp:icon>http://192.168.1.31:32469/proxy/add79334654c14c4ee79/icon.jpg</upnp:icon><res duration="1:32:15.000" size="3710045839" resolution="1920x804" bitrate="670125" nrAudioChannels="6" protocolInfo="http-get:*:video/x-matroska:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000">http://192.168.1.31:32469/object/9895cd224645b43365ad/file.mkv</res><upnp:class>object.item.videoItem.movie</upnp:class></item><item id="8b688ccef2ccc825bd6d" parentID="c104054e5a4c8c3c046e" restricted="1"><dc:title>Kingsman: The Golden Circle (2017)</dc:title><dc:creator>Matthew Vaughn</dc:creator><dc:date>2017-09-20</dc:date><upnp:actor>Colin Firth</upnp:actor><upnp:actor>Julianne Moore</upnp:actor><upnp:actor>Taron Egerton</upnp:actor><upnp:actor>Mark Strong</upnp:actor><upnp:actor>Jeff Bridges</upnp:actor><upnp:actor>Elton John</upnp:actor><upnp:actor>Halle Berry</upnp:actor><upnp:actor>Channing Tatum</upnp:actor><upnp:actor>Pedro Pascal</upnp:actor><upnp:actor>Hanna Alström</upnp:actor><upnp:actor>Edward Holcroft</upnp:actor><upnp:actor>Poppy Delevingne</upnp:actor><upnp:actor>Bruce Greenwood</upnp:actor><upnp:actor>Emily Watson</upnp:actor><upnp:actor>Sophie Cookson</upnp:actor><upnp:actor>Michael Gambon</upnp:actor><upnp:actor>Samuel L. Jackson</upnp:actor><upnp:actor>Sofia Boutella</upnp:actor><upnp:actor>Tobi Bakare</upnp:actor><upnp:actor>Theo Barklem-Biggs</upnp:actor><upnp:actor>Thomas Turgoose</upnp:actor><upnp:actor>Calvin Demba</upnp:actor><upnp:actor>Samantha Womack</upnp:actor><upnp:actor>Keith Allen</upnp:actor><upnp:actor>Tom Benedict Knight</upnp:actor><upnp:actor>Mark Arnold</upnp:actor><upnp:actor>Björn Granath</upnp:actor><upnp:actor>Lena Endre</upnp:actor><upnp:actor>Gordon Alexander</upnp:actor><upnp:actor>Samantha Coughlan</upnp:actor><upnp:actor>Mingus Johnston</upnp:actor><upnp:actor>Deborah Rock</upnp:actor><upnp:actor>Tony Cook</upnp:actor><upnp:actor>Honey Holmes</upnp:actor><upnp:actor>Paulina Boneva</upnp:actor><upnp:actor>Annarie Boor</upnp:actor><upnp:actor>Jeff Ricketts</upnp:actor><upnp:actor>Alexandra Ford</upnp:actor><upnp:actor>James Carroll Jordan</upnp:actor><upnp:genre>боевик</upnp:genre><upnp:genre>приключения</upnp:genre><upnp:genre>комедия</upnp:genre><upnp:albumArtURI dlna:profileID="JPEG_MED">http://192.168.1.31:32469/proxy/b24fe25e0e71d0b50e84/albumart.jpg</upnp:albumArtURI><dc:description>Kingsman: The Golden Circle (2017)</dc:description><upnp:longDescription>Когда штаб-квартиры секретной службы Kingsman уничтожены, и весь мир оказался в заложниках у неизвестных, британские суперагенты обнаруживают, что в один день вместе с их организацией была еще создана американская разведка Statesman. Теперь эти две элитные спецслужбы должны объединиться и бросить вызов общему безжалостному врагу, чтобы спасти мир, то есть заняться тем, что для Эггси становится обычным делом…</upnp:longDescription><upnp:icon>http://192.168.1.31:32469/proxy/ab5ad14fa1dbcaeae12a/icon.jpg</upnp:icon><res duration="2:21:02.000" size="12578881207" resolution="1920x804" bitrate="1486500" nrAudioChannels="6" protocolInfo="http-get:*:video/x-matroska:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000">http://192.168.1.31:32469/object/8b688ccef2ccc825bd6d/file.mkv</res><upnp:class>object.item.videoItem.movie</upnp:class></item><item id="bab4de16fc6aa5efa4ba" parentID="c104054e5a4c8c3c046e" restricted="1"><dc:title>Loving Vincent (2017)</dc:title><dc:creator>Dorota Kobiela</dc:creator><dc:date>2017-08-02</dc:date><upnp:actor>Douglas Booth</upnp:actor><upnp:actor>Jerome Flynn</upnp:actor><upnp:actor>Robert Gulaczyk</upnp:actor><upnp:actor>Helen McCrory</upnp:actor><upnp:actor>Chris O&apos;Dowd</upnp:actor><upnp:actor>Saoirse Ronan</upnp:actor><upnp:actor>John Sessions</upnp:actor><upnp:actor>Eleanor Tomlinson</upnp:actor><upnp:actor>Aidan Turner</upnp:actor><upnp:actor>Holly Earl</upnp:actor><upnp:actor>Cezary Łukaszewicz</upnp:actor><upnp:actor>Martin Herdman</upnp:actor><upnp:actor>James Greene</upnp:actor><upnp:actor>Bill Thomas</upnp:actor><upnp:actor>Josh Burdett</upnp:actor><upnp:actor>Robin Hodges</upnp:actor><upnp:actor>Carole Le Clanche</upnp:actor><upnp:actor>Graham Pavey</upnp:actor><upnp:actor>Shaun Newnham</upnp:actor><upnp:actor>Joe Stuckey</upnp:actor><upnp:actor>Piotr Pamula</upnp:actor><upnp:actor>Bozena Berlinska-Bryzek</upnp:actor><upnp:actor>Anastazja Seweryn</upnp:actor><upnp:actor>Borys Dominiuk</upnp:actor><upnp:actor>Bartlomiej Sroka</upnp:actor><upnp:actor>Kamila Dyoubari</upnp:actor><upnp:actor>Przemyslaw Furdak</upnp:actor><upnp:actor>Adam Pabudzinski</upnp:actor><upnp:actor>Keith Heppenstall</upnp:actor><upnp:actor>Nina Supranionek</upnp:actor><upnp:actor>Marcin Sosinski</upnp:actor><upnp:genre>мультфильм</upnp:genre><upnp:genre>драма</upnp:genre><upnp:albumArtURI dlna:profileID="JPEG_MED">http://192.168.1.31:32469/proxy/63af673b30e6226da12b/albumart.jpg</upnp:albumArtURI><dc:description>Loving Vincent (2017)</dc:description><upnp:longDescription>Фильм о жизни и загадочной смерти Винсента Ван Гога.</upnp:longDescription><upnp:icon>http://192.168.1.31:32469/proxy/9a8e79b818729e89d411/icon.jpg</upnp:icon><res duration="1:34:49.000" size="8819142679" resolution="1480x1080" bitrate="1550000" nrAudioChannels="6" protocolInfo="http-get:*:video/x-matroska:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000">http://192.168.1.31:32469/object/bab4de16fc6aa5efa4ba/file.mkv</res><upnp:class>object.item.videoItem.movie</upnp:class></item><item id="fadde10b2ccfcb4c5e4e" parentID="c104054e5a4c8c3c046e" restricted="1"><dc:title>Matilda Web Dl</dc:title><dc:creator>Unknown</dc:creator><upnp:genre>Unknown</upnp:genre><upnp:albumArtURI dlna:profileID="JPEG_MED">http://192.168.1.31:32469/proxy/a9f7ab31be2aa1e7f7f0/albumart.jpg</upnp:albumArtURI><dc:description>Matilda Web Dl</dc:description><upnp:icon>http://192.168.1.31:32469/proxy/36016716bace57fc677e/icon.jpg</upnp:icon><res duration="1:48:37.000" size="4016093239" resolution="1912x796" bitrate="616125" nrAudioChannels="6" protocolInfo="http-get:*:video/x-matroska:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000">http://192.168.1.31:32469/object/fadde10b2ccfcb4c5e4e/file.mkv</res><upnp:class>object.item.videoItem.movie</upnp:class></item><item id="ea2664f318ac182cfb5c" parentID="c104054e5a4c8c3c046e" restricted="1"><dc:title>Rebel in the Rye (2017)</dc:title><dc:creator>Danny Strong</dc:creator><dc:date>2017-09-15</dc:date><upnp:actor>Nicholas Hoult</upnp:actor><upnp:actor>Kevin Spacey</upnp:actor><upnp:actor>Sarah Paulson</upnp:actor><upnp:actor>Zoey Deutch</upnp:actor><upnp:actor>Hope Davis</upnp:actor><upnp:actor>Victor Garber</upnp:actor><upnp:actor>Brian d&apos;Arcy James</upnp:actor><upnp:actor>Lucy Boynton</upnp:actor><upnp:actor>Caitlin Mehner</upnp:actor><upnp:actor>Anna Bullard</upnp:actor><upnp:actor>Keenan Jolliff</upnp:actor><upnp:actor>Kristine Froseth</upnp:actor><upnp:actor>Adam Busch</upnp:actor><upnp:actor>David Berman</upnp:actor><upnp:actor>James Urbaniak</upnp:actor><upnp:actor>Eric Bogosian</upnp:actor><upnp:actor>Amy Rutberg</upnp:actor><upnp:actor>Bernard White</upnp:actor><upnp:actor>Will Rogers</upnp:actor><upnp:actor>Evan Hall</upnp:actor><upnp:actor>Jimmy Smagula</upnp:actor><upnp:actor>Celeste Arias</upnp:actor><upnp:actor>Alyssa May Gold</upnp:actor><upnp:actor>Francesca Root-Dodson</upnp:actor><upnp:actor>Dana Drori</upnp:actor><upnp:actor>Jenny Ashman</upnp:actor><upnp:actor>Jefferson Mays</upnp:actor><upnp:genre>драма</upnp:genre><upnp:albumArtURI dlna:profileID="JPEG_MED">http://192.168.1.31:32469/proxy/bd3f640a87616e19a80f/albumart.jpg</upnp:albumArtURI><dc:description>Rebel in the Rye (2017)</dc:description><upnp:longDescription>История о том, как родился Холден Колфилд, герой культового для многих поколений романа «Над пропастью во ржи», и как его автор — Джером Сэлинджер — стал величайшим писателем Америки, выбравшим удивительную судьбу.</upnp:longDescription><upnp:icon>http://192.168.1.31:32469/proxy/ea3e03ebbbec28d1d87f/icon.jpg</upnp:icon><res duration="1:49:05.000" size="10477332047" resolution="1920x1038" bitrate="1600750" nrAudioChannels="6" protocolInfo="http-get:*:video/x-matroska:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000">http://192.168.1.31:32469/object/ea2664f318ac182cfb5c/file.mkv</res><upnp:class>object.item.videoItem.movie</upnp:class></item><item id="27e629b75a2ec6731bb0" parentID="c104054e5a4c8c3c046e" restricted="1"><dc:title>Tulip Fever (2017)</dc:title><dc:creator>Justin Chadwick</dc:creator><dc:date>2017-07-13</dc:date><upnp:actor>Alicia Vikander</upnp:actor><upnp:actor>Dane DeHaan</upnp:actor><upnp:actor>Judi Dench</upnp:actor><upnp:actor>Christoph Waltz</upnp:actor><upnp:actor>Jack O&apos;Connell</upnp:actor><upnp:actor>Holliday Grainger</upnp:actor><upnp:actor>Zach Galifianakis</upnp:actor><upnp:actor>Matthew Morrison</upnp:actor><upnp:actor>Tom Hollander</upnp:actor><upnp:actor>Cara Delevingne</upnp:actor><upnp:actor>Cressida Bonas</upnp:actor><upnp:actor>Kevin McKidd</upnp:actor><upnp:actor>David Harewood</upnp:actor><upnp:actor>Joanna Scanlan</upnp:actor><upnp:actor>Sebastian Armesto</upnp:actor><upnp:actor>Michael Nardone</upnp:actor><upnp:actor>Daisy Lowe</upnp:actor><upnp:actor>Anastasia Hille</upnp:actor><upnp:actor>Michael Smiley</upnp:actor><upnp:actor>Johnny Vegas</upnp:actor><upnp:genre>драма</upnp:genre><upnp:genre>мелодрама</upnp:genre><upnp:albumArtURI dlna:profileID="JPEG_MED">http://192.168.1.31:32469/proxy/523de5abda3b50b1b1ec/albumart.jpg</upnp:albumArtURI><dc:description>Tulip Fever (2017)</dc:description><upnp:longDescription>Романтическая история 17-го века, в которой художник влюбляется в молодую замужнюю женщину. Вместе они решают заняться рискованным цветочным делом в надежде построить свое будущее.</upnp:longDescription><upnp:icon>http://192.168.1.31:32469/proxy/5dcc0559c2dfe96936de/icon.jpg</upnp:icon><res duration="1:44:58.000" size="9946202999" resolution="1920x802" bitrate="1579125" nrAudioChannels="6" protocolInfo="http-get:*:video/x-matroska:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000">http://192.168.1.31:32469/object/27e629b75a2ec6731bb0/file.mkv</res><upnp:class>object.item.videoItem.movie</upnp:class></item><item id="4b623f96fa2334e0906c" parentID="c104054e5a4c8c3c046e" restricted="1"><dc:title>Zhgi Web Dl</dc:title><dc:creator>Unknown</dc:creator><upnp:genre>Unknown</upnp:genre><upnp:albumArtURI dlna:profileID="JPEG_MED">http://192.168.1.31:32469/proxy/283372a43b658169720c/albumart.jpg</upnp:albumArtURI><dc:description>Zhgi Web Dl</dc:description><upnp:icon>http://192.168.1.31:32469/proxy/52d6fa693ce2d268594f/icon.jpg</upnp:icon><res duration="1:38:29.000" size="3654077553" resolution="1920x804" bitrate="618375" nrAudioChannels="6" protocolInfo="http-get:*:video/x-matroska:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000">http://192.168.1.31:32469/object/4b623f96fa2334e0906c/file.mkv</res><upnp:class>object.item.videoItem.movie</upnp:class></item><item id="c23a201ddbab5223689d" parentID="c104054e5a4c8c3c046e" restricted="1"><dc:title>Прощай, Кристофер Робин (2017)</dc:title><dc:creator>Simon Curtis</dc:creator><dc:date>2017-09-29</dc:date><upnp:actor>Domhnall Gleeson</upnp:actor><upnp:actor>Margot Robbie</upnp:actor><upnp:actor>Kelly Macdonald</upnp:actor><upnp:actor>Will Tilston</upnp:actor><upnp:actor>Alex Lawther</upnp:actor><upnp:actor>Nico Mirallegro</upnp:actor><upnp:actor>Stephen Campbell Moore</upnp:actor><upnp:actor>Phoebe Waller-Bridge</upnp:actor><upnp:actor>Geraldine Somerville</upnp:actor><upnp:actor>Richard McCabe</upnp:actor><upnp:actor>Shaun Dingwall</upnp:actor><upnp:actor>Vicki Pepperdine</upnp:actor><upnp:actor>Simon Williams</upnp:actor><upnp:actor>Bentley Kalu</upnp:actor><upnp:actor>Mossie Smith</upnp:actor><upnp:actor>Stanley Hamblin</upnp:actor><upnp:actor>Dexter Hyman</upnp:actor><upnp:actor>Sam Barnes</upnp:actor><upnp:actor>Allegra Marland</upnp:actor><upnp:actor>Mark Tandy</upnp:actor><upnp:actor>Richard Dixon</upnp:actor><upnp:actor>Ann Thwaite</upnp:actor><upnp:actor>Louise Harrison</upnp:actor><upnp:actor>Nicholas Richardson</upnp:actor><upnp:actor>Kevin Millington</upnp:actor><upnp:actor>Mark McKerracher</upnp:actor><upnp:actor>Amber Batty</upnp:actor><upnp:actor>Grace Curtis</upnp:actor><upnp:actor>Lance C. Fuller</upnp:actor><upnp:actor>Simon Connolly</upnp:actor><upnp:actor>Richard Clifford</upnp:actor><upnp:actor>Sarah Jayne Butler</upnp:actor><upnp:actor>Cameron Lane</upnp:actor><upnp:actor>Phoebe Lyons</upnp:actor><upnp:actor>Harper Gray</upnp:actor><upnp:actor>Nick Blakeley</upnp:actor><upnp:actor>Victoria Bavister</upnp:actor><upnp:actor>Robert Portal</upnp:actor><upnp:actor>Tommy Rodger</upnp:actor><upnp:actor>Vincent Finch</upnp:actor><upnp:actor>Jim Cartwright</upnp:actor><upnp:actor>Beatrice Stein</upnp:actor><upnp:genre>семейный</upnp:genre><upnp:genre>история</upnp:genre><upnp:albumArtURI dlna:profileID="JPEG_MED">http://192.168.1.31:32469/proxy/835d8209d6d4d7e7bbc7/albumart.jpg</upnp:albumArtURI><dc:description>Прощай, Кристофер Робин (2017)</dc:description><upnp:longDescription>Картина расскажет о взаимоотношениях между А. А. Милном и его сыном Кристофером Робином, чьи игрушки вдохновили писателя на создание волшебного мира повестей о Винни-Пухе.</upnp:longDescription><upnp:icon>http://192.168.1.31:32469/proxy/bcbce06ce392e4acca75/icon.jpg</upnp:icon><res duration="1:47:00.000" size="10813929276" resolution="1920x1036" bitrate="1684250" nrAudioChannels="6" protocolInfo="http-get:*:video/x-matroska:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000">http://192.168.1.31:32469/object/c23a201ddbab5223689d/file.mkv</res><upnp:class>object.item.videoItem.movie</upnp:class></item><item id="afe1d00a6d948a89bd75" parentID="c104054e5a4c8c3c046e" restricted="1"><dc:title>Статус Брэда (2017)</dc:title><dc:creator>Mike White</dc:creator><dc:date>2017-09-15</dc:date><upnp:actor>Ben Stiller</upnp:actor><upnp:actor>Austin Abrams</upnp:actor><upnp:actor>Jenna Fischer</upnp:actor><upnp:actor>Michael Sheen</upnp:actor><upnp:actor>Luke Wilson</upnp:actor><upnp:actor>Jemaine Clement</upnp:actor><upnp:actor>Shazi Raja</upnp:actor><upnp:actor>Luisa Lee</upnp:actor><upnp:actor>Mike White</upnp:actor><upnp:actor>Adam Capriolo</upnp:actor><upnp:actor>Xavier Grobet</upnp:actor><upnp:genre>музыка</upnp:genre><upnp:genre>комедия</upnp:genre><upnp:genre>драма</upnp:genre><upnp:albumArtURI dlna:profileID="JPEG_MED">http://192.168.1.31:32469/proxy/5004a65b620e45387373/albumart.jpg</upnp:albumArtURI><dc:description>Статус Брэда (2017)</dc:description><upnp:longDescription>У Брэда есть достойная работа и любящая семья, однако мужчине не дают покоя достижения его бывших одноклассников. Во время поездки с сыном по различным колледжам он встречает своих школьных знакомых и мучается чувством, будто он — неудачник, наделавший в жизни массу ошибок.</upnp:longDescription><upnp:icon>http://192.168.1.31:32469/proxy/208580fad7e3dc627772/icon.jpg</upnp:icon><res duration="1:41:57.000" size="8445353186" resolution="1920x958" bitrate="1380500" nrAudioChannels="6" protocolInfo="http-get:*:video/x-matroska:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000">http://192.168.1.31:32469/object/afe1d00a6d948a89bd75/file.mkv</res><upnp:class>object.item.videoItem.movie</upnp:class></item></DIDL-Lite>161675952209
Тут особо генерить xml нет необходимости ) Можно обойтись без библиотеки, у нее минусов хватает.

Предлагаю распарсить и выводить во второй вкладке - медиа.
Парсинг в процессе.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: [Модуль] DLNA

Сообщение directman66 » Ср фев 21, 2018 11:58 am

nick7zmail, давай добавим сохранение медиа-листа в привязке к устройству. Вторая вкладка - со списком файлов.

Сценарий, который забирает и парсит dlna контент
СпойлерПоказать

Код: Выделить всё

$host="192.168.1.31";
$port=32469;
//$controlURL='/X_MS_MediaReceiverRegistrar/9e1becde-4773-ac02-af35-c6f715bf87db/control.xml';
$controlURL='/ContentDirectory/9e1becde-4773-ac02-af35-c6f715bf87db/control.xml';

$ObjectID = "c104054e5a4c8c3c046e"; //GetValue(); 
$BrowseFlag = "BrowseDirectChildren"; //GetValue(); 
$Filter = "*"; //GetValue(); 
$StartingIndex = "0"; //GetValue(); 
$RequestedCount = "100"; //GetValue(); 
$SortCriteria = "+dc:title"; //GetValue(); 

$xml='<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:Browse xmlns:u="urn:schemas-upnp-org:service:ContentDirectory:1"><ObjectID>'.$ObjectID.'</ObjectID><BrowseFlag>'.$BrowseFlag.'</BrowseFlag><Filter>'.$Filter.'</Filter><StartingIndex>'.$StartingIndex.'</StartingIndex><RequestedCount>'.$RequestedCount.'</RequestedCount><SortCriteria>'.$SortCriteria.'</SortCriteria></u:Browse></s:Body></s:Envelope>
'; 


$asnw=sendpacket($host,$port,$controlURL,'Browse', $xml);

$asnw=substr($asnw,0,strrpos($asnw,'>'));

echo $asnw."<br>";
echo "--------------------------------<br>";
$p = xml_parser_create();
xml_parse_into_struct($p, $asnw, $vals, $index);
xml_parser_free($p);

//print_r($index);
//echo "\nМассив Vals\n";
print_r($vals);
//"Envelope": {        "Body": {            "BrowseResponse

//echo $vals;
foreach ($vals as $value)
{
// echo "<br>----<br>";
//print_r($value).PHP_EOL;


 
 
 if (($value[tag]=='ITEM' and $value[type]=='open')) 
 {echo "<br>***********************************************this new film***********************************************<br>";
 $filmid=$value[attributes][ID];
 $server=$value[attributes][PARENTID];  
  
echo "server:".$server."<br>";  
echo "filmid:".$filmid."<br>"; 
echo "filmname:".$filname."<br>";
echo "creator:".$creator."<br>";
echo "actor:".$actor."<br>";
echo "genre:".$genre."<br>"; 
echo "albummarturi:".$albummarturi."<br>";
echo "description:".$description."<br>";
echo "longdesc:".$longdesc."<br>";
echo "icon:".$icon."<br>";  
echo "class:".$class."<br>";
echo "fn:".$fn."<br>";
echo "br:".$br."<br>";   
echo "res:".$res."<br>";  
echo "duration:".$duration."<br>";
echo "size:".$size."<br>";
echo "protocol:".$protocol."<br>";   
echo "date:".$date."<br>";     
  
if ($fn<>''){
  
addClassObject('dnla_content',$filmid);   
sg($filmid.".filmname",$filname);  
sg($filmid.".server",$server);  
sg($filmid.".filname",$filname);  
sg($filmid.".creator",substr($creator,1));  
sg($filmid.".actor",substr($actor,1));  
sg($filmid.".genre",substr($genre,1));    
sg($filmid.".albummarturi",$albummarturi);  
sg($filmid.".description",$description);  
sg($filmid.".longdesc",$longdesc);    
sg($filmid.".icon",$icon);  
sg($filmid.".class",$class);  
sg($filmid.".filename",$fn);    
sg($filmid.".bitrate",$br);  
sg($filmid.".resolution",$res);  
sg($filmid.".duration",$duration);    
sg($filmid.".size",$size);    
sg($filmid.".protocol",$protocol);      
sg($filmid.".date",$date);      
 
SQLUpdate('objects', array("ID"=>get_id($filmid), "DESCRIPTION"=>$filname));       
}  
  
  
  
  
  
$server="";
$filmid="";
$filname="";
$creator="";
$actor="";
$genre="";
$albummarturi="";
$description="";
$longdesc="";
$icon="";
$class="";
$fn="";
$br="";
$res=""; 
$duration="";
$size="";
$protocol="";
$date="";  
  
  
 }

if ($value[tag]=='DC:CREATOR') {    $creator.=','.$value[value];}
if ($value[tag]=='UPNP:GENRE') {    $genre.=','.$value[value];}
if ($value[tag]=='DC:TITLE') {  $filname=$value[value];                             }
if ($value[tag]=='UPNP:ACTOR') {  $actor.=','.$value[value];}
if ($value[tag]=='UPNP:ALBUMARTURI') {  $albummarturi.=$value[value];}
if ($value[tag]=='DC:DESCRIPTION') { $description.=$value[value];} 
if ($value[tag]=='UPNP:LONGDESCRIPTION') {  $longdesc.=$value[value];}  
if ($value[tag]=='UPNP:ICON') {  $icon.=$value[value];} 
if ($value[tag]=='UPNP:CLASS') {  $class.=$value[value];} 
if ($value[tag]=='DC:DATE') {  $date.=$value[value];}  
 
 
if ($value[tag]=='RES') {  $fn=$value[value];
                         $br=$value[attributes][BITRATE];
                         $res=$value[attributes][RESOLUTION];                         
                         $duration=$value[attributes][DURATION];                                                  
$size=$value[attributes][SIZE];                                                                           
$protocol=$value[attributes][PROTOCOLINFO];                                                                           
                 
                        }  
  

echo "<br>value:".$value[value]."<br>";
echo "attributes:".$value[attributes][ID]."<br>";
echo "tag:".$value[tag]."<br>"; 
echo "type:".$value[type]."<br>";  
 
 

 
}

 //['s:Envelope']['s:Body']['u:BrowseResponse']['TotalMatches'];

function get_id($prop)
{
$sql='SELECT id   FROM `objects`  WHERE TITLE ="'.$prop.'"';
$rec = SQLSelect($sql); 
return $rec[0][id];
}

////////////////////////////////


function sendpacket($host,$port,$AVTransport, $command, $xml){
///browse
$body=$xml;
$headers = 'POST '.$AVTransport.' HTTP/1.1
Soapaction: "urn:schemas-upnp-org:service:ContentDirectory:1#Browse"
CONTENT-TYPE: text/xml; charset="utf-8"
HOST: '.$host.':'.$port;
$content=$headers . '
Content-Length: '. strlen($body) .'

'. $body;
 
 //echo $content;
//echo $host.":". $port;
$fp = fsockopen($host, $port , $errno, $errstr, 10);
        if (!$fp)
        {echo "Error opening socket: ".$errstr." (".$errno.")<br>";} else 
        {            
$ret = "";
$buffer = "";
         
//        fputs ($fp, $content);
//        while (!feof($fp)) {
//            $buffer = fgets($fp,128);
//            echo "\n;" . $buffer . ";\n"; 
//            $ret.= $buffer;

fwrite($fp, $content);
//while (!feof($fp)) {
//$buffer = fgets($fp,128);
//echo fgets($fp, 128);
//$ret.= $buffer; 
//$buffer = stream_get_contents($fp, -1); 
         
fputs ($fp, $content_ContentDirectory_Browse); 

        $buffer = stream_get_contents($fp, -1); 
      fclose($fp); 
        }
         

//        echo $buffer; 

        $vars = explode("\r\n\r\n", $buffer);                         //Header abtrennen 
//        $vars = explode("\r\n", $buffer);                         //Header abtrennen          
        $header = $vars[0];                                        //Header 
        $message = $vars[1];                                       //Message 
 //print_r($vars);
 

//        $handle = fopen('ContentDirectory_Browse.xml', "w");     //XML schreiben 
//        fwrite($handle, $message); 
 return $message;
 }


class DIDLitem {
    protected $node=NULL;
    function __construct($node) { $this->node = $node; }
//         function album_art($url) { addNodeWithText($this->node, 'upnp:albumArtURI', $url)
// //             ->setAttribute('profileID','PNG_TN');
//             ->setAttribute('profileID','JPEG_TN');
//             return $this;
//         }
    function icon($url) { addNodeWithText($this->node, 'upnp:icon', $url); return $this; }
    function creator($value) { addNodeWithText($this->node, 'dc:creator', $value); return $this; }
    function genre($value) { addNodeWithText($this->node, 'upnp:genre', $value); return $this; }
    function artist($value, $role=NULL) {
        $n = addNodeWithText($this->node, 'upnp:artist', $value);
        if ($role!==NULL) $n->setAttribute('role', $role);
        return $this; }
    function author($value) { addNodeWithText($this->node, 'upnp:author', $value); return $this; }
    function album($value) { addNodeWithText($this->node, 'upnp:album', $value); return $this; }
    function track($value) { addNodeWithText($this->node, 'upnp:originalTrackNumber', $value); return $this; }
    function actor($value) { addNodeWithText($this->node, 'upnp:actor', $value); return $this; }
    function director($value) { addNodeWithText($this->node, 'upnp:director', $value); return $this; }
    function date($value) { addNodeWithText($this->node, 'dc:date', $value); return $this; }
    function searchclass($value) { addNodeWithText($this->node, 'upnp:searchClass', $value)->setAttribute('includeDerived', '1'); return $this; }
    function longDescription($value) { addNodeWithText($this->node, 'upnp:longDescription', $value); return $this; }
    function description($value) { addNodeWithText($this->node, 'dc:description', $value); return $this; }
    function language($value) { addNodeWithText($this->node, 'dc:language', $value); return $this; }
    function resource($url, $optattr=array())
    {
        $optattr = array_merge(array('protocolInfo'=>'*:*:*:*'), $optattr);
        $ndRes = $this->node->ownerDocument->createElement('res');
        $ndRes->setAttribute('protocolInfo', $optattr['protocolInfo']);
        if (array_key_exists('filesize', $optattr)) $ndRes->setAttribute('size', $optattr['filesize']);
        if (array_key_exists('duration', $optattr)) $ndRes->setAttribute('duration', $optattr['duration']);
        if (array_key_exists('bitrate', $optattr)) $ndRes->setAttribute('bitrate', $optattr['bitrate']);
        if (array_key_exists('resolution', $optattr)) $ndRes->setAttribute('resolution', $optattr['resolution']);
//         $ndRes->setAttribute('bitrate', ""+(3780)); //kbps
// //         $ndRes->setAttribute('sampleFrequency', "48000");
// //         $ndRes->setAttribute('nrAudioChannels', "6");
//         $ndRes->setAttribute('resolution', "1280x720");
        $ndRes_text = $this->node->ownerDocument->createTextNode($url);
        $ndRes->appendChild($ndRes_text);
        $this->node->appendChild($ndRes);
        return $this;
    }
}


function parseSimpleXML($xmldata)
    {
        $childNames = array();
        $children = array();

        if( $xmldata->count() !== 0 )
        {
            foreach( $xmldata->children() AS $child )
            {
                $name = $child->getName();

                if( !isset($childNames[$name]) )
                {
                    $childNames[$name] = 0;
                }

                $childNames[$name]++;
                $children[$name][] = $this->parseSimpleXML($child);
            }
        }

        $returndata = new XMLNode();
        if( $xmldata->attributes()->count() > 0 )
        {
            $returndata->{'@attributes'} = new XMLAttribute();
            foreach( $xmldata->attributes() AS $name => $attrib )
            {
                $returndata->{'@attributes'}->{$name} = (string)$attrib;
            }
        }

        if( count($childNames) > 0 )
        {
            foreach( $childNames AS $name => $count )
            {
                if( $count === 1 )
                {
                    $returndata->{$name} = $children[$name][0];
                }
                else
                {
                    $returndata->{$name} = new XMLMultiNode();
                    $counter = 0;
                    foreach( $children[$name] AS $data )
                    {
                        $returndata->{$name}->{$counter} = $data;
                        $counter++;
                    }
                }
            }
        }
        else
        {
            if( (string)$xmldata !== '' )
            {
                $returndata->{'@innerXML'} = (string)$xmldata;
            }
        }
        return $returndata;
    }
Все работало до тех пор, как кудато пропали тэги. Теперь парсер перестал работать. :roll:
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: [Модуль] DLNA

Сообщение nick7zmail » Ср фев 21, 2018 12:08 pm

Да, можно...уже порываюсь начать писать свою библиотеку, но меня не оставляет чувство, что это давно кем-то уже написано, надо просто найти.

Отправлено с моего Xperia XZ1 Compact через Tapatalk
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Ответить