목표: DVB-T2 TV HAT 튜너 및/또는 RTL-SDR 키가 장착된 Raspberry Pi를 사용하여 로컬로 DTT TV를 수신합니다.
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
.링크: 시스템 문서
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
서비스는 최대 8개의 클라이언트( -c
)와 함께 포트 80( -p
)에서 실행됩니다.
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
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.4Mb/s
sudo systemctl enable --now dvblast@0_r4
sudo systemctl enable --now dvblast@1_r6
sudo systemctl enable --now dvblast@2_r7
총계: 74.4Mb/s
sudo systemctl enable --now dvblast@0_r9
sudo systemctl enable --now dvblast@0_r15
합계: 50Mb/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
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