6. Настройка IPTV
- Cборка и установка igmpproxy
Программа igmpproxy нужна для проксирования IGMP-запросов из Вашей локальной сети в локальную сеть провайдера, а также "пробрасывания" входящих IPTV-потоков в вашу локальную сеть. Перейдем к делу - для начала скачаем исходники igmpproxy, соберем их и установим:
Далее нужно создать конфигурационный файл igmpproxy.# wget --content-disposition "http://downloads.sourceforge.net/project/igmpproxy/igmpproxy/0.1/igmpproxy-0.1.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Figmpproxy%2Ffiles%2F&ts=1307785094&use_mirror=mesh"# tar xzf igmpproxy-0.1.tar.gz# cd igmpproxy-0.1# ./configure --prefix=/usr# make# make install
Синтаксис данного файла ничуть не сложнее, чем те что мы создавали раньше. Вот пример:# nano /etc/igmpproxy.conf
quickleaveОписание параметров:
phyint eth1 upstream ratelimit 0 threshold 1altnet 192.168.0.0/16
phyint eth0 downstream ratelimit 0 threshold 1altnet 169.254.0.0/24
phyint ppp0 disabledphyint wlan0 disabled
quickleave - данную опцию следует оставить незакомментированной только в том случае, если предполагается, что в сети может быть только лишь один IPTV-клиент (хотя это не столь важно - просто если Вы оставите эту опцию включенной и два клиента будут смотреть один и тот же канал, а потом один из них переключится, у второго на несколько секунд оборвется трансляция того канала).
phyint eth1 upstream ... - интерфейс upstream, здесь нужно указывать сетевой интерфейс подключенный непосредственно к провайдеру. В нашем случае это eth1.
altnet 192.168.0.0/16 - здесь нужно указать IP либо подсеть IP-адресов с которых ведется вещание IPTV. Эти адреса нужно узнавать непосредственно у провайдера. Разрешается использовать несколько опций altnet с указанием разных подсетей.
phyint eth0 downstream ... - интерфейс downstream, здесь нужно указывать сетевой интерфейс, на котором будут прослушиваться входящие IGMP-запросы на подключение к multicast-группе (в нашем случае это eth0). Параметр altnet тут указывать необязательно, но лучше указать по причине того, что igmpproxy иногда коряво определяет подсеть заданного интерфейса (и потом банально не пропускает IPTV-потоки). Здесь мы указали 169.254.0.0/24 - подсеть, используемую на нашем сетевом интерфейсе (у Вас она может отличаться в зависимости от того, как Вы настраивали сеть в первичной настройке сети (Часть 1 данного руководства)).
phyint wlan0 disabled - указывает на disabled-интерфейсы, через которые не будет пропускаться multicast запросы (в данном случае это wlan0 и ppp0).
Сохраняем файл и пробуем для проверки запустить igmpproxy.
Если все работает как положено, можно смело выходить из igmpproxy с помощью Ctrl+C. Далее нужно внести igmpproxy в автозапуск системы. Сделать это можно 2 способами - создав скрипт в init.d либо просто внести команду в /etc/rc.local. Сделаем это вторым способом. Открываем /etc/rc.local и вписываем (перед "exit 0") следующее:
Сохраняем файл и пробуем для проверки запустить igmpproxy.
# igmpproxy -d /etc/igmpproxy.confПрограмма "повиснет" в консоли - это нормально (она не умеет переводить себя в режим демона самостоятельно). В данный момент нам это и нужно для проверки работоспособности IPTV в сети. Попробуйте запустить (НЕ через Wi-Fi) какой нибудь канал. Если канал не воспроизводится, следует обратить внимание на сообщения, которые скорее всего появятся в консоли. Чаще всего появляются сообщения типа "address x.x.x.x for group x.x.x.x is not in any of the valid upstream VIF". Формулировка сообщения может отличаться от этой (по памяти не могу уже вспомнить точно), но последние слова определенно такие же как и тут. Данная ошибка означает, что неверно прописаны (либо не дописаны) адреса вещания IPTV в параметре altnet у upstream-интерфейса. В этом случае нужно обратить внимание, какой IP идет после "address" - это и есть адрес вещания. Но для большей уверенности лучше все же проконсультироваться с провайдером.
Если все работает как положено, можно смело выходить из igmpproxy с помощью Ctrl+C. Далее нужно внести igmpproxy в автозапуск системы. Сделать это можно 2 способами - создав скрипт в init.d либо просто внести команду в /etc/rc.local. Сделаем это вторым способом. Открываем /etc/rc.local и вписываем (перед "exit 0") следующее:
/usr/sbin/igmpproxy /etc/igmpproxy.conf >/dev/null 2>/dev/null &Сохраняемся, выходим.
- Настройка udpxy
Настройка этой программы еще более проста, нежели предыдущих - потому что она осуществляется уже при запуске в командной строке. Для автозапуска программы при старте системы пропишем уже в знакомый /etc/rc.local строку:# wget --content-disposition "http://downloads.sourceforge.net/project/udpxy/udpxy/Chipmunk-1.0/udpxy.1.0-Chipmunk-19.tgz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fudpxy%2Ffiles%2Fudpxy%2FChipmunk-1.0%2F&ts=1307799837&use_mirror=ovh"# tar xzf udpxy*# cd udpxy*# make lean && make install
/usr/local/bin/udpxy -m eth1 -p 8055 -a wlan0
Параметр "-m" указывает на сетевой интерфейс подключенный к провайдеру (eth1), "-p" на порт прослушивания соединений (8055), "-a" на сетевой интерфейс на котором будут прослушиваться входящие соединения - wlan0 (последний можно не указывать - в этом случае при наличии "белого" IP можно будет получать доступ к вашему IPTV извне, но я все же рекомендую указывать этот параметр).
Сохраняем файл, выходим, перезагружаемся.
Проверить работоспособность прокси можно, попытавшись зайти в браузере по адресу http://x.x.x.x:8055/status где x.x.x.x - IP-адрес Wi-Fi интерфейса на сервере. Если все верно, Вы увидите простенькую страницу отображающую служебную информацию о прокси со списком подключенных в данный момент к ней клиентов. Ну и наконец самое главное, как все же смотреть IPTV по Wi-Fi с использованием udpxy? Вариантов решения тут 2 и каждый вправе выбрать тот, который ему больше по душе, а именно:
1) запустить на сервере HTTP-сервер с небольшим php-скриптом, который будет на лету получать плейлист IPTV от провайдера и на лету уже отдавать готовый сконвертированный плейлист в плеер - этот способ немного сложнее в реализации, но тогда Вы всегда будете использовать актуальный плейлист каналов.
2) скачать плейлист вручную и отредактировать его блокнотом заменив все определенные строки по шаблону на тот, который позволить использовать udpxy; после этого разумеется новый плейлист нужно будет сохранить. Этот способ намного проще, но в этом случае плейлист всегда будет таким, которым Вы его сохранили в последний раз.
Я рассмотрю первый способ так как он более сложный в реализации, но более эффективный.
Итак, нам понадобится HTTP-сервер и PHP. Для этого установим:
Я рассмотрю первый способ так как он более сложный в реализации, но более эффективный.
Итак, нам понадобится HTTP-сервер и PHP. Для этого установим:
# apt-get install apache2 php5 libapache2-mod-php5 php5-curlДалее создадим PHP-cкрипт следующего содержания (команда "nano /var/www/iptv.php"):
<?php
$url = 'http://'; // здесь в кавычках пропишите адрес m3u-плейлиста провайдера
$c = curl_init($url);
curl_setopt($c,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
curl_setopt($c,CURLOPT_RETURNTRANSFER,1);
$m3u = curl_exec($c);
curl_close($c);
$m3u = str_replace('udp://@','http://x.x.x.x:8055/udp/', $m3u); // здесь замените x.x.x.x на IP-адрес Wi-Fi интерфейса
header('Content-type: audio/x-mpegurl; charset=UTF-8');
echo $m3u;
?>Изменяем 2 строки, согласно комментариям после них. Сохраняем файл. Теперь можно смело заходить в плеер (например VLC) и использовать следующий адрес плейлиста - "http://x.x.x.x/iptv.php" (x.x.x.x заменить на адрес Wi-Fi интерфейса).









Комментариев нет:
Отправить комментарий