Хотя я практически не смотрю телевизор, иногда появляется непреодолимое желание посмотреть что сейчас вещают в новостях. Часто это желание возникает когда дочка спит, и телевизор уже вне зоны доступа. Как вы понимаете выход один — 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:
После успешной установки проверим что udpxy запускается:
Эта команда выведет версию udpxy и ее основные опции. Кстати подробное описание все опций можно найти здесь.
Перейдем собственно к настройке. В папке /etc/init.d создаем файл udpxy:
Этот файл — стартовый скрипт udpxy. Подробнее о стартовых скриптах OpenWrt можно узнать здесь.
Содержимое нашего файла будет примерно таким:
Для запуска службы используется start-stop-daemon — утилита для контроля запуска и остановки системных служб. В IGMP_BIN указываем что и откуда запускать, PID_F — куда записать PID что бы в последствии за ним можно было следить, IGMP_OPTS — настройки запускаемой службы.
Прежде чем указывать настройки, советую попробовать запустить udpxy с этими настройками, и только после этого переносить их в конфиг, это поможет вам не стать жертвой опечатки, и возможно сэкономит немного времени.
После того как все настройки завершены, закрываем файл udpxy и запускаем сервис командой
Проверить запустилась ли udpxy можно при помощи команды
Если вы видите в результате только одну строку, возвращайтесь к настройкам и проверяйте что вы сделали не так. В случае если все верно, должно получиться что то вроде
Так же можно открыть в браузере страничку http://192.168.1.1:8888/status для проверки что udpxy работает.
Теперь можно прописать наш стартовый скрипт в автозагрузку. Для этого достаточно выполнить команду:
после этого в папке /etc/rc.d должна появиться символическая ссылка вида S99udpxy. Проверить добавился ли скрипт в автозагрузку можно так же командой
если все нормально вы получите в ответ «enabled».
Дело осталось за малым — создать правила для udp трафика:
Эти правила необходимо добавить в /etc/config/firewall, и после этого перезапустить службу командой:
Так же можно перезагрузить и сам роутер, что бы убедиться что все необходимые службы запускаются, ивсе рабтает именно так как мы задумали.
Теперь берем список каналов у провайдера, и все ссылки преобразуем так как описано в мануале к udpxy:
то есть если у вас в списке каналов указано
После этого открываем список каналов любым подходящим проигрывателем и наслаждаемся.
По счастливому стечению обстоятельств у меня подключен тарифный план с бесплатным пакетом 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
После этого открываем список каналов любым подходящим проигрывателем и наслаждаемся.