Site Tools


software:ssdpd:config

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.

ssdpd.conf

log

Лог файл.

<log>
	<file>/root/msd/msd.log</file>
</log>

file

Имя файла. Запись производится если в командной строке не указан -v, иначе лог пишется в stdout.


skt

Настройки сокета.

<skt>
	<rcvBuf>64</rcvBuf>
	<sndBuf>64</sndBuf>
	<ttl>2</ttl>
	<hopLimit>5</hopLimit>
</skt>

rcvBuf

Максимальный размер буфера для приёма (SO_RCVBUF).

sndBuf

Максимальный размер буфера для отправки (SO_SNDBUF).

ttl

TTL - Только для IPv4. IP_MULTICAST_TTL

hopLimit

TTL - Только для IPv6. IPV6_MULTICAST_HOPS


Общие настройки

<flagEnableIPv4/>
<flagEnableIPv6/>
<httpServer></httpServer>

flagEnableIPv4

Включить IPv4.

flagEnableIPv6

Включить IPv6.

httpServer

Если не задано или пустое то автоматически генерируется поле Server вида: 'OS/version UPnP/1.1 product/version'


announceList

Список устройств для анонсирования.

<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>

announce

Описание UPnP устройства для анонсирования.

xmlDevDescr

Путь к XML файлу с описанием устройства.
SSDPd загружает из этого файла описание устройства и его сервисов.

maxAge

Время в секундах, используется клиентами для кеширования.

interval

Время в секундах, указывает как часто SSDPd посылает анонс в сеть.

ifList, if

Список сетевых интерфейсов для отсылки анонсов данного устройства.

= ifName = Имя сетевого интерфейса для отсылки анонсов.

= DevDescrURL4 = URL для IPv4 анонсов.
Адрес “0.0.0.0” автоматически заменяется на IPv4 адрес на данном интерфейсе.
URL должен указывать на файл с XML описанием UPnP устройства и его сервисов, это должен быть тот же самый файл что и xmlDevDescr только доступный все по протоколу HTTP.


Настройка nginx

Здесь самый минимум настроек, всё что связано с безопасностью/доступом, логами удалено.

Расшариваем папку с контентом:

	# 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 описано ТРИ сервиса, нужно править для всех трёх!

software/ssdpd/config.1414011924.txt.gz · Last modified: 2014/10/22 21:05 by root