Site Tools


software:ssdpd:config

This is an old revision of the document!


В ssdpd.conf - файл конфигурации, подробнее ниже.

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';
}

Поддержка 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/;

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

Расширенная настройка и кастомизация под себя

В файле 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.1414012977.txt.gz · Last modified: 2014/10/22 21:22 by root