0

IPTV на TV через DLNA

Для того что бы смотреть фильмы, мультфильмы и прочее с PC на TV я когда-то устанавливал mediatomb. С тех пор пор он прекрасно себя чувствует. В один прекрасный момент потребовалось странного — выводить на TV IPTV. Об этом и пойдет речь.

В результате поисков на просторах наткнулся на проект xupnpd

This program is a light DLNA Media Server which provides ContentDirectory:1 service for sharing IPTV unicast streams over local area network (with udpxy for multicast to HTTP unicast conversion).

Все что надо в одном флаконе.

Итак первым делом получаю исходники. Думаю, лучше стащить последнюю версию с googlecode.com:
$ sudo apt-get install subversion
$ svn co http://tsdemuxer.googlecode.com/svn/trunk/xupnpd
$ cd xupnpd/src/

Перед тем, как собирать из исходников xupnpd небходимо установить несколько пакетов:
$ sudo apt-get install gcc g++ uuid-dev
После этого можно делать править конфиг (привожу пример своего):

cfg={}

-- multicast interface for SSDP exchange, 'eth0', 'br0', 'br-lan' for example
cfg.ssdp_interface='eth0'

-- 'cfg.ssdp_loop' enables multicast loop (if player and server in one host)
cfg.ssdp_loop=0

-- SSDP announcement interval
cfg.ssdp_notify_interval=15

-- SSDP announcement age
cfg.ssdp_max_age=1800

-- HTTP port for incoming connections
cfg.http_port=4044

-- syslog facility (syslog,local0-local7)
cfg.log_facility='local0'

-- 'cfg.daemon' detach server from terminal
cfg.daemon=true

-- silent mode - no logs, no pid file
cfg.embedded=false

-- 'cfg.debug' enables SSDP debug output to stdout (if cfg.daemon=false)
-- 0-off, 1-basic, 2-messages
cfg.debug=0
-- external 'udpxy' url for multicast playlists (udp://@...)
--cfg.udpxy_url='http://192.168.1.1:4022'

-- downstream interface for builtin multicast proxy (comment 'cfg.udpxy_url' for processing 'udp://@...' playlists)
cfg.mcast_interface='eth0'

-- 'cfg.proxy' enables proxy for injection DLNA headers to stream
-- 0-off, 1-radio, 2-radio/TV
cfg.proxy=2

-- User-Agent for proxy
cfg.user_agent='Mozilla/5.0'

-- I/O timeout
cfg.http_timeout=30

-- enables UPnP/DLNA notify when reload playlist
cfg.dlna_notify=true

-- UPnP/DLNA subscribe ttl
cfg.dlna_subscribe_ttl=1800

-- group by 'group-title'
cfg.group=true

-- sort files
cfg.sort_files=false

-- Device name
cfg.name='UPnP-IPTV'
-- static device UUID, '60bd2fb3-dabe-cb14-c766-0e319b54c29a' for example or nil
cfg.uuid='60bd2fb3-dabe-cb14-c766-0e319b54c29a'

-- max url cache size
cfg.cache_size=8

-- url cache item ttl (sec)
cfg.cache_ttl=900

-- default mime type (mpeg, mpeg_ts, mpeg1, mpeg2, ts, ...)
cfg.default_mime_type='mpeg_ts'

-- feeds update interval (seconds, 0 - disabled)
cfg.feeds_update_interval=0
cfg.playlists_update_interval=0

-- playlist (m3u file path or path with alias
playlist=
{}

-- feeds list (plugin, feed name, feed type)
feeds=
{}

-- log ident, pid file end www root
cfg.version='1.033'
cfg.log_ident=arg[1] or 'xupnpd'
cfg.pid_file='/var/run/'..cfg.log_ident..'.pid'
cfg.www_root='./www/'
cfg.tmp_path='/tmp/'
cfg.plugin_path='./plugins/'
cfg.config_path='./config/'
cfg.playlists_path='./playlists/'
--cfg.feeds_path='/tmp/xupnpd-feeds/'
cfg.ui_path='./ui/'
cfg.drive=''                    -- reload playlists only if drive state=active/idle, example: cfg.drive='/dev/sda'
cfg.profiles='./profiles/'      -- device profiles feature

dofile('xupnpd_main.lua')

После этого можно собирать:
$ make

В приципе после этого можно запускать сервис:
./xupnpd
и добавлять playlists через веб интерфейс http://localhost:4044/

Для порядка я перенес сам бинарник и необходимые файлы в отдельную директорию, откуда буду запускать сервис. Вот список файлов и директорий, которые необходимы:

  • config/
  • playlists/
  • plugins/
  • profiles/
  • ui/
  • www/
  • xupnpd
  • *.lua

Завершающим штрихом останется написать init скрипт. Постараюсь выложить его попозже.

Alexey Egorychev

FreeBSD and Linux sysadmin. Know many systems like mailsystems, DB, WWW stack. Automation with salt, ansible. Monitoring with nagios, zabbix.