目的: 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の役割は、チューナー カードからの信号を逆多重化し、デフォルトではrtpでネットワーク上に IP ストリームをブロードキャストすることです。
施設
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 developerssystemdディレクトリには 2 つのサービス ファイルが提供されます。それらを適切な場所にコピーしましょう。
cp systemd/[email protected] /etc/systemd/system
cp systemd/[email protected] /etc/systemd/system
systemctl daemon-reload注: アプリとログのパスを調整する必要がある場合があります。
マルチプレックスのストリーミングを開始するには、次のコマンド例のいずれかを使用します。
systemctl start mumudvb@0_r1
systemctl enable --now dvblast@1_r15パラメータの形式はCARD_MUXです。
CARDカード識別子 (0 ~ 7)MUX 。リンク: 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 iptrafffmpegで
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ストリームがrtpではなく「raw」 udpである場合に追加します。> 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/秒


/dev/dvbディレクトリには、少なくとも 1 つの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 adapter2USB 経由で接続された 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