ssh経由でサウンド(マイク)をリダイレクトします。ssh経由で電話をかける方法は?


47

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

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

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

alsamixerF6キーを押して起動すると、すべてのサウンドデバイスが表示されます。しかし、どの/devツリーのデバイスかはわかりません。

回答:


53

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なし)

あなたが持っていないか好きではないmplayerffplay(の一部である場合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 -
    

1
cat - | mplayer -ただの代わりにやっている何らかの理由がありますmplayer -か?
クリスダウン14

その理由は、引用したソースからコマンドをコピーしただけです。冗長になる場合があります。私はそれを削除しましたが、まだ動作しているようです。たぶんそれが必要で、著者は彼の投稿でそれを告げずにそれを知っていたというエッジケースがありますか?
エリック14

3

Erikの答えはうまくいきますが、それをそのまま使用すると、flacまたはを使用すると、oggencかなりの遅れが生じます。
解決策は-cache 256mplayerコマンドに追加することです。したがって、次のようになります。

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

また、最近のほとんどのディストリビューションでは、PulseAudioを使用しています。PulseAudioはハードウェアデバイスを制御するためplughw:2、PulseAudioの実行中は使用できません。
一般に、default正常に動作し、PulseAudioを使用する必要があります。PulseAudioは、PulseAudioを使用pavucontrolして目的の入力ソースを選択するために使用できます。

これにより、コマンドは次のようになります。

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

しかし、これは遅れをもたらします。私の場合、約8秒です。それはひどい。


解決策は、他のコマンドよりもはるかに簡単です。

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

それでおしまい。これはほとんどCPUを使用していません(によると0.1%htop)。私は〜60KB /秒の帯域幅を使用しています。

ステレオサウンドが必要ssh <user>@<host> "arecord -f cd" | aplay
な場合:ステレオマイクを使用している場合にのみ有用で、帯域幅を150 KB / sまで増やします。(サンプリングレートを44100Hzに上げるため)。

サンプリング・レート(の詳細情報-r)と(の影響を受けてビットレートを-f)見つけることができるここに
基本的に、低ければ低いほど品質は低下しますが、必要な帯域幅は低くなります。

このソリューションはPulseAudioと完全に互換性がありpactlpavucontrolGUIアプリケーションを使用して出力デバイス、ボリュームなどを制御できます。

パブコントロール

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.