звук переадресації (мікрофон) через ssh, як телефонувати через ssh?


47

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

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

Я думаю, що це може мати щось спільне з імпульсним звуком. Або мені не потрібен імпульсний звук для цього простого телефону? Який правильний пристрій?

Під час запуску я бачу всі свої звукові пристрої alsamixerта натискаю клавішу F6. Але я не знаю, які пристрої в моєму /devдереві.

Відповіді:


53

Гаразд, я щойно це знайшов, і він все ще працює! Дійсно смішно. Вам не потрібні будь-які модні програми, обмін миттєвими повідомленнями тощо. За допомогою цієї команди ви надсилаєте аудіо на віддалений хост.

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:3знаходиться alsadevice, який ви хочете записати (знайдіть його 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 -
    

1
Чи є якась причина, що ви робите cat - | mplayer -замість просто mplayer -?
Кріс Даун

Причина така: я щойно скопіював команду з цитованого джерела. Може бути зайвим. Я його видалив, схоже, все ще працює. Можливо, є крайовий випадок, коли це було потрібно, і автор про це знав, не розповідаючи про це у своєму дописі?
erik

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, де за допомогою PulseAudio ви можете використовувати pavucontrolабо подібне для вибору потрібного джерела введення.

Це зробило б команду наступним чином:

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додатком GUI:

павуконтроль

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.