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
software:ssdpd:config [2014/10/22 21:01]
root
software:ssdpd:config [2022/02/04 18:43] (current)
– ↷ Links adapted because of a move operation 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
 +  * nginx.conf
 +  * /upnp/descr/root.xml
 +  * /upnp/control/ContentDirectory.php
  
-===== ssdpd.conf ===== 
  
 +====== Настройка сети ======
  
-==== 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 19: Line 48:
 </log></code> </log></code>
  
-=== file ===+==== file ====
 Имя файла. Запись производится если в командной строке не указан -v, иначе лог пишется в stdout. Имя файла. Запись производится если в командной строке не указан -v, иначе лог пишется в stdout.
  
Line 25: Line 54:
  
  
-==== skt ====+===== skt =====
 Настройки сокета. Настройки сокета.
  
Line 35: 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
  
Line 50: Line 79:
  
  
-==== Общие настройки ====+===== Общие настройки =====
  
 <code xml><flagEnableIPv4/> <code xml><flagEnableIPv4/>
Line 57: 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 69: Line 98:
  
  
-==== announceList ====+===== announceList =====
 Список устройств для анонсирования.\\ Список устройств для анонсирования.\\
  
Line 85: Line 114:
  </ifList>  </ifList>
  </announce>  </announce>
-</announceList> +</announceList></code>
-</code>+
  
-=== announce ===+==== announce ====
 Описание UPnP устройства для анонсирования. Описание UPnP устройства для анонсирования.
  
-== xmlDevDescr ==+=== xmlDevDescr ===
 Путь к XML файлу с описанием устройства.\\ Путь к XML файлу с описанием устройства.\\
 SSDPd загружает из этого файла описание устройства и его сервисов.\\ SSDPd загружает из этого файла описание устройства и его сервисов.\\
  
-== maxAge ==+=== maxAge ===
 Время в секундах, используется клиентами для кеширования.\\ Время в секундах, используется клиентами для кеширования.\\
  
-== interval ==+=== interval ===
 Время в секундах, указывает как часто SSDPd посылает анонс в сеть.\\ Время в секундах, указывает как часто SSDPd посылает анонс в сеть.\\
  
-== ifList, if ==+=== ifList, if ===
 Список сетевых интерфейсов для отсылки анонсов данного устройства.\\ Список сетевых интерфейсов для отсылки анонсов данного устройства.\\
  
-= ifName = +== ifName =
-Имя сетевого интерфейса для отсылки анонсов.\\+Имя сетевого интерфейса для отсылки анонсов, так как его выдает ifconfig, например: eth0, re0, em1.\\
  
-= DevDescrURL4 =+== DevDescrURL4 ==
 URL для IPv4 анонсов.\\ URL для IPv4 анонсов.\\
 Адрес "0.0.0.0" автоматически заменяется на IPv4 адрес на данном интерфейсе.\\ Адрес "0.0.0.0" автоматически заменяется на IPv4 адрес на данном интерфейсе.\\
-URL должен указывать на  +URL должен указывать на файл с XML описанием UPnP устройства и его сервисов, это должен быть тот же самый файл что и [[software:ssdpd:config#xmlDevDescr|xmlDevDescr]] только доступный все по протоколу HTTP.
  
 +== DevDescrURL6 ==
 +Аналогично DevDescrURL4.\\
 +Адрес "[::]" автоматически заменяется на IPv6 адрес на данном интерфейсе.\\
  
 ---- ----
Line 120: Line 150:
  
  
-===== Настройка nginx =====+====== Настройка 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.1414011680.txt.gz · Last modified: 2014/10/22 21:01 by root