Ziel: DVB-T-Fernsehen lokal mit einem Raspberry Pi empfangen, der mit einem DVB-T2 TV HAT-Tuner und/oder RTL-SDR-Tasten ausgestattet ist.
Testen Sie mit 2 Tools: dvblast
und mumudvb
.
In den Verzeichnissen conf/dvblast
und conf/mumudvb
finden Sie die Konfigurationen der in Paris verfügbaren DTT-Multiplexe mit einer Multicast-Broadcast-Adresse für jeden Kanal.
Wir werden zunächst den Multicast-IP-Bereich auf die lokale Schleife beschränken, um das Netzwerk nicht zu überfluten, wenn die Switches nicht für Multicast optimiert sind (siehe IGMP-Snooping).
ip route add 239.10.10.0/24 dev lo src 127.0.0.1
Dann überprüfen Sie die Routen der Netzwerkkarte:
$ 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
Hinweis: Der route
-Befehl ist Teil des net-tools
-Pakets unter Debian
.
Oder
$ 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
Um diese Regel dauerhaft zu machen:
Debian
die Datei /etc/network/if-up.d/local-multicast
erstellen (und ausführbar machen) mit folgendem Inhalt: #! /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
eine Datei /etc/sysconfig/network-scripts/route-lo
mit folgendem Inhalt: 239.10.10.0/24 via 127.0.0.1 dev lo
Starten Sie dann den Netzwerkdienst neu
systemctl restart network
Die Aufgabe von dvblast
besteht darin, das Signal von der Tunerkarte zu demultiplexen und einen IP-Stream im Netzwerk zu übertragen, standardmäßig in rtp
.
Einrichtung
apt install dvblast
Überprüfung
$ dvblast --version
DVBlast 3.4 (release)
mumudvb
ist eine Weiterentwicklung von dvblast
Einrichtung
apt install mumudvb
Fügen Sie den neuen Benutzer _mumudvb
zu den Gruppen video
und plugdev
hinzu
usermod -a -G video _mumudvb
usermod -a -G plugdev _mumudvb
udp
standardmäßig. Für rtp
verwenden Sie in der Konfiguration rtp_header
auf 1
.
ffmpeg
ist das Schweizer Taschenmesser der audiovisuellen Medien. Es ermöglicht die Transkodierung, Analyse und Generierung von Mediendateien. Wir werden es verwenden, um einen RTP/UDP-Stream zu lesen und ihn direkt auf der Standardausgabe anzuzeigen. Im Flat-Pass-Modus.
Einrichtung
apt install ffmpeg
Überprüfung
$ ffmpeg 2>&1 | head -1
ffmpeg version 4.3.4-0+deb11u1+rpt3 Copyright (c) 2000-2021 the FFmpeg developers
Im systemd
Verzeichnis werden 2 Servicedateien bereitgestellt. Kopieren wir sie an die richtige Stelle:
cp systemd/[email protected] /etc/systemd/system
cp systemd/[email protected] /etc/systemd/system
systemctl daemon-reload
Hinweis: Der Pfad von Apps und Protokollen muss möglicherweise angepasst werden.
Um mit dem Streaming eines Multiplex zu beginnen, verwenden Sie einen der folgenden Beispielbefehle:
systemctl start mumudvb@0_r1
systemctl enable --now dvblast@1_r15
Der Parameter hat die Form CARD_MUX
:
CARD
die Kartenkennung (0 ... 7)MUX
die Multiplex-Kennung (r1 ... r15)Link: Systemd-Dokumentation
Mit netstat
können wir überprüfen, ob ein Multiplex auf dem Teilnehmeranschluss gestreamt wird:
$ 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
Hinweis: Mit mumudvb
gibt es nicht das gleiche Netstat-Ergebnis ...
Andererseits ermöglicht Ihnen das iptraf
-Tool einen Überblick über den Netzwerkverkehr in einer Textoberfläche.
apt install iptraf
mit ffmpeg
ffmpeg -i rtp://239.10.10.2:1234 -c copy -map 0 rec.ts
oder noch besser mit multicat
( bitstream
Abhängigkeit, leicht kompilierbar)
multicat -X @239.10.10.2:1234 /dev/null 2> /dev/null > rec.ts
Beschreibung der Parameter:
-X
: Wir bitten darum, dass der TS-Stream die Standardausgabe durchläuft@239.10.10.2:1234
: Geben Sie die Multicast-Gruppe an, die Sie abonnieren möchten/dev/null
: Wir möchten nicht, dass der Stream auf die Festplatte geschrieben wird2>/dev/null
: Wir verbergen die Fehlerausgabe-u
zum Hinzufügen, wenn der Stream „raw“ udp
und nicht rtp
ist> rec.ts
: Wir leiten den Fluss in eine Datei um Im Falle eines Netzwerks, das nicht mit Multicast kompatibel ist, und um Überschwemmungen zu vermeiden, kann es interessant sein, den Multicast-Stream in Unicast umzuwandeln. Achten Sie jedoch auf die Netzwerklautstärke, wenn sich viele Clients mit der Quelle verbinden.
udpxy
installieren
git clone https://github.com/pcherenkov/udpxy
cd udpxy/chipmunk
make
sudo make install
Manueller Start des Dienstes:
sudo udpxy -p 80 -c 8
Der Dienst wird auf Port 80 ( -p
) mit maximal 8 Clients ( -c
) ausgeführt.
Starten Sie über systemd
:
Außerdem gibt es hier eine Systemd-Dienstdatei für udpxy.
cp conf/systemd/udpxy.service /etc/systemd/system
systemctl daemon-reload
sudo systemctl enable --now udpxy
Überprüfen, ob der Dienst ausgeführt wird:
$ netstat -an | grep " :80 "
tcp 0 0 0.0.0.0:80 0.0.0.0: * LISTEN
Jetzt können wir in unserem lokalen Netzwerk in Unicast und TCP über das http-Protokoll eine Anfrage wie diese anfordern:
vlc http://dvbstream/rtp/239.10.10.2:1234
dvbstream
ist die IP/Host-Adresse des Rechners, auf udpxy
läuft/rtp/
oder /udp/
abhängig vom von der Quelle verwendeten Stream-Protokoll239.10.10.2:1234
die IP und der Port der Quell-Multicast-GruppeHier ist die komplette.m3u-Playlist aller in diesem Projekt deklarierten Kanäle (alle Pariser TNT-Multiplexe).
Beispiel für ein stilles Mosaik mit 2x2-Fensterpositionierung auf einem 1920x1080-Bildschirm:
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
Gesamt: 74,4 Mbit/s
sudo systemctl enable --now dvblast@0_r4
sudo systemctl enable --now dvblast@1_r6
sudo systemctl enable --now dvblast@2_r7
Gesamt: 74,4 Mbit/s
sudo systemctl enable --now dvblast@0_r9
sudo systemctl enable --now dvblast@0_r15
Gesamt: 50 Mbit/s
Das Verzeichnis /dev/dvb
muss mindestens einen adapter
enthalten:
$ 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
Anzeigen von 2 über USB angeschlossenen RTL-SDR-Tasten:
$ 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