This is an old revision of the document!
В ssdpd.conf указываем полный путь до /upnp/descr/root.xml, указываем интерфейсы для анонса.
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 посылает анонс в сеть.
Список сетевых интерфейсов для отсылки анонсов данного устройства.
= ifName =
Имя сетевого интерфейса для отсылки анонсов.
= DevDescrURL4 =
URL для IPv4 анонсов.
Адрес “0.0.0.0” автоматически заменяется на IPv4 адрес на данном интерфейсе.
URL должен указывать на файл с XML описанием UPnP устройства и его сервисов, это должен быть тот же самый файл что и Настройка
Здесь самый минимум настроек, всё что связано с безопасностью/доступом, логами удалено.
Расшариваем папку с контентом:
# 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'; }
[/code]
Поддержка 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; } }
[/code] Далее можно будет превратить их в POST с доп заголовком и передать в скрипт, пример описан здесь: http://serverfault.com/questions/347663/nginx-convert-head-to-get-requests
Разрешаем PHP для UPnP скриптов:
# php for: UPnP location ^~ /upnp/control/ { 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]
В файле 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 описано ТРИ сервиса, нужно править для всех трёх!