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) 结束采集。
4.列出所有摄像头设备
使用v4l2-ctl --list-devices命令来获取当前开发板下都有哪些摄像头设备,以及设备节点名称,如下所示我们使用的是USB摄像头对应的设备节点为 /dev/video1
5.查看摄像头详细信息
使用 v4l2-ctl -L命令来列出摄像头设备的详细信息,使用-d /dev/video1来指定查看的摄像头设备为/dev/video1
6.查看摄像头支持的像素格式和分辨率
使用v4l2-ctl --list-formats-ext命令来获取列出摄像头支持的像素格式,分辨率大小,以及帧率都有哪些,使用 -d /dev/video1命令来指定获取的设备为/dev/video1。
7.使用mjpg_streamer预览摄像头数据
可选的-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
9.遇到问题:
使用Buildroot,配置选择MJPG-streamer,直接编译生成映象文件
cd Buildroot_2020.02.x/
make menuconfig //图形界面
/mjpg //搜索mjpg
选择y,保存,退出
make //进行编译
198M就可以比较流程的传输视频内容。
文件源码所在目录:
10.查看线程数
将命令后台运行,通过ps查看系统进程。
打开视频播放端,可以发现多了一个线程
如果再网页再开一个视频播放端,发现又多了一个线程
即:对于每一个链接都会创建一个线程。