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

Всё, что не подходит под вышеперечисленные разделы

Модератор: immortal

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

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

Сообщение nick7zmail » Пт фев 16, 2018 10:07 pm

directman66 подскажи, я правильно понял, что модуль начинать надо отсюда
https://majordomo.smartliving.ru/forum/ ... 045#p72045
?
Этот скрипт все устройства корректно ищет? Или ещё какие есть варианты?
[USN] => uuid - уникальный для девайсов, и не меняется, правильно?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

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

Сообщение directman66 » Пт фев 16, 2018 10:50 pm

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

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

Сообщение directman66 » Пт фев 16, 2018 10:51 pm

nick7zmail писал(а): [USN] => uuid - уникальный для девайсов, и не меняется, правильно?
USN еще не разу не менялся у меня.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
T-REX-XP
Сообщения: 174
Зарегистрирован: Вт июн 16, 2015 10:54 pm
Благодарил (а): 16 раз
Поблагодарили: 32 раза

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

Сообщение T-REX-XP » Пт фев 16, 2018 11:33 pm

я уже писал модель поиска устройств, можете заюзать его. https://majordomo.smartliving.ru/forum/ ... hilit=ssdp
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

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

Сообщение directman66 » Сб фев 17, 2018 12:04 am

Хрена себе, я не видел. Оказывается есть уже и заготовка модуля!

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

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

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

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

Сообщение directman66 » Сб фев 17, 2018 12:20 am

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
Добавил пункт в концепцию.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
T-REX-XP
Сообщения: 174
Зарегистрирован: Вт июн 16, 2015 10:54 pm
Благодарил (а): 16 раз
Поблагодарили: 32 раза

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

Сообщение T-REX-XP » Сб фев 17, 2018 12:44 am

только что развернул образ для Rpi3, проверил модуль. все обнаруживает нормально.
СпойлерПоказать
Untitled.png
Untitled.png (370.64 КБ) 4520 просмотров
alekszander
Сообщения: 178
Зарегистрирован: Вс янв 05, 2014 5:37 am
Благодарил (а): 10 раз
Поблагодарили: 17 раз

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

Сообщение alekszander » Сб фев 17, 2018 5:56 am

Привет всем, интересная тема. Но у меня один вопрос. При запуске сам клиент dlna на тв надо запускать. И еще при попытке запуска скрипта вышла вот такая ошибка
СпойлерПоказать
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
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

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

Сообщение directman66 » Сб фев 17, 2018 7:24 am

alekszander писал(а):Привет всем, интересная тема. Но у меня один вопрос. При запуске сам клиент dlna на тв надо запускать. И еще при попытке запуска скрипта вышла вот такая ошибка
СпойлерПоказать
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
Последний раз редактировалось directman66 Сб фев 17, 2018 8:11 am, всего редактировалось 1 раз.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

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

Сообщение directman66 » Сб фев 17, 2018 8:10 am

T-REX-XP писал(а):только что развернул образ для Rpi3, проверил модуль. все обнаруживает нормально.
СпойлерПоказать
Untitled.png
может используются какие-то библиотеки, которых у меня нет? Я скопировал с джита modules и templates.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Ответить