Objetivo: receber televisão TDT localmente com um Raspberry Pi equipado com sintonizador TV HAT DVB-T2 e/ou teclas RTL-SDR.
Teste com 2 ferramentas: dvblast e mumudvb .
Nos diretórios conf/dvblast e conf/mumudvb estão as configurações dos multiplexes TDT disponíveis em Paris com um endereço de difusão multicast para cada canal.
Primeiro restringiremos o intervalo IP multicast ao loop local para não inundar a rede se os switches não estiverem otimizados para multicast (consulte IGMP Snooping).
ip route add 239.10.10.0/24 dev lo src 127.0.0.1Então, para verificar as rotas da placa de rede:
$ 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: o comando route faz parte do pacote net-tools no Debian .
Ou
$ 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 tornar esta regra persistente:
Debian crie o arquivo /etc/network/if-up.d/local-multicast (e torne-o executável) com o seguinte conteúdo: #! /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 crie um arquivo /etc/sysconfig/network-scripts/route-lo com o seguinte conteúdo: 239.10.10.0/24 via 127.0.0.1 dev loentão reinicie o serviço de rede
systemctl restart network A função do dvblast é demultiplexar o sinal da placa sintonizadora e transmitir um fluxo IP na rede, em rtp por padrão.
Instalação
apt install dvblastVerificação
$ dvblast --version
DVBlast 3.4 (release) mumudvb é uma evolução do dvblast
Instalação
apt install mumudvb Adicione o novo usuário _mumudvb aos grupos video e plugdev
usermod -a -G video _mumudvb
usermod -a -G plugdev _mumudvb udp por padrão. para rtp use rtp_header como 1 na configuração.
ffmpeg é o canivete suíço do audiovisual. Permite transcodificação, análise, geração de arquivos de mídia. Iremos usá-lo para ler um fluxo RTP/UDP e exibi-lo diretamente na saída padrão. No modo de passagem plana.
Instalação
apt install ffmpegVerificação
$ ffmpeg 2>&1 | head -1
ffmpeg version 4.3.4-0+deb11u1+rpt3 Copyright (c) 2000-2021 the FFmpeg developers No diretório systemd , são fornecidos 2 arquivos de serviço. Vamos copiá-los para o lugar certo:
cp systemd/[email protected] /etc/systemd/system
cp systemd/[email protected] /etc/systemd/system
systemctl daemon-reloadNota: o caminho dos aplicativos e logs pode precisar ser adaptado.
Para iniciar o streaming de um multiplex, use um dos seguintes comandos de exemplo:
systemctl start mumudvb@0_r1
systemctl enable --now dvblast@1_r15 o parâmetro tem o formato CARD_MUX :
CARD o identificador do cartão (0 ... 7)MUX o identificador multiplex (r1 ... r15)Link: Documentação do Systemd
Podemos verificar se um multiplex é transmitido no loop local com 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: com mumudvb não há o mesmo resultado netstat...
Por outro lado, a ferramenta iptraf permite ter uma visão geral do tráfego de rede em uma interface de texto.
apt install iptraf com ffmpeg
ffmpeg -i rtp://239.10.10.2:1234 -c copy -map 0 rec.ts ou melhor ainda com multicat (dependência bitstream , compila facilmente)
multicat -X @239.10.10.2:1234 /dev/null 2> /dev/null > rec.tsDescrição dos parâmetros:
-X : pedimos que o fluxo ts passe pela saída padrão@239.10.10.2:1234 : especifique o grupo multicast no qual deseja se inscrever/dev/null : não queremos que o fluxo seja gravado no disco2>/dev/null : ocultamos a saída de erro-u para adicionar se o fluxo for udp "bruto" e não rtp> rec.ts : redirecionamos o fluxo para um arquivo No caso de uma rede não compatível com multicast e para evitar inundações, pode ser interessante converter o fluxo multicast em unicast. Porém, preste atenção ao volume da rede se muitos clientes se conectarem à origem.
Instalando udpxy
git clone https://github.com/pcherenkov/udpxy
cd udpxy/chipmunk
make
sudo make installLançamento manual do serviço:
sudo udpxy -p 80 -c 8 O serviço será executado na porta 80 ( -p ), com no máximo 8 clientes ( -c ).
Inicie via systemd :
Também aqui está um arquivo de serviço systemd para udpxy.
cp conf/systemd/udpxy.service /etc/systemd/system
systemctl daemon-reload
sudo systemctl enable --now udpxyVerificando se o serviço está em execução:
$ netstat -an | grep " :80 "
tcp 0 0 0.0.0.0:80 0.0.0.0: * LISTENAgora, na nossa rede local poderemos solicitar, em unicast e TCP, via protocolo http, uma solicitação como esta:
vlc http://dvbstream/rtp/239.10.10.2:1234dvbstream sendo o ip/host da máquina executando udpxy/rtp/ ou /udp/ dependendo do protocolo de stream usado pela fonte239.10.10.2:1234 o ip e a porta do grupo multicast de origemAqui está a playlist .m3u completa de todos os canais declarados neste projeto (todos os multiplexes TNT parisienses).
Exemplo de mosaico silencioso com posicionamento de janela 2x2 em tela 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


O diretório /dev/dvb deve conter pelo menos um 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 adapter2Visualizando 2 chaves RTL-SDR conectadas via 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