目標:使用配備 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/秒
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