web-dev-qa-db-ja.com

/ dev / videoをssh経由でパイプできますか

私は2台のコンピューターを持っています。私のオフィスにはdesktopwebcamが接続されている)とlaptopネットワーク上の他の場所。

通常私は実行することによって私のウェブカメラを通して私のオフィスを見ます

ssh Office -Y "mplayer tv://device=/dev/video0"

私のラップトップから。 Xforwarding mplayerが好きではないので、なぜトンネルできないのか/dev/video私のラップトップでこれを実行して私のPCに?

Sudo mkfifo /dev/video1
ssh Office 'dd if=/dev/video' | Sudo dd of=/dev/video1'

そして、ウェブカメラを見る(私のlaptopで)

mplayer tv://device=/dev/video1
28
Stefan

何かのようなもの:

dd if=/dev/video0 | mplayer tv://device=/dev/stdin

ローカル(SOA#1)で動作します。同様に:

ssh localhost dd if=/dev/video0 | mplayer tv://device=/dev/stdin

と同様

mkfifo test
dd if=/dev/video0 of=test &
mplayer tv://device=test

したがって:

  1. 名前付きパイプなしで試してください
  2. 帯域幅を確認する

また、notはどのように機能しますか(黒い画面を表示する、不明なデバイスについて不平を言うなど)?

14

低帯域幅の場合は、ビデオストリームの圧縮をお勧めします。

ssh USER@REMOTEHOST ffmpeg -an -f video4linux2 -s 640x480 -i /dev/video0 -r 10 -b:v 500k -f matroska - | mplayer - -idle -demuxer matroska

どこ

  • -anはオーディオエンコーディングをオフにします。オーディオが必要な場合は、-an-f alsa -ac 1 -i hw:3に置き換えます(hw:3はhw:0またはhw:1の場合もあります。デバイスについてはarecord -lを参照してください)。音声のみが必要な場合(ビデオなし) これを使用
  • -s 640x480は、xおよびy次元でのビデオのサイズです
  • -r 10は、受信するフレームレートです(低いほど、低いビットレートでより良い画像になりますが、より粗く見えます)。
  • -b:v 500kは500キロビット/秒のビットレートです

リモートホストにffmpeg、インストールされているローカルマシンにmplayerが必要です。

15
erik

VideoLAN Project は、大部分はあなたが望んでいることだけを行うために存在します。

私はそのストリーミング機能を使用していませんが、1台のマシンでの使用では、非常に安定していることがわかりました。

4
msw

受け入れられた答えは私にとってはうまくいきません。 ddは単にそれを読みません。 ncは、別のポートを節約できない場合は悪いです(とにかくそれをまったく機能させませんでした)。 catも私にとってはうまくいきませんでした。

最終的に私のために働いたのは、受信側のこれです:

ssh user@Host "ffmpeg  -r 14 -s 640x480 -f video4linux2 -i /dev/video0 -f matroska -" | mplayer - -idle

これにはエンコードされているという利点があるため、帯域幅を節約できます。 debianマシンでは、フォーラム/ウェブサイトの他の何も私のために働いていませんでした。


tee と組み合わせると、同時に視聴と記録ができます。

ssh user@Host "ffmpeg  -r 14 -s 640x480 -f video4linux2 -i /dev/video0 -f matroska -" | tee $(date +%Y-%m-%d_%H-%M-%S)_recording.mkv | mplayer - -idle

これにより、ライブストリーミング用にmplayerが開き、同時に現在の日時を含むファイルに保存されます(ファイル名の例:2018-11-22_01-22-10_recording.mkv)。

2
confetti

あなたがそれを行うことができない理由があるかどうかはわかりませんが、あなたの実装で私が見る1つの問題は、リモートシステムがそのシステムで/ dev/video1を探すが、それを見つけることができないということです。ローカルシステムで作成しました。

私がやることは次のようなものです

nc -l 12345 | Sudo tee /dev/video > /dev/null &
ssh Office

ローカルシステムのTCPポート12345に移動するように指示して、何かを試してください。

0
Kevin M