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プロセスで読み取ろうとしましたが、これは機能するので、データ形式ではないことがわかります。