Logitech C920 ウェブカメラから未加工のビデオをストリーミングし、GStreamer 1.0 を使用してビデオの表示とファイルへの保存の両方を行いたいと考えています。
これは、カメラから h264 でエンコードされたビデオをストリーミングすると機能しますが (カメラはハードウェアでエンコードされた h264 を提供します)、カメラから未加工のビデオをストリーミングすると失敗します。ただし、表示するだけ、またはファイルに保存するだけの場合、生のビデオのストリーミングは機能します。
h264 ビデオ ストリームでは機能するのに、生のビデオ ストリームでは機能しないのはなぜですか?
カメラからディスプレイとファイルの両方へのh264でエンコードされたビデオストリーム(WORKS):
gst-launch-1.0 -v v4l2src device=/dev/video0 \
! video/x-h264,width=640,height=480,framerate=15/1 ! tee name=t \
t. ! queue ! h264parse ! avdec_h264 ! xvimagesink sync=false \
t. ! queue ! h264parse ! matroskamux \
! filesink location='h264_dual.mkv' sync=false
カメラからディスプレイのみへの raw ビデオ ストリーム (WORKS):
gst-launch-1.0 -v v4l2src device=/dev/video0 \
! video/x-raw,format=YUY2,width=640,height=480,framerate=15/1 \
! xvimagesink sync=false
カメラからファイルのみへの raw ビデオ ストリーム (WORKS):
gst-launch-1.0 -v v4l2src device=/dev/video0 \
! video/x-raw,format=YUY2,width=640,height=480,framerate=15/1 \
! videoconvert ! x264enc ! matroskamux \
! filesink location='raw_single.mkv' sync=false
カメラからディスプレイとファイルの両方への raw ビデオ ストリーム (失敗):
gst-launch-1.0 -v v4l2src device=/dev/video0 \
! video/x-raw,format=YUY2,width=640,height=480,framerate=15/1 \
! tee name=t \
t. ! queue ! xvimagesink sync=false \
t. ! queue ! videoconvert ! x264enc ! h264parse ! matroskamux \
! filesink location='raw_dual.mkv' sync=false
最後のコマンド (ディスプレイとファイルの両方への生のビデオ) は、警告やエラーなしで失敗します。gst-launch 端末の出力は、ファイルへの書き込みのみの場合とまったく同じです。xvimage ウィンドウが表示され、カメラからの画像が表示されますが、画像は変化しません (つまり、フリーズします)。ゼロ バイトのファイルも表示されます。
上記のコマンドの複数のバージョンを試しましたが、それらは問題を再現できる最小限のコマンドだと思います。
誰かが私が間違っていることを理解していますか?