Pull to refresh

Настройка IPTV в OpenWRT

Reading time3 min
Views139K
Хотя я практически не смотрю телевизор, иногда появляется непреодолимое желание посмотреть что сейчас вещают в новостях. Часто это желание возникает когда дочка спит, и телевизор уже вне зоны доступа. Как вы понимаете выход один — IPTV.

По счастливому стечению обстоятельств у меня подключен тарифный план с бесплатным пакетом IPTV и имеется роутер Netgear WNDR-3800. На роутере имеется прошивка OpenWrt Backfire 10.03.1.
Так как в комментариях появились замечания по поводу того что udpxy не такая уж и нужная вещь, стоит отдельно отметить, что я смотрю IPTV исключительно по WiFi, а некоторые устройства не поддерживают 802.11n и при использовании мультикаста картинка на них рассыпается.
На хабре было много статей об OpenWrt, о настройке сети в OpenWrt, настройке IPTV трансляций, и некоторые другие, но к сожалению в них процесс настройки собственно IPTV если и описан, то без каких либо подробностей. И хотя этот процес совсем не сложен, я надеюсь мой топик сократит время на поиск и чтение необходимых мануалов, которых в сети предостаточно. Я произвожу эти настройки не в первый раз, так как иногда в процессе экспериментов с VPN, Wi-Fi и другими плюшками роутер умирал и восстанавливался в аварийном режиме. Посему будьте внимательны и осторожны, что бы не пришлось обращаться к процедуре восстановления.

Все настройки будем производить из консоли, т.к. я с некоторых пор не доверяю LuCI. Предпологается что вы подключены к роутеру по ssh под рутом.

Первым делом устанавливаем udpxy:
opkg update
opkg install udpxy

После успешной установки проверим что udpxy запускается:
/usr/bin/udpxy

Эта команда выведет версию udpxy и ее основные опции. Кстати подробное описание все опций можно найти здесь.

Перейдем собственно к настройке. В папке /etc/init.d создаем файл udpxy:
cd /etc/init.d
vi udpxy

Этот файл — стартовый скрипт udpxy. Подробнее о стартовых скриптах OpenWrt можно узнать здесь.
Содержимое нашего файла будет примерно таким:
#!/bin/sh /etc/rc.common
# Copyright (C) 2010 OpenWrt.org

START=99
STOP=10

IGMP_OPTS="-a br-lan -m eth1 -p 8888 -M 600"
IGMP_BIN="/usr/bin/udpxy"
PID_F="/var/run/udpxy.pid"

start() {
        echo "Starting udpxy"
        start-stop-daemon -S -x $IGMP_BIN -p $PID_F -b -m -- $IGMP_OPTS
}

stop() {
        echo "Stopping udpxy"
        start-stop-daemon -K -x $IGMP_BIN -q
}

Для запуска службы используется start-stop-daemon — утилита для контроля запуска и остановки системных служб. В IGMP_BIN указываем что и откуда запускать, PID_F — куда записать PID что бы в последствии за ним можно было следить, IGMP_OPTS — настройки запускаемой службы.

Прежде чем указывать настройки, советую попробовать запустить udpxy с этими настройками, и только после этого переносить их в конфиг, это поможет вам не стать жертвой опечатки, и возможно сэкономит немного времени.

После того как все настройки завершены, закрываем файл udpxy и запускаем сервис командой
/etc/init.d/udpxy start

Проверить запустилась ли udpxy можно при помощи команды
ps |grep udpxy

Если вы видите в результате только одну строку, возвращайтесь к настройкам и проверяйте что вы сделали не так. В случае если все верно, должно получиться что то вроде
 1637 root       804 S    /usr/bin/udpxy -a br-lan -m eth1 -p 8888 -M 600 
29984 root      1372 S    grep udpxy 

Так же можно открыть в браузере страничку http://192.168.1.1:8888/status для проверки что udpxy работает.
Теперь можно прописать наш стартовый скрипт в автозагрузку. Для этого достаточно выполнить команду:
/etc/init.d/udpxy enable

после этого в папке /etc/rc.d должна появиться символическая ссылка вида S99udpxy. Проверить добавился ли скрипт в автозагрузку можно так же командой
/etc/init.d/udpxy enabled && echo «enabled»

если все нормально вы получите в ответ «enabled».

Дело осталось за малым — создать правила для udp трафика:
config rule
        option src      wan
        option proto    igmp
        option target   ACCEPT
config rule
        option src      wan
        option proto    udp
        option dest_ip  224.0.0.0/4
        option target   ACCEPT

Эти правила необходимо добавить в /etc/config/firewall, и после этого перезапустить службу командой:
/etc/init.d/firewall restart

Так же можно перезагрузить и сам роутер, что бы убедиться что все необходимые службы запускаются, ивсе рабтает именно так как мы задумали.
Теперь берем список каналов у провайдера, и все ссылки преобразуем так как описано в мануале к udpxy:
http://{address}:{port}/{protocol}/{channel_addr}:{channel_port}

то есть если у вас в списке каналов указано
rtp://@111.22.33.44:1234
то на выходе должно получиться
http://192.168.1.1:8888/udp/111.22.33.44:1234


После этого открываем список каналов любым подходящим проигрывателем и наслаждаемся.
Tags:
Hubs:
Total votes 38: ↑30 and ↓8+22
Comments65

Articles