Началось все с того, что сеть начала расти и нужно было предоставлять пользователям ресурсы, кроме как доступ в интернет. Так как, наша компания кроме предоставления услуг доступа в интернет, занимается еще кабельным аналоговым и цифровым телевидением, то было решено организовать вещание телевидения в IP-сеть.
Итак,
Дано:
В качестве источника потока использовались спутниковые ресиверы
DCH-4000P китайской фирмы
PBI.
Так как, один такой ресивер позволяет получать на выходе только 6 мультикастовых каналов, купили
IP Streamer IPS-01 одесской фирмы
Спец-ТВ. Поэтому, поток будем брать не через IP, а с ASI выхода.
У него 6 ASI входов, на которые мы будем подавать потоки с шести ресиверов
PBI. Так как выходной порт у стримера гигабитный и в потоке находятся все наши каналы, нужно было сделать так, чтобы к клиенту на сетевой интерфейс попадали не все 60 каналов, и занимали всю пропускную способность сети (поток около 300Мбит/с), а только тот канал, который он запросит. В принципе можно было реализовать такую функцию на коммутаторах D-Link, но знакомые твердили что D-Link-и плохо себя показывают в качестве querier'ов. Вообщем было решено купить управляемый L2 коммутатор
FoxGate S-6224-S2.
Передавать абонентам будем через коммутатор
D-Link DES-3526.
Схема коммутации следующая, нарисована на скорую руку:
Итак, приступим к настройке.
Настройка ресиверов сводится к обычной настройке спутникового ресивера, а настройка стримера к щелканью в браузере по каналам и присвоению каждому мультикастового адреса вида
239.255.х.х. Поэтому на настройке данного оборудования я останавливаться не буду.
Начнем с конфига
querier'а Foxgate S6224-S2, IP-адрес нашего коммутатора
10.0.0.10:
1. Создаем отдельный
vlan:
vlan 229
2. Включаем контроль мультикаст-потока:
multicast destination-control
3. Настраиваем порты:
Interface Ethernet0/0/2
switchport access vlan 229
...
...
...
!
Interface Ethernet0/0/24
switchport access vlan 229
4. 25 порт смотрит в сторону стримера, а 26 в сторону коммутатора, поэтому 26 порт делаем транковым:
Interface Ethernet0/0/25
switchport access vlan 229
!
Interface Ethernet0/0/26
switchport mode trunk
5. Включаем
igmp snooping и говорим, что наш
vlan является мультикастовым:
ip igmp snooping
ip igmp snooping vlan 229
6. Включаем функцию
querier'а и говорим, что источником является сам коммутатор:
ip igmp snooping vlan 229 l2-general-querier
ip igmp snooping vlan 229 l2-general-querier-source 10.0.0.10
Все, на этом настройка
querier'а завершена.
Перейдем к D-Link'у (25-26 порты в качестве аплинка):
1. Включаем
igmp snooping и говорим, что наш
vlan 229 является мультикастовым:
enable igmp_snooping
create igmp_snooping multicast_vlan multicast 229
2. Говорим, что абонентские порты 1-24, а в качестве источника используем 25 и 26:
config igmp_snooping multicast_vlan multicast state enable replace_source_ip 0.0.0.0 member_port 1-24 source_port 25-26
3. Данная опция нужна, чтобы мультикаст не шел на все порты подряд:
config igmp_snooping multicast host_timeout 260 router_timeout 260 leave_timer 2 state enable
config igmp_snooping querier multicast query_interval 125 max_response_time 10 robustness_variable 2
config igmp_snooping querier multicast last_member_query_interval 1 state disable
4. Выключаем фильтеринг на магистральных портах (на всякий случай):
config limited_multicast_addr ports 25-26 access deny state disable
5. Запрещаем клиентам вещать свои каналы, вернее просто никто не сможет их смотреть:
config multicast port_filtering_mode 1-24 filter_unregistered_groups
config multicast port_filtering_mode 25-26 forward_unregistered_groups
На данном этапе настройка коммутатора завершена.
Создаем плейлист
channels.m3u со следующим содержанием:
#EXTM3U
#EXTINF:0,РТР-Планета
udp://@239.255.1.1:1234
#EXTINF:0,НТВ-Мир
udp://@239.255.1.2:1234
#EXTINF:0,ТНТ
udp://@239.255.1.3:1234
#EXTINF:0,СТС-Москва
udp://@239.255.1.4:1234
#EXTINF:0,Премьера
udp://@239.255.1.5:1234
.
.
.
#EXTINF:0,Дом Кино
udp://@239.255.1.60:1234
Открываем его например
vlc и наслаждаемся просмотром.
Позже я столкнулся с проблемой, у меня дома стоит сервер с
Ubuntu на борту и внешним IP-адресом + точка доступа, который используется в качестве роутера для домашней сети, и встал вопрос о том, как собственно смотреть IPTV. Решение нашлось быстро с помощью
igmproxy, однако разочарование не долго заставило себя ждать. Картинка рассыпалась, а про просмотр через
wi-fi вообще можно было не мечтать, т.к. поток мультикаста перегружал мою 54Мбит/с точку доступа. Погуглив стало понятно, что будет лучше поток преобразовывать из
UDP в
HTTP. Это можно осуществить с помощью программы
udpxy.
Устанавливаем ее и создаем стартовый скрипт:
#!/bin/sh
if [ -n "`pidof udpxy`" ] ;then
/usr/bin/killall udpxy > /dev/null 2>&1
fi
/usr/local/bin/udpxy -a eth0 -m eth1 -p 8888
#eth0 - смотрит в локальную сеть
#eth1 - в сторону провайдера
#8888 - порт на котором будет идти трансляция, можно выбрать любой свободный
Осталось положить наш скрипт в
/etc/init.d/.
Запускаем:
/usr/local/bin/udpxy -a eth0 -m eth1 -p 8888
Проверим:
zeleniy@promeline:~$ ps ax | grep udp
1970 ? S 0:00 /usr/local/bin/udpxy -a eth0 -m eth1 -p 8888
15231 pts/0 D+ 0:00 grep --color=auto udp
Статистика доступна по адресу:
http://172.16.0.1:8888/status
Серверная часть готова. Чтобы клиенты смогли смотреть нашу трансляцию необходимо создать плейлист следующего содержания:
#EXTM3U
#EXTINF:0,RTR-PLANETA
http://172.16.0.1:8888/udp/239.255.1.1:1234
#EXTINF:0,DOM KINO
http://172.16.0.1:8888/udp/239.255.1.2:1234
#EXTINF:0,TVCI
http://172.16.0.1:8888/udp/239.255.1.3:1234
#EXTINF:0,BIBIGON
http://172.16.0.1:8888/udp/239.255.1.4:1234
#EXTINF:0,RBK-TV
http://172.16.0.1:8888/udp/239.255.1.5:1234
Теперь даже по
wi-fi можно с комфортом посмотреть любимые передачи.
Источник статьи