アナログカメラを古い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を介して行うことができますか?
netcat を使用できます。
cat /dev/video0 | nc -l 1234
これにより、ポート1234
でリッスンし、圧縮されていない暗号化されていないデータを/dev/video0
から接続しているすべてのクライアントに送信する1つのホスト上のサーバーが開きます。次のコマンドを呼び出すと、他のホストでデータを受信できます。
nc videohost 1234 | mplayer tv://device=/dev/stdin
ここで、videohost
は、/dev/video0
からデータを送信するホストです。
Netcatソリューションは私にはうまくいきませんでした。パイプエラーが表示されるか、cat
がInvalid 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リソースと多くの帯域幅が節約され、ラグのないエクスペリエンスが実現します。
私はこれに対して真剣にあなたに忠告します。私は最近、ssh://ファイルアクセスを介してaviビデオをストリーミングしようとしましたが、それは苦痛でした。このプロセス中にビデオが暗号化されてから復号化されることを覚えておく必要があります。
コンピュータがストリームの圧縮を処理できない場合は、確かに暗号化を処理できません。
本当にあなたはtcpトンネルに生データを持たせたいだけです: