¿Cómo reproduzco una transmisión de música HTTP a través de SSH?

29

Sé que puedo hacer mplayer <stream>para abrir y reproducir una transmisión en la máquina local. Sin embargo, estoy detrás de un firewall.

En cambio, me gustaría abrir la transmisión en una máquina remota , pero aún así reproducirla en esta . Las conexiones remotas son para lo que sirve SSH , pero al hacer ssh "mplayer <stream>"ambas cosas se abre y reproduce la transmisión en el control remoto.

La -xbandera de SSH permite el reenvío de pantalla X11. ¿Necesito eso?

Anko
fuente

Respuestas:

19

Puede usar sshla -Lbandera de '' para crear un túnel desde su sistema a un control remoto:

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

Luego puede conectarse a su extremo del túnel con mplayerlo que haría de otra manera:

mplayer localhost:<localport>
Ignacio Vazquez-Abrams
fuente
1
Tenga en cuenta que esto no funcionará si el servidor HTTP está utilizando dominios virtuales (o, en otras palabras, requiere un nombre de dominio adecuado enviado por el cliente como un encabezado HTTP). Para resolver este problema, por ejemplo, puede agregar temporalmente una regla a su hostsarchivo que haga mplayerpensar que el dominio de destino está alojado en la máquina local.
liori
3
O podría usar -http-header-fieldspara forzar un Hostencabezado.
Ignacio Vázquez-Abrams
@ IgnacioVazquez-Abrams, ¿te importaría aclarar dónde? No tengo esa opción man ssh.
William
@LiamWilliam: es una mplayeropción.
Ignacio Vázquez-Abrams
34

Se puede utilizar wgetmás de sshabrir una conexión de datos HTTP y flujo de salida, a continuación, mplayeren la máquina local para reproducirlo.

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

Las sutilezas:

  • wgetLa -Oopción ' (mayúscula oh) establece su archivo de salida; -(guión) implica stdout.

  • mplayerLa -cacheopción de '' hace que se almacene una cantidad configurable de entrada, compensando la fluctuación de red. La -opción (guión) hace que se lea stdin.

Intente transmitir SceneSat Radio , por ejemplo.http://r1.scenesat.com:8000/scenesat

Anko
fuente
66
Ni siquiera sé qué tipo de música es esta, pero como la estoy escuchando, ¡es increíble! Gracias.
SaultDon
1
Tenga en cuenta que la pregunta no menciona ningún protocolo en particular sobre el que se transmite música. Existen otros protocolos sobre los cuales se puede transmitir música, por ejemplo, RTP y MMS. Ambos pueden ser reproducidos por mplayer, pero no descargados por wget.
liori
@liori Buen punto. Esto claramente no es una solución general.
Anko
8

Puede configurar un proxy SOCKS :

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

Puede usar tell cualquier otra aplicación, como su navegador web, para usar este proxy también.

ssch
fuente
2
¿La característica http_proxy también funciona con los servidores proxy SOCKS? La función no está documentada en mi página de manual, y varios sitios en la web prefieren el tsocksenfoque.
liori
1
@liori: Sí, esto funciona junto con tsocks mplayer -playlist http://bassdrive.com/bassdrive.m3u. Gracias por tu consejo. Sin tsocks (también conocido como con http_proxy://…) no funcionó.
erik
6

sshfses una herramienta maravillosa para casos como este. Oculta muchos cortafuegos y te permite usar cualquier jugador que elijas (aunque mplayer sigue siendo una buena opción).

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

También ejecuto Subsonic escuchando el puerto 4040 localhosty luego ssh-túnel con casa

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

Entonces puedo abrir Subsonic en el navegador en http://localhost:4040.

Arthur Ulfeldt
fuente