如何通过SSH播放HTTP音乐流?


29

我知道我可以做mplayer <stream>,以打开播放本地计算机上的流。但是,我在防火墙后面。

取而代之的是,我想在远程计算机打开流,但仍在计算机上播放它。远程连接是SSH的目的,但同时打开播放远程流。ssh "mplayer <stream>"

SSH的-x标志启用X11显示转发。我需要那个吗?

Answers:


19

您可以使用ssh-L标志来创建从系统到远程的隧道:

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

然后,您可以使用以下方法连接到隧道的末端mplayer

mplayer localhost:<localport>

1
请注意,如果HTTP服务器使用虚拟域(或换句话说,要求客户端将正确的域名作为HTTP标头发送),则此方法将无效。要解决此问题,例如,您可以将规则临时添加到hosts文件中,以使mplayer目标域托管在本地计算机上。
liori

3
或者您可以使用-http-header-fields强制Host标题。
Ignacio Vazquez-Abrams

您介意@ IgnacioVazquez-Abrams在哪里澄清?我在中没有这样的选择man ssh
威廉

@LiamWilliam:这是一个mplayer选择。
Ignacio Vazquez-Abrams

34

您可以使用wgetover ssh打开HTTP连接并输出流数据,然后mplayer在本地计算机上进行播放。

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

细微之处:

  • wget-O(大写字母哦)选项设置其输出文件;-(破折号)表示stdout

  • mplayer-cache选项导致可配置数量的输入被缓冲,以补偿网络抖动。该-(DASH)选项,则读取stdin

例如,尝试流式传输SceneSat Radiohttp://r1.scenesat.com:8000/scenesat


6
我什至不知道这是什么音乐,但是因为我正在制作它,所以很棒!谢谢。
SaultDon

1
请注意,该问题并未提及流经音乐的任何特定协议。音乐还可以通过其他协议进行流传输,例如RTP和MMS。两者都可以由播放mplayer,但不能由下载wget
liori

@liori好点。这显然不是一个通用的解决方案。
Anko

8

您可以设置一个SOCKS代理

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

您也可以使用Tell任何其他应用程序(例如Web浏览器)来使用此代理。


2
http_proxy功能实际上也可以与SOCKS代理一起使用吗?该功能未在我的手册页中进行记录,并且网络上的各个站点都倾向于使用该tsocks方法。
liori

1
@liori:是的,与一起使用tsocks mplayer -playlist http://bassdrive.com/bassdrive.m3u。感谢您的意见。如果没有tsock(也称为http_proxy://…),则无法正常工作。
erik

6

sshfs对于这种情况,是一个很好的工具。它隐藏了许多防火墙,并允许您使用选择的任何播放器(尽管mplayer仍然是不错的选择)。

sudo apt-get install sshfs # your favorite packager here
sshfs me@mydomain.org:/home/arthur/Music ~/Music

我还运行Subsonic监听端口4040 localhost,然后ssh -tunnel与

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

然后,我可以在浏览器中打开Subsonic http://localhost:4040

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.