如何使用 v4l2 linux 界面从网络摄像头获取视频?

Posted

技术标签:

【中文标题】如何使用 v4l2 linux 界面从网络摄像头获取视频?【英文标题】:How to get the video from webcam using v4l2 linux interface? 【发布时间】:2018-03-09 20:54:03 【问题描述】:

我正在尝试从 v4l2 API run the sample code。当我尝试运行示例代码时,我在编译程序本身时遇到了问题。请检查错误,在编译步骤中我需要安装或标记要传递的东西吗?

ubox:~/capVideoFrame$ gcc v4l2grab.c && ./a.out
/tmp/cc0E2uRM.o: In function `xioctl':
v4l2grab.c:(.text+0x2b): undefined reference to `v4l2_ioctl'
/tmp/cc0E2uRM.o: In function `main':
v4l2grab.c:(.text+0xf3): undefined reference to `v4l2_open'
v4l2grab.c:(.text+0x30f): undefined reference to `v4l2_mmap'
v4l2grab.c:(.text+0x6a2): undefined reference to `v4l2_munmap'
v4l2grab.c:(.text+0x6c4): undefined reference to `v4l2_close'
collect2: error: ld returned 1 exit status

源代码头文件:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/mman.h>
#include <linux/videodev2.h>
#include "/usr/include/libv4l2.h" // I am using ubuntu, so pointing to this location

【问题讨论】:

不走运,gcc -lv4l1 -lv4l2 v4l2grab.c - 同样的错误 成功了!请写为答案 【参考方案1】:

要成功编译,您需要为其添加标志-lv4l1 -lv4l2

gcc v4l2grab.c -lv4l1 -lv4l2

【讨论】:

为什么我们需要这些标志? 它将您的程序与必要的 v4l2 库“链接” 请阅读这篇文章lurklurk.org/linkers/linkers.html 它会更清楚为什么所有这些都是必需的。【参考方案2】:

如果你之前没有安装libv4l2,需要先安装:

sudo apt-get install -y libv4l-dev

顺便说一句,上面的链接已经失效,新的链接是here。

【讨论】:

欢迎来到 SO。我认为 OP 已经安装了库,问题不包括正确的标志。

以上是关于如何使用 v4l2 linux 界面从网络摄像头获取视频?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 c++ 使用 v4l2 API 连续捕获 h264 视频?

V4L2学习流程

v4l2编程 关于linux中无驱动摄像头无法驱动问题 会的话麻烦你看一下 万分感谢

Linux应用开发第七章摄像头V4L2编程应用开发

深入学习Linux摄像头v4l2应用编程

Camera | 5.Linux v4l2架构(基于rk3568)