перенаправить звук (микрофон) через ssh, как позвонить через ssh?

48

Как я могу перенаправить микрофон одного компьютера, чтобы прослушивать его на другом компьютере через ssh? Какое устройство подходит или какая командная строка?

Несколько лет назад было легко и весело перенаправить звук с удаленного микрофона на локальный компьютер или наоборот - это был простой телефон. Для этого есть некоторые инструкции , но ни одна из них не работает на более новых компьютерах / в дистрибутивах Linux. У меня даже нет /dev/audioна моем компьютере (Fedora 17).

Я думаю, что это может быть как-то связано с импульсным звуком. Или мне не нужен импульсный звук для этого простого телефона? Какое устройство подходит?

Я вижу все мои звуковые устройства, когда я запускаю alsamixerи нажимаю клавишу F6. Но я не знаю, какие устройства в моем /devдереве.

Erik
источник

Ответы:

55

Хорошо, я только что нашел это, и это все еще работает! Действительно смешно. Вам не нужны модные приложения, мессенджеры или тому подобное. С помощью этой команды вы отправляете аудио на удаленный хост.

arecord -f cd -t raw | oggenc - -r | ssh <user>@<remotehost> mplayer -

Или если вам нравится ffmpeg лучше

ffmpeg -f alsa -ac 1 -i hw:3 -f ogg - \
    | ssh <user>@<remotehost> mplayer - -idle -demuxer ogg

Источник: http://shmerl.blogspot.de/2011/06/some-fun-with-audio-forwarding.html


Если вы хотите настоящий телефон:

Команда выше была только для одного направления. Для другого направления вы должны начать другой сеанс SSH. Итак, чтобы получить то, что вам говорит другой пользователь , используйте

ssh <user>@<remotehost> 'arecord -f cd -t raw | oggenc - -r' | mplayer -

Или если вам нравится ffmpeg лучше

ssh <user>@<remotehost> ffmpeg -f alsa -ac 1 -i hw:3 -f ogg - \
    | mplayer - -idle -demuxer ogg

где hw:3alsadevice, который вы хотите записать (найдите его arecord -l; вы также можете использовать имя устройства, найти его arecord -L; во многих случаях вы можете просто использовать устройство, перечисленное с помощью следующей команды:) arecord -L | grep sysdefault.

Обновить

В 2018 году в моих системах Fedora Linux ffmpegне была включена поддержка alsa (похоже, то же самое в системах RaspberryPi с Raspbian). Но есть простое решение без перекомпиляции. Просто направьте вывод arecord (alsarecorder) в ffmpeg:

ssh <user>@<remotehost> 'arecord -f cd -D plughw:2 | ffmpeg -ac 1 -i - -f ogg -' \
    | mplayer - -idle -demuxer ogg

Вы получаете устройство ввода plughw:2, находя ваше устройство в выводе следующей команды:

arecord -l

В моем случае я вижу card0и card2(моя веб-камера с микрофоном). Поэтому я написал plughw:2для card2.

Обновление 2 (без mplayer)

Если у вас нет или нравится, mplayerно ffplay(который является частью ffmpeg) вы можете использовать:

  • несжатый волновой звук (высокая пропускная способность, очень низкое использование процессора на стороне записи)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2" | ffplay -nodisp -
    
  • сжатый с помощью flac (низкая пропускная способность, низкое использование процессора на стороне записи)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | flac - -o -" | ffplay -nodisp -
    
  • сжатый с помощью ogg (очень низкая пропускная способность, высокая загрузка процессора на стороне записи)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | ffplay -nodisp -
    
Erik
источник
1
Есть ли какая-то причина, которую вы делаете cat - | mplayer -вместо просто mplayer -?
Крис Даун
Причина в том, что я просто скопировал команду из цитируемого источника. Может быть излишним. Я удалил его, кажется, все еще работает. Может быть, есть крайний случай, когда это было необходимо, и автор знал об этом, не сказав об этом в своем посте?
Эрик
3

Ответ Эрика работает хорошо, но используя его, как есть, используя flacили oggenc, есть существенное отставание.
Решение состоит в том, чтобы добавить -cache 256к mplayerкоманде, так что это будет выглядеть следующим образом :

ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | mplayer -cache 256 -

Еще одна вещь, которую стоит упомянуть, - это то, что в настоящее время практически каждый современный дистрибутив использует PulseAudio, который берет на себя управление аппаратным устройством, поэтому использование не plughw:2будет работать, если PulseAudio работает.
Как правило, defaultдолжно работать нормально и использовать PulseAudio, где вы можете использовать pavucontrolили подобное, чтобы выбрать нужный источник входного сигнала с помощью PulseAudio.

Это сделало бы команду следующим образом:

ssh <user>@<remotehost> "arecord -f cd | oggenc -" | mplayer -cache 256 -

НО: Это вводит отставание. В моем случае это около восьми секунд. Это ужасно.


Решение намного проще, чем любая другая команда:

ssh <user>@<host> "arecord -f S16_LE -r 36000" | aplay

Вот и все. Это использует только любой процессор (0,1% в соответствии с htop). Для меня он использует пропускную способность ~ 60 КБ / с.

Если вы хотите стереозвук: ssh <user>@<host> "arecord -f cd" | aplay
полезно, только если у вас есть стереомикрофон, для меня увеличивается пропускная способность до ~ 150 КБ / с. (Так как это также увеличивает частоту дискретизации до 44100 Гц).

Более подробную информацию о частоте дискретизации ( -r) и битовой скорости (зависит от -f) можно найти здесь .
По сути: чем ниже вы идете, тем хуже качество, но ниже необходимая пропускная способность.

Это решение полностью совместимо с PulseAudio, вы можете контролировать выходное устройство, громкость и многое другое с помощью pactlили pavucontrolприложения с графическим интерфейсом:

pavucontrol

конфетти
источник