Skip to content
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи
Collapse
  1. Главная
  2. Блоги сообщества Raspberry Pi
  3. Raspberry PI и цифровое телевидение dvb-t2

Raspberry PI и цифровое телевидение dvb-t2

Запланировано Прикреплена Закрыта Перенесена Блоги сообщества Raspberry Pi
1 Сообщения 1 Posters 253 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • piP Не в сети
    piP Не в сети
    pi
    написал в отредактировано pi
    #1

    Для просмотра передач цифрового телевидения на 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
    837cb699-9bf1-409c-b35f-ba1b46026dd7-image.png
    После подключения тюнера к 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 км и пришлось рассчитывать и делать антенну типа «Двойной квадрат Харченко».

    3fa1da51-1ad8-464f-905b-26439d205481-image.png

    Расчет делался по средней длине волны первого и второго мультиплекса. Кстати, третий мультиплекс на ТВК 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 не сложна, но это уже совсем другая история.

    1 ответ Последний ответ
    0

    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Login or register to search.
    • Первое сообщение
      Последнее сообщение
    0
    • Категории
    • Главная
    • Документация
    • Последние
    • Пользователи