Ich richte Video-Streaming ein.
Im lokalen Netzwerk gibt es zwei Geräte, die Videos über UDP-Multicast streamen. Einer ist ein normaler Computer mit Linux (Streaming auf 239.220.221.10, Port 9200), der zweite ist ein spezieller DVB-S-Streamer (Streaming auf 239.220.220.32, Port 9200). Es gibt mehrere IPTV-Set-Top-Boxen im Netzwerk, die Streams von beiden Quellen abspielen können. Es gibt auch einige Cisco-Switches für die Multicast-Filterung, aber ich kann ihre Konfiguration nicht überprüfen.
Auf einem anderen Computer (unter Ubuntu 12.04) möchte ich den Stream erfassen, vorzugsweise mit VLC oder FFMPEG. Vom Computer-Streamer (239.220.221.10) funktioniert es, aber vom speziellen Streamer (239.220.220.32) bekomme ich keinen Stream.
Was ich versucht habe
Ich habe versucht, das Problem einzugrenzen und versucht, rohe UDP-Datagramme mit socat und tcpdump zu erfassen. Wenn ich den folgenden Befehl ausführe, erhalte ich ein gültiges Video in der Datei video.dump:
> socat UDP4-RECVFROM:9200,ip-add-membership=239.220.221.10:0.0.0.0 - > video.dump
Wenn ich gleichzeitig tcpdump ausführe, werden eingehende Datagramme angezeigt:
> sudo tcpdump -i eth1
18:00:39.059824 IP 10.1.2.202.41852 > 239.220.221.10.9200: UDP, length 1316
18:00:39.060789 IP 10.1.2.202.41852 > 239.220.221.10.9200: UDP, length 1316
...
Wenn ich versuche, dieselben Befehle für den speziellen Streamer auszuführen (ändern Sie einfach die IP-Mitgliedschaftsadresse für socat in 239.220.220.32), zeigt tcpdump eingehende Datagramme von 239.220.220.32 an, aber die Datei video.dump ist leer.
Was kann der Grund sein, warum socat
die Datagramme, die eindeutig kommen , nicht angezeigt werden?
Update am 4. März 2014:
Ich habe gerade herausgefunden, dass es im Netzwerk verschiedene IP-Bereiche gibt:
Computer streamer: 10.1.2.202 / 255.0.0.0
"Special" streamer: 192.168.85.5 / 255.255.255.0
Computer on which I am trying to grab stream: 10.1.2.203 / 255.0.0.0
Wenn ich die IP-Adresse des letzten in 192.168.85.x / 255.255.255.0 ändere, kann ich Streams vom "Special" -Streamer abfangen, aber nicht vom Computer-Streamer.
Die Frage ändert sich also zu: Ist es möglich, socat, VLC oder FFMPEG so einzustellen, dass auch Multicast-Streams akzeptiert werden, deren Quelladresse außerhalb des Bereichs der Ethernet-Schnittstelle liegt?
socat
an, der Gruppe 239.220.220.10 beizutreten . Könnte dies das Problem sein?Antworten:
tcpdump, das ohne -p aufgerufen wird, schaltet eine Netzwerkkarte in den Promisc-Modus - anscheinend wird eine Filterung auf höherer Ebene aktiviert, die verhindert, dass socat den Datenverkehr empfängt.
Einer der „in der Regel schuldig“ Verdächtigen ist rp_filter - Sie haben eine Route sowohl für die Source - Netzwerke via eth1? Ich denke, Sie haben möglicherweise Standard-GW über eth0. Fügen Sie entweder die fehlende Route hinzu oder deaktivieren Sie rp_filter auf der eth1-Schnittstelle.
Im OP-Fall:
oder
quelle