V4L2 摄像头应用

1.V4L2 是 Video for linux two 的简称,是 Linux 内核中视频类设备的一套驱动框架,为视频类设备驱动开发和应用层提供了一套统一的接口规范。

2.使用 V4L2 设备驱动框架注册的设备会在 Linux 系统/dev/目录下生成对应的设备节点文件,设备节点的名称通常为 videoX(X 标准一个数字编号, 0、 1、 2、 3……),每一个 videoX 设备文件就代表一个视频类设备。应用程序通过对 videoX 设备文件进行 I/O 操作来配置、使用设备类设备。

3.摄像头设备应用流程:

1) 首先是打开摄像头设备;

2) 查询设备的属性或功能;

3) 设置设备的参数,譬如像素格式、 帧大小、 帧率;

4) 申请帧缓冲、 内存映射;

5) 帧缓冲入队;

6) 开启视频采集;

7) 帧缓冲出队、对采集的数据进行处理;

8) 处理完后,再次将帧缓冲入队,往复;

9) 结束采集。

V4L2 摄像头应用_第1张图片

4.列出所有摄像头设备

使用v4l2-ctl --list-devices命令来获取当前开发板下都有哪些摄像头设备,以及设备节点名称,如下所示我们使用的是USB摄像头对应的设备节点为 /dev/video1

V4L2 摄像头应用_第2张图片

5.查看摄像头详细信息

使用 v4l2-ctl -L命令来列出摄像头设备的详细信息,使用-d /dev/video1来指定查看的摄像头设备为/dev/video1

6.查看摄像头支持的像素格式和分辨率

使用v4l2-ctl --list-formats-ext命令来获取列出摄像头支持的像素格式,分辨率大小,以及帧率都有哪些,使用 -d /dev/video1命令来指定获取的设备为/dev/video1。

V4L2 摄像头应用_第3张图片

7.使用mjpg_streamer预览摄像头数据

V4L2 摄像头应用_第4张图片

可选的-h查询帮助信息、-v查询版本信息、-b后台执行。

输入so插件包含:input_uvc.so、input_testpicture.so、(input_file.so、input_ptp2.so、input_http.so)

输出so插件包含:output_http.so、(output_file.so、output_udp.so、output_rtsp.so、output_viewer.so)

7.1)执行mjpg_streamer获取摄像头数据

如下所示我们使用:

-i参数指定输入的摄像头数据类型为uvc类型;

-d参数指定使用的摄像头设备为/dev/video1;

-r参数指定输入分辨率为640x480;

-q参数指定uvc数据质量为90;

-n参数说明不要初始化Linux-UVC驱动程序的dynctrls;

-o参数指定输出类型为http方式;

-w指定网站目录为 /usr/share/mjpg-streamer/www/

mjpg_streamer -i "/usr/lib/mjpg-streamer/input_uvc.so -d /dev/video1  -r 640x480 -f 30 -q 90 -n" -o "/usr/lib/mjpg-streamer/output_http.so -w /usr/share/mjpg-streamer/www/"

mjpg_streamer -i "/usr/lib/mjpg-streamer/input_uvc.so -d /dev/video1 -f 30 -q 90 -n" -o "/usr/lib/mjpg-streamer/output_http.so -w /usr/share/mjpg-streamer/www"

8.浏览器打开并查看摄像头数据

开发板IP地址为192.168.1.30 ,使用电脑浏览器打开如下地址即可预览摄像头数据。

192.168.1.30:8080

V4L2 摄像头应用_第5张图片

9.遇到问题:

V4L2 摄像头应用_第6张图片

使用Buildroot,配置选择MJPG-streamer,直接编译生成映象文件

cd Buildroot_2020.02.x/
make menuconfig  //图形界面
/mjpg            //搜索mjpg
选择y,保存,退出
make //进行编译

198M就可以比较流程的传输视频内容。

文件源码所在目录:

10.查看线程数

将命令后台运行,通过ps查看系统进程。

打开视频播放端,可以发现多了一个线程

如果再网页再开一个视频播放端,发现又多了一个线程

即:对于每一个链接都会创建一个线程。

你可能感兴趣的:(linux应用,linux,单片机)