Цель: принимать 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
fi
CentOS7
создайте файл /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:1234
dvbstream
— это 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_r1
sudo systemctl enable --now dvblast@1_r2
sudo systemctl enable --now dvblast@2_r3
Итого: 74,4 Мб/с
sudo systemctl enable --now dvblast@0_r4
sudo systemctl enable --now dvblast@1_r6
sudo systemctl enable --now dvblast@2_r7
Итого: 74,4 Мб/с
sudo systemctl enable --now dvblast@0_r9
sudo 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