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?

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>

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


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.


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 me@mydomain.org:/home/arthur/Music ~/Music

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

ssh -L 4040:localhost:4040 me@mydomain.com

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.