Страница 5 из 7

Re: DNLA SHARE вывод контента на SMART телевизоры

Добавлено: Пт фев 16, 2018 10:07 pm
nick7zmail
directman66 подскажи, я правильно понял, что модуль начинать надо отсюда
https://majordomo.smartliving.ru/forum/ ... 045#p72045
?
Этот скрипт все устройства корректно ищет? Или ещё какие есть варианты?
[USN] => uuid - уникальный для девайсов, и не меняется, правильно?

Re: DNLA SHARE вывод контента на SMART телевизоры

Добавлено: Пт фев 16, 2018 10:50 pm
directman66
Я полагаю начинать надо аналогично с поиска устройств. Скрипт находит устройства, которые видимо указаны в широковещательом запросе. Например колонки гугл и приставки маг250 на этот запрос не ответили. Для их поиска есть другой алгоритм. Для них тоже надо будет оставить место на будущее.

Re: DNLA SHARE вывод контента на SMART телевизоры

Добавлено: Пт фев 16, 2018 10:51 pm
directman66
nick7zmail писал(а): [USN] => uuid - уникальный для девайсов, и не меняется, правильно?
USN еще не разу не менялся у меня.

Re: DNLA SHARE вывод контента на SMART телевизоры

Добавлено: Пт фев 16, 2018 11:33 pm
T-REX-XP
я уже писал модель поиска устройств, можете заюзать его. https://majordomo.smartliving.ru/forum/ ... hilit=ssdp

Re: DNLA SHARE вывод контента на SMART телевизоры

Добавлено: Сб фев 17, 2018 12:04 am
directman66
Хрена себе, я не видел. Оказывается есть уже и заготовка модуля!

Думаю можно и его использовать! Установил, не одного устройства в сети не обнаружил. Хотя у меня их
SPOILERSPOILER_SHOW
Безымянный.png
Безымянный.png (83.08 КБ) 5555 просмотров
Добавил обработчик ютуб ссылки
SPOILERSPOILER_SHOW

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

//вызов rs(dnlaplay, array('fn' =>$path);
$fn=$params['fn'];
if ($fn==""){$fn="http://192.168.1.31:32469/object/df4b8e517919aa1f643c/file.mkv";}

if (strpos($fn,'youtube')>1) {
echo "передана ссылка на ютуб ".$fn."<br>"; 
//$pattern = "\=(.+?)\\"; 
//$pattern = "\S{0,}~v=(.+?)&|$";
//$pattern = "/v=(.*)"; 
 //"/My name is '(.*)' and im fine/"
//  $res=preg_match ($pattern, $fn);
 $res1=parse_url($fn, PHP_URL_QUERY);
// echo $res1."<br>";
$res2=parse_str( $res1,$res); 
$res=$res['v'];
//echo $res."<br>";
$newurl='https://hms.lostcut.net/youtube/g.php?v='.$res.'&link_only=1'; 
//echo $newurl."<br>";
$fn=file_get_contents($newurl);
echo $fn."<br>";
 
}

$luts=gg("9732d18b-48f1-7f50-2b02-463b0f37e9a7.timestamp");
$diff=(gmdate('i',trim(time()-$luts)));

$pattern = "|\b[0]+([1-9][\d]*)|is"; 
$diff2= preg_replace($pattern, "\\1", $diff); 
echo  "Информация  была обновлена  "  .$diff2 . " минут назад.";

if ($diff2>60) { echo "Запускаю обновление данных!"; rs('dnlasearch');}

$url=gg('9732d18b-48f1-7f50-2b02-463b0f37e9a7.LOCATION');
//$host=str_replace('/','',explode(":",$url)[1]);
$host="192.168.1.41";
$port=str_replace('/','',explode(":",$url)[2]);
$controlURL=gg('9732d18b-48f1-7f50-2b02-463b0f37e9a7.controlURL');
echo 'host:'.$host."<br>";
echo 'port:'.$port."<br>";
echo 'controlURL:'.$controlURL."<br>";


//command:
//SetAVTransportURI
//Stop
//Play

//AVTransport
///AVTransport/9732d18b-48f1-7f50-2b02-463b0f37e9a7/control.xml
echo 'Stop<br>';
//Stop
$xml = '<?xml version="1.0" encoding="utf-8" standalone="yes"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:Stop xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID></u:Stop></s:Body></s:Envelope>
';
$asnw=sendpacket($host,$port,$controlURL,'Stop', $xml);
echo $asnw;
echo 'SetAVTransportURI<br>' ;
sleep(1);
//SetAVTransportURI
$xml = '<?xml version="1.0" encoding="utf-8" standalone="yes"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:SetAVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><CurrentURI>http://192.168.1.31:32469/object/df4b8e517919aa1f643c/file.mkv</CurrentURI><CurrentURIMetaData><DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/" xmlns:sec="http://www.sec.co.kr/" xmlns:pv="http://www.pv.com/pvns/"><item id="df4b8e517919aa1f643c" parentID="c104054e5a4c8c3c046e" restricted="1"><upnp:class>object.item.videoItem</upnp:class><dc:title>Aritmija Web Dl</dc:title><dc:creator>Unknown</dc:creator><upnp:artist>Unknown</upnp:artist><upnp:albumArtURI>http://192.168.1.31:32469/proxy/c9ccea0d9cf75f43c34b/albumart.jpg</upnp:albumArtURI><upnp:genre>Unknown</upnp:genre><res protocolInfo="http-get:*:video/x-matroska:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000" bitrate="692000" nrAudioChannels="6" size="4810724267" resolution="1920x1038" duration="1:55:52.000">'.$fn.'</res></item></DIDL-Lite></CurrentURIMetaData></u:SetAVTransportURI></s:Body></s:Envelope>
';
$asnw=sendpacket($host,$port,$controlURL,'SetAVTransportURI', $xml);
echo $asnw;
echo 'Play<br>';
sleep(1);
//Play
$xml= '<?xml version="1.0" encoding="utf-8" standalone="yes"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:Play xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><Speed>1</Speed></u:Play></s:Body></s:Envelope>
';
$asnw=sendpacket($host,$port,$controlURL,'Play', $xml);
echo $asnw;




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

'. $body;
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; 
//    }
    fclose($fp);
        }

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

fclose($fp); 
 return $ret;
 }

Re: DNLA SHARE вывод контента на SMART телевизоры

Добавлено: Сб фев 17, 2018 12:20 am
directman66
directman66 писал(а):
nick7zmail писал(а):Дак это получается вообще без сторонних библиотек сделано? Чисто кодом? А то я начал просматривать что для модуля надо - так и не понял особо. Ссылок нигде никаких нет))
Да, я старался избавиться от всех лишних библиотек. Надо поэксперементировать с xml файлом. Он от форматов видео меняется

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

 bitrate="692000" nrAudioChannels="6" size="4810724267" resolution="1920x1038" duration="1:55:52.000"& 
И еще картинка обложки передается. Нужны ли они - это еще вопрос. Нужно эксперементировать. Да и модуль нужен это точно!

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

Мне кажется в модуле должно быть:
1) Список устройств с определением типа (модель телевизора , модель колонки или ресивера (Google Home, Echo dot...), название медиаприставкии (MAG245/250, wr320, китайские свистки, chromecast.. ). Поиск видимо придется осуществлять несколькими алгоритмами (DIAL, M-SEARCH, HTTP REST....)
2) В зависимости от типа устройства должен меняться протокол взаимодействия.
3) Привязка к HOOK SAY для колонок (чтобы Алиса на нее вещала свои сообщения)
4) Если файл лежит где-то локально, для его воспроизведения нужно поднимать web сервер или dnla. Как вариант можно попробовать использовать виртуальный хост apache2. Если файл лежит в сети по протоколам samba или ftp - пока мне не понятно что делать.
В статье из 1 поста ( https://hms.lostcut.net/viewtopic.php?id=119 ) в исходниках чувак как раз таки поднимает простенький simple server и по нему отдает поток. В принципе примеров реализации на php полно. Думаю легко решаемо.
5) Отправка ссылки приложению Youtube на телевизоре.
6) Раскурить что за TTS используют аналогичные проекты (для google home, Alexa). В какомто коде на джите видел использование движка гугл переводчика для проговаривания текста.
7) Сделать upnp сканер ресурсов домашней сети, чтобы была БД домашнего контента, который можно отправить на телевизор/Cast устройство.
8) Организовать поиск ютуб ссылки (например на запрос Дудь алгоритм должен вернуть https://www.youtube.com/watch?v=SPauxWv1Rnk,который мы уже преобразуем в
https://r1---sn-pouxga5o-vu2l.googlevid ... mm=31%2C29
Добавил пункт в концепцию.

Re: DNLA SHARE вывод контента на SMART телевизоры

Добавлено: Сб фев 17, 2018 12:44 am
T-REX-XP
только что развернул образ для Rpi3, проверил модуль. все обнаруживает нормально.
SPOILERSPOILER_SHOW
Untitled.png
Untitled.png (370.64 КБ) 5549 просмотров

Re: DNLA SHARE вывод контента на SMART телевизоры

Добавлено: Сб фев 17, 2018 5:56 am
alekszander
Привет всем, интересная тема. Но у меня один вопрос. При запуске сам клиент dlna на тв надо запускать. И еще при попытке запуска скрипта вышла вот такая ошибка
SPOILERSPOILER_SHOW
https://r2---sn-pouxga5o-vu2l.googlevid ... 1518857486
Информация была обновлена 6 минут назад.host:192.168.1.187
port:1984
controlURL:/RenderingControl/ac4d0a1a-645a-b801-6312-20adfbf8270c/control.xml
Stop
192.168.1.187:1984
Warning: fsockopen(): in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(142) : eval()'d code on line 86
Error opening socket: ������� ���������� ���������� ���� �����������, �.�. �� ������� ���������� �� ��������� ����� �� ������� ������ ������, ��� ���� ��������� ��� ������������� ���������� ��-�� ��������� ������� ��� ������������� ����������. (10060)

Warning: fclose() expects parameter 1 to be resource, boolean given in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(142) : eval()'d code on line 110
SetAVTransportURI
192.168.1.187:1984
Warning: fsockopen(): in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(142) : eval()'d code on line 86
Error opening socket: ������� ���������� ���������� ���� �����������, �.�. �� ������� ���������� �� ��������� ����� �� ������� ������ ������, ��� ���� ��������� ��� ������������� ���������� ��-�� ��������� ������� ��� ������������� ����������. (10060)

Warning: fclose() expects parameter 1 to be resource, boolean given in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(142) : eval()'d code on line 110
Play
192.168.1.187:1984
Warning: fsockopen(): in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(142) : eval()'d code on line 86
Error opening socket: ������� ���������� ���������� ���� �����������, �.�. �� ������� ���������� �� ��������� ����� �� ������� ������ ������, ��� ���� ��������� ��� ������������� ���������� ��-�� ��������� ������� ��� ������������� ����������. (10060)

Warning: fclose() expects parameter 1 to be resource, boolean given in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(142) : eval()'d code on line 110

Re: DNLA SHARE вывод контента на SMART телевизоры

Добавлено: Сб фев 17, 2018 7:24 am
directman66
alekszander писал(а):Привет всем, интересная тема. Но у меня один вопрос. При запуске сам клиент dlna на тв надо запускать. И еще при попытке запуска скрипта вышла вот такая ошибка
SPOILERSPOILER_SHOW
https://r2---sn-pouxga5o-vu2l.googlevid ... 1518857486
Информация была обновлена 6 минут назад.host:192.168.1.187
port:1984
controlURL:/RenderingControl/ac4d0a1a-645a-b801-6312-20adfbf8270c/control.xml
Stop
192.168.1.187:1984
Warning: fsockopen(): in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(142) : eval()'d code on line 86
Error opening socket: ������� ���������� ���������� ���� �����������, �.�. �� ������� ���������� �� ��������� ����� �� ������� ������ ������, ��� ���� ��������� ��� ������������� ���������� ��-�� ��������� ������� ��� ������������� ����������. (10060)

Warning: fclose() expects parameter 1 to be resource, boolean given in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(142) : eval()'d code on line 110
SetAVTransportURI
192.168.1.187:1984
Warning: fsockopen(): in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(142) : eval()'d code on line 86
Error opening socket: ������� ���������� ���������� ���� �����������, �.�. �� ������� ���������� �� ��������� ����� �� ������� ������ ������, ��� ���� ��������� ��� ������������� ���������� ��-�� ��������� ������� ��� ������������� ����������. (10060)

Warning: fclose() expects parameter 1 to be resource, boolean given in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(142) : eval()'d code on line 110
Play
192.168.1.187:1984
Warning: fsockopen(): in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(142) : eval()'d code on line 86
Error opening socket: ������� ���������� ���������� ���� �����������, �.�. �� ������� ���������� �� ��������� ����� �� ������� ������ ������, ��� ���� ��������� ��� ������������� ���������� ��-�� ��������� ������� ��� ������������� ����������. (10060)

Warning: fclose() expects parameter 1 to be resource, boolean given in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(142) : eval()'d code on line 110
На телевизоре сервис поднимается автоматически при включении. Возможно где-то в настройках требуется включить dnla или upnp. На какой OS у вас MD?

Отправлено с моего Redmi Note 3 через Tapatalk

Re: DNLA SHARE вывод контента на SMART телевизоры

Добавлено: Сб фев 17, 2018 8:10 am
directman66
T-REX-XP писал(а):только что развернул образ для Rpi3, проверил модуль. все обнаруживает нормально.
SPOILERSPOILER_SHOW
Untitled.png
может используются какие-то библиотеки, которых у меня нет? Я скопировал с джита modules и templates.