Цель: принимать DTT-телевидение локально с помощью Raspberry Pi, оснащенного ТВ-тюнером DVB-T2 и/или ключами RTL-SDR.
Протестируйте с помощью двух инструментов: dvblast и mumudvb .
В каталогах conf/dvblast и conf/mumudvb находятся конфигурации мультиплексов DTT, доступных в Париже, с адресом многоадресной рассылки для каждого канала.
Сначала мы ограничим диапазон IP-адресов многоадресной рассылки локальным шлейфом, чтобы не перегружать сеть, если коммутаторы не оптимизированы для многоадресной рассылки (см. IGMP Snooping).
ip route add 239.10.10.0/24 dev lo src 127.0.0.1Затем, чтобы проверить маршруты сетевой карты:
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default lan.home 0.0.0.0 UG 202 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
239.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 lo Примечание: команда route является частью пакета net-tools в Debian .
Или
$ ip route show
default via 192.168.1.1 dev eth0 src 192.168.1.74 metric 202
192.168.1.0/24 dev eth0 proto dhcp scope link src 192.168.1.74 metric 202
239.10.10.0/24 dev lo scope link src 127.0.0.1Чтобы сделать это правило постоянным:
Debian создайте файл /etc/network/if-up.d/local-multicast (и сделайте его исполняемым) со следующим содержимым: #! /bin/sh
# à mettre dans /etc/network/if-up.d/local-multicast (rendre exécutable)
# le multicast ne sort pas de la boucle locale pour éviter de flooder le réseau
if [ " $IFACE " = " lo " ] ; then
ip route add 239.10.10.0/24 dev lo src 127.0.0.1
fiCentOS7 создайте файл /etc/sysconfig/network-scripts/route-lo со следующим содержимым: 239.10.10.0/24 via 127.0.0.1 dev loзатем перезапустите сетевую службу
systemctl restart network Роль dvblast заключается в демультиплексировании сигнала с карты тюнера и трансляции IP-потока в сети, по умолчанию в rtp .
Средство
apt install dvblastПроверка
$ dvblast --version
DVBlast 3.4 (release) mumudvb — это эволюция dvblast
Средство
apt install mumudvb Добавьте нового пользователя _mumudvb в группы video и plugdev
usermod -a -G video _mumudvb
usermod -a -G plugdev _mumudvb udp по умолчанию. для rtp используйте в конфигурации rtp_header равное 1 .
ffmpeg — это швейцарский армейский нож аудиовизуальных средств. Позволяет перекодировать, анализировать, генерировать медиафайлы. Мы будем использовать его для чтения потока rtp/udp и отображения его непосредственно на стандартном выводе. В режиме плоского прохода.
Средство
apt install ffmpegПроверка
$ ffmpeg 2>&1 | head -1
ffmpeg version 4.3.4-0+deb11u1+rpt3 Copyright (c) 2000-2021 the FFmpeg developers В каталоге systemd имеются 2 служебных файла. Скопируем их в нужное место:
cp systemd/[email protected] /etc/systemd/system
cp systemd/[email protected] /etc/systemd/system
systemctl daemon-reloadПримечание. Возможно, потребуется изменить путь к приложениям и журналам.
Чтобы начать потоковую передачу мультиплекса, используйте одну из следующих команд:
systemctl start mumudvb@0_r1
systemctl enable --now dvblast@1_r15 параметр имеет форму CARD_MUX :
CARD идентификатор карты (0...7)MUX идентификатор мультиплекса (r1...r15)Ссылка: Документация Systemd
Мы можем проверить, что мультиплекс передается по локальному контуру с помощью netstat :
$ netstat -nu
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 127.0.0.1:41809 239.10.10.14:1234 ESTABLISHED
udp 0 0 127.0.0.1:52565 239.10.10.3:1234 ESTABLISHED
udp 0 0 127.0.0.1:39327 239.10.10.2:1234 ESTABLISHED
udp 0 0 127.0.0.1:45600 239.10.10.27:1234 ESTABLISHED
udp 0 0 127.0.0.1:37410 239.10.10.30:1234 ESTABLISHED Примечание: с mumudvb нет такого же результата netstat...
С другой стороны, инструмент iptraf позволяет вам просматривать сетевой трафик в текстовом интерфейсе.
apt install iptraf с ffmpeg
ffmpeg -i rtp://239.10.10.2:1234 -c copy -map 0 rec.ts или еще лучше с multicat (зависимость bitstream , легко компилируется)
multicat -X @239.10.10.2:1234 /dev/null 2> /dev/null > rec.tsОписание параметров:
-X : мы просим, чтобы поток ts прошел через стандартный вывод@239.10.10.2:1234 : укажите группу многоадресной рассылки, на которую вы хотите подписаться./dev/null : мы не хотим, чтобы поток записывался на диск.2>/dev/null : скрываем вывод ошибки-u , чтобы добавить, является ли поток «сырым» udp , а не rtp> rec.ts : перенаправляем поток в файл В случае сети, несовместимой с многоадресной рассылкой, и во избежание лавинной рассылки может быть интересно преобразовать поток многоадресной рассылки в одноадресную. Однако обратите внимание на объем сети, если к источнику подключается много клиентов.
Установка udpxy
git clone https://github.com/pcherenkov/udpxy
cd udpxy/chipmunk
make
sudo make installРучной запуск сервиса:
sudo udpxy -p 80 -c 8 Служба будет работать на порту 80 ( -p ) с максимум 8 клиентами ( -c ).
Запускаем через systemd :
Также здесь находится служебный файл systemd для udpxy.
cp conf/systemd/udpxy.service /etc/systemd/system
systemctl daemon-reload
sudo systemctl enable --now udpxyПроверяем, что служба работает:
$ netstat -an | grep " :80 "
tcp 0 0 0.0.0.0:80 0.0.0.0: * LISTENТеперь в нашей локальной сети мы сможем запросить в одноадресной передаче и TCP через протокол http такой запрос:
vlc http://dvbstream/rtp/239.10.10.2:1234dvbstream — это IP/хост машины, на которой работает udpxy/rtp/ или /udp/ в зависимости от протокола потока, используемого источником.239.10.10.2:1234 IP и порт исходной группы многоадресной рассылкиВот полный плейлист в формате .m3u всех заявленных в этом проекте каналов (все парижские мультиплексы ТНТ).
Пример бесшумной мозаики с расположением окон 2x2 на экране 1920x1080:
mpv http://dvbstream/rtp/239.10.10.2:1234 --mute=yes --no-border --geometry=960x540+0+0 --deinterlace=yes &
mpv http://dvbstream/rtp/239.10.10.27:1234 --mute=yes --no-border --geometry=960x540+960+0 --deinterlace=yes &
mpv http://dvbstream/rtp/239.10.10.10:1234 --mute=yes --no-border --geometry=960x540+0+540 --deinterlace=yes &
mpv http://dvbstream/rtp/239.10.10.11:1234 --mute=yes --no-border --geometry=960x540+960+540 --deinterlace=yes & sudo systemctl enable --now dvblast@0_r1sudo systemctl enable --now dvblast@1_r2sudo systemctl enable --now dvblast@2_r3Итого: 74,4 Мб/с
sudo systemctl enable --now dvblast@0_r4sudo systemctl enable --now dvblast@1_r6sudo systemctl enable --now dvblast@2_r7Итого: 74,4 Мб/с
sudo systemctl enable --now dvblast@0_r9sudo systemctl enable --now dvblast@0_r15Итого: 50 Мбит/с


Каталог /dev/dvb должен содержать хотя бы один adapter :
$ ll /dev/dvb/
total 0
drwxr-xr-x 2 root root 120 Mar 8 22:41 adapter0
drwxr-xr-x 2 root root 120 Mar 8 22:41 adapter1
drwxr-xr-x 2 root root 100 Mar 8 22:41 adapter2Просмотр 2-х ключей RTL-SDR, подключенных через USB:
$ lsusb | grep RTL
Bus 001 Device 004: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
Bus 001 Device 005: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T