Мой провайдер добавил услугу — IPTV. Совершенно бесплатно 65 каналов. IPTV-каналы показываются в ПО от провайдера и только при условии прямого подключения кабеля к ПК или ноуту. Меня такой расклад не устраивал, т.к. у меня стоит WiFi-роутер D-Link DIR-615 rev.E4 и вся компьютерная техника (кроме телевизора) подключается к сети посредством WiFi.
Существует три варианта решения проблем пропускания multicast IPTV через роутер:
Вариант №1: Реализация раздачи IPTV по WiFi на родной прошивке
Вариант №2: Реализация раздачи IPTV по WiFi на прошивке DD-WRT
Вариант №3: Реализация раздачи IPTV по WiFi на прошивке DD-WRT при помощи UDPXY
В данном посте будет рассмотрен Вариант №3.
Данный вариант мне кажется более правильным, хотя более сложным, чем предыдущие 2.
Дело в том, что вещание IPTV идет через UDP-пакеты. Роутеру очень тяжко их обрабатывать и пересылать через WiFi, тем более что это multicast вещание. В результате после реализации предыдущих методов пропускания IPTV через DIR-615 E4 возникает проблема, что каналы «замирают» или картинка идет фрагментированная, иногда даже бывали случаи просто зависания или перезагрузки роутера.
UDPXY-это UDP-прокси сервер преобразующий UDP-трафик в TCP-трафик. TCP-трафик очень легко уже обрабатывается роутером и отправляется конечному клиенту, тем самым практически на тратя своих ресурсов (у IPTV поток обычно не более 2-5 Мбит/с).
Итак приступим:
1. Заходим в веб-интерфейс роутера с DD-WRT
2. Переходим в вкладку «Тех.обслуживание» -> «Команды»
3. В раздел «Параметры запуска» пишем следующее:
cd /tmp sleep 60 wget http://xkr446.hotbox.ru/udpxy chmod +x /tmp/udpxy /tmp/udpxy -p 4022 -M 30 -B 2Mb -a `nvram get lan_ipaddr`
Поясню: стр.1 — переходим во временную папку; стр.2 — пауза 60 сек; стр.3 — качаем udpxy для DIR-615 E4 (подходит вроде для многих роутеров на базе AR23***); стр.4. делаем файл udpxy — исполняемым; стр.5 запускаем udpxy ( -p 4022 — порт по которому можно подключаться к udpxy; -M 30 — периодически возобновлять подписку на мультикаст-канал [по умолчанию — 0 (секунд), т.е. не возобновлять] ; -B 2Mb — буфер в 2 Мб, но очень часто достаточно и 1Мб или даже меньше; -a `nvram get lan_ipaddr` — IP-адрес WAN-порта).
4. В разделе «Брандмауэр» пишем следующее:
iptables -I INPUT -i eth0 -p udp -d 239.255.0.0/24 --dport 1234 -j ACCEPT iptables -D INPUT -p igmp -j DROP
Поясню: стр.1 — добавляем правило для прием udp-пакетов IPTV-провайдера на интерфейсе WAN (их как раз будет перехватывать udpxy); стр.2 — удаляем правило в iptables, которое блокировало igmp-пакеты.
Также хотел-бы заметить, что правильную сеть (у меня это 239.255.0.0/24) порт вещания IPTV (1234) нужно заменить на свои, т.е. на ту подсеть и на те порты, на которых вещает ваш провайдер (подсмотреть можно в плэйлисте IPTV).
5. Сохраняем параметры запуска и брандмауэра и перезапускаем роутер.
6. Скачиваем плэйлист провайдера и редактируем его (н.р. блокнотом). Т.е. если раньше было так:
.... #EXTINF:0,Первый канал udp://@239.255.0.1:1234 ....
то должно быть вот так:
.... #EXTINF:0,Первый канал http://192.168.1.1:4022/udp/239.255.0.1:1234 ...
Все запускаем модифицированный плэйлист, н.р., при помощи VLC или прописываем путь до плэйлиста в вашем IPTV-плеере.
comments powered by HyperComments