Objetivo: recibir televisión TDT en local con una Raspberry Pi equipada con un sintonizador TV HAT DVB-T2 y/o teclas RTL-SDR.
Prueba con 2 herramientas: dvblast y mumudvb .
En los directorios conf/dvblast y conf/mumudvb se encuentran las configuraciones de los múltiplex TDT disponibles en París con una dirección de emisión multicast para cada canal.
Primero restringiremos el rango de IP de multidifusión al bucle local para no inundar la red si los conmutadores no están optimizados para multidifusión (consulte IGMP Snooping).
ip route add 239.10.10.0/24 dev lo src 127.0.0.1Luego para verificar las rutas de la tarjeta de red:
$ 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 Nota: el comando route es parte del paquete net-tools en Debian .
O
$ 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.1Para que esta regla sea persistente:
Debian cree el archivo /etc/network/if-up.d/local-multicast (y hágalo ejecutable) con el siguiente contenido: #! /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 cree un archivo /etc/sysconfig/network-scripts/route-lo con el siguiente contenido: 239.10.10.0/24 via 127.0.0.1 dev loluego reinicie el servicio de red
systemctl restart network La función de dvblast es demultiplexar la señal de la tarjeta sintonizadora y transmitir una secuencia IP en la red, en rtp de forma predeterminada.
Instalación
apt install dvblastVerificación
$ dvblast --version
DVBlast 3.4 (release) mumudvb es una evolución de dvblast
Instalación
apt install mumudvb Agregue el nuevo usuario _mumudvb a los grupos video y plugdev
usermod -a -G video _mumudvb
usermod -a -G plugdev _mumudvb udp de forma predeterminada. para rtp use rtp_header a 1 en la configuración.
ffmpeg es la navaja suiza del audiovisual. Permite transcodificación, análisis, generación de archivos multimedia. Lo usaremos para leer una secuencia rtp/udp y mostrarla directamente en la salida estándar. En modo pase plano.
Instalación
apt install ffmpegVerificación
$ ffmpeg 2>&1 | head -1
ffmpeg version 4.3.4-0+deb11u1+rpt3 Copyright (c) 2000-2021 the FFmpeg developers En el directorio systemd , se proporcionan 2 archivos de servicio. Copiémoslos en el lugar correcto:
cp systemd/[email protected] /etc/systemd/system
cp systemd/[email protected] /etc/systemd/system
systemctl daemon-reloadNota: es posible que sea necesario adaptar la ruta de las aplicaciones y los registros.
Para comenzar a transmitir un multiplex, use uno de los siguientes comandos de ejemplo:
systemctl start mumudvb@0_r1
systemctl enable --now dvblast@1_r15 el parámetro tiene el formato CARD_MUX :
CARD el identificador de la tarjeta (0 ... 7)MUX el identificador multiplex (r1 ... r15)Enlace: Documentación de Systemd
Podemos comprobar que un multiplex se transmite en el bucle local con 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 Nota: con mumudvb no hay el mismo resultado de netstat...
Por otro lado, la herramienta iptraf permite tener una visión general del tráfico de la red en una interfaz de texto.
apt install iptraf con ffmpeg
ffmpeg -i rtp://239.10.10.2:1234 -c copy -map 0 rec.ts o incluso mejor con multicat (dependencia bitstream , se compila fácilmente)
multicat -X @239.10.10.2:1234 /dev/null 2> /dev/null > rec.tsDescripción de parámetros:
-X : pedimos que el flujo ts pase por la salida estándar@239.10.10.2:1234 : especifica el grupo de multidifusión al que deseas suscribirte/dev/null : no queremos que la secuencia se escriba en el disco2>/dev/null : ocultamos la salida del error-u para agregar si la transmisión es udp "sin procesar" y no rtp> rec.ts : redireccionamos el flujo a un archivo En el caso de una red no compatible con multicast y para evitar inundaciones, puede ser interesante convertir el flujo multicast en unicast. Sin embargo, preste atención al volumen de la red si muchos clientes se conectan a la fuente.
Instalación udpxy
git clone https://github.com/pcherenkov/udpxy
cd udpxy/chipmunk
make
sudo make installLanzamiento manual del servicio:
sudo udpxy -p 80 -c 8 El servicio se ejecutará en el puerto 80 ( -p ), con un máximo de 8 clientes ( -c ).
Iniciar a través de systemd :
También aquí hay un archivo de servicio systemd para udpxy.
cp conf/systemd/udpxy.service /etc/systemd/system
systemctl daemon-reload
sudo systemctl enable --now udpxyComprobando que el servicio se está ejecutando:
$ netstat -an | grep " :80 "
tcp 0 0 0.0.0.0:80 0.0.0.0: * LISTENAhora, en nuestra red local podremos solicitar, en unicast y TCP, mediante el protocolo http, una petición como esta:
vlc http://dvbstream/rtp/239.10.10.2:1234dvbstream es la ip/host de la máquina que ejecuta udpxy/rtp/ o /udp/ dependiendo del protocolo de transmisión utilizado por la fuente239.10.10.2:1234 la ip y el puerto del grupo de multidifusión de origenAquí está la lista de reproducción completa.m3u de todos los canales declarados en este proyecto (todos los multicines TNT parisinos).
Ejemplo de mosaico silencioso con posicionamiento de ventana 2x2 en una pantalla de 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_r3Total: 74,4 MB/s
sudo systemctl enable --now dvblast@0_r4sudo systemctl enable --now dvblast@1_r6sudo systemctl enable --now dvblast@2_r7Total: 74,4 MB/s
sudo systemctl enable --now dvblast@0_r9sudo systemctl enable --now dvblast@0_r15Total: 50 MB/s


El directorio /dev/dvb debe contener al menos un 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 adapter2Visualización de 2 llaves RTL-SDR conectadas vía 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