This is an old revision of the document!
В ssdpd.conf - файл конфигурации, подробнее ниже.
ssdpd и веб сервер могут быть запущены на разных серверах, можно запускать ssdpd на нескольких серверах (резервирование), важно чтобы root.xml был везде одинаковый.
/upnp/ - положить/сделать симлинк в wwwroot веб сервера.
/upnp/control/ContentDirectory.php - отредактировать в начале файла переменные с путями и разрешить выполнение.
Нужен PHP с поддержкой SOAP.
Лог файл.
<log> <file>/root/msd/msd.log</file> </log>
Имя файла. Запись производится если в командной строке не указан -v, иначе лог пишется в stdout.
Настройки сокета.
<skt> <rcvBuf>64</rcvBuf> <sndBuf>64</sndBuf> <ttl>2</ttl> <hopLimit>5</hopLimit> </skt>
Максимальный размер буфера для приёма (SO_RCVBUF).
Максимальный размер буфера для отправки (SO_SNDBUF).
TTL - Только для IPv4. IP_MULTICAST_TTL
TTL - Только для IPv6. IPV6_MULTICAST_HOPS
<flagEnableIPv4/> <flagEnableIPv6/> <httpServer></httpServer>
Включить IPv4.
Включить IPv6.
Если не задано или пустое то автоматически генерируется поле Server вида: 'OS/version UPnP/1.1 product/version'
Список устройств для анонсирования.
<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>
Описание UPnP устройства для анонсирования.
Путь к XML файлу с описанием устройства.
SSDPd загружает из этого файла описание устройства и его сервисов.
Время в секундах, используется клиентами для кеширования.
Время в секундах, указывает как часто SSDPd посылает анонс в сеть.
Список сетевых интерфейсов для отсылки анонсов данного устройства.
Имя сетевого интерфейса для отсылки анонсов.
URL для IPv4 анонсов.
Адрес “0.0.0.0” автоматически заменяется на IPv4 адрес на данном интерфейсе.
URL должен указывать на файл с XML описанием UPnP устройства и его сервисов, это должен быть тот же самый файл что и xmlDevDescr только доступный все по протоколу HTTP.
Аналогично DevDescrURL4.
Адрес “[::]” автоматически заменяется на IPv6 адрес на данном интерфейсе.
Здесь самый минимум настроек, всё что связано с безопасностью/доступом, логами удалено.
Расшариваем папку с контентом:
# allow files listing: DataStore location ^~ /DataStore/ { root /usr/; add_header TransferMode.DLNA.ORG 'Streaming'; add_header ContentFeatures.DLNA.ORG 'DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01700000000000000000000000000000'; }
Дополнительные заголовки часто требуются UPnP/DLNA клиентам для работы.
Поддержка UPnP SUBSCRIBE/UNSUBSCRIBE (они нужны для VLC и WMP)
# UPnP SUBSCRIBE/UNSUBSCRIBE handle location ^~ /upnp/subscribe/ { if ($request_method = SUBSCRIBE) { add_header Pragma "no-cache"; add_header SID "uuid:7CF21CB0-2266-47BE-A608-3CC1F5210BB4"; add_header Timeout "Second-1800"; return 200; } if ($request_method = UNSUBSCRIBE) { add_header Pragma "no-cache"; return 200; } }
Далее можно будет превратить их в POST с доп заголовком и передать в скрипт, пример описан здесь: http://serverfault.com/questions/347663/nginx-convert-head-to-get-requests
Разрешаем PHP для UPnP скриптов:
# php for: UPnP location ^~ /upnp/control/ { root /usr/local/www/; 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; }
В файле root.xml
root/device
friendlyName - отображаемое имя UPnP устройства;
UDN - UUID идетификатор устройства, его нужно изменять только если хотим больше одного устройства (или кто то уже его занял), длинна обязательно 36 символов;
presentationURL - можно указать там страничку с описанием или админкой.
root/device/iconList/icon
url - URL на png иконку 48х48;
root/device/serviceList/service
SCPDURL - URL до хмл файла с описанием;
controlURL - URL куда будут прилетать HTTP POST запросы к сервисам;
eventSubURL - URL куда будут идти HTTP SUBSCRIBE/UNSUBSCRIBE, можно оставить пустым.
root.xml описано ТРИ сервиса, нужно править для всех трёх!