الهدف: استقبال تلفزيون DTT محليًا باستخدام Raspberry Pi المجهز بموالف DVB-T2 TV HAT و/أو مفاتيح RTL-SDR.
اختبر باستخدام أداتين: 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
، يتم توفير ملفين للخدمة. لننسخها إلى المكان الصحيح:
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
: حدد مجموعة البث المتعدد التي تريد الاشتراك فيها/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
الآن، على شبكتنا المحلية، سنكون قادرين على طلب طلب مثل هذا، عبر البث الأحادي وTCP، عبر بروتوكول http:
vlc http://dvbstream/rtp/239.10.10.2:1234
dvbstream
هو IP/المضيف للجهاز الذي يقوم بتشغيل udpxy
/rtp/
أو /udp/
اعتمادًا على بروتوكول الدفق الذي يستخدمه المصدر239.10.10.2:1234
عنوان IP ومنفذ مجموعة البث المتعدد المصدرفيما يلي قائمة التشغيل الكاملة.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 ميجا بايت/ثانية
يجب أن يحتوي الدليل /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 متصلين عبر 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