所以,我开始玩 gstreamer,我可以做非常简单的管道,比如
gst-launch-1.0 -v v4l2src device=/dev/video1 ! video/x-raw,format=YUY2,width=640,height=480,framerate=10/1 ! videoconvert ! autovideosink
现在,由于我的 USB 网络摄像头(即 video1,video0 是计算机的内置摄像头)支持 h264(我已经使用 进行了检查lsusb
),我想尝试直接获取 h264 提要。我知道这个提要在 mjpeg 中混合,但是在网络上环顾四周,gstreamer 似乎仍然能够得到它。
由于我的最终目标是从 Beaglebone 流式传输它,因此我尝试使用本文提供的解决方案(从不同的终端添加侦听器):
#sender
gst-launch-1.0 v4l2src device=/dev/video1 ! video/x-264,width=320,height=90,framerate=10/1 ! tcpserversink host=192.168.148.112 port=9999
但这会产生以下错误:
WARNING: erroneous pipeline: could not link v4l2src0 to tcpserversink0
我还尝试了类似于我的第一个命令的操作,将源代码从 raw 更改为 h264(基于该帖子,尝试那里给出的完整命令会给出相同的错误消息)
gst-launch-1.0 -v v4l2src device=/dev/video1 ! video/x-h264,width=640,height=480,framerate=10/1 ! h264parse ! avdec_h264 ! autovideosink
但是同样,这也不起作用:
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2948): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming task paused, reason not-negotiated (-4)
Execution ended after 0:00:00.036309961
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
我承认这让我很疯狂:在网络上查看 SO 或其他地方,似乎有很多人使用与我所拥有的网络摄像头完全相同的网络摄像头(Logitech C920),但我一直遇到一个接一个的问题。
从该网络摄像头中提取 h264 的正确管道示例是什么?