web-dev-qa-db-ja.com

ssh経由でリダイレクトサウンド(マイク)、ssh経由で電話する方法

あるコンピュータのマイクをリダイレクトして、sshを介して別のコンピュータでそれを聞くにはどうすればよいですか?正しいデバイスと正しいコマンドラインのどちらですか?

数年前、音声をリモートマイクからローカルコンピュータに、またはその逆にリダイレクトするのは簡単で楽しい方法でした。簡単な電話でした。 someinstructions がありますが、新しいコンピュータ/ Linuxディストリビューションでは動作しないようです。 /dev/audio私のコンピュータ(Fedora 17)で。

Pulseオーディオと関係があるのではないかと思います。または、この簡単な電話にPulseオーディオは必要ありませんか?適切なデバイスはどれですか?

alsamixerを起動してF6キーを押すと、すべてのサウンドデバイスが表示されます。しかし、どのデバイスが/dev 木。

52
erik

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

私の場合、card0card2(マイクを備えた私のウェブカメラ)が表示されます。それで、plughw:2のためにcard2を書きました。

アップデート2(mplayerなし)

mplayerがなく、_ffplayffmpegの一部)がない場合は、以下を使用できます。

  • 非圧縮ウェーブオーディオ(高帯域幅、録音側の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 -
    
59
erik

エリックの答えはうまくいきますが、それをそのまま使用すると、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アプリケーションを使用して出力デバイス、ボリュームなどを制御できます。

pavucontrol

3
confetti