IPTV стример своими руками на базе Linux и DVB карты TBS6985 DVB-S2 Quad Tuner PCIe Card

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

Термин TriplePlay, что по версии Википедии означает - маркетинговый телекоммуникационный термин, описывающий модель, когда пользователям по одному кабелю широкополосного доступа предоставляется одновременно три сервиса — высокоскоростной доступ в Интернет, кабельное телевидение и телефонная связь, уже давно укрепился  в умах маркетологов провайдеров телекоммуникационных услуг.

Если Вы Интернет провайдер, то уже, как минимум, одну услугу из трех своим абонентам Вы предложить смогли. Сейчас мы постараемся на один шаг приблизиться к пресловутому TriplePlay и попробуем создать вторую, а именно IPTV.

Когда провайдер задумывается о предоставлении услуги IPTV, перед ним становиться вопрос, а где же добыть этот самый iptv? На этот вопрос существует много ответов и каждый из них по-своему правильный, но наиболее часто выбор становиться за покупкой у поставщика IPTV услуг готового пакета, либо же строительство собственной головной станции IPTV. Первый вариант обладает существенным недостатком — он не дает пищи для ума и нас этот вариант не устраивает, да еще и придется платить деньги каждый месяц за транспорт до поставщика потока ну и конечно же за саму услугу. Поэтому мы будем идти по пути - все сделаем сами не хуже, а где-то даже лучше других, вместе с этим, займем свой мозг и время, да еще и сэкономим деньги.

 

Коротко о подходах доставки телевидения потребителю

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

  1. Кабельное аналоговое
  2. Кабельное цифровое
  3. Эфирное аналоговое
  4. Эфирное цифровое
  5. Спутниковое
  6. Эфирное по технологии MMDS
  7. IP телевидение

На самом деле этот список можно было бы продолжать еще довольно долго, но суть статьи не в этом.

Все представленные способы хороши, однако, мы сегодня говорим об IPTV и втором шаге на пути к провайдеру TriplePlay услуг, поэтому отбросим все и остановимся на последнем пункте, а именно, IP телевидение. Сам по себе термин IPTV не указывает нам, каким способом при помощи протокола IP телевидение достигнет потребителя, а таких способов тоже существует не мало. Наиболее популярные сегодня способы доставки ТВ до клиента это IPTV Multicast, IPTV Unicast, ну и наверное не для кого не секрет какую популярность сегодня набирает проект Torrent TV (torrent-tv.ru).

Откуда берется телевидение?

Теперь, когда известно о технологиях доставки ТВ абонентам, нужно решить еще одну задачу: где взять собственно сами ТВ каналы? На этот вопрос ответ довольно прост - там где они есть в достатке и в хорошем качестве и это место у нас с Вами над головой, а именно, на геостационарной орбите, там, где «пасутся» телекоммуникационные спутники.

 

Начнем строительство

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

Во-первых. Желание.

Во-вторых. Настроенные на нужные спутники антенны с необходимым количеством LNB(Low-Noise Block converter - дословно малошумный конвертор-моноблок).

В-третьих. Сервер с установленным Linux и имеющим на борту материнской платы достаточное количество свободных PCI-Express слотов, ну и поскольку речь идет об IPTV, то сетевая карта  тоже пригодиться.

В-четвертых. Карта для приема спутникого телевидения, здесь выбор пал на четырехголовую карту TBS6985 DVB-S2 Quad Tuner PCIe Card, которую мы любезно можем Вам продать.ТЫЦ.

TBS6985TBS6985TBS6985TBS6985

Приступим

Собрав все это в одну кучу и установив спутниковую карту в сервер начнем с установки драйвера спутниковой карты.

Драйвера для карточки лучше всего брать на официальном сайте производителя в разделе загрузок https://www.tbsdtv.com/download/ , ну а поскольку выбор пал на карту TBS6985, то и качать драйвера будем именно для  нее https://www.tbsdtv.com/download/document/common/tbs-linux-drivers_v130506.zip .

 

Установка драйвера:

1. Создадим директорию к примеру

/root/tbs

2. Скопируем в созданную директорию содержимое скаченного архива с драйвером

3. Распакуем находящийся в архиве собственно драйвер

tar xjvf linux-tbs-drivers.tar.bz2

4. Передем в директори с распакованным драйвером

cd linux-tbs-drivers

5. Далее необходимо определиться какое ядро linux у нас установленно

5.1. Если ядро третьей ветки но при этом система 32х битная, то необходимо выполнить следующую команду:

./v4l/tbs-x86_r3.sh

5.2. Если ядро версии 2.6.x 32 бита, то

./v4l/tbs-x86.sh

5.3. Для любых 64битных ядер выполним:

./v4l/tbs-x86_64.sh

6. Ну и теперь пришло врема выполнить сборку и установку самих драйверов

make && make install

7. Если все прошло успешно, а в случае если в системе установлены все необходимые пакеты для компиляции модулей ядра (kerner headers и build tools), то иначе и быть не может, остается только перезагрузить наш сервер.

Для этого можно выполнить

shutdown -r now

8. После загрузки Linux проверим загрузились ли только что собранные драйвера:

dmesg | grep cx88

На что в ответ в случае успеха получим

cx88/2: cx2388x MPEG-TS Driver Manager version 0.0.8 loaded
cx88[0]: subsystem: 8921:8888, board: TBS 8921 DVB-S/S2 [card=85,autodetected], frontend(s): 1
input: cx88 IR (TBS 8921 DVB-S/S2) as /devices/pci0000:00/0000:00:09.0/0000:05:07.2/input/input5
cx88-mpeg driver manager 0000:05:07.2: PCI INT A -> Link[APC2] -> GSI 17 (level, low) -> IRQ 17
cx88/2: cx2388x dvb driver version 0.0.8 loaded
cx88/2: registering cx8802 driver, type: dvb access: shared
cx88[0]/2: subsystem: 8921:8888, board: TBS 8921 DVB-S/S2 [card=85]
cx88[0]/2: cx2388x based DVB/ATSC card
cx8802_alloc_frontends() allocating 1 frontend(s)
DVB: registering new adapter (cx88[0])

А в каталоге /dev/dvb должны появиться четыре устройства

adapter0  adapter1  adapter2  adapter3

На этом этап установки драйвера закончен, можно приступать к этапу добычи «небесного телевидения».

 

Установка и настройка программы стриминга.

Поскольку сами по себе драйвера ничего особо делать не умеют, а задача стоит получить со спутников телеканалы и транслировать их в сеть, то необходим некий инструмент для этих целей. К счастью, благодаря проекту Astra (https://cesbo.com) сделать это довольно не сложно.

Для начала скачаем последнюю версию Astra https://cesbo.com/forum/files/download/10-astra-source/  и распакуем во временную директорию.

Сама по себе установка очень простая, нужно выполнить последовательность команд:

./configure.sh
make
make install

Если все прошло успешно, то можно считать, что финиш недалеко.

Осталось только настроить Астру для приема спутниковых каналов и определиться со способом трансляции их в сеть.

Для настройки приема и трансляции в Astra используются скрипты написанные на языке Lua. Вдаваться в описание этого языка не будем, так как об этом языке немало известно Google.

Рассмотрим настройку приема каналов и трансляции их Multicast-ом на примере.

Создаем файл в директории /etc/astra/hb_12597.lua и сразу дадим ему права на испольнение

chmod +x /etc/astra/hb_12597.lua
#!/usr/bin/astra
pidfile("/var/run/astra9.pid")
require("base")
make_stream(
{
name = "12597",
dvb = {
adapter = 0,
type = "S",
lnb = "9750:10600:11700",
tp = "12597:V:27500"
}
},
{
{
name = "Pervyi_EUR",
pnr = 8208,
output = {
"udp://239.255.1.90:1234", { localaddr = "172.16.254.1" },
}
},
{
name = "EuroNews",
pnr = 8211,
filter = {2221,2237},
output = {
"udp://239.255.1.91:1234", { localaddr = "172.16.254.1" },
}
},
}
)

Рассмотрим пример подробнее. Данный скрипт содержит два блока, первый - это создание потока, в нем описываются параметры приема транспондера со спутника, в примере речь идет о спутнике HotBird и блок трансляции, здесь уже мы разбираем спутниковый поток на каналы и описываем способ их отправки в сеть.

Подробное описание настройки приема и вещания в сеть можно на русском языке найти  официальном сайте разработчика https://cesbo.com/wiki/ru:astra:stream:configuring

Наиболее важным в данном примере является описание параметров спутникового приема, где:

adapter — устройство приема /dev/dvb/adapterX

type — выбор стандарта DVB

lnb — настройка параметров LNB конвертера

tp — описание параметров принимаемого транспондера (частота, поляризация, скорость)

Для транслируемых каналов определены следующие параметры:

name — имя канала

pnr — номер канала в спутниковом потоке

output - способ трансляции канала в нашем случае это UDP Multicast

localaddr — адрес локального интерфейса с которого будет осуществляться отправка потока.

Filter — фильтрация потоков в канале. Так как канал EuroNews транслируется с множеством языковых дорожек, а нам достаточно одной (русской), то в примере мы указали, что транслировать будем только две дорожки канала (видео и звук с русским переводом).

Если запустить этот скрипт и в настройках iptv плеера указать источник udp://@239.255.1.90:1234 , то на экране плеера непременно должен появиться первый российский канал.