Просмотр IPTV через домашний сервер [Касаткин Николай]



Просмотр IPTV через домашний сервер

У моего провайдера есть бесплатное IP-телевидение передаваемое по технологии IP multicast. Для просмотра IPTV на компьютере подключенном к провайдеру напрямую достаточно установить VLC и скачать плейлист. Сложности начинаются, когда дома установлен сервер и смотреть IPTV хочется на нескольких компьютерах домашней сети…

Если в роли домашнего шлюза установлен сервер с Linux на борту и доступ в Интернет с домашних компьютеров осуществляется через него по технологии NAT, то установкой VLC на компьютеры дело не решится. В этом случае для просмотра IPTV необходимо на сервер установить программу для проксирования IGMP 1) и маршрутизации UDP multicast 2). Также есть второй способ — использовать UDP proxy 3) на шлюзе. Для просмотра с помощью второго способа есть приложение под Android, позволяющее смотреть IP ТВ на планшете.

Multicast routing

Для начала разрешим на брандмауэре (у меня Shorewall) UDP multicast:

/etc/shorewall/rules
...
ACCEPT     net     fw:224.0.0.0/4
ACCEPT     net     loc:224.0.0.0/4
ACCEPT     fw     loc:224.0.0.0/4

Далее устанавливаем IGMPproxy:

  • скачиваем исходники отсюда: http://sourceforge.net/projects/igmpproxy
  • распаковываем:

    tar-xzf igmpproxy-src-*.tar.gz
    
  • переходим в распакованный каталог
  • компилируем IGMPproxy:

    ./configure && make
    
  • устанавливаем checkinstall:

    sudo apt-get install checkinstall
    
  • запускаем checkinstall:

    sudo checkinstall -D-y--pkgname=igmpproxy --pkgversion=0.1
    
  • в результате автоматически будет создан и установлен deb-пакет igmpproxy с необходимым нам демоном, который в будущем можно удалить командой dpkg -r igmpproxy
  • перемещаем конфигурационный файл:

    sudo mv /usr/local/etc/igmpproxy.conf /etc/igmpproxy.conf
    
  • настраиваем демон:
/etc/igmpproxy.conf
phyint eth1 upstream  ratelimit 0  threshold 1
     altnet 172.31.242.0/24
phyint eth0 downstream  ratelimit 0  threshold 1
phyint wlan0 disabled
  • значение altnet можно узнать запустив демон в debug-режиме: igmpproxy -v -d /etc/igmpproxy.conf и пощёлкав ТВ-каналы в VLC
  • когда конфигурационный файл налажен, можно настроить автозапуск демона:
/etc/rc.local
/usr/local/sbin/igmpproxy /etc/igmpproxy.conf
exit 0
  • всё, можно смотреть!

UDP proxy

В репозиториях Debian и Ubuntu программы udpxy ещё нет (разработчики занимаются этим вопросом), поэтому её нужно собрать из исходных кодов. Для этого:

  • скачиваем архив с исходниками с официального сайта и компилируем

    sudo apt-get install build-essential
    wget "http://www.udpxy.com/download/1_23/udpxy.1.0.23-7-prod.tar.gz"
    tar-xvf udpxy.1.0.23-7-prod.tar.gz
    cd udpxy-1.0.23-7
    make
    
  • копируем программу в системный каталог, например, /usr/local/bin
  • в параметрах запуска указываем локальный интерфейс (в моём случае br0), на котором будут приниматься подключения; порт, который будет прослушивать udpxy (у меня 9999) и имя внешнего интерфейса, откуда будет приниматься IPTV:

    /usr/local/bin/udpxy -a br0 -p 9999-m eth1
    
  • можно добавить программу в атозагрузку, например в /etc/rc.local
  • добавим правила в брандмауэр (на примере shorewall), разрешив multicast трафик из внешней сети на наш роутер и с роутера во внешнюю сеть, а также из локальной сети на порт udpxy:

    /etc/shorewall/rules
    ...
    ACCEPT          net             fw:224.0.0.0/4
    ACCEPT          fw              net:224.0.0.0/4
    ACCEPT          loc             fw                      tcp     9999
    
  • изменим ссылки на каналы в плейлисте так, чтобы они указывали на udpxy: 4)

    # change "udp://@233.166.172.91:1234" to 
    #  "http://192.168.0.254:9999/udp/233.166.172.91:1234"
    sed-e's/^udp://@/http://192.168.0.254:9999/udp//'-i playlist.m3u
    
  • открываем на своём компьютере VLC и загружаем в него получившийся плейлист
  • смотрим IPTV!
 
blog/2011/0829_iptv_through_nat.txt · Последние изменения: 2013-02-24 09:52  — nikolay · []         


http://www.kasatkin.org/doku.php?id=blog:2011:0829_iptv_through_nat

Губарь Маргарита Александровна