Site Tools


software:ssdpd:config

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
software:ssdpd:config [2014/10/22 20:46]
root
software:ssdpd:config [2022/02/04 18:43]
– ↷ Page moved from ru:software:ssdpd:config to software:ssdpd:config root
Line 1: Line 1:
-====== Настройка ====== +В ssdpd.conf - файл конфигурации, подробнее ниже.\\
-В ssdpd.conf указываем полный путь до /upnp/descr/root.xml, указываем интерфейсы для анонса.\\+
  
 ssdpd и веб сервер могут быть запущены на разных серверах, можно запускать ssdpd на нескольких серверах (резервирование), важно чтобы root.xml был везде одинаковый.\\ ssdpd и веб сервер могут быть запущены на разных серверах, можно запускать ssdpd на нескольких серверах (резервирование), важно чтобы root.xml был везде одинаковый.\\
  
 +SSDPd и nginx должны отдавать клиентам одинаковый XML файл с описанием UPnP устройства и его сервисов, далее везде root.xml\\
 /upnp/ - положить/сделать симлинк в wwwroot веб сервера.\\ /upnp/ - положить/сделать симлинк в wwwroot веб сервера.\\
 /upnp/control/ContentDirectory.php - отредактировать в начале файла переменные с путями и разрешить выполнение.\\ /upnp/control/ContentDirectory.php - отредактировать в начале файла переменные с путями и разрешить выполнение.\\
 Нужен PHP с поддержкой SOAP.\\ Нужен PHP с поддержкой SOAP.\\
  
-===== ssdpd.conf =====+Если потребуется изменить пути то нужно редактировать следующие файлы: 
 +  * ssdpd.conf 
 +  * nginx.conf 
 +  * /upnp/descr/root.xml 
 +  * /upnp/control/ContentDirectory.php
  
  
-==== log ====+====== Настройка сети ====== 
 + 
 +===== IPv4 ===== 
 +  * разрешить IGMP с опциями на вход и на выход с адресом назначения: 224.0.0.0/
 +  * разрешить UDP на вход с адресом назначения: 224.0.0.0/4, на выход с любым адресом 
 + 
 +<code>pass out quick inet proto udp to 224.0.0.0/4 no state allow-opts 
 +pass out quick inet proto igmp to 224.0.0.0/4 no state allow-opts 
 +pass in quick inet proto udp to 224.0.0.0/4 no state # Allow receive multicast 
 +pass in quick inet proto igmp to 224.0.0.0/4 no state allow-opts 
 +</code> 
 + 
 +===== IPv6 ===== 
 +  * разрешить icmp6 с опциями на вход и на выход 
 +  * разрешить UDP на вход с адресом назначения: ff00::/8, на выход с любым адресом 
 + 
 +<code>pass out quick inet6 proto udp to ff00::/8 no state allow-opts # Allow send multicast 
 +pass out quick inet6 proto icmp6 no state allow-opts # mld (igmp6) also here 
 +pass in quick inet6 proto udp to ff00::/8 no state # Allow receive multicast 
 +pass in quick inet6 proto icmp6 no state allow-opts # mld (igmp6) also here 
 +</code> 
 + 
 + 
 + 
 +====== ssdpd.conf ====== 
 + 
 +===== log =====
 Лог файл. Лог файл.
  
Line 18: Line 48:
 </log></code> </log></code>
  
-=== file ===+==== file ====
 Имя файла. Запись производится если в командной строке не указан -v, иначе лог пишется в stdout. Имя файла. Запись производится если в командной строке не указан -v, иначе лог пишется в stdout.
  
Line 24: Line 54:
  
  
-==== skt ====+===== skt =====
 Настройки сокета. Настройки сокета.
  
Line 34: Line 64:
 </skt></code> </skt></code>
  
-=== rcvBuf ===+==== rcvBuf ====
 Максимальный размер буфера для приёма (SO_RCVBUF). Максимальный размер буфера для приёма (SO_RCVBUF).
  
-=== sndBuf ===+==== sndBuf ====
 Максимальный размер буфера для отправки (SO_SNDBUF). Максимальный размер буфера для отправки (SO_SNDBUF).
  
-=== ttl ===+==== ttl ====
 TTL - Только для IPv4. IP_MULTICAST_TTL TTL - Только для IPv4. IP_MULTICAST_TTL
  
-=== hopLimit ===+==== hopLimit ====
 TTL - Только для IPv6. IPV6_MULTICAST_HOPS TTL - Только для IPv6. IPV6_MULTICAST_HOPS
  
 ---- ----
  
-==== Общие настройки ====+ 
 +===== Общие настройки =====
  
 <code xml><flagEnableIPv4/> <code xml><flagEnableIPv4/>
Line 55: Line 86:
 </code> </code>
  
-=== flagEnableIPv4 ===+==== flagEnableIPv4 ====
 Включить IPv4. Включить IPv4.
  
-=== flagEnableIPv6 ===+==== flagEnableIPv6 ====
 Включить IPv6. Включить IPv6.
  
-=== httpServer ===+==== httpServer ====
 Если не задано или пустое то автоматически генерируется поле Server вида: 'OS/version UPnP/1.1 product/version' Если не задано или пустое то автоматически генерируется поле Server вида: 'OS/version UPnP/1.1 product/version'
  
Line 67: Line 98:
  
  
 +===== announceList =====
 +Список устройств для анонсирования.\\
  
 +<code xml><announceList>
 + <announce>
 + <xmlDevDescr>/usr/local/www/upnp/descr/root.xml</xmlDevDescr>
 + <maxAge>1800</maxAge>
 + <interval>10</interval>
 + <ifList>
 + <if>
 + <ifName>vlan777</ifName>
 + <DevDescrURL4><![CDATA[http://0.0.0.0:80/upnp/descr/root.xml]]></DevDescrURL4>
 + <DevDescrURL6><![CDATA[http://[::]:80/upnp/descr/root.xml]]></DevDescrURL6>
 + </if>
 + </ifList>
 + </announce>
 +</announceList></code>
  
 +==== announce ====
 +Описание UPnP устройства для анонсирования.
  
 +=== xmlDevDescr ===
 +Путь к XML файлу с описанием устройства.\\
 +SSDPd загружает из этого файла описание устройства и его сервисов.\\
  
 +=== maxAge ===
 +Время в секундах, используется клиентами для кеширования.\\
  
-===== Настройка nginx =====+=== interval === 
 +Время в секундах, указывает как часто SSDPd посылает анонс в сеть.\\ 
 + 
 +=== ifList, if === 
 +Список сетевых интерфейсов для отсылки анонсов данного устройства.\\ 
 + 
 +== ifName == 
 +Имя сетевого интерфейса для отсылки анонсов, так как его выдает ifconfig, например: eth0, re0, em1.\\ 
 + 
 +== DevDescrURL4 == 
 +URL для IPv4 анонсов.\\ 
 +Адрес "0.0.0.0" автоматически заменяется на IPv4 адрес на данном интерфейсе.\\ 
 +URL должен указывать на файл с XML описанием UPnP устройства и его сервисов, это должен быть тот же самый файл что и [[ru:software:ssdpd:config#xmlDevDescr|xmlDevDescr]] только доступный все по протоколу HTTP. 
 + 
 +== DevDescrURL6 == 
 +Аналогично DevDescrURL4.\\ 
 +Адрес "[::]" автоматически заменяется на IPv6 адрес на данном интерфейсе.\\ 
 + 
 +---- 
 + 
 + 
 + 
 + 
 + 
 +====== Настройка nginx ======
 Здесь самый минимум настроек, всё что связано с безопасностью/доступом, логами удалено. Здесь самый минимум настроек, всё что связано с безопасностью/доступом, логами удалено.
  
 Расшариваем папку с контентом: Расшариваем папку с контентом:
-[code] +<code> 
- # allow files listing: DataStore +# allow files listing: DataStore 
- location ^~ /DataStore/ { +location ^~ /DataStore/ { 
- root /usr/; + root /usr/; 
- + add_header TransferMode.DLNA.ORG 'Streaming'; 
- add_header TransferMode.DLNA.ORG 'Streaming'; + add_header ContentFeatures.DLNA.ORG 'DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01700000000000000000000000000000'; 
- add_header ContentFeatures.DLNA.ORG 'DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01700000000000000000000000000000'; +
- +</code
-[/code]+Дополнительные заголовки часто требуются UPnP/DLNA клиентам для работы.
  
 Поддержка UPnP SUBSCRIBE/UNSUBSCRIBE (они нужны для VLC и WMP) Поддержка UPnP SUBSCRIBE/UNSUBSCRIBE (они нужны для VLC и WMP)
-[code] +<code> 
- # UPnP SUBSCRIBE/UNSUBSCRIBE handle +# UPnP SUBSCRIBE/UNSUBSCRIBE handle 
- location ^~ /upnp/subscribe/+location ^~ /upnp/subscribe/
- if ($request_method = SUBSCRIBE) { + if ($request_method = SUBSCRIBE) { 
- add_header Pragma "no-cache"; + add_header Pragma "no-cache"; 
- add_header SID "uuid:7CF21CB0-2266-47BE-A608-3CC1F5210BB4"; + add_header SID "uuid:7CF21CB0-2266-47BE-A608-3CC1F5210BB4"; 
- add_header Timeout "Second-1800"; + add_header Timeout "Second-1800"; 
- return 200; + return 200; 
- +
- if ($request_method = UNSUBSCRIBE) { + if ($request_method = UNSUBSCRIBE) { 
- add_header Pragma "no-cache"; + add_header Pragma "no-cache"; 
- return 200; + return 200; 
- +
- } +}</code> 
-[/code] +Если потребуется обрабатывать эти запросы в скриптах, то можно превратить их в POST с дополнительным заголовком и передать в скрипт, пример описан здесь: http://serverfault.com/questions/347663/nginx-convert-head-to-get-requests\\
-Далее можно будет превратить их в POST с доп заголовком и передать в скрипт, пример описан здесь: http://serverfault.com/questions/347663/nginx-convert-head-to-get-requests+
  
 Разрешаем PHP для UPnP скриптов: Разрешаем PHP для UPnP скриптов:
-[code] +<code> 
- # php for: UPnP +# php for: UPnP 
- location ^~ /upnp/control/+location ^~ /upnp/control/
- root /usr/local/www/; + root /usr/local/www/;
- +
- include fastcgi_params; +
- #fastcgi_pass 127.0.0.1:54475; +
- fastcgi_pass unix:/var/run/spawn-fcgi.sock; +
- fastcgi_connect_timeout 30; +
- fastcgi_read_timeout 600; +
- fastcgi_send_timeout 600; +
- fastcgi_ignore_client_abort off; +
- #fastcgi_cache_valid any 10s; +
- fastcgi_intercept_errors off; +
- fastcgi_param SCRIPT_FILENAME  /usr/local/www$fastcgi_script_name; +
-+
-[/code]+
  
 + try_files $fastcgi_script_name = 404;
 + #fastcgi_pass 127.0.0.1:54475;
 + fastcgi_pass unix:/var/run/spawn-fcgi.sock;
 + fastcgi_connect_timeout 30;
 + fastcgi_read_timeout 600;
 + fastcgi_send_timeout 600;
 + fastcgi_ignore_client_abort off;
 + #fastcgi_cache_valid any 10s;
 + fastcgi_intercept_errors off;
 + include fastcgi_params;
 + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 +}</code>
  
  
-==== Расширенная настройка и кастомизация под себя ==== 
-В файле [b]root.xml[/b] 
-[b]root/device:[/b] 
-friendlyName - отображаемое имя UPnP устройства; 
-UDN - UUID идетификатор устройства, его нужно изменять только если хотим больше одного устройства (или кто то уже его занял), длинна обязательно 36 символов; 
-presentationURL - можно указать там страничку с описанием или админкой 
  
-[b]root/device/iconList/icon:[/b] +====== Расширенная настройка и кастомизация под себя ====== 
-url URL на png иконку 48х48;+В файле root.xml\\ 
 +**root/device**\\ 
 +friendlyName отображаемое имя UPnP устройства;\\ 
 +UDN - UUID идетификатор устройства, его нужно изменять только если хотим больше одного устройства (или кто то уже его занял), длинна обязательно 36 символов;\\ 
 +presentationURL - можно указать там страничку с описанием или админкой.\\
  
-[b]root/device/serviceList/service:[/b] +**root/device/iconList/icon**\\ 
-SCPDURL - URL до хмл файла с описанием; +url - URL на png иконку 48х48;\\
-controlURL - URL куда будут прилетать HTTP POST запросы к сервисам; +
-eventSubURL - URL куда будут идти HTTP SUBSCRIBE/UNSUBSCRIBE, можно оставить пустым. +
-[b]root.xml описано ТРИ сервиса, нужно править для всех трёх![/b]+
  
 +**root/device/serviceList/service**\\
 +SCPDURL - URL до хмл файла с описанием;\\
 +controlURL - URL куда будут прилетать HTTP POST запросы к сервисам;\\
 +eventSubURL - URL куда будут идти HTTP SUBSCRIBE/UNSUBSCRIBE, можно оставить пустым.\\
  
 +**root.xml описано ТРИ сервиса, нужно править для всех трёх!**\\
  
software/ssdpd/config.txt · Last modified: 2022/02/04 18:43 by root