Aktivieren Sie RTSP in iptables


7

Ich möchte einen RTSP-Stream über VLC erhalten, aber wenn ich versuche zu laufen

sudo -u non_root_user cvlc -vvv -I dummy rtsp://ip:port/x.sdp 

Ich bekomme:

Unable to determine our source address: This computer has an invalid IP    address: 0x0

Ich denke, dass die Ports möglicherweise geschlossen sind, da ich den Stream empfangen konnte, als ich die Firewall deaktivierte. Ich möchte Sie fragen, wie Sie die iptables einstellen, damit ich RTSP empfangen kann. Vielen Dank.

Antworten:


6

Sie sind in Live555 auf einen hässlichen Hack gestoßen , den die Bibliothek VLC verwendet, um die RTSP-Client-Funktion bereitzustellen. (Der RTSP-Servercode von VLC ist VLC-spezifisch.) Der Hack versucht herauszufinden, welche IP Ihr Computer im LAN zu verwenden scheint. (So ​​hässlich der Hack auch ist, ich kenne keinen besseren Weg für Live555, dies zu tun.)

Sie müssen den UDP-Port 15947 in Ihrer Firewall öffnen, um den Fehler zu beheben, auf den Sie gestoßen sind. Das ist der "Testport", den Live555 für diesen Hack verwendet.

Je nachdem, wie Ihre Firewall funktioniert, müssen Sie möglicherweise auch zusätzliche Ports öffnen, um Ihren Stream zu empfangen. RTSP ist nur ein Stream- Steuerungsprotokoll , kein Stream- Übermittlungsprotokoll . Stellen Sie sich RTSP als "VCR-Schaltflächen" für das eigentliche Stream-Übermittlungsprotokoll vor: Wiedergabe, Stopp, Pause, FF, Rücklauf ... Der RTSP-Client handelt Stream- Übermittlungsports mit dem Server als Teil der Aktion "Wiedergabe" aus.

Das Ergebnis ist, dass der Client (in diesem Fall VLC) den Server auffordert, die Medien an einen bestimmten Port im RTSP- SETUPBefehl an ihn zu senden :

SETUP rtsp://192.168.0.1:8554/42.ts/track1 RTSP/1.0
CSeq: 4
User-Agent: LibVLC/2.0.2 (LIVE555 Streaming Media v2011.12.23)
Transport: RTP/AVP;unicast;client_port=60860-60861

Das heißt, VLC teilt dem RTSP-Server mit, dass die Medien über RTP an den Ports 60860 und 60861 bereitgestellt werden sollen. Der Client wählt diese Ports zufällig aus. Wenn Ihre Firewall sie blockiert, blockiert sie die Stream-Übermittlung, obwohl die RTSP-Aushandlung erfolgreich war.

Im besten Fall blockiert Ihre Firewall entweder nicht so hohe Ports oder verfügt über eine Stateful Inspection-Funktion, mit der sie entsperrt werden können, wenn diese RTSP-Aushandlung angezeigt wird.

Wenn Ihre Firewall es blockiert, können Sie es mit Wireshark debuggen . Es versteht das RTSP-Protokoll. Klicken Sie mit der rechten Maustaste auf ein Paket im RTSP-Stream und sagen Sie "TCP-Stream folgen". Suchen Sie im daraufhin angezeigten Fenster den SETUPBefehl RTSP . Starten Sie dann Wireshark erneut und suchen Sie diesmal nach UDP-Verkehr an diesen Ports. (All dies, während der RTSP-Client den Stream weiter herunterlädt oder versucht.)


Ich habe es gelöst, indem ich Port 15947 aktiviert habe, wie Sie angegeben haben. Vielen Dank für eine nette Antwort.
DropDropped
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.