Multicast-UDP-Stream mit socat sichern


7

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 socatdie 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?


Die Pakete werden an die Multicast-Gruppe 239.220.221.10 gesendet , Sie weisen jedoch socatan, der Gruppe 239.220.220.10 beizutreten . Könnte dies das Problem sein?
Scai

@scai Ich habe einige Fehler beim Kopieren von Adressen vom Terminal gemacht, tut mir leid. Jetzt enthält die Frage die richtigen Adressen.
Milan Fabian

Antworten:


1

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:

ip r a 192.168.85.0/24 dev eth1

oder

sysctl -w net.ipv4.conf.eth1.rp_filter=0

Ja, das Problem lag in der fehlenden Route. Ich habe nur vergessen, die Frage zu aktualisieren. Vielen Dank.
Milan Fabian
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.