当 gst-launch 管道的接收器是命名管道与普通文件时,我会得到不同的行为。
我有一个 gst-launch 管道,它在 OMAP 嵌入式 (linux) 板上显示来自摄像机的视频,并通过 Tee 以 avi 形式提供视频。
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进程读取,这有效,所以我知道这不是数据格式。