วัตถุประสงค์: รับโทรทัศน์ DTT ในพื้นที่ด้วย Raspberry Pi ที่ติดตั้งจูนเนอร์ DVB-T2 TV HAT และ/หรือปุ่ม RTL-SDR
ทดสอบด้วย 2 เครื่องมือ: dvblast
และ mumudvb
ในไดเร็กทอรี conf/dvblast
และ conf/mumudvb
คือการกำหนดค่าของมัลติเพล็กซ์ DTT ที่มีอยู่ในปารีส พร้อมด้วยที่อยู่ออกอากาศแบบหลายผู้รับสำหรับแต่ละช่อง
ก่อนอื่นเราจะจำกัดช่วง IP มัลติคาสต์ไว้ที่ลูปภายในเครื่อง เพื่อไม่ให้เครือข่ายท่วม หากสวิตช์ไม่ได้รับการปรับให้เหมาะสมสำหรับมัลติคาสต์ (ดู IGMP Snooping)
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
เป็นส่วนหนึ่งของแพ็คเกจ net-tools
ภายใต้ Debian
หรือ
$ 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
คือการแยกสัญญาณจากการ์ดจูนเนอร์ และออกอากาศสตรีม 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
หมายเหตุ: อาจต้องมีการปรับเปลี่ยนเส้นทางของแอปและบันทึก
หากต้องการเริ่มการสตรีมมัลติเพล็กซ์ ให้ใช้คำสั่งตัวอย่างต่อไปนี้:
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
: ระบุกลุ่ม multicast ที่คุณต้องการสมัคร/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
:
นี่คือไฟล์บริการ systemd สำหรับ udpxy
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
ตอนนี้บนเครือข่ายท้องถิ่นของเรา เราจะสามารถร้องขอในรูปแบบ unicast และ TCP ผ่านโปรโตคอล http ได้ คำขอเช่นนี้:
vlc http://dvbstream/rtp/239.10.10.2:1234
dvbstream
เป็น ip/host ของเครื่องที่ใช้งาน udpxy
/rtp/
หรือ /udp/
ขึ้นอยู่กับสตรีมโปรโตคอลที่ใช้โดยแหล่งที่มา239.10.10.2:1234
ip และพอร์ตของกลุ่มมัลติคาสต์ต้นทางนี่คือเพลย์ลิสต์ complete.m3u ของช่องทั้งหมดที่ประกาศในโครงการนี้ (มัลติเพล็กซ์ TNT ของปารีสทั้งหมด)
ตัวอย่างของโมเสกเงียบที่มีการวางตำแหน่งหน้าต่าง 2x2 บนหน้าจอขนาด 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
ทั้งหมด: 74.4 เมกะไบต์/วินาที
sudo systemctl enable --now dvblast@0_r4
sudo systemctl enable --now dvblast@1_r6
sudo systemctl enable --now dvblast@2_r7
ทั้งหมด: 74.4 เมกะไบต์/วินาที
sudo systemctl enable --now dvblast@0_r9
sudo 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
การดูคีย์ RTL-SDR 2 อันที่เชื่อมต่อผ่าน 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