Wive-NG routers firmware (dsl/rtnl/mt).
Главная > Другое > Документация > VLC - DVB-S stream

VLC - DVB-S stream

Или "Спутниковые грабли".

Спутниковые технологии, спутниковые технологии... Мать их за ногу. На просторах нашей родины долгое время спутниковый доступ в интернет оставался практически единственным быстрым и как не парадоксально дешёвым способом доступа в интернет. Нет, не дешовые спутниковые каналы тому виной. Причина сего явления в зажравшихся наземных операторах, к счастью ситуация меняется и спутниковое оборудование потихоньку уходит из систем спутникового доступа в интернет конечного пользователя, вот так случилось и у меня. Но не об этом речь, а о том что железку выбрасывать жалко а прикрутить её собственно не куда. Было решено заставить её «вещать» ТВ и Радио в локальную сеть дабы не бегать к ящику с ресивером по поводу и без.

О настройке VLC в таком режиме сказано уже очень и очень много, остановлюсь лишь на проблемных моментах.

И так, что мы имеем из железа: P3-800/512MB и 2 DVB карты SkyStar-2 rev 2.6B и TT-1401 со шнурками до конвертеров в мультифиде SS2 воткнут в 90E и TT-1401 в 75E.

Для трансляции выбраны следующие транспондеры 11671V18200 на 90Е и 12640V22000 с 75Е.

Строки запуска VLC:

75Е-TT1401:
ionice -c3 `vlc --ttl 4 -I dummy --color dvb:// --dvb-adapter=0 --dvb-frequency=12640000 --dvb-srate=22000000 --dvb-voltage=13 --ts-es-id-pid --programs=100,200,700,500,600 --sout-standard-access=http --sout-standard-mux=ogg —sout '#duplicate{dst=std{access=http,mux=ogg,dst=:10001},select="program=100", dst=std{access=http,mux=ogg,dst=:10002},select="program=200", dst=std{access=http,mux=ogg,dst=:10003},select="program=700", dst=std{access=http,mux=ogg,dst=:10004},select="program=500", dst=std{access=http,mux=ogg,dst=:10005},select="program=600"}'`

90E-SS2:
ionice -c3 `vlc --ttl 4 -I dummy --color dvb:// --dvb-adapter=1 --dvb-voltage=13 --dvb-frequency=11671000 --dvb-srate=18200000 --programs=2100,2101,2103,2900 --sout-standard-access=http --sout-standard-mux=ogg --sout '#duplicate{dst=std{access=http,mux=ogg,dst=10.0.0.254:10001},select="program=2100",novideo dst=std{access=http,mux=ogg,dst=10.0.0.254:10002},select="program=2101",novideo dst=std{access=http,mux=ogg,dst=10.0.0.254:10003},select="program=2103",novideo dst=std{access=http,mux=ogg,dst=10.0.0.254:10004},select="program=2900",novideo}' —no-sout-video`

Запускаем и радуемся, но не долго ;( �§ерез некоторое время получаем глубокий вис причём всей системы. Разборки и знание того что VLC очень чувствителен к входному потоку наводят на мысль что мы поймали старый баг в работе аппаратного пид фильтра на SS2. Но если при работе с интернет достаточно было повесить собаку и отслеживая поток передёргивать модули то тут такой финт ушами не пройдёт ибо без перезапуска VLC не обойтись да и глухой вис наступает раньше чем удастся идентифицировать что потока уже нет.

Делать нечего, лезем в исходники dvb модулей и внимательно смотрим в код, помните, код — ЛУ�§ШИЙ МАНУАЛ!

В исходниках модуля b2c2_flexcop_pci видем очень интересные опции:
enable_pid_filtering и irq_chk_intv. По первой понятно, но только им проблему не решить, а вот второй … О нём подробнее. Раньше как я уже и говорил, после пропадания потока для восстановления работоспособности нужно было выгрузить и снова загрузить модули, при этом карта полностью реинитилась и заново настраивался тюнер. Причина пропадания потока лежит в кривой работе демультиплексора частью которого является и пидфильтр, разбор работы этой опции показал что это костыль (ну а как без этого) который по сути раз заданный интервал следит есть ли поток данных в DMA режиме и если нет — реинитит карту а значит и глюкавый b2c2. 
�§ешем репу и после нескольких проб и ошибок в /etc/modprobe.conf у нас вырисовываются следующие строки:

options dvb-core dvb_powerdown_on_sleep=0
options b2c2_flexcop_pci enable_pid_filtering=0 irq_chk_intv=50

т. е. Говорим карте не отключать питание конвертера в режиме ожидания, говорим не использовать аппаратный пидфильтр, да и не зачем его использовать, VLC один чёрт снимет весь поток и будет разбирать его на уровне демуксера(программный демультиплексор), и включаем костыль заставляя его проверять поток раз в 50с.

Пробуем. Урря, работает, сутки, двое и приплыли.... Потока с 75Е нет %( Эх... Придётся и тут покопаться. После долгих мытарств с попытками получить устойчивый эффект понимаем, что данные иногда бьются, и проблема собственно не в сигнале... Лезем в сырцы budget-core и натыкаемся на опцию bufsize. Ой не спроста она тут ;). Пробуем выставить максимальный размер буфера. И в /etc/modprobe.conf появляется следующая строка:

options budget-core bufsize=1410

Как ни странно но проблема решилась. Собсно всё работает без сбоев уже как минимум пару недель.

Отдельно хочется сказать, что уровень сигнала должен быть с хорошим запасом!!! Если ber будет прыгать > 10 считайте что будете получать периодическиеы глюки с VLC.  
При любых глюках в потоке VLC старается сожрать всю память и схлопотать OOM.

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

#!/bin/sh

#проверка приёма
logfile="/var/log/vlc.log"
pstest=`scandvb -c -a0 2>&1| grep "dumping lists"`

if [ "$pstest" == "dumping lists (0 services)" ]; then
  date >> $logfile;
  echo "DIE by scan" >> $logfile;
  service vlc restart >> $logfile;
fi

#проверка утечек
vlcmem=`ps axv|grep dvb-frequency |awk '{vv=$10} vv=="vlc" {print $8}'`

if [ $vlcmem -gt 200000 ]; then #больше 200 мегабайт — перезапускаем VLC
  date >> $logfile;
  echo "DIE by mem" >> $logfile;
  service vlc restart >> $logfile;
fi

Пороговый размер памяти установить исходя из ваших реалий.

Вот собственно и все «чудеса».
Приятного просмотра.


Rambler's Top100
Locations of visitors to this page