目标:使用配备 DVB-T2 TV HAT 调谐器和/或 RTL-SDR 键的 Raspberry Pi 在本地接收 DTT 电视。
使用 2 个工具进行测试: dvblast和mumudvb 。
在conf/dvblast和conf/mumudvb目录中是巴黎可用的DTT 多路复用器的配置,每个频道都有一个多播广播地址。
我们首先将多播 IP 范围限制在本地环路,以免在交换机未针对多播进行优化的情况下淹没网络(请参阅 IGMP 侦听)。
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命令是Debian下net-tools包的一部分。
或者
$ 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 networkdvblast的作用是解复用来自调谐器卡的信号,并在网络上广播 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注意:应用程序和日志的路径可能需要调整。
要开始流式传输 Multiplex,请使用以下示例命令之一:
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启动:
这里还有 udpxy 的 systemd 服务文件。
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现在,在我们的本地网络上,我们将能够通过 http 协议以单播和 TCP 方式发出如下请求:
vlc http://dvbstream/rtp/239.10.10.2:1234dvbstream是运行udpxy机器的 IP/主机/rtp/或/udp/取决于源使用的流协议239.10.10.2:1234源组播组的ip和端口这是此项目中声明的所有频道(所有巴黎 TNT 多路复用器)的完整 .m3u 播放列表。
在 1920x1080 屏幕上放置 2x2 窗口的无声马赛克示例:
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 Mb/s
sudo systemctl enable --now dvblast@0_r4sudo systemctl enable --now dvblast@1_r6sudo systemctl enable --now dvblast@2_r7总计:74.4 Mb/秒
sudo systemctl enable --now dvblast@0_r9sudo systemctl enable --now dvblast@0_r15总计:50 Mb/s


/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查看通过 USB 连接的 2 个 RTL-SDR 密钥:
$ 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