だから、私がやろうとしていることは、私が自分の道を見つけているので、少し複雑かもしれません。
基本を説明しましょう:
1-デジタル一眼レフカメラを持っていて、ウェブカメラとして使用したい(ただし、v4l2では/ dev/videoXデバイスを作成できないため、インターネットアプリケーションでは使用できず、Darktableなどの特定のアプリケーションのみ)
2-gphoto2を介してカメラからライブフレームを取得できます(ただし、それらをパイプする方法がわかりません。また、スケーリングとエンコード/デコードが必要かどうかもわかりません)
3-v4l2loopbackを使用して偽のWebカメラデバイス(/ dev/video1など)を作成でき、gst-launchを使用してデータをパイプライン処理できます(ただし、フレームをパイプライン処理する方法がわかりません)
そして私がそれについて知っていること:
1-次のように、カメラからstdoutにフレームを送信できます。
gphoto2 --capture-movie --stdout
2-ビデオテストソースから偽のWebカメラデバイスに次のようにデータを送信できます。
gst-launch-0.10 videotestsrc ! v4l2sink device=/dev/video1
3-gphoto2で使用される形式はmjpg(JPEG形式)です
それで、あなたはこれで私を助けることができますか?
フレームをgphoto2からgst-launchにパイプラインし、v4l2sinkで使用して/ dev/video1に送信するにはどうすればよいですか(Webカメラとして使用できるようになります)。
ありがとう!
かなり単純であることが判明しました:
modprobe v4l2loopback
そしてこれを行う
gphoto2 --stdout --capture-movie | gst-launch-0.10 fdsrc ! decodebin2 name=dec ! queue ! ffmpegcolorspace ! v4l2sink device=/dev/video0
もちろん、状況に応じてビデオデバイスを変更する必要があります。
2017年10月の時点で、GStreamerは1.0に更新され、v4l2loopbackはまた、いくつかの更新を受け取りました。
そのため、@ Reinaert Albrechtによって投稿された古いコマンドは機能しなくなり、現在機能する新しいコマンドは次のようになります。
gphoto2 --stdout --capture-movie | gst-launch-1.0 fdsrc fd=0 ! decodebin name=dec ! queue ! videoconvert ! tee ! v4l2sink device=/dev/video0
decodebin2
はdecodebin
に置き換えられましたffmpegcolorspace
はvideoconvert
に置き換えられましたtee
フィルターが追加されました(参照: https:// github .com/umlaeute/v4l2loopback/issues/8 )このコマンドは私にとってよりうまく機能しました:
gphoto2 --stdout --capture-movie | ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video1