Tujuan: menerima televisi DTT secara lokal dengan Raspberry Pi yang dilengkapi dengan TV HAT tuner DVB-T2 dan/atau kunci RTL-SDR.
Uji dengan 2 alat: dvblast
dan mumudvb
.
Di direktori conf/dvblast
dan conf/mumudvb
terdapat konfigurasi multipleks DTT yang tersedia di Paris dengan alamat siaran multicast untuk setiap saluran.
Pertama-tama kami akan membatasi rentang IP multicast ke loop lokal agar tidak membanjiri jaringan jika switch tidak dioptimalkan untuk multicast (lihat IGMP Snooping).
ip route add 239.10.10.0/24 dev lo src 127.0.0.1
Kemudian untuk memeriksa rute kartu jaringan:
$ 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
Catatan: perintah route
adalah bagian dari paket net-tools
di Debian
.
Atau
$ 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
Untuk membuat aturan ini tetap berlaku:
Debian
buat file /etc/network/if-up.d/local-multicast
(dan buat agar dapat dieksekusi) dengan konten berikut: #! /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
buat file /etc/sysconfig/network-scripts/route-lo
dengan konten berikut: 239.10.10.0/24 via 127.0.0.1 dev lo
kemudian restart layanan jaringan
systemctl restart network
Peran dvblast
adalah mendemultipleks sinyal dari kartu tuner, dan menyiarkan aliran IP pada jaringan, dalam rtp
secara default.
Fasilitas
apt install dvblast
Verifikasi
$ dvblast --version
DVBlast 3.4 (release)
mumudvb
adalah evolusi dari dvblast
Fasilitas
apt install mumudvb
Tambahkan pengguna baru _mumudvb
ke grup video
dan plugdev
usermod -a -G video _mumudvb
usermod -a -G plugdev _mumudvb
udp
secara default. untuk rtp
gunakan rtp_header
ke 1
dalam konfigurasi.
ffmpeg
adalah pisau audiovisual tentara Swiss. Ini memungkinkan transcoding, analisis, pembuatan file media. Kami akan menggunakannya untuk membaca aliran rtp/udp dan menampilkannya langsung pada output standar. Dalam mode lintasan datar.
Fasilitas
apt install ffmpeg
Verifikasi
$ ffmpeg 2>&1 | head -1
ffmpeg version 4.3.4-0+deb11u1+rpt3 Copyright (c) 2000-2021 the FFmpeg developers
Di direktori systemd
, 2 file layanan disediakan. Mari salin ke tempat yang tepat:
cp systemd/[email protected] /etc/systemd/system
cp systemd/[email protected] /etc/systemd/system
systemctl daemon-reload
Catatan: jalur aplikasi dan log mungkin perlu disesuaikan.
Untuk memulai streaming multipleks, gunakan salah satu dari contoh perintah berikut:
systemctl start mumudvb@0_r1
systemctl enable --now dvblast@1_r15
parameternya berbentuk CARD_MUX
:
CARD
pengidentifikasi kartu (0...7)MUX
pengidentifikasi multipleks (r1 ... r15)Tautan: Dokumentasi Systemd
Kita dapat memeriksa apakah multipleks dialirkan pada loop lokal dengan 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
Catatan: dengan mumudvb
tidak ada hasil netstat yang sama...
Di sisi lain, alat iptraf
memungkinkan Anda mendapatkan gambaran umum lalu lintas jaringan dalam antarmuka teks.
apt install iptraf
dengan ffmpeg
ffmpeg -i rtp://239.10.10.2:1234 -c copy -map 0 rec.ts
atau bahkan lebih baik dengan multicat
(ketergantungan bitstream
, dapat dikompilasi dengan mudah)
multicat -X @239.10.10.2:1234 /dev/null 2> /dev/null > rec.ts
Deskripsi parameter:
-X
: kami meminta aliran ts melewati keluaran standar@239.10.10.2:1234
: tentukan grup multicast yang ingin Anda langgani/dev/null
: kami tidak ingin aliran ditulis ke disk2>/dev/null
: kami menyembunyikan keluaran kesalahan-u
untuk menambahkan jika alirannya adalah udp
"mentah" dan bukan rtp
> rec.ts
: kita mengarahkan aliran ke file Dalam kasus jaringan yang tidak kompatibel dengan multicast dan untuk menghindari banjir, mungkin menarik untuk mengubah aliran multicast menjadi unicast. Namun, perhatikan volume jaringan jika banyak klien yang terhubung ke sumbernya.
Menginstal udpxy
git clone https://github.com/pcherenkov/udpxy
cd udpxy/chipmunk
make
sudo make install
Peluncuran layanan secara manual:
sudo udpxy -p 80 -c 8
Layanan akan berjalan pada port 80 ( -p
), dengan maksimal 8 klien ( -c
).
Luncurkan melalui systemd
:
Juga di sini adalah file layanan systemd untuk udpxy.
cp conf/systemd/udpxy.service /etc/systemd/system
systemctl daemon-reload
sudo systemctl enable --now udpxy
Memeriksa apakah layanan sedang berjalan:
$ netstat -an | grep " :80 "
tcp 0 0 0.0.0.0:80 0.0.0.0: * LISTEN
Sekarang, di jaringan lokal kita, kita dapat meminta, dalam unicast dan TCP, melalui protokol http, permintaan seperti ini:
vlc http://dvbstream/rtp/239.10.10.2:1234
dvbstream
menjadi ip/host mesin yang menjalankan udpxy
/rtp/
atau /udp/
bergantung pada protokol streaming yang digunakan oleh sumber239.10.10.2:1234
ip dan port grup multicast sumberBerikut adalah playlist complete.m3u dari semua saluran yang dideklarasikan dalam proyek ini (semua multipleks TNT Paris).
Contoh mosaik senyap dengan posisi jendela 2x2 pada layar 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_r1
sudo systemctl enable --now dvblast@1_r2
sudo systemctl enable --now dvblast@2_r3
Total: 74,4 Mb/dtk
sudo systemctl enable --now dvblast@0_r4
sudo systemctl enable --now dvblast@1_r6
sudo systemctl enable --now dvblast@2_r7
Total: 74,4 Mb/dtk
sudo systemctl enable --now dvblast@0_r9
sudo systemctl enable --now dvblast@0_r15
Total: 50 Mb/dtk
Direktori /dev/dvb
harus berisi setidaknya satu 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
Melihat 2 kunci RTL-SDR yang terhubung melalui 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