Ip ем своими руками

IPTV Своими руками: Первый опыт


В этой статье я поделюсь первым опытом настойки и эксплуатации цифрового телевидения или IPTV, собранного "на коленке", расскажу о некоторых "подводных камнях", а так же дам советы новичкам.

Данная статься основана на личном опыте автора и не претендует на звание идеального руководства по настройке IPTV

Вообще, данный, так сказать "проект" был реализован где-то в далеком 2010 году, и может уже считаться устаревшим. С тех пор уже много чего изменилось. Добавлю лишь, что добиться стабильной работы, описанного ниже примера, на современном железе и софте не удалось, но принципиальная идея, конечно же осталась неизменна.
В будущем (я надеюсь) поделюсь опытом реализации кабельного ТВ в небольшом общежитии.


Аппаратная часть


Необходимые и достаточные условия для приема видеопотока со спутника и его вещания в локальную сеть.

Сервер IPTV - собственно, устройство, которое будет принимать, обрабатывать и вещать в локальную сеть видеопоток со спутника. В моем случае это обычный ПК под управлением MS Windows 2003 SP2, с одноядерным Intel Pentium4 тактовой частотой 2.6Ггц, 512Мб оперативной памяти, двумя сетевыми платами(можно обойтись и одной) и самое главное - спутниковым ресиверомTechniSat SkyStar USB 2.
Очевидно, чтобы обеспечить прием сигнала со спутника необходима тарелка и так называемый спутниковый конвертер. Я использовал тарелку триколор(55 см) и универсальный спутниковый конвертер (Ku-диаразона)Golden Interstar GI-201.
Теперь нужно определиться со спутником и транспондером, с которого мы хотим получать видео поток. Большая их часть транслируют каналы в шифрованном виде, посмотреть без "танцев с бубном" их не удастся. Но на некоторых спутниках есть транспондеры вещающие часть каналов в открытом виде. Посмотреть спутники и их транспондеры можно, например, на постоянно обновляющемся, сайте lyngsat.com. Я настраивался на сигнал одного из транспондеров спутника ABS1.
Поймать сигнал со спутника дело не легкое, кропотливое и с первого раза не всегда удачное, в общем, статей на тему как и куда направлять тарелку в интернете предостаточно, подробно описывать процесс не буду. Скажу лишь, что в комплекте с драйверами спутниковых ресиверов SkyStar, поставляется приложение Server4PC, которое облегчит поиск сигнала. Можно воспользоваться приложениями сторонних разработчиков, типа Fast Satfinder.

Так же хочу заметить, что одновременно принимать и обрабатывать сигнал можно только с одного транспондера, одним спутниковым ресивером. Но существуют спутниковые конвертеры с двумя или более выходами, т.е. имея несколько спутниковых ресиверов можно обрабатывать сигнал нескольких транспондеров, увеличивая таким образом количество каналов, принимаемых с одной тарелки.



Программная часть: SkyCast Server


Подробнее о настройках SkyCast Server

Для обработки и передачи видеопотка по локальной сети, будем использовать связку бесплатных утилит: SkyCast Server + VLC.
SkyCast Server - программа, разработанная только для ресиверов SkyStar. Позволяет получить поток со спутникового ресивера SkyStar и передать его по сети. В нашем случае используем эту программу как мост между ресивером SkyStar и программой VLC.

Загружаем программу, в установке она не нуждается, просто распаковываем архив. Открываем блокнотом файл skycast.ini:

  • Секция [COMMON] - настойки параметров спутникового ресивера SkyStar.

    MACSS2=01020304 - последние 8 цифр МАС адреса SS2/SS3 без разделителей (узнать MAC или физический адрес можно набрав в командной строке команду ipconfig /all).
    CARDTYPE=0 - тип карты. 0 - SkyStar2, 1 - SkyStar3.
    SS3NUM=1 - номер SS3 в системе по порядку, начиная с 1.

  • Секция [MULTICAST1] - параметры мултикаста

    MULTICAST=239.1.1.1 - мултикаст адрес.
    PORT=33033 - порт как порт.
    IP=127.0.0.1 - транслируем поток в локальную петлю, чтобы не нагружать сеть. Конечно же можно ввести IP адрес действующей сетевой карты и весь принятый поток будет направлен в сеть через нее. На этом этапе клиенты уже смогут принимать и просматривать видеоканалы используя например VLC и указав источник видеопотока вышеописанные мултикаст адрес и порт в таком виде: udp://@239.1.1.1:33033. В нашем случае мы этого делать не будем, и сначала немого "оптимизируем" видеопоток все тем же VLC, но на стороне сервера.

    Вместо "локальной петли", лучше использовать виртуальный сетевой адаптер

    ENABLED=1 - активируем вышеописанные параметры. К слову сказать, можно настроить до 4х различных параметров вещания мультикаста. В нашем случае выключаем оставшиеся секции, установив значения ключа равным 0.



Теперь произведем некоторые настройки уже в оболочке программы:

  • Вкладка: Tuner/LNB/Net - настройка параметров приёма спутникового сигнала


    - Раздел LNB - параметры спутникового ковертора
    Параметры для универсального спутникового конвертера ku-диапазона:
    LOF 1: 9750 мГц (9750000 кГц)
    Switch: 11700 мГц (11700000 кГц)
    LOF 2: 10600 мГц (10600000 кГц)

    - Раздел Tuner setting - настройка параметров транспондера
    Настройки одного из транспондеров спутника ABS1:
    Частота транспондера: 12640 мГц (12640000 кГц)
    Поляризация: Вертикальная (V)
    Скорость потока: 22000 кб/c


    После установки необходимых параметров нужно нажать кнопку Tune. Если все выполнено правильно в разделе Current отобразятся две шкалы, показывающие уровень сигнала (шкалы в режиме реального времени не обновляются).
    - Так же, не забываем установить галку Multicast и сохранить настройки в файле конфигурации, нажав кнопку Save.

  • Вкладка Common - общие настройки

    В этом разделе нас интересует только значение выпадающего списка - Config. В нем необходимо выбрать имя файла параметров приема сигнала, созданный и сохраненный во вкладке Tuner/LNB/Net.
    Выбранный файл параметров приёма, будет автоматически загружаться при старте программы.

  • Вкладка MultiCast Filter - настройка фильтра видеопотока, вещаемого в сеть средствами multicast.

    Видеопоток принятый с выбранного нами транспондера, может содержать ненужные нам данные, например шифрованные или "промо" каналы, дабы уменьшить нагрузку на ресурсы компьютера и сети можно (и нужно) их исключить, настроив фильтр.


    После нажатия кнопки Scan будет выполнен анализ потока, в правом списке отобразятся доступные каналы. Далее, кнопкой < "переносим" нужные нам каналы в левый список (т.е. эти каналы будут передаваться мультикастом в сеть). Активируем параметры фильтра, установив галочку Filter / Send all. После чего сохраняем параметры фильтра, нажав кнопку Save и выбрав файл конфигурации, созданный во вкладке Tuner/LNB/Net.
    Кнопка Apply моментально применит выбранные параметры фильтра.

Настройка программы SkyCast Server завершена.



Программная часть: VLC


Использование VLC для транскодинга, демультиплексирования и мультикаста видеопотока

Итак, что мы будем делать? - а делать мы будем следующее: с помощью VLC получим видеопоток из локальной петли (loopback) транслируемый SkyCast, далее выберем из него необходимые каналы - демультиплексируем каждый и будем вещать в сеть под собственным мултикаст адресом, так же можно указать параметры транскодинга - сжать или перекодировать принятые видео-аудио потоки.


Пример командного файла для запуска VLC:
@echo off set vlc=c:IPTVVLCvlc.exe set mcst_p=33033 set src=udp://@239.1.1.1:%mcst_p% set TTL=3 start %vlc% %src% --ttl=%TTL% --programs=100,503,504,200,201,202,400,401,402,560,561,562,600,601,602 --sout=#duplicate{ dst=std{access=udp,mux=ts,dst=239.1.1.2:%mcst_p%,sap,group="TV1",name="NTV"},select="program=100", dst=std{access=udp,mux=ts,dst=239.1.1.3:%mcst_p%,sap,group="TV1",name="DTV"},select="program=200", dst=std{access=udp,mux=ts,dst=239.1.1.4:%mcst_p%,sap,group="TV1",name="CTC"},select="program=400", dst=std{access=udp,mux=ts,dst=239.1.1.5:%mcst_p%,sap,group="TV1",name="MTV"},select="program=560", dst=std{access=udp,mux=ts,dst=239.1.1.6:%mcst_p%,sap,group="TV1",name="RBC"},select="program=600"}

Пояснения:
%vlc% - полный путь к VLC
%mcst_p% - порт мультикаста
%src% - источник udp потока т.е. мултикаст адрес куда вещает программа SkyCast
%ttl% - TTL (time to live) время жизни пакета
К слову сказать, TTL у SkyCast равен 1 и его не изменить, поэтому, в некоторых случаях, могут возникнуть трудности при вещании напрямую через SkyCast.

Теперь что касается цифр указанных в ключе --programs - это так называемые PID потоков, т.е. грубо говоря это идентификаторы видео-аудио ряда каждого из каналов, которые (видео-аудио ряд) VLC будет "выдергивать" из входящего потока, обрабатывать и транслировать в сеть. Узнать PID потоков выбранного транспондера можно на сайте www.lyngsat.com.
Как эти PID определял я:
- с помощью SkyCast вещал весь поток в сеть
- "ловил" поток VLC плеером (этот плеер может принимать и обрабатывать транспортный поток)
- в меню "Инструменты" -> "Информация кодека" можно увидеть PIDы каждого аудио и видео ряда


Как вы могли заметить, ключ dst= содержит мултикаст адрес:порт для каждого из каналов.
Т.е. для просмотра какого-либо канала, клиенту достаточно обратиться на соответствующий мультикаст адрес.

Хочеться заметить, что работа VLC стабильностью не отличаеться. Часто могут возникать утечки памяти и сбои в работе плеера



Настройка сетевого оборудования


Настройка сетевого оборудования, необходимая для "правильной" работы IPTV

Для нормальной работы IPTV (точнее для нормальной работы мультикаста) необходим сетевой коммутатор (или просто свитч) с поддержкой IGMP snooping. В принципе IPTV будет работать и с коммутаторами без поддержки этой функции (обычно это неуправляемые офисные свитчи за несколько сотен рублей, так или иначе в технических характеристиках коммутатора производитель указывает поддерживаемые протоколы). Разница между этими коммутаторами заключается в обработке мультикаст трафика. Свитч без поддержки IGMP обрабатывает мултикаст как широковещательную рассылку т.е. весь приходящий поток отправляет во все порты. Коммутатор же с поддержкой IGMP ресурсы расходует разумнее и отправляет мультикаст трафик только тем клиентам, которые его запросили.


По умолчанию поддержка IGMP snooping у большинства коммутаторов выключена, поэтому её достаточно просто включить (в административных настройках устройства активировать функцию IGMP snoping).
Пример для Cisco 2960:
conf t ip igmp snooping ip igmp snooping querier
Всё! Теперь поток мультикаст будет отправляться только тем клиентам, которые запросили. Хочу заметить, что если в сети есть еще коммутаторы на них тоже необходимо включить IGMP snooping (querier включать на них НЕ нужно)

Теперь о подводных камнях:
Иногда, без каких-либо видимых причин, коммутатор (Cisco 2960) начинал рассылать поток мултикаст во все порты. Опытным путем было установлено, что это происходит когда в сеть включается/выключается какой-либо коммутатор. Оказалось причиной тому Spanning Tree Protocol а именно TCN.
Рекомендации Cisco для решения данной проблемы:
conf t interface {fastethernet | gigabitethernet} slot/port no ip igmp snooping tcn flood
По какой-то причине мой коммутатор ни в какую не понимал эту команду (не исключено, что дело в кривых руках), хотя модель и версия ios входят в список поддерживаемых устройств.
Так же была опробована команда spanning-tree portfast на портах - проблему решило частично, иногда флуд повторялся.
В общем обдумав все за и против... отключил STP командой no spanning-tree vlan.

Самое лучшее решение - "пустить" поток IPTV в отдельном VLAN



Настройка клиентского оборудования


Настройка клиентского оборудования, для просмотра IPTV на телевизоре, на примере цифровой ТВ-приставки D-Link DIB-120

Итак, для просмотра, принятых со спутника, каналов на приставке D-Link DIB-120 нам понадобится, так называемый middleware, грубо говоря связующее программное обеспечение между пользователем и IPTV сервером. Представляет он из себя WEB страницу находящеюся на WEB сервере в локальной сети.

WEB сервер
WEB сервер для middleware можно поднять там же, где настроен сервер IPTV, либо на отдельной платформе. Если у вас установлен MS Windows можно добавить компонент Internet Information Service, либо воспользоваться продуктами сторонних разработчиков. После этого, на WEB сервере, в каталог сайта по умолчанию, добавляем файлы mw.html и DIB120_API.js - это и есть тот самый middleware.
Для проверки можно воспользоваться компьютером, подключенным к локальной сети, открыв в браузере WEB страницу: http://адрес_WEB_сервера/mw.html. Если браузер открывает пустую страницу значит все работает.

Ознакомиться и загрузить файлы можно на странице нашего сайта: Middleware для D-Link DIB-120.

Настройка приставки
Теперь настраиваем приставку, для этого в главном меню переходим в раздел Settings, далее в Service, после выбираем IPTV и указываем адрес нашей страницы: http://адрес_WEB_сервера/mw.html. Нажимаем на пульте кнопку Play, если все сделали правильно, телевизор начнет показывать канал.

На этом все.

Немного о файлах mw.html и DIB120_API.js.
Внутри файла mw.html можно увидеть следующие строчки:
var stream=new Array(); stream[0] =new Array( "udp://235.1.1.2:33033", "Planeta" ); stream[1] =new Array( "udp://235.1.1.3:33033", "TRO" ); stream[2] =new Array( "udp://235.1.1.4:33033", "InterAz" ); stream[3] =new Array( "udp://235.1.1.5:33033", "MIR" ); stream[4] =new Array( "udp://235.1.1.6:33033", "TNT" ); stream[5] =new Array( "udp://235.1.1.7:33033", "RZD" );
Это и есть список каналов, вещание которых мы настраивали выше. Первый параметр – это мультикаст адрес канала, второй его заголовок (будет отображаться на экране телевизора при переключении канала).

Вообще эту веб страничку можно оформлять как душе угодно, все зависит от фантазии, главное указать функцию инициализации приставки, при загрузке веб страницы:
function Init() { InitSTB( stream, "Info", 5000, "Status", 1000 ); } window.onload = Init; window.onunload = DestroySTB;
Где:
stream – массив содержащий адреса и названия каналов (о котором я упоминал выше)
"Info" - имя идентификатора html блока (например div) в котором будет отображаться информация о канале
5000 - таймаут отображения информации о канале (миллисек.)
"Status" – имя идентификатора html блока (например div) в котором отображается текущее состояние канала
1000 – таймаут отображения состояния (миллисек.)

Что касается файла DIB120_API.js – там реализованы некоторые функции управления приставкой.

Функция
function processItem(event)
Обрабатывает нажатия кнопок пульта. На данный момент в ней реализовано переключение каналов, нажатием на цифровые кнопки и кнопки страничного переключения каналов, кнопки Play(запуск)/Stop(остановка), а так же отображение информации о текущем состоянии и номере канала.
Еще в скрипте реализованы некоторые другие функции (в комментариях написаны их назначения), но они не используются. При необходимости, их можно задействовать, добавив обработку этих функций в вышеописанную функцию обработки нажатия кнопок пульта.

Иногда, приставка D-Link DIB-120 поставляется без прошивки - при включении на экране появиться надпись ALPHA и черный экран. Поэтому для начала ее нужно прошить заводской прошивкой. Дело довольно муторное, поэтому процесс описывать не буду, в интернете есть статьи с руководством по перепрошивке D-Link DIB-120.
Источник: http://www.nalek.org/index.php?cat=docs&mat=iptv_exp1

Предыдущая статья: лестница своими руками баня

Следущая статья: свет своими руками 2013

Лучшие статьи: