あるコンピュータのマイクをリダイレクトして、sshを介して別のコンピュータでそれを聞くにはどうすればよいですか?正しいデバイスと正しいコマンドラインのどちらですか?
数年前、音声をリモートマイクからローカルコンピュータに、またはその逆にリダイレクトするのは簡単で楽しい方法でした。簡単な電話でした。 someinstructions がありますが、新しいコンピュータ/ Linuxディストリビューションでは動作しないようです。 /dev/audio
私のコンピュータ(Fedora 17)で。
Pulseオーディオと関係があるのではないかと思います。または、この簡単な電話にPulseオーディオは必要ありませんか?適切なデバイスはどれですか?
alsamixer
を起動してF6キーを押すと、すべてのサウンドデバイスが表示されます。しかし、どのデバイスが/dev
木。
OK、見つけたところです。本当に面白い。特別なアプリケーションやインスタントメッセンジャーなどは必要ありません。このコマンドを使用すると、オーディオを送信しますをリモートホストに送信します。
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サポートが含まれていません(Raspbianを使用するRaspberryPiシステムでも同じようです)。しかし、再コンパイルせずに簡単なソリューションがあります。 ただパイプ出力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
を書きました。
mplayer
がなく、_ffplay
(ffmpeg
の一部)がない場合は、以下を使用できます。
非圧縮ウェーブオーディオ(高帯域幅、録音側のCPU使用率が非常に低い)
ssh <user>@<remotehost> "arecord -f cd -D plughw:2" | ffplay -nodisp -
flacで圧縮(低帯域幅、記録側での低CPU使用)
ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | flac - -o -" | ffplay -nodisp -
oggで圧縮(非常に低い帯域幅、録音側のCPU使用率が高い)
ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | ffplay -nodisp -
エリックの答えはうまくいきますが、それをそのまま使用すると、flac
またはoggenc
を使用すると、大幅な遅延が生じます。
解決策は、mplayer
コマンドに-cache 256
を追加することです。そのため、次のようになります。
ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | mplayer -cache 256 -
もう1つ言及する必要があるのは、最近のほとんどすべてのディストリビューションがハードウェアデバイスを制御するPulseAudioを使用しているため、PulseAudioが実行されている場合、plughw:2
の使用は失敗することです。
通常、default
は正常に機能し、PulseAudioを使用する必要があります。ここで、pavucontrol
または同様のものを使用して、PulseAudioを使用して目的の入力ソースを選択できます。
これにより、コマンドは次のようになります。
ssh <user>@<remotehost> "arecord -f cd | oggenc -" | mplayer -cache 256 -
BUT:これにより、遅れが生じます。私の場合、約8秒です。それはひどい。
ssh <user>@<Host> "arecord -f S16_LE -r 36000" | aplay
それでおしまい。これはほとんどCPUを使用していません(htop
によると0.1%)。それは私のために〜60KB/sの帯域幅を使用しています。
ステレオサウンドが必要な場合:ssh <user>@<Host> "arecord -f cd" | aplay
ステレオマイクを使用している場合にのみ役立ちます。帯域幅が150KB/sまで増加します。 (また、サンプリングレートを44100Hzに上げるため)。
サンプリングレート(-r
)とビットレート(-f
の影響を受ける)の詳細については、 ここ を参照してください。
基本的に、値が小さいほど品質は悪くなりますが、必要な帯域幅は低くなります。
このソリューションはPulseAudioと完全に互換性があり、pactl
またはpavucontrol
GUIアプリケーションを使用して出力デバイス、ボリュームなどを制御できます。