Как я могу воспроизвести музыкальный поток HTTP через SSH?

29

Я знаю , что я могу делать , mplayer <stream>чтобы открыть и играть поток на локальном компьютере. Тем не менее, я за брандмауэром.

Вместо этого я хотел бы открыть поток на удаленной машине , но по-прежнему воспроизводить его на этом . Для удаленных подключений используется SSH , но выполнение ssh "mplayer <stream>"обоих открывает и воспроизводит поток на удаленном компьютере.

-xФлаг SSH включает перенаправление дисплея X11. Мне это нужно?

Анко
источник

Ответы:

19

Вы можете использовать ssh«s -Lфлаг , чтобы создать туннель из вашей системы на пульт дистанционного управления:

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

Затем вы можете подключиться к своему концу туннеля, mplayerкак если бы это было иначе:

mplayer localhost:<localport>
Игнасио Васкес-Абрамс
источник
1
Обратите внимание, что это не будет работать, если HTTP-сервер использует виртуальные домены (или, другими словами, требуется правильное имя домена, отправленное клиентом в качестве заголовка HTTP). Чтобы решить эту проблему, вы можете, например, временно добавить в hostsфайл правило , которое заставит mplayerдумать, что целевой домен размещен на локальном компьютере.
Лиори
3
Или вы можете использовать, -http-header-fieldsчтобы заставить Hostзаголовок.
Игнасио Васкес-Абрамс
@ IgnacioVazquez-Abrams ты не возражаешь уточнить, где? У меня такой опции нет man ssh.
Уильям
@LiamWilliam: это mplayerвариант.
Игнасио Васкес-Абрамс
34

Вы можете использовать wgetболее, sshчтобы открыть HTTP-соединение и вывести данные потока, а затем mplayerна локальном компьютере, чтобы воспроизвести его.

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

Тонкости:

  • wget-OОпция 's (заглавная буква o) устанавливает свой выходной файл; -(тире) подразумевает stdout.

  • mplayerЭта -cacheопция вызывает конфигурируемое количество входных данных для буферизации, компенсируя дрожание сети. Опция -(тире) делает чтение из stdin.

Попробуйте потоковую передачу SceneSat Radio , например.http://r1.scenesat.com:8000/scenesat

Анко
источник
6
Я даже не знаю, что это за музыка, но потому что я ее обожаю, она классная! Спасибо.
SaultDon
1
Обратите внимание, что в вопросе не упоминается какой-либо конкретный протокол, по которому передается музыка. Существуют и другие протоколы, по которым можно передавать музыку, например RTP и MMS. Оба могут быть воспроизведены mplayer, но не могут быть загружены wget.
Лиори
@liori Хорошая мысль. Это явно не общее решение.
Анко
8

Вы можете настроить прокси SOCKS :

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

Вы также можете указать любое другое приложение, например, веб-браузер, чтобы использовать этот прокси.

SSCH
источник
2
Работает ли функция http_proxy с SOCKS-прокси? Эта функция недокументирована на моей странице руководства, и различные сайты в Интернете предпочитают такой tsocksподход.
Лиори
1
@liori: Да, это работает вместе с tsocks mplayer -playlist http://bassdrive.com/bassdrive.m3u. Спасибо за ваш совет. Без tsocks (он же только с http_proxy://…) это не сработало.
Эрик
6

sshfsэто прекрасный инструмент для подобных случаев. Он скрывает многие брандмауэры и позволяет вам использовать любого игрока, которого вы выберете (хотя mplayer по-прежнему хороший выбор).

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

Я также запускаю Subsonic, слушая порт 4040 localhostи затем - sshтуннель домой с

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

Затем я могу открыть Subsonic в браузере по адресу http://localhost:4040.

Артур Ульфельдт
источник