- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在尝试使用 OpenCV(在 Raspberry Pi 2 上)从我的两台 C920 Logitech 相机捕获 H264 流。我得出的结论是,这是不可能的,因为它尚未实现。我稍微查看了 OpenCV/modules/highgui/cap_libv4l.cpp,发现“Videocapture-function”总是将像素格式转换为 BGR24。我试图将其更改为 h264,但只有黑屏。我想这是因为它没有以正确的方式解码。
所以我做了一个解决方法:
(你可以在github上找到loopback和rtspserver)首先,我使用 v4l2loopback 设置了一个虚拟设备。然后 rtspserver 在 h264 中捕获然后将 rtsp 流式传输到我的本地主机 (127.0.0.1)。然后我再次使用 gstreamer 捕获它,并将其通过管道传输到我的虚拟 v4l2 视频设备,该设备是使用 gst-launch-0.10 中的“v4l2sink”选项通过环回制作的。这个解决方案有效,我实际上可以使用 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 !解码箱! v4l2sink device=/dev/video4
”
或者事实上您知道我会在 opencv highgui 代码中更改什么以便能够直接从我的设备捕获 h264 而无需使用虚拟设备?那将是非常棒的!
这里是环回和我使用的 rtspserver 的链接:
对于奇怪的链接,我感到抱歉,我还没有足够的声誉来发布更多链接..
最佳答案
我不知道您需要在 OpenCV 中更改的确切位置,但最近我开始在 Raspberry PI 上使用视频进行编码。
我将与您分享我的发现。
到目前为止我得到了这个:
我的工作进展代码位于:GitHub .
对代码组织感到抱歉。但我认为我所做的抽象比普通的 V4L2 或 OpenMAX 代码更具可读性。
一些代码示例:
使用 V4L2 Wrapper 读取相机 h264:
device.streamON();
v4l2_buffer bufferQueue;
while (!exit_requested){
//capture code
device.dequeueBuffer(&bufferQueue);
// use the h264 buffer inside bufferPtr[bufferQueue.index]
...
device.queueBuffer(bufferQueue.index, &bufferQueue);
}
device.streamOFF();
使用 OpenMax IL 解码 h264:
BroadcomVideoDecode decoder;
while (!exit_requested) {
//capture code start
...
//decoding code
decoder.writeH264Buffer(bufferPtr[bufferQueue.index],bufferQueue.bytesused);
//capture code end
...
}
关于c++ - 使用罗技C920采集H264到OpenCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29907420/
Nginx 日志可用于分析用户地址位置,行为画像等,如何通过 Elastic Stack 进行一站式的数据采集,数据清洗,数据落地,数据可视化,让数据发挥真正的价值呢? 架构设计 涉及到 El
我正在为 Directshow 编写自定义视频渲染过滤器。我的渲染器假定传入像素一次组织一行像素(正确的假设?)并使用 DirectX 纹理将它们 blits 到其他地方的另一个 DirectX 显示
我是一名优秀的程序员,十分优秀!