Wie spiele ich einen HTTP-Musikstream über SSH ab?

29

Ich weiß , ich kann nur das tun mplayer <stream>zu öffnen und spiele einen Strom auf der lokalen Maschine. Ich bin jedoch hinter einer Firewall.

Stattdessen würde Ich mag öffnen auf den Stream Remote - Rechner , aber immer noch spielen sie auf diese . Remoteverbindungen sind das, wofür SSH gedacht ist, aber wenn Sie ssh "mplayer <stream>"beides tun, wird der Stream auf der Fernbedienung geöffnet und wiedergegeben .

Das SSH- -xFlag aktiviert die X11-Display-Weiterleitung. Brauche ich das

Anko
quelle

Antworten:

19

Sie können sshdas -LFlag von verwenden, um einen Tunnel von Ihrem System zu einer Remote zu erstellen:

ssh -L <localport>:<streamhost>:<streamport> <user>@<remote>

Sie können dann wie gewohnt eine Verbindung zu Ihrem Tunnelende herstellen mplayer:

mplayer localhost:<localport>
Ignacio Vazquez-Abrams
quelle
1
Beachten Sie, dass dies nicht funktioniert, wenn der HTTP-Server virtuelle Domänen verwendet (oder mit anderen Worten, einen richtigen Domänennamen erfordert, der vom Client als HTTP-Header gesendet wird). Um dieses Problem zu beheben, können Sie Ihrer hostsDatei beispielsweise vorübergehend eine Regel hinzufügen , die den Eindruck mplayererweckt, dass die Zieldomäne auf dem lokalen Computer gehostet wird.
Liori
3
Oder Sie können -http-header-fieldseinen HostHeader erzwingen .
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams hast du etwas dagegen zu klären, wo? Ich habe keine solche Option in man ssh.
William
@ LiamWilliam: Es ist eine mplayerOption.
Ignacio Vazquez-Abrams
34

Sie können wgetover verwenden ssh, um eine HTTP-Verbindung zu öffnen und Stream-Daten auszugeben. Anschließend können Sie sie mplayerauf dem lokalen Computer wiedergeben.

ssh <user>@<host> "wget <stream> -O -" | mplayer -cache 512 -

Die Feinheiten:

  • wgetMit der -OOption (Großbuchstabe oh) wird die Ausgabedatei festgelegt. -(Bindestrich) impliziert stdout.

  • mplayerDie -cacheOption von bewirkt, dass eine konfigurierbare Menge an Eingaben gepuffert wird, um Netzwerk-Jitter zu kompensieren. Mit der -Option (Bindestrich) wird gelesen stdin.

Versuchen Sie beispielsweise, SceneSat-Radio zu streamen .http://r1.scenesat.com:8000/scenesat

Anko
quelle
6
Ich weiß nicht einmal, was das für eine Musik ist, aber weil ich sie pfeife, ist es großartig! Vielen Dank.
SaultDon
1
Beachten Sie, dass in der Frage kein bestimmtes Protokoll angegeben ist, über das Musik gestreamt wird. Es gibt andere Protokolle, über die Musik gestreamt werden kann, beispielsweise RTP und MMS. Beide können durch gespielt werden mplayer, aber nicht heruntergeladen durch wget.
Liori
@ Liori Guter Punkt. Dies ist eindeutig keine allgemeine Lösung.
Anko
8

Sie können einen SOCKS-Proxy einrichten :

ssh -D localhost:8080 user@remotehost
mplayer http_proxy://localhost:8080/http://stream

Sie können sagen, dass jede andere Anwendung, wie z. B. Ihr Webbrowser, auch diesen Proxy verwenden kann.

ssch
quelle
2
Funktioniert die Funktion http_proxy auch mit SOCKS-Proxys? Die Funktion ist in meiner Manpage nicht dokumentiert, und verschiedene Websites im Web bevorzugen den tsocksAnsatz.
Liori
1
@liori: Ja, das funktioniert zusammen mit tsocks mplayer -playlist http://bassdrive.com/bassdrive.m3u. Danke für deinen Rat. Ohne tsocks (auch bekannt als only with http_proxy://…) hat es nicht funktioniert.
Erik
6

sshfsist ein wunderbares Werkzeug für solche Fälle. Es verbirgt so manche Firewall und ermöglicht es Ihnen, jeden beliebigen Player zu verwenden (obwohl mplayer immer noch eine gute Wahl ist).

sudo apt-get install sshfs # your favorite packager here
sshfs [email protected]:/home/arthur/Music ~/Music

Ich lasse auch Subsonic laufen, indem ich Port 4040 anhöre localhostund dann mit ssh-tunnel nach Hause gehe

ssh -L 4040:localhost:4040 [email protected]

Ich kann dann Subsonic im Browser unter öffnen http://localhost:4040.

Arthur Ulfeldt
quelle