Использование czap для настройки DVB-C TV тюнера
Категория: video for Linux
Первоначально была необходимость в использовании видео потока с ТВ тюнера в качестве входного потока для ffmpeg`а. Но оказалось, что ffmpeg не имеет встроенных средств для управления тюнером в отличии, скажем, от VLC. После недолгих попыток решение нашлось.
Для начала надо просканировать сетку вещания, для определения параметров вещания каналов. Делается это посредством утилиты w_scan:
w_scan -f c -C UTF-8 -X >> czap.conf
-f c - сканирует "кабельную" сетку
-С UTF-8 - задает кодировку на выходе
-X - задает вывод в формате для tzap/czap/xine
листинг czap.conf:
.....
121 TV1000(Orion Express):482000000:INVERSION_AUTO:6875000:FEC_1_2:QAM_128:3504:4504:121
122 TV1000 Action(Orion Express):482000000:INVERSION_AUTO:6875000:FEC_1_2:QAM_128:3503:4503:122
....
Теперь можно настроить тюнер на необходимый канал:
czap -c ./czap.conf -r -p "121 TV1000(Orion Express)"
флаги -r и -p добавят в выходной видео поток необходимые TS заголовки, тем самым к потоку будет легче цепляться и не тратить время на его анализ. Если все прошло удачно, в вывод czap будет постоянно выкидывать статусные сообщения.
Теперь, если необходимо, выходной поток можно подцепить ffmpeg`ом:
ffmpeg -i /dev/dvb/adapter0/dvr0 ......
Хотелось бы отметить, что w_scan`ом так и не удалось просканировать частоты ниже 474МГц, хотя вещание на них осуществлялось. Если кто знает решение - поделитесь в комментариях.
Анализ ключевых кадров в видеопотоке
Категория: video for Linux
При просмотре видеофайла и его последующей перемотки или, скажем, при переключении с одного онлайн видеопотока в плеере на другой, можно заметить что в одних случаях воспроизведение начинается сразу, а в других по прошествие некоторого времени. Возникает вопрос - почему? Оказывается, нюанс заключается в так называемых ключевых кадрах или их еще называют кадры I-типа. Дело в том что, видеопоток состоит из кадров-статичных изображений быстро сменяющих друг друга, другими словами при просмотре мы видим пошаговую анимацию. Так вот, для экономии места и следовательно, для уменьшения битрейта обычно делаю так: записывают полный кадр (ключевой), а в последующих кадрах записывается информация об изменяющихся областях в сравнении с предыдущим кадром. Логично, что так долго продолжаться не может т.к. количество изменений увеличивается или вовсе требуется внести новые элементы, тогда кодер вставляет очередной ключевой кадр и процесс повторяется. При недостаточной частоте опорных кадров изображение может начать "сыпаться" или застывать.
Получается, что воспроизведение видеопотока не начнется до тех пор, пока декодер не получит ключевой кадр, с этим и связана пауза в начале просмотра.
Для анализа последовательности кадров в видеопотоке, можно воспользоваться Linux утилитой ffprobe:
ffprobe -i путь_до_видеопотока_или_файла -select_streams v -show_frames -show_entries frame=pict_type -of csv
На выходе в реальном времени можно наблюдать сменяющуюся последовательность кадров с указанием его типа:
frame,I
frame,B
frame,B
frame,P
frame,B
frame,B
Обычно ключевые кадры вставляют раз в секунду или, другими словами, через каждые 23 кадра. Но некоторые "деятели" для снижения битрейта и в конечном счете для экономии трафика, увеличивают интервал вставки ключевых кадров - в итоге приводящий к проблемам описанных выше.
О других типах кадров можно почитать на википедии...
Воспроизведение DVB-C каналов в VLC
Категория: video for Linux
Для воспроизведения телевизионных каналов, принимаемых через TV-тюнер в linux я использую VLC. Зная параметры, принимаемого канала, можно из консоли его вспроизвести:
vlc dvb-c:// :dvb-frequency=346000000 :dvb-modulation=128QAM :dvb-srate=6875000 --dvb-adapter=0 --program=3
Пояснения к параметрам не нужны - думаю и так все понятно.
Mygica T230C DVB-T/T2/C USB TV тюнер в Linux
Категория: video for Linux
На днях встала задача просмотра DVB-C каналов на linux машине (а именно UBUNTU 14.04 | 3.13.0-100-generic). Нужен был дешевый USB TV тюнер, который без особых танцев с бубном будет работать в ОС Linux и который без проблем можно достать/заказать/купить.
Неспешный гуглеж и читка форумов, показала, что для задачи подходит Geniatech T230, в частности у китайцев можно легко заказать его аналог Mygica T230C DVB-T/T2/C.
Заказал и через пару дней он у меня, подключаем и имеем:
[77136.437960] usb 2-1.2: new high-speed USB device number 31 using ehci-pci
[77136.530852] usb 2-1.2: New USB device found, idVendor=0572, idProduct=c689
[77136.530857] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[77136.530860] usb 2-1.2: Product: EyeTV Stick
[77136.530862] usb 2-1.2: Manufacturer: Geniatech
[77136.530864] usb 2-1.2: SerialNumber: 160421
idProduct у имеющегося тюнера отличается от T230 (idProduct=c688) и, как следствие, стандартная сборка media_build от linuxtv.org не подойдет. Значит нужен media_build в котором это учтено, и так решение:
git clone https://github.com/crazycat69/linux_media.git git clone --depth=1 https://github.com/tbsdtv/linux_media.git -b latest ./media cd media_build make dir DIR=../media make distclean
make make install make rmmod // выгружаем старые версии библиотек из памяти
В итоге девайс определяется, подгружаются необходимые прошивки и он готов к работе
[77136.766035] DVB: registering new adapter (Mygica T230C DVB-T/T2/C)
[77136.766044] usb 2-1.2: media controller created
[77136.766393] dvb_create_media_entity: media entity 'dvb-demux' registered.
[77136.776429] i2c i2c-3: Added multiplexed i2c bus 4
[77136.776434] si2168 3-0064: Silicon Labs Si2168-D60 successfully identified
[77136.776437] si2168 3-0064: firmware version: D 6.0.1
[77136.782250] si2157 4-0060: Silicon Labs Si2141/2151 successfully attached
[77136.782260] usb 2-1.2: DVB: registering adapter 0 frontend 0 (Silicon Labs Si2168)...
[77136.782267] dvb_create_media_entity: media entity 'Silicon Labs Si2168' registered.
[77136.783032] input: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/input/input18
[77136.783142] dvb-usb: schedule remote query interval to 100 msecs.
[77136.783242] dvb-usb: Mygica T230C DVB-T/T2/C successfully initialized and connected.
[77142.879824] si2168 3-0064: downloading firmware from file 'dvb-demod-si2168-d60-01.fw'
[77143.287741] si2168 3-0064: firmware version: D 6.0.2
[77143.306530] si2157 4-0060: Si2141/2151 reset attempts 1
[77143.314978] si2157 4-0060: found a 'Silicon Labs Si2141-A10'
[77143.315016] si2157 4-0060: downloading firmware from file 'dvb-tuner-si2141-a10-01.fw'
[77143.802698] si2157 4-0060: firmware version: 1.1.10
Отмечу, что для использовании данного ТВ тюнера в сетях кабельного телевидения, может потребоваться аттенюатор для ослабления входного сигнала - с высоким уровнем сигнала он отказался работать.