Jak odtwarzać strumień muzyczny HTTP przez SSH?

29

Wiem, że mogę to zrobić mplayer <stream>, aby otworzyć i odtworzyć strumień na komputerze lokalnym. Jestem jednak za firewallem.

Zamiast tego chciałbym otworzyć strumień na zdalnym komputerze , ale nadal odtwarzać go na tym . Połączenia zdalne są co SSH jest, ale robi ssh "mplayer <stream>"zarówno otwiera się i odtwarza strumień na pilocie.

-xFlaga SSH umożliwia przekazywanie wyświetlania X11. Czy potrzebuję tego?

Anko
źródło

Odpowiedzi:

19

Można użyć ssh„s -Lflagę, aby utworzyć tunel z systemu do zdalnego:

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

Następnie możesz połączyć się ze swoim końcem tunelu za pomocą mplayer:

mplayer localhost:<localport>
Ignacio Vazquez-Abrams
źródło
1
Pamiętaj, że to nie zadziała, jeśli serwer HTTP używa domen wirtualnych (lub innymi słowy, wymaga prawidłowej nazwy domeny wysłanej przez klienta jako nagłówek HTTP). Aby rozwiązać ten problem, możesz na przykład tymczasowo dodać do hostspliku regułę , która sprawi mplayer, że domena docelowa będzie hostowana na komputerze lokalnym.
liori
3
Lub możesz użyć -http-header-fieldsdo wymuszenia Hostnagłówka.
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams, czy możesz wyjaśnić, gdzie? Nie mam takiej opcji w man ssh.
William
@LiamWilliam: To jest mplayeropcja.
Ignacio Vazquez-Abrams
34

Możesz użyć przycisku wgetpowyżej, sshaby otworzyć połączenie HTTP i dane wyjściowe strumienia, a następnie mplayerna komputerze lokalnym, aby je odtworzyć.

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

Subtelności:

  • wget„s -O(litera oh) opcja ustawia pliku wyjściowego; -(myślnik) oznacza stdout.

  • mplayer„s -cachePowoduje on, że konfigurowalny wysokość wejścia do buforowania, kompensację drgań sieci. Opcja -(myślnik) sprawia, że ​​jest odczytywany stdin.

Spróbuj na przykład przesłać strumieniowo Radio SceneSat .http://r1.scenesat.com:8000/scenesat

Anko
źródło
6
Nie wiem nawet, co to za muzyka, ale ponieważ robię to, to jest niesamowite! Dzięki.
SaultDon,
1
Pamiętaj, że pytanie nie wspomina o żadnym konkretnym protokole, przez który przesyłana jest muzyka. Istnieją inne protokoły, za pomocą których można przesyłać strumieniowo muzykę, na przykład RTP i MMS. Oba mogą być odtwarzane przez mplayer, ale nie pobrane przez wget.
liori
@liori Dobra uwaga. To oczywiście nie jest ogólne rozwiązanie.
Anko
8

Możesz skonfigurować proxy SOCKS :

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

Możesz użyć każdej innej aplikacji, np. Przeglądarki internetowej, aby korzystała z tego serwera proxy.

ssch
źródło
2
Czy funkcja http_proxy faktycznie działa również z serwerami proxy SOCKS? Ta funkcja nie jest udokumentowana na mojej stronie man, a różne witryny w sieci preferują takie tsockspodejście.
liori
1
@liori: Tak, to działa razem z tsocks mplayer -playlist http://bassdrive.com/bassdrive.m3u. Dziękuję za Twoją radę. Bez tsocks (aka tylko z http_proxy://…) nie działało.
erik
6

sshfsto wspaniałe narzędzie do takich przypadków. Ukrywa wiele zapór ogniowych i pozwala korzystać z dowolnego gracza, który wybierzesz (chociaż mplayer jest nadal dobrym wyborem).

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

Prowadzę również Subsonic, nasłuchując na porcie 4040, localhosta następnie z sshtunelem do domu

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

Następnie mogę otworzyć Subsonic w przeglądarce pod adresem http://localhost:4040.

Arthur Ulfeldt
źródło