web-dev-qa-db-ja.com

SSHまたはtcptunnelを介してビデオデバイスを配管しますか?

アナログカメラを古いLinuxコンピューターに接続し、/ dev/video0を別のコンピューターに直接パイプして、デバイスとして再び使用できるようにしたい(たとえば、/ dev/video0は/ dev/remote0に移動する必要があります)

(これを行う理由は、コンピューターにビデオをエンコードするのに十分な電力がないためです)

それは可能ですか?人々がデバイスからssh経由でmplayerに直接データをパイプできるのを見てきましたが、Zoneminderの何らかの参照ポイントが必要です。

  • 編集:Phil Hannentが言ったように:SSHは、送信するデータを暗号化する必要があるため、ハードウェアにとっておそらくリソースを大量に消費します。それで、これはtcptunnelのようなプログラムでも可能ですか?

  • Edit2:UnixとLinuxのstackexchangeサイトで、これをssh経由のパイピングに使用する質問を見つけました:ssh localhost dd if=/dev/video0 | mplayer tv://device=/dev/stdinそれはtcptunnelを介して行うことができますか?

4
skerit

netcat を使用できます。

cat /dev/video0 | nc -l 1234

これにより、ポート1234でリッスンし、圧縮されていない暗号化されていないデータを/dev/video0から接続しているすべてのクライアントに送信する1つのホスト上のサーバーが開きます。次のコマンドを呼び出すと、他のホストでデータを受信できます。

nc videohost 1234 | mplayer tv://device=/dev/stdin

ここで、videohostは、/dev/video0からデータを送信するホストです。

6
Paweł Nadolski

Netcatソリューションは私にはうまくいきませんでした。パイプエラーが表示されるか、catInvalid inputを報告します。

これは私のために働いた唯一の解決策です:

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

これにはエンコードされるという利点があるため、ボーナスとして帯域幅を節約できます。


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)。


より圧縮されたavi形式を使用するには、-f matroska-f aviに置き換えます。これにより、ソース上の多くのCPUリソースと多くの帯域幅が節約され、ラグのないエクスペリエンスが実現します。

3
confetti

私はこれに対して真剣にあなたに忠告します。私は最近、ssh://ファイルアクセスを介してaviビデオをストリーミングしようとしましたが、それは苦痛でした。このプロセス中にビデオが暗号化されてから復号化されることを覚えておく必要があります。

コンピュータがストリームの圧縮を処理できない場合は、確かに暗号化を処理できません。

本当にあなたはtcpトンネルに生データを持たせたいだけです:

http://www.vakuumverpackt.de/tcptunnel/

2
Phil Hannent