使用 gstreamer 的色度键网络摄像头视频
Chroma key webcam video with gstreamer
我正在尝试在 Fedora 21 上将我的罗技 C910 网络摄像头与绿屏应用程序放在一起。我已经使用以下命令从网络摄像头获取 1080p30 h264 视频以使用 gstreamer 显示:
gst-launch-1.0 v4l2src device=/dev/video0 ! queue ! \
video/x-h264,width=1920,height=1080,framerate=30/1 ! \
h264parse ! avdec_h264 ! xvimagesink sync=false
这很好用,延迟很低。接下来我要做的是在我在网络摄像头图片后面添加图像/视频之前,对图片进行色度键控,使某些颜色透明。从我读过的内容来看,我需要使用 alpha 过滤器来实现这一点。通过查看 gst-inspect,我可以看到它接收 video/x-raw 并输出 video/x-raw。 avdec_h264 元素输出 video/x-raw 所以看起来我应该能够做到:
gst-launch-1.0 v4l2src device=/dev/video0 ! queue ! \
video/x-h264,width=1920,height=1080,framerate=30/1 ! \
h264parse ! avdec_h264 ! alpha method=green ! \
xvimagesink sync=false
但是,每当我 运行 该命令时,我都会得到以下输出:
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Redistribute latency...
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2933): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming task paused, reason not-negotiated (-4)
Execution ended after 0:00:00.437613774
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
任何人都可以告诉我我缺少什么以及为什么它不能正常工作吗?
在此先感谢您的帮助,
肯辛顿夫人
您应该通过 videoconvert 元素将 alpha 与 xvimagesink 连接:
gst-launch-1.0 v4l2src device=/dev/video0 ! queue ! \
video/x-h264,width=1920,height=1080,framerate=30/1 ! \
h264parse ! avdec_h264 ! alpha method=green ! videoconvert ! \
xvimagesink sync=false
我正在尝试在 Fedora 21 上将我的罗技 C910 网络摄像头与绿屏应用程序放在一起。我已经使用以下命令从网络摄像头获取 1080p30 h264 视频以使用 gstreamer 显示:
gst-launch-1.0 v4l2src device=/dev/video0 ! queue ! \
video/x-h264,width=1920,height=1080,framerate=30/1 ! \
h264parse ! avdec_h264 ! xvimagesink sync=false
这很好用,延迟很低。接下来我要做的是在我在网络摄像头图片后面添加图像/视频之前,对图片进行色度键控,使某些颜色透明。从我读过的内容来看,我需要使用 alpha 过滤器来实现这一点。通过查看 gst-inspect,我可以看到它接收 video/x-raw 并输出 video/x-raw。 avdec_h264 元素输出 video/x-raw 所以看起来我应该能够做到:
gst-launch-1.0 v4l2src device=/dev/video0 ! queue ! \
video/x-h264,width=1920,height=1080,framerate=30/1 ! \
h264parse ! avdec_h264 ! alpha method=green ! \
xvimagesink sync=false
但是,每当我 运行 该命令时,我都会得到以下输出:
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Redistribute latency...
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2933): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming task paused, reason not-negotiated (-4)
Execution ended after 0:00:00.437613774
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
任何人都可以告诉我我缺少什么以及为什么它不能正常工作吗?
在此先感谢您的帮助,
肯辛顿夫人
您应该通过 videoconvert 元素将 alpha 与 xvimagesink 连接:
gst-launch-1.0 v4l2src device=/dev/video0 ! queue ! \
video/x-h264,width=1920,height=1080,framerate=30/1 ! \
h264parse ! avdec_h264 ! alpha method=green ! videoconvert ! \
xvimagesink sync=false