Pull to refresh

Прием спутниковых тв каналов в linux

Configuring Linux *
Доброго времени суток.
Хочу вам рассказать про настройку приема спутниковых не закодированных тв каналов в linux и вещание их в локальную сеть.
Исходными данными будем считать наличие спутниковой антенны настроенной на определенный градус(например на www.lyngsat.com/amos2.html) и компьютера под управлением linux(не важно какой дистрибутив, в моем случае был Slackware). Задача очень интересная и актуальная в наше время.

Немного теории


Для приема сигнала нам понадобятся следующие программы:
scan — для сканирование каналов на транспондере.
szap — для проверки приема данных с танспондера.
vlc — для приема и вещания.

Первые две утилиты находятся в пакете linuxtv-dvb-apps. Что бы их установить можно воспользоваться менеджером пакетов вашего дистрибутива или пойти на LinuxTV, скачать исходники и собрать.
vlc так же можно установить используя менеджер пакетов, или с официального сайта VLC

frec — частота или транспондер
sr (symbol rate) — символьная скорость
fec — частота коррекции ошибок
V, H, L, R — поляризация
Сигнал который возможно принять может находиться в C и Ku диапазонах, в линейной(v,h) и круговой поляризации(l,r).

Ловим сигнал


Первым делом надо проверить, определилась ли наша dvb-карта в системе:
Это очень просто узнать, достаточно выполнить lspci и найти там подобные строчки:

03:05.0 Multimedia controller: Philips Semiconductors SAA7146 (rev 01)
03:06.0 Network controller: Techsan Electronics Co Ltd B2C2 FlexCopII DVB chip / Technisat SkyStar2 DVB card (rev 02)
03:05.0 Multimedia video controller: Conexant CX23880/1/2/3 PCI Video and Audio Decoder (rev 05)
03:05.2 Multimedia controller: Conexant CX23880/1/2/3 PCI Video and Audio Decoder [MPEG Port] (rev 05)
03:05.4 Multimedia controller: Conexant CX23880/1/2/3 PCI Video and Audio Decoder [IR Port] (rev 05)

1е устройство — skystar3
2е устройство — skystar2
3е, 4е, 5е устройства — twinhan 1027

Вот так это выглядит у меня:
root@sat:/# lspci
00:00.0 Host bridge: ATI Technologies Inc Unknown device 7910
00:01.0 PCI bridge: ATI Technologies Inc Unknown device 7912
00:07.0 PCI bridge: ATI Technologies Inc Unknown device 7917
00:12.0 SATA controller: ATI Technologies Inc SB600 Non-Raid-5 SATA
00:13.0 USB Controller: ATI Technologies Inc SB600 USB (OHCI0)
00:13.1 USB Controller: ATI Technologies Inc SB600 USB (OHCI1)
00:13.2 USB Controller: ATI Technologies Inc SB600 USB (OHCI2)
00:13.3 USB Controller: ATI Technologies Inc SB600 USB (OHCI3)
00:13.4 USB Controller: ATI Technologies Inc SB600 USB (OHCI4)
00:13.5 USB Controller: ATI Technologies Inc SB600 USB Controller (EHCI)
00:14.0 SMBus: ATI Technologies Inc SB600 SMBus (rev 14)
00:14.1 IDE interface: ATI Technologies Inc SB600 IDE
00:14.2 Audio device: ATI Technologies Inc SB600 Azalia
00:14.3 ISA bridge: ATI Technologies Inc SB600 PCI to LPC Bridge
00:14.4 PCI bridge: ATI Technologies Inc SB600 PCI to PCI Bridge
00:18.0 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration
00:18.1 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map
00:18.2 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller
00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
01:05.0 VGA compatible controller: ATI Technologies Inc Radeon X1200 Series
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 01)
03:05.0 Multimedia controller: Philips Semiconductors SAA7146 (rev 01)
03:06.0 Network controller: Techsan Electronics Co Ltd B2C2 FlexCopII DVB chip / Technisat SkyStar2 DVB card (rev 02)


Следующим шагом будет запуск модулей ядра для этих dvb-карт.
Нужные модули зависят от чипсета dvb-карт, но есть 2 обязательных модуля: dvb_core и dvb_pll.
Для SkyStar 2: b2c2_flexcop
Для SkyStar 3: budjet
Для Twinhan 1027: cx88_dvb

В 99 случая из 100 нужные модули загрузились при старте системы. Так это или нет проверить очень просто lsmod | grep dvb
Вот так это выглядит все на той же системе:
root@sat:/# lsmod | grep dvb
dvb_pll 15876 2 b2c2_flexcop,lgh06xf
dvb_core 74280 5 b2c2_flexcop,budget,lgdt330x,budget_core,stv0299


Если модули удачно загрузились, то вы увидите новые устройства в директории /dev/dvb:
root@sat:/# ls /dev/dvb/
adapter0/ adapter1/


Отлично, теперь нам надо поймать сигнал.
Первым делом надо будет просканировать какой-либо из доступных нам транспондеров и узнать какие же каналы мы можем принимать.
На помощь нам приходит установленная нами утилитка scan.
Она сканирует транспондер и выдает на стандартный поток вывода информацию о доступных каналах.
Из параметров ей необходимо передать путь к файлу конфигурации, номер dvb-адаптера которым сканировать и при круговой поляризации выставить вручную частоты.

Файл конфигурации для scan легко написать пользуясь информацией с сайта lyngsat.com. На нем нужно найти спутник на настроенный вами градус и из этого спутника выбрать любой транспондер.
На нашем примере, www.lyngsat.com/amos2.html, выберем транспондер(freq) 10759, горизонтальной(H) поляризацией, символьной скоростью(sr) 30000 и частотой коррекции ошибок(fec) 3/4. Наш файл конфигурации для scan будет выглядеть следующим образом:

S 10759000 H 30000000 3/4


Пользоваться так:
root@sat:/etc/sat/test# scan -a 0 /path/to/trans.conf
scanning /path/to/trans.conf
using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
initial transponder 10759000 H 30000000 3
>>> tune to: 10759:h:0:30000
Network Name 'NET'
0x0000 0x0001: pmt_pid 0x0020 Spacecom -- KIEV STB (running, scrambled)
0x0000 0x0002: pmt_pid 0x0030 Spacecom -- M1 (running, scrambled)
0x0000 0x0003: pmt_pid 0x0040 Spacecom -- TONIS (running, scrambled)
0x0000 0x0005: pmt_pid 0x0060 Spacecom -- ICTV (running, scrambled)
0x0000 0x0006: pmt_pid 0x0070 Spacecom -- M2 (running, scrambled)
0x0000 0x0008: pmt_pid 0x1079 Spacecom -- NEWS 24 (running, scrambled)
0x0000 0x0009: pmt_pid 0x0200 Spacecom -- Radio Antoshka (running, scrambled)
0x0000 0x000a: pmt_pid 0x0100 Spacecom -- MTV UKRAINE (running, scrambled)
0x0000 0x000b: pmt_pid 0x0080 Spacecom -- QTV (running, scrambled)
dumping lists (9 services)
KIEV STB:10759:h:0:30000:33:34:1
M1:10759:h:0:30000:49:50:2
TONIS:10759:h:0:30000:65:66:3
ICTV:10759:h:0:30000:97:98:5
M2:10759:h:0:30000:113:114:6
NEWS 24:10759:h:0:30000:4194:4195:8
Radio Antoshka:10759:h:0:30000:0:513:9
MTV UKRAINE:10759:h:0:30000:257:258:10
QTV:10759:h:0:30000:129:130:11
Done.

В случае с круговой поляризацией надо добавить ключик -l со значениями 10750,10750,0

scan -a 0 /path/to/trans.conf -l 10750,10750,0


Попробуем настроить карту на приём данных. Для этого нам понадобится конфигурационный файл для szap. Его очень просто получить:
root@sat:~# scan -a 0 ~/trans36.conf -l 10750,10750,0 > ~/channels.conf
root@sat:~# cat ./channels.conf
Sport 1:11727:h:0:27500:101:201:1
Sport 2:11727:h:0:27500:102:202:2
First Automotive:11727:h:0:27500:103:203:3
BIZ TV:11727:h:0:27500:104:204:4
Che-Pe_INFO:11727:h:0:27500:105:205:5
TBi:11727:h:0:27500:106:206:6
TV3:11727:h:0:27500:107:207:7
CHANSON:11727:h:0:27500:108:208:8
TOPSHOP TV:11727:h:0:27500:109:209:9
Expert test:11727:h:0:27500:110:210:10
Football test:11727:h:0:27500:111:211:11
Engineer_1:11727:h:0:27500:114:214:14


Теперь подсунем этот файл конфигурации в szap:
root@sat:~# szap -c ./channels.conf -n 1 -x -l 10750,10750,0
reading channels from file './channels.conf'
zapping to 1 'Sport 1':
sat 0, frequency = 11727 MHz H, symbolrate 27500000, vpid = 0x0065, apid = 0x00c9
using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
status 00 | signal 6262 | snr fcfc | ber 00000000 | unc 00000000 |
status 1f | signal 4d4d | snr 3535 | ber 00000000 | unc 00000006 | FE_HAS_LOCK

Если появилась надпись «FE_HAS_LOCK» значит все ок, настроились верно.
Параметры для szap похожи на параметры для scan:
-с /path/to/channels.conf — путь к файлу конфигурации с каналами.
-n X — номер канала из файла channels.conf, где X число начиная с 1.
-x — как только szap залочиться, сразу завершится.
-l 10750,10750,0 — необходимо для антенн с круговой поляризацией.

Вещаем в сеть


Итак, мы получили список каналов доступных нам на транспондере.
Теперь, когда мы знаем частоты, поляризацию, и узнали pid нужных каналов(последняя цифра в каждой строке, pid канала m1 = 2) можно приступить к непосредственному приему потока.
Для этого мы воспользуемся всемогущим плеером vlc.

Параметров передаваемых при старте довольно много и каждый раз их набирать бессмысленно, советую записать всю команду запуска vlc в исполняемый оболочкой файл.
#!/bin/bash
/usr/bin/vlc -vvv --color --ttl 12 --ts-es-id-pid --dvb-adapter=0 --programs=1,2,3,6,8,10,11 dvb:
--dvb-frequency=10759000 --dvb-srate=30000000 --dvb-voltage=18 --dvb-fec=9 -d --sout '#duplicate{
dst="standard{access=http,mux=ts,url=0.0.0.0:8011}",select="program=1"
dst="standard{access=http,mux=ts,url=0.0.0.0:8012}",select="program=2"
dst="standard{access=http,mux=ts,url=0.0.0.0:8013}",select="program=3"
dst="standard{access=http,mux=ts,url=0.0.0.0:8014}",select="program=6"
dst="standard{access=http,mux=ts,url=0.0.0.0:8015}",select="program=8"
dst="standard{access=http,mux=ts,url=0.0.0.0:8016}",select="program=10"
dst="standard{access=http,mux=ts,url=0.0.0.0:8017}",select="program=11"}'


Немного о параметрах:
-vvv — подробный вывод сообщений, полезно при отладке.
--color — разукрашивает вывод сообщений, подсвечивает критичные сообщения красным, очень удобно, если используется -vvv.
--dvb-adapter — номер dvb адаптера из /dev/dvb/, в случае если у вас в компьютере установлено больше одного.
--programs — pid'ы каналов, которые необходимо принимать.
-d — работать как демон.
--dvb-fec — Значение fec 1/2 9 — определяется автоматически
dst=«standard{access=http,mux=ts,url=0.0.0.0:8011}»,select=«program=1»

Каждая из подобных строчек связывает pid канала с портом компьютера. В данном случае канал с pid'ом 1 будет транслироваться на 8011 порту.

Осталось лишь проверить.
Запускаем с клиента и смотрим:
mplayer h_t_t_p://10.16.0.12:8012
Tags:
Hubs:
Total votes 44: ↑42 and ↓2 +40
Views 25K
Comments Comments 42