目的: 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
fi
CentOS7
で、次の内容のファイル/etc/sysconfig/network-scripts/route-lo
を作成します。 239.10.10.0/24 via 127.0.0.1 dev lo
次にネットワークサービスを再起動します
systemctl restart network
dvblast
の役割は、チューナー カードからの信号を逆多重化し、デフォルトでは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 developers
systemd
ディレクトリには 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 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
ストリームが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:1234
dvbstream
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_r1
sudo systemctl enable --now dvblast@1_r2
sudo systemctl enable --now dvblast@2_r3
合計: 74.4 Mb/秒
sudo systemctl enable --now dvblast@0_r4
sudo systemctl enable --now dvblast@1_r6
sudo systemctl enable --now dvblast@2_r7
合計: 74.4 Mb/秒
sudo systemctl enable --now dvblast@0_r9
sudo 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 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