Comment lire un flux de musique HTTP sur SSH?

29

Je sais que je peux juste faire mplayer <stream>pour ouvrir et lire un flux sur la machine locale. Cependant, je suis derrière un pare-feu.

Au lieu de cela, j'aimerais ouvrir le flux sur une machine distante , mais toujours le lire sur celle-ci . Les connexions distantes sont destinées à SSH , mais faire les ssh "mplayer <stream>"deux ouvre et lit le flux sur la télécommande.

Le -xdrapeau SSH permet le transfert d'affichage X11. En ai-je besoin?

Anko
la source

Réponses:

19

Vous pouvez utiliser sshle -Ldrapeau de pour créer un tunnel de votre système vers une télécommande:

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

Vous pouvez ensuite vous connecter à votre extrémité du tunnel avec mplayercomme vous le feriez autrement:

mplayer localhost:<localport>
Ignacio Vazquez-Abrams
la source
1
Notez que cela ne fonctionnera pas si le serveur HTTP utilise des domaines virtuels (ou en d'autres termes, nécessite un nom de domaine approprié envoyé par le client en tant qu'en-tête HTTP). Pour résoudre ce problème, vous pouvez par exemple ajouter temporairement une règle à votre hostsfichier qui fera mplayerpenser que le domaine cible est hébergé sur la machine locale.
liori
3
Ou vous pouvez utiliser -http-header-fieldspour forcer un en- Hosttête.
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams, ça vous dérange de préciser où? Je n'ai pas une telle option man ssh.
William
@LiamWilliam: C'est une mplayeroption.
Ignacio Vazquez-Abrams
34

Vous pouvez utiliser wgetover sshpour ouvrir une connexion HTTP et produire des données de flux, puis mplayersur la machine locale pour la lire.

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

Les subtilités:

  • wgetL' -Ooption (majuscule oh) définit son fichier de sortie; -(tiret) implique stdout.

  • mplayerL' -cacheoption entraîne la mise en mémoire tampon d'une quantité configurable d'entrée, compensant la gigue du réseau. L' -option (tiret) le fait lire stdin.

Essayez de diffuser en continu SceneSat Radio , par exemple.http://r1.scenesat.com:8000/scenesat

Anko
la source
6
Je ne sais même pas de quel genre de musique il s'agit, mais parce que je la joue, c'est génial! Merci.
SaultDon
1
Notez que la question ne mentionne aucun protocole particulier sur lequel la musique est diffusée. Il existe d'autres protocoles sur lesquels la musique peut être diffusée, par exemple RTP et MMS. Les deux peuvent être lus par mplayer, mais pas téléchargés par wget.
liori
@liori Bon point. Ce n'est clairement pas une solution générale.
Anko
8

Vous pouvez configurer un proxy SOCKS :

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

Vous pouvez également utiliser tell any other application, such as your web browser, to use this proxy also.

ssch
la source
2
La fonctionnalité http_proxy fonctionne-t-elle également avec les proxys SOCKS? La fonctionnalité n'est pas documentée dans ma page de manuel, et divers sites sur le Web préfèrent l' tsocksapproche.
liori
1
@liori: Oui, cela fonctionne avec tsocks mplayer -playlist http://bassdrive.com/bassdrive.m3u. Merci pour votre conseil. Sans tsocks (aka seulement avec http_proxy://…), cela n'a pas fonctionné.
erik
6

sshfsest un merveilleux outil pour des cas comme celui-ci. Il cache de nombreux pare-feu et vous permet d'utiliser le joueur que vous choisissez (bien que mplayer soit toujours un bon choix).

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

Je lance également Subsonic en écoutant le port 4040 localhost, puis en sshtunnel avec

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

Je peux ensuite ouvrir Subsonic dans le navigateur à http://localhost:4040.

Arthur Ulfeldt
la source