Raspberry PI и цифровое телевидение dvb-t2
-
Для просмотра передач цифрового телевидения на Raspberry pi нужно обзавестись тюнером, работающий по стандарту dvb-t2 и решить 3 задачи:
- Убедиться, что Raspberry видит тюнер
- Убедиться, что тюнер видит телевышку
- Убедиться, что правильно настроены программы для приема, показа и записи телепередач
Все это было реализовано на Raspberry Pi 3 под управлением Raspbian Stretch (Version:November 2018, Release date:2018-11-13, Kernel version:4.14)
А теперь подробнее. (Букв будет много, но результат того стоит )
Задача 1. Убедиться, что Raspberry видит тюнер
Для приема передач использовался тюнер AstroMeta Digital TV Dongle , который можно найти и купить на aliexpress, введя в поиск строку «DVB-T2 DVB-C FM DAB USB tv stick». Внутренности этого тюнера можно посмотреть по ссылке https://www.ixbt.com/monitor/astrometa-digital-tv-dongle.shtml
После подключения тюнера к USB разъему нужно выйти в терминал и выполнить команду$ lsusb | grep HanfTek
Если не экране появится строка, похожая на такую Bus 001 Device 007: ID 15f4:0131 HanfTek значит Raspberry видит тюнер на аппаратном уровне. В противном случае надо разбираться с плохими контактами, сгоревшими портами и плохим электропитанием.
Если тюнер виден на аппаратном уровне, можно продолжить иввести команду $ sudo dmesg -t | grep dvb
Появление таких строк в выводе программы потребует дополнительных действий.
[ 31.201602] mn88473 4-0018: Direct firmware load for dvb-demod-mn88473-01.fw failed with error -2 [ 31.201653] mn88473 4-0018: firmare file 'dvb-demod-mn88473-01.fw' not found
Это сообщение означает, что не найден файл dvb-demod-mn88473-01.fw , необходимый для работы тюнера. Файл нужно найти в интернете и положить его в папку /lib/firmware/ .
Сделать это можно, выполнив следующие команды:
$ cd /lib/firmware/ $ sudo wget http://palosaari.fi/linux/v4l-dvb/firmware/MN88473/01/latest/dvb-demod-mn88473-01.fw или $ cd /lib/firmware/ $ sudo wget https://github.com/OpenELEC/dvb-firmware/raw/master/firmware/dvb-demod-mn88473-01.fw
После этого нужно перегрузиться и убедиться в нормальной работе тюнера.
$ sudo reboot $ sudo dmesg -t | grep dvb
Raspberry видит тюнер на программном уровне, если на экране будут такие строки:
usb 1-1.3: Product: dvbt2 usb 1-1.3: Manufacturer: astrometadvbt2 usb 1-1.3: dvb_usb_v2: found a 'Astrometa DVB-T2' in warm state usb 1-1.3: dvb_usb_v2: will pass the complete MPEG2 transport stream to the software demuxer usb 1-1.3: dvb_usb_v2: schedule remote query interval to 200 msecs input: MCE IR Keyboard/Mouse (dvb_usb_rtl28xxu) as /devices/virtual/input/input1 rc rc0: lirc_dev: driver ir-lirc-codec (dvb_usb_rtl28xxu) registered at minor = 0 usb 1-1.3: dvb_usb_v2: 'Astrometa DVB-T2' successfully initialized and connected usbcore: registered new interface driver dvb_usb_rtl28xxu
Ввод команды $ ls /dev/dvb/ покажет номер адаптера «adapter0», соответствующего подключенному тюнеру, а команда $ ls /dev/dvb/ adapter0 покажет название интерфейсов, которые поддерживает этот адаптер 0 demux0 dvr0 frontend0 frontend1 net0
Для дальнейших настроек установите два пакета
$ apt-get install dvb-tools dtv-scan-tables
Можно посмотреть, что такое frontend0 и frontend1 у адаптера 0. $ dvb-fe-tool -a 0 -f 0 Вывод программы однозначно показывает, что frontend0 – это интерфейс для приема сигнала в формате DVB-T. $ dvb-fe-tool -a 0 -f 1 Глядя на вывод программы, убеждаемся, что frontend1 – это интерфейс для приема сигнала в формате DVB-T2 со всеми необходимыми возможностями и именно этот интерфейс будет использоваться для дальнейших настроек.
Замечу, что вместе с работающим тюнером у Raspberry pi появился инфракрасный датчик, который отлично работает под lirc, но это в данной публикации рассматриваться не будет.
Задача 2. Убедиться, что тюнер видит телевышку
На сайте http://карта.ртрс.рф надо найти точку, в которой будут расположены тюнер и Raspberry. Щелкнув мышкой по этой точке можно увидеть параметры ближайших телевышек, с которых в дальнейшем будет приниматься телетрансляция. Для моего случая параметры такие:
Расстояние: 10,13 км Направление: 339 Пакет телеканалов РТРС-1 - ТВК 30 (546 МГц) Пакет телеканалов РТРС-2 - ТВК 24 (498 МГц)
Расстояние и направление нужно для выбора антенны и ее ориентации при размещении.Частоты потребуются и при выборе антенны, и при настройки тюнера.
У меня штатная антенна из комплекта тюнера не заработала при удаленности от вышки на 10 км и пришлось рассчитывать и делать антенну типа «Двойной квадрат Харченко».
Расчет делался по средней длине волны первого и второго мультиплекса. Кстати, третий мультиплекс на ТВК 34 (578 МГц) так же отлично принимается из-за широкополосности этой антенны.
Скорость света = 299,792458 км/сек
Средняя частота 1 и 2 мультиплексов = (546 + 498) / 2 = 522 Мгц
Рабочая длина волны антенны = 299,792458 / 522 = 57,43 см
Сторона квадрата антенны равна четверти длины волны, т.е. 57,43 / 4 = 14,36 см.
Взявши медный провод длиной 115 см и диаметром 2,5 мм я сделал фигуру, похожую на восьмерку из двух квадратов со стороной 144 мм, запаяв стык в талии восьмерки. Зазор в талии восьмерки оставил равным 10 мм, припаяв экран коаксиала к одной стороне, а центральную жилу - к другой стороне талии. Место пайки поместил в пластиковую крышку от молока и залил пластиком, сохраняя зазор в 10 мм. Длина коаксиала до тюнера примерно 80 см. Сам тюнер включил в метровый USB удлинитель, рассчитанный на скорости USB2. Антенну разместил вертикально (т.е. как восьмерку), т.к. поляризация в Москве горизонтальная. Для приема сигнала с вертикальной поляризацией антенну надо размещать как восьмерку, лежащую на боку. Ориентировал антенну по компасу плоскостью на телевышку (в моем случае на 399 градусов).Антенна готова и можно приниматься за сканирование эфира.
Таблицы сканирования расположены в папке /usr/share/dvb/dvb-t/, но нужный мне город отсутствует. Там есть таблица ru-all, которая рассчитана на сканирование всех частот, но она не учитывает используемый в Москве Multiple PLP - режим передачи нескольких каналов физического уровня внутри одного транспортного потока (мультиплекса).
Для Москвы реальные трансляции такие:
Мультиплекс 1 - 546 Mhz (plp 0, 1, 2)
Мультиплекс 2 - 498 Mhz (plp 0)
Мультиплекс 3 - 578 Mhz (plp 0)
И соответствующая таблица сканирования выглядит так:[MULTIPLEX 1] FREQUENCY = 546000000 MODULATION = QAM/256 BANDWIDTH_HZ = 8000000 INVERSION = AUTO CODE_RATE_HP = AUTO CODE_RATE_LP = AUTO GUARD_INTERVAL = AUTO TRANSMISSION_MODE = AUTO HIERARCHY = NONE STREAM_ID = 0 DELIVERY_SYSTEM = DVBT2 [MULTIPLEX 1-1] FREQUENCY = 546000000 MODULATION = QAM/256 BANDWIDTH_HZ = 8000000 INVERSION = AUTO CODE_RATE_HP = AUTO CODE_RATE_LP = AUTO GUARD_INTERVAL = AUTO TRANSMISSION_MODE = AUTO HIERARCHY = NONE STREAM_ID = 1 DELIVERY_SYSTEM = DVBT2 [MULTIPLEX 1-2] FREQUENCY = 546000000 MODULATION = QAM/256 BANDWIDTH_HZ = 8000000 INVERSION = AUTO CODE_RATE_HP = AUTO CODE_RATE_LP = AUTO GUARD_INTERVAL = AUTO TRANSMISSION_MODE = AUTO HIERARCHY = NONE STREAM_ID = 2 DELIVERY_SYSTEM = DVBT2 [MULTIPLEX 2] FREQUENCY = 498000000 MODULATION = QAM/256 BANDWIDTH_HZ = 8000000 INVERSION = AUTO CODE_RATE_HP = AUTO CODE_RATE_LP = AUTO GUARD_INTERVAL = AUTO TRANSMISSION_MODE = AUTO HIERARCHY = NONE STREAM_ID = 0 DELIVERY_SYSTEM = DVBT2 [MULTIPLEX 3] FREQUENCY = 578000000 MODULATION = QAM/AUTO BANDWIDTH_HZ = 8000000 INVERSION = AUTO CODE_RATE_HP = AUTO CODE_RATE_LP = AUTO GUARD_INTERVAL = AUTO TRANSMISSION_MODE = AUTO HIERARCHY = NONE STREAM_ID = 0 DELIVERY_SYSTEM = DVBT2
Подготовить таблицу для своего города очень просто.В квадратных скобках указывается произвольное название транспортного потока.
FREQUENCY = частота вещания потока в Гц
MODULATION = вид модуляции. Если не знаете точно, то ставьте QAM/AUTO
STREAM_ID = это тот самый номер канала физического уровня внутри транспортного канала с заданной частотой.
Сохраните таблицу в папке /usr/share/dvb/dvb-t/ под именем «ru-название города». (В моем случае /usr/share/dvb/dvb-t/ru-Moscow). Далее нужно перейти в домашнюю папку и можно сканировать эфир программой dvbv5-scan, указав в параметрах номер адаптера, номер frontend и таблицу сканируемых частот.
В моем случае это делается так: $ cd ~ $ dvbv5-scan -a 0 -f 1 /usr/share/dvb/dvb-t/ru-Moscow
В домашней папке появится файл dvb_channel.conf, который можно посмотреть командой «less dvb_channel.conf».Если в нем есть названия каналов с частотами, модуляциями и т.д., по тюнер видит телевышку и можно настраивать программы для просмотра телепередач. Уровень принимаемого сигнала для разных каналов можно посмотреть так (указав название канала после параметра -r): $ dvbv5-zap -a 0 -f 1 -c dvb_channel.conf -r '01 ПЕРВЫЙ КАНАЛ'
Если же сигнал не идет, то надо серьезно заняться подбором и настройкой антенны.
Задача 3. Убедиться, что правильно настроены программы для приема, показа и записи телепередач.
Для удобства просмотра нужно установить потоковый сервер и рекордер tvheadend .
$ sudo apt-get install tvheadend
При установке будут запрашиваться пароли для входа в настройки.Забытый пароль можно посмотреть в файле /var/lib/hts/.hts/tvheadend/superuser
Чтобы работать без пароля нужно сделать 3 шага:
- Остановить сервер (sudo service tvheadend stop)
- В файле /etc/init.d/tvheadend строку ARGS="-f" заменить на ARGS="-f --noacl"
- Запустить сервер (sudo service tvheadend start).
Все настройки делаются через web интерфейс по адресу http://127.0.0.1:9981 и многократно описаны в инет. Минимально необходимые инструкции приведены ниже.
Логика настроек tvheadend такая:
Создать сеть внутреннего телевещания с частотами из таблицы сканируемых частот (напоминаю о /usr/share/dvb/dvb-t/ru-Moscow).
Связать правильный интерфейс адаптера (напоминаю о adapter0 frontend1) с этой созданной сетью.
Подождать завершения сканирования и разрешить трансляцию всех найденных каналов.
Для создания сети на вкладке «Configuration» -> «DVB Input» -«Networks» нажать на зеленый плюс «Add»;Из списка выбрать тип сети «DVB-T» (именно «DVB-T», а не dvb-t2); В форме заполнить поля «Network:» (любое имя), «Pre-defined muxes:» (выбрать созданную ранее таблицу сканирования, например ru-Moscow), «Character set:» (выбрать AUTO) и нажать кнопку «Create»Для связывания адаптера с созданной сетью на вкладке «Configuration» - «DVB Input» - «TV adapters» ткнуть мышкой в «Panasonic MN88473 #0 : DVB-T #1» (что соответствует adapter0 frontend1). В форме, открывшейся справа, в разделе «Basic Settings» в поле «Networks:» выбрать созданную сеть. Там же поставить галку в поле «Enabled» и нажать на кнопку «Save».
Для разрешения трансляции всех найденных каналов нужно перейти на вкладку «Configuration» -«DVB Input» - «Muxes», дождаться появления в колонке «Scan result» сообщения «OK» (либо «FAIL»). Далее на вкладке «Configuration» -«DVB Input» - «Services» в выпадающем списке «Mux Services» выбрать «Map all services» и нажать на кнопку «Save».
Все три задачи решены и сеть внутреннего телевещания наконец начала работать, позволяя смотреть и записывать любой принимаемый канал.
• Чтобы посмотреть телетрансляции не выходя из web интерфейса tvheadend надо перейти на самую левую вкладку верхнего уровня «Electronic Progran Guide» с загруженной программой передач и ткнуть в иконку телевизора около требуемого канала.
• Если хотите, чтобы у каждого канала показывался логотип, перейдите на вкладку «Configuration» -«General» - «Base». В нижней части открывшейся таблицы в поле «Picon path:» введите «file:///var/lib/hts/picons» (без кавычек), а в поле «Prefer picons over channel name:» поставьте галочку. Все файлы с логотипами телеканалов (png размером 256х256) скопируйте в папку /var/lib/hts/picons и смените владельца и группу для этих файлов на hts:hts. Далее на вкладке «Configuration» - «ChannelEPG» - «Channels» в каждое поле «User Icon» нужно ввести имя файла(без кавычек) с логотипом канала в формате «picon://01.png», «picon://02.png» и т.д.
• Для просмотра на любом vlc плеере в сети нужен плейлист, который можно получить, набрав в браузере http://127.0.0.1:9981/playlist. Загрузится файл channels, который рекомендую переименовать в channels.m3u и использовать для просмотра в сети со всех компьютеров, планшетов и мобильных телефонов.
• Для iPad и iPhone есть программа TvhClient, которая позволяет смотреть вещание сервера tvheadend и при необходимости запускать запись на Raspberry Pi.
• Для Android-устройств так же есть программы-клиенты tvheadend, которые можно найти в Google Play, задав в строке поиска tvheadend.
Для удобного просмотра телепередач непосредственно на Raspberry pi я использую kodi с пакетом kodi-pvr-hts.
Установка и настройка kodi не сложна, но это уже совсем другая история.