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

*nix*
Хотя я практически не смотрю телевизор, иногда появляется непреодолимое желание посмотреть что сейчас вещают в новостях. Часто это желание возникает когда дочка спит, и телевизор уже вне зоны доступа. Как вы понимаете выход один — 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


После этого открываем список каналов любым подходящим проигрывателем и наслаждаемся.
+22
23 февраля 2012, 01:04
117

комментарии (60)

–3
AccessForbidden #
Извините, но ничего нового. О udpxy уже писалось много раз.
+1
Silver_Clash #
Если действительно много раз, дайте ссылку. Когда я первый раз настраивал udpxy пришлось потратить несколько часов на изучение вики OpenWrt и подобных материалов.
В любом случае теперь у меня есть небольшой мануал, по которому сделать это можно намного быстрее.
0
kay #
Вам повезло. Мне года два назад пришлось еще узнавать все диапазоны адресов, с которых вещаются каналы и прочая техническая информация при помощи tcpdump и прописывать под них статические маршруты, т.к. интернет через pppoe
–4
AccessForbidden #
habrahabr.ru/search/?q=udpxy&target_type=posts
Только не говорите что там нет ничего про OpenWRT, ибо уникальность установки на openwrt заключается только в opkg.
0
Silver_Clash #
К сожалению ни в одним из этих топиков не указаны ВСЕ необходимые действия для настройки IPTV, зачастую все ограничено стартовым скриптом, и даже не указано как настроить фаервол. Да и стартовые скрипты там реализованы не самым лучшим образом.
–3
AccessForbidden #
Вы меня конечно снова простите, но вроде habr это не howtoforge.
Принцип работы и все необходимые команды были много раз описаны. А Openwrt, dd-wrt, linux box — уже не важно, меняется только интерфейс на котором слушать, как установить пакет и т.д.
Я к тому что если каждый человек будет писать о настройки на свое_дистрибутиве — мы с вами все дружно охренеем. Потому что как раз пакетным менеджером, настойкой firewall и стартовыми скриптами они будут отличаться.
0
Silver_Clash #
В начале топика я сразу указал, что эта процедура весьма проста, тем не менее, если бы я в свое время нашел подобный топик, я бы сэкономил пару бессонных ночей. Думаю этого вполне достаточно, что бы расписать все в подробностях. Часто новичкам не хватает простого конкретного примера с соответствующими комментариями.
–2
AccessForbidden #
Да и для этого существует многочисленные форумы и, о боже, wiki.openwrt.org/doc/howto/udp_multicast

Так может проясните: Вы убили пару бессонных ночей на то чтобы сделать opkg install udpxy? Ибо остальное описано на сайте openwrt и выдается первым в гугле по запросу openwrt udpxy howto.
P.S Прежде чем меня минусовать — ознакомьтесь с правилами данного сайта, разде про копипаст.
0
Silver_Clash #
Во-первых, я вас не минусую.
Во-вторых, может перестанете говорить загадками? Что именно в моем топике не соответствует правилам данного сайта?
–5
AccessForbidden #
Перестаньте отвечать на мои вопросы своими. 1й пункт правил — копипаст с других сайтов.
Что уникального и нового в Вашей статье по сравнению wiki.openwrt? Вы можете пояснить на что Вы убили апру бессоных ночей?
+2
Kukunin #
А мне помогло. Спасибо!
+1
akv #
Да и мне помогло. Спасибо огромное!
+1
veter #
А почему для просмотра IPTV вообще нужны какие-то особые настройки?
Я не слишком хорошо разбираюсь в вопросе, но сейчас у меня бюджетный Trendnet, до этого был опять-таки бюджетный Asus и на дефолтных прошивках все работало без дополнительных движений.
Мне стало интересно, что я упускаю?
0
Silver_Clash #
Думаю вся разница в наличии/отсутствии udpxy, преобразующая трафик udp->http
0
korjik #
Тёплое с мягким не путать. UDP -> TCP.
0
Tishka17 #
а зачем это нужно? vlc прекрасно умеет играть и rtp и мультикасты и вообще.
+1
anycolor #
потому что вы можете сидеть за роутером, который не пропускает мультикаст и на своем VLC вы получите болт с правой резьбой.
0
Tishka17 #
openwrt разве не позволяет настроить мультикасты?
0
anycolor #
не имею компетенции в данном вопросе.
0
kastigar #
Можно с помощью igmp-proxy. Но с таким вариантом есть траблы с вайфай. Как минимум на ddwrt так было, но насколько помню, это связано не с прошивкой, а с устройством multicast
0
Tishka17 #
хм. ну да, верно. По крайней мере на заводской прошивке многие девайсы через вайфай не тянули. И в любом случае нужен 802.11n для этого
0
sky_lord #
На банальном копеечном D-Link DIR-320 в прошивке Tomato можно установить ограничение на мультикаст по WiFi и тогда он не будет его забивать. Собственно, на любых Tomato должно быть так…
0
kastigar #
да, и под ddwrt и openwrt есть разные способы не забивать wi-fi, или вообще стримать только на необходимый ethernet порт. Но у меня htpc подключён к сети по wi-fi. Да и вообще мало ли возникает необходимость смотреть IPTV по wi-fi. udpxy прекрасно решает эту проблему, можно спокойно смотреть по буку и htpc одновременно.
0
sky_lord #
Гм. Так может быть не нужно искать костыли, а настроить роутер, чтобы он нормально работал с мультикастом? Зачем вам вообще OpenWRT, если не секрет и чем стандартная прошивка (которая, судя по всему, IGMP proxy умеет вполне) не устраивает? И, опять-таки, если все же не устраивает, но почему ставили именно OpenWRT, а не ту, которая нормально работает с мультикастом? DD-WRT небось встанет. Да и судя по Гуглу сборки Tomato имеются…
0
anycolor #
многие роутеры даже при активации IGMP не дают нормального качества, изображение рассыпается.

Например мой роутер DI-524 (его нельзя прошить ни DD-WRT, ни OpenWRT), в нем есть настройка для IGMP, но она ничем не спасает. То есть часть пакетов просто теряется и картинка плывет.

Но это чисто мой пример из жизни.
0
sky_lord #
Вы извините, но вы как-то все в кучу сваливаете. :-) На вашем di-524 нельзя сменить прошивку (еще бы! На таких скудных ресурсах только пропиетарные специализированные системы могут работать! Линуксу слабо… Не помню правда сходу, что именно конкретно на di-524 стоит...), а значит у вас и выбора нет — тот же udp proxy вы поставить все равно не сможете. :-)
А у автора выбор есть. При этом нигде в статье не говорится (возможно, я плохо смотрел?), что ему надо передавать IPTV по WiFi. Если надо, то действительно, udp proxy хоть как-то оправдан (хотя, например, на IPTV приставку через него все равно ничего не заведешь), но если не надо — то это реально конкретные костыли.
0
Silver_Clash #
только по wifi и надо :)
0
Silver_Clash #
По поводу tomato vs dd-wrt vs OpenWrt — на мое устройство OpenWrt это единственный стабильный вариант.
0
sky_lord #
А чем именно Томато не понравилась? Я сколько все эти прошивки смотрел — с точки зрения адекватности работы (а не предоставления пользователю возможности «поковыряться») именно Томато больше всех понравилась. Все эти *WRT — монстры какие-то страшные-ужасные…
0
Silver_Clash #
Для моего устройства tomato есть только в альфе на данный момент. Да и с *WRT монстрами я раньше имел дело на других роутерах.
0
anycolor #
Действительно, прошивку сменить нельзя, памяти там мало.

Роутеры в основном покупать ради модуля Wi-Fi, ради мобильности, плюс сегодня много поэтому конечно я думаю именно поэтому речь именно об IPTV over Wi-Fi.
0
Silver_Clash #
Потому что на 802.11g мультикаст не очень подходит.
0
sky_lord #
1) Вы бы об этом в статье все-таки написали почетче и по конкретней. Из серии: «Мне нужно смотреть IPTV через WiFi, картинка рассыпалась на „квадраты“, поэтому я решил настроить udp-proxy и вот мой рассказ об этом.» :-) Потому что, как я уже сказал, это все-таки костыли и не айс…

2) Из характеристик вашего роутера на Яндекс.Маркете:
«Стандарт беспроводной связи — 802.11n, частота 2.4 / 5 ГГц, возможность одновременной работы
Макс. скорость беспроводного соединения — 300 Мбит/с»
:-)
Да, я понимаю, что судя по всему у вашего ноутбука только 802.11g, но USB-адаптеры 802.11n стоят где-то в районе 600-700 рублей. И не нужны были бы все эти телодвижения и сложности, а также не потребовалось бы переделывать плейлист под udp-proxy. :-)
0
Silver_Clash #
1. Цель топика ответить на вопрос «Как?» а не «Почему?». К тому же по-моему это вовсе не костыли.

2. Роутер замечательный, и без проблем передаст мультикаст по wifi и не подавится. Но из трех моих ноутбуков пока только один оборудован нормальной сетевушкой — intel 5300 AGN. А один из ноутов поддерживает только 802.11g и на нем, при использовании мультикаста картинка сразу рассыпается.
0
sky_lord #
Ох, ну хорошо, убедили. :-) Но я вам серьезно советую — добавьте в начале топика абзац на тему WiFi. Потому что все эти предъявы в комментах именно из-за этого — было бы про WiFi написано, я бы только промолчал и не лез. :-)
0
Silver_Clash #
Есть кстати еще один аргумент, правда сомнительный :)
На полке пылится HTPC с установленным XBMC. А XBMC не очень дружит с udp… Правда до HTPC у меня уже год как руки не доходят, а выкинуть жалко.

Аргументы по поводу костыльности все же хотелось бы услышать.
0
sky_lord #
Почему не очень? Сейчас быстренько глянул Гуглом — плугины соответствующие есть и народ работает. Правда с ТВ-программой тяжко, но XBMC вообще не особо для ТВ подходит, как я понимаю… А, например, для MythTV четкие гайды по настройке есть и все ОК.
Про костыльность написал ниже. Собственно, любые прокси — это костыли из-за отсутствия возможности что-то делать напрямую — на мой взгляд это достаточно очевидно…
0
Silver_Clash #
Кстати, вы часто называете udpxy костылем. Можно немного аргументировать вашу точку зрения?
0
sky_lord #
Во-первых, речь идет о самой сути технологий. IPTV — это вещание. Для организации вещания по IP-сетям стандартно предусмотрен протокол IGMP и технологии мультикаста. К сожалению, технические недостатки и несовершенство оборудования провайдеров и конечных пользователей зачастую вынуждают прибегать ко всяким ухищрениям и переделывать мультикаст в юникаст. Каждый раз когда это происходит, сетевики-ортодоксы плачут. :-)

Во-вторых, такой проксированный трафик не поймет подавляющее большинству IPTV-приставок к телевизору. А основной массе пользователей нужно именно это — IPTV на компьютерах смотрят только технически подкованные.
0
Silver_Clash #
Думаю последнее предложение как раз про читателей хабра.
0
sky_lord #
Это да! Но про WiFi вы все-таки в статью добавьте… :-)
0
sky_lord #
Да, и кстати — а вы мультикаст пробовали по WiFi смотреть перед тем как прокси ставить? SD-каналы зачастую вполне успешно по 802.11g ходят — там же всего лишь 4-6Мбит в пике, если вещание в Mpeg2. А если в h264, то и того меньше…
0
Silver_Clash #
Пробовали :)
0
sky_lord #
Ой, извините, по вашему комменту подумал, что вы топик-стартер. :-) Но вопросы в любом случае имеют смысл. :-)
0
anycolor #
да ничего :) Выше отписался, но это чисто в моем случае, довольно ограниченном.
0
NikoB #
А мне не помогло. Не описан проброс VLAN'ов. Так что поможет не всем. И название неправильное
0
AccessForbidden #
wiki.openwrt.org/doc/networking/network.interfaces
Помоему там все понятно и даже в картинках :)
0
usbmonkey #
Коллеги, а кто-нибудь пробовал заворачивать IPTV в dlna?
В свое время хотел организовать связку wl500gpv2 + dlna + samsung ue32d6510 + torrent daemon.
В общем, информации об такой связке мало, а осилить не смог и времени свободного было мало.
Надеюсь в будущем вернусь и доделаю :)
Если у кого-нибудь получилось, то я бы с радостью почитал.
А вспомнил, потому что без udpxy так никуда.

P.S. Как оказалось wl500gpv2 для всего этого слабоват и проседает уже под торрентокачалкой.
0
kastigar #
Промахнулся, вот мой ответ.
0
Frohman #
Делал так. Очень не удобно пользоваться. Схема была такая: iptv udp/rtp -> udpxy -> proxy dlna -> mediatomb. Сейчас iptv работает через udpxy+виджет на телике (ue32d6530). Делал по мануалу отсюда forum.ixbt.com/topic.cgi?id=62:19152
0
champ #
с помощью этой штуки можно попробовать (сам не пробовал): xupnpd
0
kastigar #
Как-то пытался сделать похожую схему. Только на тот момент у меня все файлы и dlna сервер были на компе. Использовал mediathomb (mt). Решил попробовать завернуть IPTV на телевизор через mt. Начитался, что mt умеет не просто файлы стримать но и пускать процессы и стримать результат (есть куча разных примеров транскодеров с ffmpeg). Решил сделать так же с IPTV — ffmpeg читает поток и транскодит его в понятный телевизору формат. Но так и не добился положительных результатов, телевизор просто отказывался это показывать, хотя сам транскодинг работал на ура. В итоге сейчас у меня неттоп c xbmc(всё таки самсунговская оболочка и рядом не стоит с xbmc), а IPTV транслируется через udpxy на роутере. Сейчас посмариваю в сторону LiveTV билда xbmc и tvheadend, но не уверен получится ли пустить tvheadend на роутере (на ddwrt не вышло, щас стоит openwrt, на нём ещё не пробовал).
P.S. кста, dlna по сути простой http, а udpxy транслирует по http. возможно получится завернуть IPTV с помощью udpxy, такую схему я не пробовал.
0
FSA #
Вообще, для просмотра IPTV не через Wifi вообще ничего делать не нужно. Я через udpxy смотрел раньше через WiFi, но, как оказалось, ADSL модем Sagemcom умудряется через 802.11n без преобразрований доставлять IPTV по WiFi! Не верите? Сам фшоке… :-D
И да. У меня вещание от Ростелекома. Адреса каналов вида udp://IP:PORT/
0
xRay #
посредством igmpproxy
0
sky_lord #
Гм. На самом деле, некоторые нормальные роутеры мультикаст и по 802.11g вполне прилично доставляют. HD смотреть не получается, а вот SD — вполне. Там поток-то копеечный — 4-6Мбит, не больше — а если h264, то и сильно меньше. Сейчас сходу не помню, но мне клиенты с полдесятка наименований называли протестированных у пользователей в реальных условиях.
0
xRay #
Есть два пути для использования IPTV находясь за роутером:
1. igmpproxy
2. udpxy (в этом топике описан)
3. прозрачный проброс порта от wan до порта с подключенной IPTV приставкой

Есть еще один затык когда нет прописанного маршрута для мультикаста.
Тогда добавляем этот статический маршрут

route add -net 224.0.0.0/4 dev eth1 metric 1

eth1 — это интерфейс на который wan порт прицеплен
0
svinuga #
А вот интересно можно ли на OpenWRT настроить DualWan с разными MAC адресами (роутер TP-LINK WR-1043ND с OpenWrt Backfire 10.03.1)? Провайдер РТК, инет оптика, IP-TV через приставку MAG-250, авторизация приставки по MAC, ей при этом выдается IP вида 10.x.x.x. без доступа к интернет. В роутере для ИП-ТВ 1 порт в бридже с WAN. Хочется сделать IP-TV приставку частью общей домашней сети, так как в последних прошивках появилась возможность использовать приставку в качестве медиа плеера читающего из сети по SMB и NFS с домашнего сервера, а так же возможность записи ТВ по расписанию, YouTube и так далее. В инете встречал настройки dualWAN только применительно к нескольким провайдерам для балансировки нагрузки.
0
DmitryO #
офтопик

Недавно переехал на Netgear WNDR-3800. Подскажите, у вас на OpenWRT какая скорость чтения с USB устройств? На крайних официальных прошивках от Netgear меньше 3 Mb/sec. Попробовал DD-WRT, но она пока сыровата…

За статью спасибо, вечером попробую.
0
Silver_Clash #
Чесно говоря даже не пробовал подключать что либо по USB :)
На выходных посмотрю.
0
Silver_Clash #
попробовал скопировать 100 метровый файлик с внешнего HDD. Средняя скорость получилась 2500 KiB/s (показания winscp).

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.