Для того что бы смотреть фильмы, мультфильмы и прочее с 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 скрипт. Постараюсь выложить его попозже.