【发布时间】:2015-04-27 22:58:31
【问题描述】:
我一直在尝试使用 OpenCV(在 Raspberry Pi 2 上)从我的两台 C920 Logitech 摄像头捕获 H264 流。我得出的结论是,这是不可能的,因为它尚未实施。我在 OpenCV/modules/highgui/cap_libv4l.cpp 中查看了一下,发现“Videocapture-function”总是将像素格式转换为 BGR24。我试图将其更改为 h264,但只有黑屏。我猜这是因为它没有被正确解码。
所以我做了一个解决方法:
- V4l2环回
- h264_v4l2_rtspserver
- Gstreamer-0.10
(你可以在github上找到loopback和rtspserver) 首先,我使用 v4l2loopback 设置了一个虚拟设备。然后 rtspserver 在 h264 中捕获,然后将 rtsp 流式传输到我的 localhost(127.0.0.1)。然后我用 gstreamer 再次捕获它,并使用 gst-launch-0.10 中的“v4l2sink”选项将它传送到通过环回制作的虚拟 v4l2 视频设备。 该解决方案有效,我实际上可以使用 opencv videocapture 连接到虚拟设备并获得全高清图片而不会使 cpu 过载,但这远不是一个足够好的解决方案。我得到了大约 3 秒的延迟,这对于我的立体视觉应用来说太高了,而且它使用了大量的带宽。
所以我想知道是否有人知道我可以使用 Derek Molloys boneCV/capture 程序中的 v4l2 捕获程序(我知道该程序有效)在 h264 中捕获然后将其通过管道传输到 gst-launche-0.10 的方法,然后再传输将它通过管道传输到我的虚拟设备的 v4l2sink? (您可以在这里找到捕获程序:https://github.com/derekmolloy/boneCV)
我使用的 gstreamer 命令是:
“gst-launch-0.10 rtspsrc location=rtsp://admin:pi@127.0.0.1:8554/unicast ! decodebin ! v4l2sink device=/dev/video4”
或者实际上你知道我会在 opencv highgui 代码中进行哪些更改,以便能够直接从我的设备捕获 h264 而无需使用虚拟设备?那真是太棒了!
这是我使用的环回和 rtspserver 的链接:
- github.com/mpromonet/h264_v4l2_rtspserver
- github.com/umlaeute/v4l2loopback
抱歉,我还没有足够的声誉发布更多链接。
【问题讨论】:
-
您是否设法弄清楚如何做到这一点?
-
很遗憾没有。但是你应该看看这篇文章,看看它是否对你有帮助:stackoverflow.com/questions/29991677/…