В сетях Интранет уже давно внедрен и успешно применяется сервис VoIP, позволивший организовать голосовую связь без значительных материальных затрат. В свою очередь, увеличение пропускной способности канала влечет за собой появление новых сервисов, способных существенно изменить представление о современной IP-сети. Сейчас есть возможность получать сервисы файлообмена (подразумевается внутри сети), Интернет, телефонию и телевидение по одному кабелю. В итоге, подобные решения позволяют сэкономить на кабельной инфраструктуре и ее обслуживании, позволяют повысить качество предлагаемых услуг.
Что может уже сейчас предоставить современная IP-сеть?
- доступ в сеть Интернет
- обмен файлами (p2p)
- услуга IP-телефонии
- телеконференции
- теле и радиовещание
- видеонаблюдение
Эволюция традиционных сетей привела к появлению так называемых "мультисервисных сетей". В нынешних корпоративных сетях разного масшатаба присутствует трафик, который условно можно разделить на четыре категории:
- потоковое видео, аудио;
- видеоконференции и голосовая связь;
- обычные данные;
- служебные данные необходимых сервисов (DHCP, DNS и т.д.).
Существует три способа доставки потокового видео:
- Unicast (передача данных от одного источника к одному потребителю);
- Broadcast (передача данных всей сети, пакеты будут передаваться каждому клиенту);
- Multicast (передача данных от одного источника группе получателей, клиент может принять решение об участии в получении данных или об отказе);
- Выявить и изолировать или ограничить уровень мультикаст трафика в сегменты с низкой пропускной способностью, если таковые имеются.
- Постараться максимально оптимизировать маршруты движения мультикаст трафика.
- Настроить оборудование с поддержкой IGMP, IGMP-snooping, PIM (для маршрутизации мультикаст трафика). Хорошо если все оборудование в сети поддерживает IGMP (IGMP-snooping). Для большой сети желательно иметь централизованную систему мониторинга сетевого оборудования, для быстрого обнаружения возникающих проблем.
Схема сети
Сервис ТРВ создавался на базе сети, упрощенная схема которой представлена на рис. 1.
Серверная часть
Сервер вещания генерирует около 10 мультикаст потоков 3-4 Мбит/с каждый. Вещание происходит по протоколу UDP. Потоки представляют собой MPEG-2 телеканалы, принимаемые со спутника.
Оговорюсь сразу, что наш сервер видеовещания не был и не будет предназначен для промышленного (понимать коммерческого) использования, для которого существует множество аппаратных, масштабируемых и надежных решений. В таких решениях используются профессиональные аппаратные ресиверы, кодеры, декодеры, мультиплексоры, платформы для вещания. Наш же сервер реализован с использованием программного решения.
Мы остановились на небезызвестном Open Source продукте - Video Lan Client (VLC) [4]. В качестве операционной системы выбрана Debian/GNU Linux. VLC и Linux - это отличная платформа для тестирования и настройки всей сети перед внедрением коммерческого вещания. Данную платформу можно использовать как недорогое решение видеовещания для локальных сетей. Цена решения складывается из стоимости DVB-S тюнеров и сервера видеовещания, в который тюнеры будут установлены.
В качестве DVB-S тюнера было принято решение установить 3 карты SkyStar2 [5]. Причина, по которой была выбрана именно эта карта - большое количество различных программных решений под нее, как под Linux, так и под Windows. Так выглядит запуск VLC с необходимыми нам параметрами.
vlc --ts-es-id-pid --programs=16,17,18,65,75 dvb:В данной строке мы указываем номера каналов (programs), номер тюнера (dvb-adapter), параметры транспондера (dvb-frequency, dvb-srate) и указываем адрес назначения (dst). В качестве адреса назначения используются мультикаст адреса, выбираемые из диапазона 224.0.0.0 – 239.255.255.255. Исключение при выборе составляют следующие адреса:
--dvb-adapter=0 --dvb-frequency=12207000 --dvb-s
rate=27500000 --dvb-voltage=18 –sout-standard-access=udp
--udp-caching=600 --sout-standard-mux=ts --sout '
#duplicate{dst=std{dst=230.1.1.1},select="program=8201",
dst=std{dst=230.1.1.2},select="program=8204",
dst=std{dst=230.1.1.3},select="program=8208",
dst=std{dst=230.1.1.4},select="program=8211",
dst=std{dst=230.1.1.6},select="program=8202",
dst=std{dst=230.1.1.7},select="program=8203",
scodes=dvbs}' -d;
- 224.0.0.1 – все узлы в данной сети; 224.0.0.2 – все маршрутизаторы в данной сети;
- 224.0.0.5 – все OSPF-маршрутизаторы; 224.0.0.6 – выделенные OSPF-маршрутизаторы;
- 224.0.0.9 – маршрутизаторы RIP-2; 224.0.0.10 – IGRP-маршрутизаторы;
- 224.0.1.1 – получатели информации по протоколу точного времени NTP.
#! /bin/shВ ходе эксплуатации выявилась аппаратная проблема у карты SkyStar2 (либо же "кривая" реализация драйверов). Проблема такова, что при пропадании сигнала, причиной чего могут быть различные атмосферные явления, уровень сигнала не всегда восстанавливается, и как следствие, поток с DVB-S карты SkyStar2 отсутствует. Дело в том, что данная карта не рассчитывалась для интенсивной бесперебойной работы, а является лишь бюджетным любительским вариантом спутникового тюнера.
set -e
case "$1" in
start)
/sbin/modprobe dvb-core dvb_shutdown_timeout=0
/sbin/modprobe skystar2
/sbin/modprobe stv0299
;;
stop)
/sbin/modprobe -r skystar2
/sbin/modprobe -r stv0299
/sbin/modprobe -r dvb-core
;;
*)
echo "Usage: /etc/init.d/dvb {start|stop}"
exit 1
esac
exit 0
Алгоритм решения проблемы следующий:
- Завершение приложений использующих DVB-S карту SkyStar2.
- Перезапуск драйвера DVB-S карты SkyStar2 (в этот момент карта инициализируется).
- Повторный запуск приложений (конкретно VLC).
Значение исходящего потока (переменная thread) получено экспериментально на основе мониторинга сетевого интерфейса. Как только значение потока становится ниже заданного порога, выполняются действия описанные выше.
Как видно из кода скрипта информация о перезапусках сервиса пишется в файл /var/log/dvb/restartlog0, где можно точно посмотреть когда происходил перезапуск сервиса и составить диаграмму стабильности (нестабильности) работы сервиса. По данной диаграмме можно легко выяснить причину падения уровня сигнала. Причиной может послужить например загораживание вашей антенны каким-либо объектом или же неблагоприятные для приема атмосферные условия). Для повышения стабильности сервиса нужно повысить уровень принимаемого сигнала, чтобы даже при значительных изменениях в атмосфере уровень сигнала оставался в норме. Решение сводится к выбору большей по диаметру спутниковой антенны, качественного конвертера и кабеля от конвертера к картам SkyStar2. Другое решение - использовать другой, возможно, более дорогой, спутниковый тюнер. Характеристики самого сервера следующие: P-IV 1.6ГГц, RAM DDR 1Гб, HDD - 40Гб. Так как в нашем случае VLC не перекодирует принимаемый поток, то соответственно загрузка процессора не должна быть высокой. Значение не превышает 30%, а в среднем составляет 15 - 20 %. На этом реализация серверной части заканчивается.#! /bin/sh
while [ 0 ] ; do
thread=$(tcpstat -o '%B' -F -s 7 | awk -F. '{print($1)}';
sig0=`dvbsnoop -n 1 -timeout 10 -s signal -adapter 0
| tail -n 1 | awk -F\ '{printf $7}'`;sig1=`dvbsnoop -n 1 -timeout 10 -s signal -adapter 1
| tail -n 1 | awk -F\ '{printf $7}'`;sig2=`dvbsnoop -n 1 -timeout 10 -s signal -adapter 2
| tail -n 1 | awk -F\ '{printf $7}'`;echo $sig0 $sig1 $sig2 $thread >> /usr/dvb/log
if [ $thread -lt 3300000 ] ; then
echo $thread
echo "Завершаем все процессы VLC"
killall -9 vlc;
echo "Выгружаем DVB-S модули"
/etc/init.d/dvb stop
echo "Запускаем DVB-S модули"
/sbin/modprobe dvb-core dvb_shutdown_timeout=0
/sbin/modprobe skystar2
/sbin/modprobe stv0299
echo "Запускаем VLC с новыми DVB-S модулями"
vlc --ts-es-id-pid --programs=16,17,18,65,75 dvb:
--dvb-adapter=0 --dvb-frequency=12207000 –dvb-s
rate=27500000 --dvb-voltage=18 --sout-standard-access=udp
--udp-caching=600 --sout-standard-mux=ts
–sout '#duplicate{dst=std{dst=230.1.3.1},
select="program=16",dst=std{dst=230.1.3.2},
select="program=17",dst=std{dst=230.1.3.3},
select="program=18",dst=std{dst=230.1.3.4},
select="program=65",dst=std{dst=230.1.3.5},
select="program=75",sap,name="Radio_Music_Box",
scodec=dvbs}' -dpidof vlc > vlcpid0
vlc --ts-es-id-pid –programs=8201,8204,8208,8211,8202,8203
dvb: --dvb-adapter=1 --dvb-frequency=12597000
--dvb-srate=27500000 --dvb-voltage=13
--sout-standard-access=udp --udp-caching=600
--sout-standard-mux=ts –sout '#duplicate{
dst=std{dst=230.1.1.1},select="program=8201",
dst=std{dst=230.1.1.2},select="program=8204",
dst=std{dst=230.1.1.3},select="program=8208",
dst=std{dst=230.1.1.4},select="program=8211",
dst=std{dst=230.1.1.6},select="program=8202",
dst=std{dst=230.1.1.7},select="program=8203",
scodes=dvbs}' -d;pidof vlc > vlcpid1;
vlc --ts-es-id-pid --programs=525 dvb: --dvb-adapter=2
--dvb-frequency=12692000 –dvb-srate=27500000 –dvb-voltage=13
--sout-standard-access=udp --udp-caching=600
--sout-standard-mux=ts --sout '#duplicate{dst=std{
dst={230.1.2.1},select="program=525"}' -d;pidof vlc > vlcpid2;
sleep 14
echo `date +%d.%m.%Y"-"%k:%M:%S`
SignalLevel[0,1,2,eth1]: $sig0 $sig1 $sig2 $thread >> /var/log/dvb/restartlog0
echo $thread – "Значение потока в норме"
fi
done
Клиентская часть
Смотреть телеканалы можно как с помощью компьютера, так и на обычном телевизоре через STB (Set Top Box).
Рассмотрим первый вариант - просмотр видео на компьютере. Здесь можно выбрать один из трех способов.
1 способ. Для просмотра телеканалов можно воспользоваться все тем же самым VLС плеером (см. рис. 2).
Составляем плейлист из мультикаст адресов потоков с названиями каналов и выбирая элементы плейлиста смотрим. Тут никаких хитростей. Не забываем выбрать Deinterlace, чтобы убрать эффект гребенки.
Так выглядит плейлист VLC в текстовом виде.
#EXTINF:0,EuroNews
udp://@230.1.1.4
#EXTINF:0,BBC
udp://@230.1.1.2
#EXTINF:0,1Kanal
udp://@230.1.1.3
.........
2 способ. Также для просмотра можно использовать и Windows Media Player (WMP). Но как всегда с продуктами компании Microsoft возникают сложности. Для начала нужно установить Elecard [6] кодек, он коммерческий и в качестве триал версии его можно использовать 21 день. Далее установить программу UdpFilters [7], которая собственно и заставляет WMP смотреть наши каналы. Ссылка на канал по адресу udp://230.1.1.1:1234 выглядит в WMP таким образом "elecard://230.1.1.1:1234/udp". Составляем плейлист и смотрим (стрелки тегов изменены нарошно).
>?wpl version="1.0"?<3 способ. Можно смотреть и при помощи браузера. Для этого, устанавливая VLC, необходимо установить ActiveX и Mozilla плагин. Поднимаем веб-сервер, а если он имеется, то размещаем на нем php скрипт, находящийся по адресу [8]. Скрипт был немного изменен: добавлены ссылки на каналы (справа от видеоэкрана на рис. 3), установлен по-умолчанию режим деинтерлейсинга blend, удалена излишняя для просмотра вещаемых каналов функциональность. Скрипт автоматически определяет браузер и поэтому в Internet Explorer будет использоваться ActiveX, а в Mozilla Firefox - Mozilla плагин.
>smil<
>head<
>meta name="Generator" content=
"Microsoft Windows Media Player --10.0.0.4036"/<
>title<>/title<
>/head<
>body<
>seq<
>media src="elecard://230.1.1.1:1234/udp >>
Sport Planeta"/<
>media src="elecard://230.1.1.2:1234/udp >> BBC"/<
>media src="elecard://230.1.1.3:1234/udp >> 1 Kanal"/<
>media src="elecard://230.1.1.4:1234/udp >> EuroNews"/<
... ... ...
>/seq<
>/body<
>/smil<
Оба плагина поддерживают регулировку громкости и полноэкранный режим (веб-интерфейс представлен ниже). Данное решение является не только межпрограммным, но и межплатформенным, так как установить Mozilla и VLC с плагином можно на большинстве современных операционных систем (см. рис. 3).
К сожалению, при просмотре через WMP + Elecard обнаружилось, что некоторые каналы начинают откровенно "тормозить" при частом переключении с канала на канал, по той же причине WMP часто зависает. Разницы в качестве картинки между использованием коммерческого кодека Elecard и кодека VLC не заметно, что весьма удивительно (возможно что-то не так в настройках). На некоторых каналах VLC выигрывает в качестве. По функциональности, если нет задачи записывать видео или «играться» с деинтерлейсингом (хотя никто не мешает добавить эту возможность в веб-интерфейс), то, без сомнений, веб-интерфейс гораздо удобнее. Подавляющее большинство пользователей в нашей сети использует именно веб-интерфейс.
А теперь можно перейти и ко второму варианту просмотра телеканалов.
Вариант второй заключается в просмотре телеканалов на телевизионном приемнике (телевизоре :-) ) с использованием STB-приставки. STB представляет собой небольшое устройство с сетевым интерфейсом и обычно с несколькими видеовыходами.
В качестве образца была взята STB-приставка AmiNet 110 (см. рис. 4) [9].
Изображение, получаемое с приставки, не уступает по качеству тому, что выдает DVD-проигрыватель. Просмотр телеканалов на телевизоре считаю самым удобным. Намного удобнее щелкать кнопки пульта сидя в кресле или на диване, нежели щелкать мышкой сидя перед экраном компьютера.
Развитие сервиса
Сервис может получить развитие в виде новых источников:
- каналы традиционного аналогового вещания;
- веб-камеры;
- создание своего видеоканала (например вещание видеозаписей или частной фильмотеки);
- реализация сервиса VoD (Video on Demand).
Заключение
Сервис ТРВ добавил функциональность в существующую инфраструктуру нашей сети, а также помог определить процент пользователей интересующихся данным видом сервиса, что может быть важно перед внедрением коммерческого вещания.
При всем при этом, на данный момент, он существенно не повлиял на ухудшение работы других сервисов сети.
Не стоит забывать о том, что требуется проводить контроль задержки, уровней ошибки и потери пакетов, джиттера, в условиях мультикаст трафика разной интенсивности и при выполнении на конечных узлах реально используемых сетевых приложений в рамках обычных (нескольких типовых) сценариев работы пользователей.
Отмечу, что за рамками данной статьи осталась информация о применении технологии имитационного моделирования для проектирования сетей и выявления потенциальных узких мест в них, настройке на оборудовании протоколов IGMP, PIM, реализации сервиса VoD. Внедрив сервис ТРВ, вы получите массу удовольствия!
Литература
- IETF Network Working Group, IP-Performance Metrics (IPPM) for spatial and multicast - 2006. - (http://www.ietf.org/internet-drafts/draft-ietf-ippm-multimetrics-02.txt). (на текущий момент доступна уже 11 версия)
- IETF Network Working Group, Benchmarking Methodology for Network Interconnect Devices-1999.- (http://www.ietf.org/rfc/rfc2544.txt).
- IETF Network Working Group, Framework for IP-Performance Metrics - 1998.- (http://www.ietf.org/rfc/rfc2330.txt).
- http://www.videolan.org/vlc/
- http://www.technisat.de
- http://www.elecard.com/products/products-pc/consumer/mpeg2-decoder-plugin/
- http://borpas.info/download/add/UdpFilters.exe
- http://people.videolan.org/~dionoea/vlc-plugin-demo/plugin.php
- http://www.aminocom.com/products/ipstb/aminet110.html
С момента написания статьи, прошло 2 года. Позже, узнал я и о возможности раздачи списка каналов по мультикасту, используя "оповещения SAP", что и было впоследствии сделано.
ОтветитьУдалитьБыл изменен скрипт, подправлен веб-интерфейс, ну и так - много чего по-мелочи. Сейчас сервер уже не под моим наблюдением, что там и как изменилось незнаю, но вроде функционирует.
Весьма познавательно.
ОтветитьУдалитьДобрый день Антон. Спасибо за статью, очень познавательно, а галавное единственное описание интересующего меня вопроса на русском и в удобном виде.
ОтветитьУдалитьНо появилось несколько вопросов, смогли бы вы на них ответить, если вас это не затруднит ? Можно через емайл (iiihyp-nix@rkmail.ru )или джаббер (iiihyp-nix@jabber.ru).
Если у вас есть время ответить на 2-3 вопроса, напишите пожалуйста. Вопросы касаются получения лицензии и какие подводные камни с юридической стороной.
Жесть, то что и нужно мне!!!!!!!
ОтветитьУдалитьА можно ставить не SkyStar? а какие-то другие платы??? Наведите пожалуйста пример:)
ОтветитьУдалитьКонечно можно. Главное, чтобы драйвера были. Подавляющее большинство карт запускается без каких-либо усилий.
ОтветитьУдалитьВсё-таки интересно читать старые посты.
ОтветитьУдалитьСпасибо большое! Очень пригодилось!
ОтветитьУдалитьНекропост. В 2019 году пригодилось то, что было сделано в 2006 ???!!!
Удалить