NAlek
int main() { return 0; }
« IPTV Своими руками: Первый опыт


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

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

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


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


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

iptv своими руками,iptv,skystar,необходимые условия для работы IPTV Сервер 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.

iptv своими руками,iptv,skystar,skycast,skycast сервер

Загружаем программу, в установке она не нуждается, просто распаковываем архив. Открываем блокнотом файл 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 - настройка параметров приёма спутникового сигнала

    iptv своими руками,iptv,skystar,skycast,настройка skycast


    - Раздел 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.

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

    iptv своими руками,iptv,skystar,skycast,настройка skycast


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

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



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


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

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

iptv своими руками,iptv,skystar,skycast,vlc


Пример командного файла для запуска 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 ресурсы расходует разумнее и отправляет мультикаст трафик только тем клиентам, которые его запросили.

iptv своими руками,iptv,skystar,skycast,vlc,мултикаст,multicast,igmp,cisco


По умолчанию поддержка 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

iptv своими руками,iptv,middleware,dib-120,dlink 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.
Комментарии (19)
Yoj
24.07.2015 02:29 #1
Сколько мультикастовых потоков может дать один ресивер?
nalek
27.08.2015 16:05 #2
Ресивер отдает весь поток с транспондера, т.е. все каналы. Далее, можно организовать мультикаст поток для каждого из каналов, или как душе угодно.
em
28.09.2015 21:49 #3
Подскажите какой неуправляемый коммутатор с multicast igmp snooping поставить в квартире перед роутером? (сам роутер не поддерживает эту функцию). И конечно же, чтобы сам свитч не резал скорость для основного роутера. Спасибо!
nalek
02.10.2015 07:44 #4
Утверждать не буду, но для дома должны подойти D-Link dir-615 (роутер), вроде как dir-100 тоже поддерживает. Я тестировал на D-Link DES-3010. Сейчас использую в основном cisco.
Lucius
23.01.2016 22:04 #5
Здрасте. И сколько каналов получилось?!
nalek
29.01.2016 13:50 #6
Все зависит от спутника и транспондера. Например с ямала401 и транспордера 3837, можно получить 5ть каналов. Информацию о каналах и транспордерах спутника можно посмотреть на http://www.flysat.com/yamal90.php
День добрый
20.04.2016 19:15 #7
ПОДСКАЖИТЕ Ваша схема реально работает ? плату буду брать с 4 трансподерами... Загрузка проца какая ? какие дрова ?
nalek
29.04.2016 10:47 #8
Добрый.
Последний раз пробовал развернуть 14 каналов на Windows в связке со SkyStar 2 eXpress HD (PCIe) - работает, но крайне нестабильно - то BSOD, то сервер колом вставал... В итоге, все-таки перешел на Linux в нем работает на ура.
Для Linux, SkyStar 2 eXpress HD и 14 каналов: драйвера https://bitbucket.org/CrazyCat/linux-tbs-drivers. Загрузка проца около 60-70 с учетом того, что для 8-ми каналов используется транскодинг.
Шура
04.07.2016 12:30 #9
Подскажи, а вот хотя бы до 50 каналов на коленке можно разогнать по IPTV, но не в локальной сети, а по через интернет?
nalek
02.08.2016 15:30 #10
Можно попробовать через ffserver, но опять же, стабильность у него не очень, мягко говоря
Никола
13.01.2017 07:50 #11
А может Вы знаете как технически организовать трансляцию ТВ в частном доме на несколько (3-4) телевизора без подключения непосредственно к ТВ дополнительных устройств в виде приставок и спутниковых ресиверов? Ввиду практически полной технической безграмотности пожилых родителей, хотелось бы организовать "трансляцию" ТВ-сигнала таким образом, чтобы достаточно было просто включить телевизор и управлять каналами с его же пульта. Эфирное ТВ не рассматривается, т.к. сигнал у нас плохой.
nalek
16.01.2017 14:42 #12
Самый простой вариант - это последовательно соединенные ТВ модуляторы + спутниковые приставки, т.е. один модулятор и одна приставка = 1 канал. Вариант красивее, но гораздо дороже - ТВ головная станция.
David
26.01.2017 02:13 #13
Уважаемый , nalek не подскажете как организовать свой IPTV сервер , если у меня есть поток (play list) на 200 каналов и я их хочу вещать со своего сервера. То есть я принимаю IPTV поток и потом со своего сервера его вещаю в сеть , спасибо заранее
nalek
30.01.2017 13:30 #14
Например через vlc: vlc udp streaming
Тхатель Алибек
24.04.2018 09:28 #15
Прошу мне помочь, это все - тема дипломного проекта. Меня интересует Передать ведио на две тв приставки подключенные к телевизорам в двух разных комнатах. Передавать нужно по одному каналу связи видео с веб камеры и отдельный видео файл. Выглядеть все это должно как в любом доме с подключенным iptv - я переключаю на телевизоре с одного канала на другой. По одному идет передача видео в прямом эфире с веб камеры, по второму идет показ допусти фильма лежащего на сервере. Прошу отнестись с серьезностью. Заранее благодарю
Courtney Northrup
21.02.2024 11:46 #16
We have iptv and other all payment soluation Gobuypro.com ** Paypal balance to buy bitcoin safely way we have. 0.__European All Country Paypal account available Persona & Business_ 1.__UK/USA verified Business & Personal PayPal Accounts_ 2.__Binance Verified/Verified plus_ 3.__Cashapp VCC activate/BTC enable_ 4.__Wise Personal/Business account_ 5.__Revolut business account_ 6.__Buy Aged Facebook account 5 year old_ 8.__Payoneer/Venmo/Pst.net account available_ 9.__Any $ Dollar exchange service_ 10.__Unlimited email sending software life time_ 12.__Buy USA bank+ credit card account with all access_ __Contact __ Whatsapp: +44 7308 244260 Telegram: @gobuypro Skype: live:.cid.236f261e6814fdd8 Mail: gobuypro@protonmail.com
Sheri Arreola
23.02.2024 00:56 #17
We have iptv and other all payment soluation Gobuypro.com ** Paypal balance to buy bitcoin safely way we have. 0.__European All Country Paypal account available Persona & Business_ 1.__UK/USA verified Business & Personal PayPal Accounts_ 2.__Binance Verified/Verified plus_ 3.__Cashapp VCC activate/BTC enable_ 4.__Wise Personal/Business account_ 5.__Revolut business account_ 6.__Buy Aged Facebook account 5 year old_ 8.__Payoneer/Venmo/Pst.net account available_ 9.__Any $ Dollar exchange service_ 10.__Unlimited email sending software life time_ 12.__Buy USA bank+ credit card account with all access_ __Contact __ Whatsapp: +44 7308 244260 Telegram: @gobuypro Skype: live:.cid.236f261e6814fdd8 Mail: gobuypro@protonmail.com
Madeleine Van
23.02.2024 23:54 #18
We have iptv and other all payment soluation Gobuypro.com ** Paypal balance to buy bitcoin safely way we have. 0.__European All Country Paypal account available Persona & Business_ 1.__UK/USA verified Business & Personal PayPal Accounts_ 2.__Binance Verified/Verified plus_ 3.__Cashapp VCC activate/BTC enable_ 4.__Wise Personal/Business account_ 5.__Revolut business account_ 6.__Buy Aged Facebook account 5 year old_ 8.__Payoneer/Venmo/Pst.net account available_ 9.__Any $ Dollar exchange service_ 10.__Unlimited email sending software life time_ 12.__Buy USA bank+ credit card account with all access_ __Contact __ Whatsapp: +44 7308 244260 Telegram: @gobuypro Skype: live:.cid.236f261e6814fdd8 Mail: gobuypro@protonmail.com
Charline Weekes
24.02.2024 17:41 #19
We have iptv and other all payment soluation Gobuypro.com ** Paypal balance to buy bitcoin safely way we have. 0.__European All Country Paypal account available Persona & Business_ 1.__UK/USA verified Business & Personal PayPal Accounts_ 2.__Binance Verified/Verified plus_ 3.__Cashapp VCC activate/BTC enable_ 4.__Wise Personal/Business account_ 5.__Revolut business account_ 6.__Buy Aged Facebook account 5 year old_ 8.__Payoneer/Venmo/Pst.net account available_ 9.__Any $ Dollar exchange service_ 10.__Unlimited email sending software life time_ 12.__Buy USA bank+ credit card account with all access_ __Contact __ Whatsapp: +44 7308 244260 Telegram: @gobuypro Skype: live:.cid.236f261e6814fdd8 Mail: gobuypro@protonmail.com
Оставить комментарий
Автор *
Комментарий *
* - необходимые для заполнения поля
Яндекс.Метрика