Прием DVB картой и вещание спутниковых каналов в сеть

Изображение пользователя sawa.

Есть возможность используя DVB карточку принимать со спутников тв/радио каналы и вещать их в сеть.
Я использую TechniSat SkyStar 2 rev. 2.6.

Устанавливаем:
sudo su
apt-get install linux-source linux-headers-`uname -r | awk -F- '{a=$1 "-" $2; print a}'` linux-headers-`uname -r` mercurial ncurses-base  ncurses-bin ncurses-term libncurses5 libncurses5-dev
cd /usr/src
tar jxvf linux-source-`uname -r | awk -F- '{print $1}'`.tar.bz2
cp -run linux-source-`uname -r | awk -F- '{print $1}'`/* linux-headers-`uname -r | awk -F- '{a=$1 "-" $2; print a}'`/
ln -sf linux-headers-`uname -r | awk -F- '{a=$1 "-" $2; print a}'` linux
hg clone http://linuxtv.org/hg/v4l-dvb/
cd v4l-dvb
make clean
make distclean
cp /boot/config-`uname -r` v4l/.config
make menuconfig #кто не понимает что делать лучше не запускать эту команду, если запустили - выйти без сохранения
make all
make install

После перезагрузки проверяем наличие устройства в /dev/dvb:
ls /dev/dvb
Если есть adapter0 то все нормально. Кстати сколько DVB устройств, столько должно быть и адаптеров в /dev/dvb. Запомним номер DVB адаптера, для adapter0 это 0, для adapter1 это 1 и т.д.
Доставим в терминале утилитки:
sudo apt-get install dvb-apps getstream

Остается отсканировать каналы, настроить тансляцию и кардшаринг. Настройка на сервера кардшаринга, для просмотра платных пакетов, требует отдельной статьи. Здесь же рассмотрим только настройку на трансляцию бесплатных каналов.

Сканирую спутник на предмет наличия доступных каналов:
Для начала на http://www.lyngsat.com нахожу свой спутник. Моя тарелка нацелена на Bonum 1 at 56.0°E, открываю табличку по ссылке http://www.lyngsat.com/bonum1.html и выбираю нужный транспордер. Бесплатные каналы есть у "12380 L tp 35" (см. первый столбец таблицы) соответственно значения беру из строчки таблицы содержащей эту надпись.
Создаю в /home файл scan.txt
nano /home/scan.txt
Вставляю в него следующую строку:
S 12380000 H 27500000 3/4
Эти значения взяты из таблички http://www.lyngsat.com/bonum1.html и для каждого транспордера свои. Здесь 12380000 (частота приема) берется из столбца "Freq.Tp" (он содержит строку: 12380 L tp 35) c добавлением трех нулей, буква "H" пишется если в столбце "Freq.Tp" указана "L", если там указана "R" то вместо "H" нужно поставить "V". Цифры 27500000 (символьная скорость) и 3/4 взять из столбца "SR-FEC SID-VPID" (содержит значение: 27500-3/4), где 27500000 это 27500 с добавление трёх нолей.
Запускаю сканирование командой:
scan -a 0 /home/scan.txt - здесь цифра 0 это номер адаптера который запоминали ранее.
Вот результат сканирования:

из которого нужны только эти строки:NTV-3:12380:h:0:27500:501:502:500
TopShop TV:12380:h:0:27500:1502:1503:1500

а конкретно последняя цифра указывающая pid пакета, для NTV-3 это 500, для TopShop TV - 1500.
Теперь достаточно значений чтобы создать файл конфигурации для трансляции утилитой getstream, назову его ntv.conf.
В
nano /home/ntv.conf

нужно вставить
http{
       port 8080;
};
adapter 0 {
       packet-buffer 50;
       stat-interval 120;
       dvb-s {
          lnb {
                lof1 9750000; #Нижний предел
                lof2 10600000; #Верхний предел
                slof 11700000; #Частота переключения
          };
          transponder {                         #описываем транспондер
                frequency 12380000; #Частота приема (указывали в scan.txt)
                polarisation h; #поляризация
                symbol-rate 27500000; #символьная скорость (указывали в scan.txt)
          };
       };
       #начало описания потока
       stream {
                name "NTV-3";   #имя потока
                     #входные данные потока
                     input {
                         pnr 500;               #pid пакета на спутнике
                     };
                     #выходные данные для потока
                     output-http {
                             url /ntv_3;                #URL адрес, на который будет вещание
                     };
       };
       #ниже идет описание оставшихся каналов, вещаемых с этого транспондера.
       stream {
             name "TopShop TV";
             input {
                     pnr 1500;
             };
             output-http {
                     url /topshop_tv;
             };
       };
};

Если сканировался другой транспордер то значения соответственно меняются.
Трансляция с отображением в консоли запускается командой:
getstream -c /home/ntv.conf -d

Просмотр:
Если IP адрес компьютера с которого ведется трансляция 192.168.0.1 то для просмотр в vlc канала ntv-3 нужно указать URL: http://192.168.0.1:8080/ntv_3
Если трансляция и просмотр на одном и том же компе то URL: http://localhost:8080/ntv_3

Для автоматичесткого запуска трансляции нужно в /etc/init.d/ создать скрипт:
nano /etc/init.d/getstream1

со следующим содержимым:
#!/bin/sh
# Start/stop the cron daemon.
#
### BEGIN INIT INFO
# Provides:          getstream1
# Required-Start:    $syslog $networking
# Required-Stop:     $syslog $networking
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO

. /lib/lsb/init-functions

case "$1" in

start)
    log_daemon_msg "Starting getstream service (EAM1)" "getstream1"
        start-stop-daemon --start --quiet --pidfile /var/run/getstr1.pid --make-pidfile --background --nicelevel -10 --startas /usr/bin/getstream -- -c /home/ntv.conf
    log_end_msg $?
;;

stop)
    log_daemon_msg "Stoping getstream service (EAM1)" "getstream1"
        start-stop-daemon --stop --quiet --pidfile /var/run/getstr1.pid --oknodo
        log_end_msg $?
;;

restart)
    $0 stop
    sleep 5
    $0 start
;;

*)    log_action_msg "Usage: /etc/init.d/getstream1 {start|stop}"
        exit 2
      ;;
esac
exit 0

и выполнить команду:
update-rc.d getstream1 defaults 22
После перезагрузки трансляция должна запуститься автоматически.

Поток до 5Мбит и при трансляции на нескольких пользователей может иметь смысл сжатие. Для этого использую vlc.
Создаю скрипт:
nano /etc/init.d/vlcserver

с содержимым:
#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          cvlc
# Required-Start:    networking
# Default-Start:     S
# Default-Stop:      0 6
### END INIT INFO

PATH="$PATH:/usr/bin/"

# The Username:Group that will run VLC
export USER="логин_суперюзера"
#${RUNAS}


CHANNEL1="--daemon -v http://localhost:8080/ntv_3 --sout='#transcode{vcodec=h264,vb=256,fps=25,scale=1,width=384,height=288,acodec=mp4a,ab=128,channels=2,samplerate=44100}:std{access=http,mux=ts,dst=IP_адрес:8089}'"

. /lib/lsb/init-functions

case "$1" in
start)
log_action_begin_msg "Starting cvlc for user '${USER}'"
su ${USER} -c "/usr/bin/cvlc ${CHANNEL1}"
;;

stop)
log_action_begin_msg "Stoping vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/cvlc -kill"
;;

restart)
$0 stop
$0 start
;;
esac

exit 0

где логин_суперюзера замените на свой логин, а IP_адрес:8089 на адрес сетевого интерфейса и порт через которые хотите транслировать. URL для просмотра будет соответственно: http://IP_адрес:порт
Добавляю скрип на автозагрузку командой:
update-rc.d vlcserver defaults 23

Скрипт сделан неоптимально, не работает перезагрузка и остановка. Если есть желающие - поправьте.

Комментарии (1)

0
sawa - 4 Сентябрь, 2010 - 01:56
Изображение пользователя sawa.

По ходу заметки для себя и не только.
Рабочий sasc-ng с патчами: читать здесь, брать здесь.
sasc-ng нужен для кардшаринга (просмотра платных кодированных каналов)

Отправить комментарий