3

gst-launch パイプラインのシンクが名前付きパイプと通常のファイルの場合、動作が異なります。

私は、カメラからのビデオを OMAP 組み込み (Linux) ボードに表示し、ティーを介してビデオを avi として配信する gst-launch パイプラインを持っています。

gst-launch -v -e omx_camera device=0 do-timestamp=1 mode=0 name=cam cam.src ! "video/x-raw-yuv, format=(fourcc)NV12, width=240, height=320, framerate=30/1" ! tee name=t1 t1. ! queue ! ducatih264enc profile=100 level=50 rate-preset=low-delay bitrate=24000 ! h264parse ! queue ! avimux ! filesink location=/tmp/camerapipe t1. ! queue ! dri2videosink sync=false

私が作れば

filesink location=/some/real/file t1.  

すべては順調です

しかし、Java/opencv プロセスで出力を読みたいのですが、これを行うと、Java プロセスには何も得られません。gst-launch プロセスは、PLAY に変更されたことをアナウンスします。

Javaプロセスの代わりに物事を単純化するためにtail -f、名前付きパイプを使用します

出力も表示されませんが、どちらの場合も dri2videosink はビデオを表示しています

tail または Java プロセスのいずれかで、それを強制終了すると gst-launch プロセスも停止するため、明らかに何らかの意味で「接続」されています。

テールを実行して gst-launch プロセスを強制終了すると、gst-launch が終了した後、数 K、おそらく 1 フレームのデータが取得されます。

通常のファイルに保存してJavaプロセスで読み取ろうとしましたが、これは機能するので、データ形式ではないことがわかります。

4

1 に答える 1

3

私は同じことをしようとしていますが、cでopencvを使用していて、ubuntuで作業しています。

私は以下を機能させました:

/dev/ に、mkfifo を使用して video_stream という名前のパイプを作成しました。そのパイプに読み書きする権限があることを確認するか、単に sudo を使用してください。

名前付きパイプへのテスト ビデオで再生する

sudo gst-launch -e videotestsrc ! video/x-raw-yuv, framerate=20/1, width=640, height=480 ! ffenc_mpeg4 ! filesink location=/dev/video_stream

Web カメラから名前付きパイプを再生します。

sudo gst-launch -e v4l2src device=/dev/video0 !  ffenc_mpeg4 ! filesink location=/dev/video_stream

次に、次の顔検出チュートリアルを使用しました

http://docs.opencv.org/doc/tutorials/objdetect/cascade_classifier/cascade_classifier.html#cascade-classifier

すべてをテストするために、入力をウェブカメラ 1 から名前付きパイプに変更しました。

  capture = cvCaptureFromCAM( -1 );

なる

 VideoCapture capture("/dev/video_stream");
于 2014-03-13T15:57:32.810 に答える