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

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

Модератор: immortal

directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

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

Сообщение directman66 » Вт фев 13, 2018 11:35 am

nick7zmail писал(а):Хах))) снова подняли старую тему...https://majordomo.smartliving.ru/forum/ ... hilit=dlna
Там даже экспорт класса МД есть, в котором, вроде, работали функции.
Единственное на колонку broadlink команды stop/play и тп не работали. Но они не работали и через тот же home media server. Телек вроде реагировал на них.

Вот тут подробный мануал использования написан https://majordomo.smartliving.ru/forum/ ... 297#p52297
Я пробовал все эти варианты, не взлетело у меня почему-то. Пытаюсь сейчас заного разобрать все по полочкам. Тема эта все-же очень интересная.

2nick7zmail, ты вроде хотел написать отдельный модуль для DNLA! Я готов чем-нибудь помочь, и материально в том числе. Этот вопрос не дает мне покоя.
Я пока не до конца понимаю как управлять классами на php, поэтому у меня что-то не взлетает.

Также на широковещательный запрос почему-то не отвечает колонка google home mini, хотя приложение BoubleUpnp видит ее как устройство вопроизведения и также отправляет на нее контент.

Кстати, приложение Packet Capture для андройд очень даже удобно снифит пакеты. Как бы научиться на php эти пакеты повторять.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
dmw
Сообщения: 469
Зарегистрирован: Вт мар 12, 2013 1:22 am
Благодарил (а): 41 раз
Поблагодарили: 81 раз

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

Сообщение dmw » Вт фев 13, 2018 12:30 pm

directman66 писал(а):уже пробовал разные варианты работы с сокетом, но не на один не реагирует.
В HTTP-пакете нужно отделять заголовок пакета (header) от тела сообщения (body) пустой строкой с переводом каретки.
У Вас даже BubbleUPnP это показывает, а вы в коде это не учитываете.
Добавьте в конце заголовка еще один перевод строки:
'User-Agent: Android/6.0.1 UPnP/1.0 BubbleUPnP/2.9.1'. "\r\n\r\n".
да и сам заголовок должен начинаться либо с GET либо с POST:
'POST /AVTransport/9732d18b-48f1-7f50-2b02-463b0f37e9a7/control.xml HTTP/1.1'. "\r\n".
Такие запросы лучше всего делать через curl, т.к. через сокеты нужно учитывать больше параметров чем просто слать последовательность байт.
Вот так ваш код будет выглядеть с помощью curl:

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

<?php
$host = '192.168.1.41:1359';
$url = 'http://'.$host;

$body = '<?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>';

$headers = array(
    "POST /AVTransport/9732d18b-48f1-7f50-2b02-463b0f37e9a7/control.xml HTTP/1.1",
    "Content-type: text/xml;charset=utf-8",
    "Content-Length: ".strlen($body),
    "Host: ".$host,
    "User-Agent: Android/6.0.1 UPnP/1.0 BubbleUPnP/2.9.1"
);

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
$result = curl_exec($curl);
print_r($result);
За это сообщение автора dmw поблагодарил:
directman66 (Вт фев 13, 2018 12:52 pm)
Рейтинг: 1.16%
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

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

Сообщение directman66 » Вт фев 13, 2018 2:11 pm

Вот мой сценарий на stop/SENDURL/PLAY

Но не работает почему-то
СпойлерПоказать

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

$host = '192.168.1.97:1359';
$url = 'http://'.$host;
///stop
$body = '<?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>';
$headers = array(
    "POST /AVTransport/9732d18b-48f1-7f50-2b02-463b0f37e9a7/control.xml HTTP/1.1",
    "Content-type: text/xml;charset=utf-8",
    "Content-Length: ".strlen($body),
    "Host: ".$host,
    "User-Agent: Android/6.0.1 UPnP/1.0 BubbleUPnP/2.9.1"
);

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
$result = curl_exec($curl);
print_r($result);

////set URI
$body = '<?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">http://192.168.1.31:32469/object/df4b8e517919aa1f643c/file.mkv</res></item></DIDL-Lite></CurrentURIMetaData></u:SetAVTransportURI></s:Body></s:Envelope>';

$headers = array(
    "POST /AVTransport/9732d18b-48f1-7f50-2b02-463b0f37e9a7/control.xml HTTP/1.1",
    "Soapaction: \"urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI\"", 
    "Content-type: text/xml;charset=utf-8",
    "Content-Length: ".strlen($body),
    "Host: ".$host,
     "Connection: Keep-Alive",
    "User-Agent: Android/6.0.1 UPnP/1.0 BubbleUPnP/2.9.1"
);

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
$result = curl_exec($curl);
print_r($result);

///Play
$body = '<?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>';

$headers = array(
    "POST /AVTransport/9732d18b-48f1-7f50-2b02-463b0f37e9a7/control.xml HTTP/1.1",
    "Soapaction: \"urn:schemas-upnp-org:service:AVTransport:1#Play\"", 
    "Content-type: text/xml;charset=utf-8",
    "Content-Length: ".strlen($body),
    "Host: ".$host,
     "Connection: Keep-Alive",
    "User-Agent: Android/6.0.1 UPnP/1.0 BubbleUPnP/2.9.1"
);

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
$result = curl_exec($curl);
print_r($result);
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
dmw
Сообщения: 469
Зарегистрирован: Вт мар 12, 2013 1:22 am
Благодарил (а): 41 раз
Поблагодарили: 81 раз

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

Сообщение dmw » Вт фев 13, 2018 2:24 pm

Этот файл точно существует по данной ссылке?
Судя по пакетам перехваченным BubbleUPnP на предидущей странице ссылка динамически меняется каждый раз.
Положите для чистоты эксперимента file.mkv в статичную папку и замените на него ссылки в вашем коде
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

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

Сообщение directman66 » Вт фев 13, 2018 3:09 pm

Файл доступен по этой ссылке http://192.168.1.31:32469/object/df4b8e ... c/file.mkv
В хмl запроса путь указан этот же.

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

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

Сообщение nick7zmail » Вт фев 13, 2018 3:49 pm

directman66 писал(а): 2nick7zmail, ты вроде хотел написать отдельный модуль для DNLA! Я готов чем-нибудь помочь, и материально в том числе. Этот вопрос не дает мне покоя.
Я пока не до конца понимаю как управлять классами на php, поэтому у меня что-то не взлетает.
Не хотел))) сам был готов подкинуть финансирование тому, кто возьмется... https://majordomo.smartliving.ru/forum/ ... 335#p55335 ...знаний не хватало...теперь может и готов...пока только слабо представляю общую концепцию...но попробовать стоит.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

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

Сообщение directman66 » Вт фев 13, 2018 4:47 pm

nick7zmail писал(а):
directman66 писал(а): 2nick7zmail, ты вроде хотел написать отдельный модуль для DNLA! Я готов чем-нибудь помочь, и материально в том числе. Этот вопрос не дает мне покоя.
Я пока не до конца понимаю как управлять классами на php, поэтому у меня что-то не взлетает.
Не хотел))) сам был готов подкинуть финансирование тому, кто возьмется... https://majordomo.smartliving.ru/forum/ ... 335#p55335 ...знаний не хватало...теперь может и готов...пока только слабо представляю общую концепцию...но попробовать стоит.
Счаз мы уже знаем как это работает)

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

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

Сообщение nick7zmail » Вт фев 13, 2018 5:34 pm

Ну по-этому и говорю - можно попробовать натворил что нить))

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

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

Сообщение directman66 » Вт фев 13, 2018 7:22 pm

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

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

Сообщение directman66 » Ср фев 14, 2018 8:38 pm

curl не подходит, он как то не правильно делает header

вот этот вариант поддается полной настройке
СпойлерПоказать

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

$url=gg('9732d18b-48f1-7f50-2b02-463b0f37e9a7.LOCATION');
//$host=explode(":",$url)[0].explode(":",$url)[1];
$host=str_replace('/','',explode(":",$url)[1]);
$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>';
//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">http://192.168.1.31:32469/object/df4b8e517919aa1f643c/file.mkv</res></item></DIDL-Lite></CurrentURIMetaData></u:SetAVTransportURI></s:Body></s:Envelope>';
$asnw=sendpacket($host,$port,$controlURL,'SetAVTransportURI', $xml);
echo $asnw;
echo 'Play<br>';
//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
Ответить