Есть возможность используя DVB карточку принимать со спутников тв/радио каналы и вещать их в сеть. Я использую TechniSat SkyStar 2 rev. 2.6.
Устанавливаем: sudo suapt-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-devcd /usr/srctar jxvf linux-source-`uname -r | awk -F- '{print $1}'`.tar.bz2cp -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}'` linuxhg clone http://linuxtv.org/hg/v4l-dvb/cd v4l-dvbmake cleanmake distcleancp /boot/config-`uname -r` v4l/.configmake menuconfig #кто не понимает что делать лучше не запускать эту команду, если запустили - выйти без сохраненияmake allmake install После перезагрузки проверяем наличие устройства в /dev/dvb: ls /dev/dvb Если есть adapter0 то все нормально. Кстати сколько DVB устройств, столько должно быть и адаптеров в /dev/dvb. Запомним номер DVB адаптера, для adapter0 это 0, для adapter1 это 1 и т.д. Доставим в терминале утилитки: sudo apt-get install dvb-apps getstream
sudo suapt-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-devcd /usr/srctar jxvf linux-source-`uname -r | awk -F- '{print $1}'`.tar.bz2cp -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}'` linuxhg clone http://linuxtv.org/hg/v4l-dvb/cd v4l-dvbmake cleanmake distcleancp /boot/config-`uname -r` v4l/.configmake menuconfig #кто не понимает что делать лучше не запускать эту команду, если запустили - выйти без сохраненияmake allmake install
ls /dev/dvb
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 это номер адаптера который запоминали ранее. Вот результат сканирования:
nano /home/scan.txt
S 12380000 H 27500000 3/4
scan -a 0 /home/scan.txt
scanning /home/scan.txtusing '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'initial transponder 12380000 H 27500000 3>>> tune to: 12380:h:0:27500DVB-S IF freq is 17800000x0000 0x01f4: pmt_pid 0x01f4 NTV -- NTV-3 (running)0x0000 0x05dc: pmt_pid 0x05dd (null) -- TopShop TV (running)Network Name 'RSCC'dumping lists (2 services)NTV-3:12380:h:0:27500:501:502:500TopShop TV:12380:h:0:27500:1502:1503:1500Done.
NTV-3:12380:h:0:27500:501:502:500TopShop TV:12380:h:0:27500:1502:1503:1500
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
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
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-functionscase "$1" instart) 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 ;;esacexit 0 и выполнить команду: update-rc.d getstream1 defaults 22 После перезагрузки трансляция должна запуститься автоматически.
#!/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-functionscase "$1" instart) 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 ;;esacexit 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 INFOPATH="$PATH:/usr/bin/"# The Username:Group that will run VLCexport 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-functionscase "$1" instart)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;;esacexit 0 где логин_суперюзера замените на свой логин, а IP_адрес:8089 на адрес сетевого интерфейса и порт через которые хотите транслировать. URL для просмотра будет соответственно: http://IP_адрес:порт Добавляю скрип на автозагрузку командой: update-rc.d vlcserver defaults 23
#!/bin/sh -e### BEGIN INIT INFO# Provides: cvlc# Required-Start: networking# Default-Start: S# Default-Stop: 0 6### END INIT INFOPATH="$PATH:/usr/bin/"# The Username:Group that will run VLCexport 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-functionscase "$1" instart)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;;esacexit 0
update-rc.d vlcserver defaults 23
Скрипт сделан неоптимально, не работает перезагрузка и остановка. Если есть желающие - поправьте.
По ходу заметки для себя и не только. Рабочий sasc-ng с патчами: читать здесь, брать здесь. sasc-ng нужен для кардшаринга (просмотра платных кодированных каналов)
Подробнее о форматировании
Комментарии (1)
По ходу заметки для себя и не только.
Рабочий sasc-ng с патчами: читать здесь, брать здесь.
sasc-ng нужен для кардшаринга (просмотра платных кодированных каналов)
Отправить комментарий