IPTV стример своими руками на базе Linux и DVB карты TBS6985 DVB-S2 Quad Tuner PCIe Card
Наверное, сегодня, только самый маленький и ленивый провайдер не задумывался о создании дополнительных сервисов для своих абонентов, что позволило бы повысить привлекательность предоставляемых услуг провайдера.
Термин TriplePlay, что по версии Википедии означает - маркетинговый телекоммуникационный термин, описывающий модель, когда пользователям по одному кабелю широкополосного доступа предоставляется одновременно три сервиса — высокоскоростной доступ в Интернет, кабельное телевидение и телефонная связь, уже давно укрепился в умах маркетологов провайдеров телекоммуникационных услуг.
Если Вы Интернет провайдер, то уже, как минимум, одну услугу из трех своим абонентам Вы предложить смогли. Сейчас мы постараемся на один шаг приблизиться к пресловутому TriplePlay и попробуем создать вторую, а именно IPTV.
Когда провайдер задумывается о предоставлении услуги IPTV, перед ним становиться вопрос, а где же добыть этот самый iptv? На этот вопрос существует много ответов и каждый из них по-своему правильный, но наиболее часто выбор становиться за покупкой у поставщика IPTV услуг готового пакета, либо же строительство собственной головной станции IPTV. Первый вариант обладает существенным недостатком — он не дает пищи для ума и нас этот вариант не устраивает, да еще и придется платить деньги каждый месяц за транспорт до поставщика потока ну и конечно же за саму услугу. Поэтому мы будем идти по пути - все сделаем сами не хуже, а где-то даже лучше других, вместе с этим, займем свой мозг и время, да еще и сэкономим деньги.
Коротко о подходах доставки телевидения потребителю
Телевидение, как таковое, может быть доставлено до потребителя огромным количеством способов. Попробуем разобраться какие способы бывают:
- Кабельное аналоговое
- Кабельное цифровое
- Эфирное аналоговое
- Эфирное цифровое
- Спутниковое
- Эфирное по технологии MMDS
- 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, которую мы любезно можем Вам продать.ТЫЦ.
Приступим
Собрав все это в одну кучу и установив спутниковую карту в сервер начнем с установки драйвера спутниковой карты.
Драйвера для карточки лучше всего брать на официальном сайте производителя в разделе загрузок 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 , то на экране плеера непременно должен появиться первый российский канал.