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


26

私は2台のコンピューターを持っています。オフィスにあるデスクトップWebカメラが接続されている)と、ネットワーク上のどこかにあるラップトップです。

通常、ウェブカメラで次のコマンドを実行してオフィスを見る

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'

そして、ウェブカメラを見るために(私のラップトップで

mplayer tv://device=/dev/video1

回答:


14

何かのようなもの:

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. 帯域幅を確認する

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


mplayerに何か問題があると思います。実行dd if=/dev/video0 | mplayer tv://device=/dev/stdinすると、リソースがビジーであることがわかります。それ以外の場合、実行しても動作します(ビデオを参照)mplayer tv://device=/dev/null
Stefan

1
この答えは非常に誤解を招くものです。「正しい」呼び出しはmplayer可能でしょうmplayer tv:// -tv device=/dev/stdin(キャラクタデバイスは、より多くの特別なまたは類似したが、これは動作しませんdd適切に処理することができます)。実行mplayer tv://device=/dev/stdinすると、デバイスの仕様が表示されないため、/dev/video0直接戻って「動作している」ように見えます。しかし、ウェブカメラとmplayerプロセスがネットワークによって分離されている場合、まったく機能しません。
ダニエルワーグナー

はい、これ localhostにSSH接続しているため正常に動作しているように見えますが、実際には失敗しており、mplayerはlocalhostの/ dev / video0にフォールバックしています。これらのコマンドを別のコンピューター(つまり、localhostではない)にSSHで接続しようとすると、リモートのWebカメラではなく、ローカルのWebカメラが表示されます。
ジェイソンアントマン

ローカルホストで試しましたが、ssh localhost dd if=/dev/video0 | mplayer tv://device=/dev/stdin2台の異なるコンピューターを使用しているときにコマンドを実行する方法は?
フランチェスコボイ

mplayer tv://device=/dev/stdinOSXの代替手段は何ですか?
フランチェスコボイ

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が必要です。


4

VideoLANのプロジェクトは、あなたが望むだけで何やって大部分に存在します。

私はそのストリーミング機能を使用していませんが、その単一のマシンでの使用では、非常に堅実であることが示されています。


それで、このシナリオについて詳しく説明していただけますか?
MikeW

1

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

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

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

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


Tシャツと組み合わせると、視聴と記録を同時に行うことができます。

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


0

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

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

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

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


質問を明確にしてみました。更新されたバージョンを参照してください
ステファン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.