第一感觉是首先得了解v4l2协议,它的功能、以及与之对应的实现逻辑,还有与硬件、操作系统的交互等内容。再试着根据功能逻辑和软硬件交互关系,借助硬件设备,实现基础的功能,如查询设备信息、帧类型等。然后,一步一步按照逻辑功能实现步骤,完成代码的编写。
一开始并不了解YUV格式文件,在代码中也仅仅是把硬件设备中采集的单帧数据写入到 file.yuv 文件中,并试着使用pYUV软件打开该文件,结果肯定打开失败。此处,考虑的问题是可能是打开的方式不对(格式选择、帧率等),或者是文件数据类型不对(并不是YUV格式),最后才发现,就是文件数据类型不对,原因是USB协议不支持也就是下面要求下载virtualbox扩展增强包的原因。而且,打开的方式也不对,要求VGA-YUV422-interleaved(后面补充)。
后面就可以实现USB摄像头采集YUV格式视频,保存并播放。下面将详细介绍整个流程。
一、软件环境搭建
1、系统环境
操作系统:ubuntu16.04LTS
编辑器:Vim 7.3.429
编译器:gcc 4.6.3
2、下载virtualbox扩展增强包(与USB摄像头有关)
说明:首先,要确认你的USB摄像头使用的什么版的USB协议,1.1或2.0或3.0;virtualbox16.04LTS仅支持USB1.1,所以如果你的USB摄像头是USB2.0或USB3.0就需要安装扩展增强包;当然,如果你的virtualbox一开始就支持USB2.0或USB3.0,也就无需执行这一步骤。
virtualbox管理器->设置->USB设备->USB控制器(确认是否支持USB2.0/3.0)
下载方式(https://jingyan.baidu.com/article/22a299b5e0198a9e19376a38.html)
3、驱动一般会自动安装,如果驱动未安装,也无法实现功能
二、硬件环境确认(确认步骤)
说明:这一步意在确认USB硬件是否正常,先在主机上确认(排除硬件设备出现的问题),再在ubuntu系统上使用相关软件确认(排除ubuntu上驱动的问题),若两步都能够成功显示图像,则表明在硬件、驱动、接口等方面都没有问题,最后才进行软件编程。
此处,考虑的较为繁杂,一般的设备都不会出现问题,最可能遇见的问题就是上面说的USB协议不一致的问题。所以,如果软件方面确认无误,此步可跳过。
1、所用到软件
主机(Windows):MiniVCap(USB检测)、pYUV(YUV格式文件打开)
虚拟机(ubuntu):cheese/mplayer/camorama(USB检测)
2、确认USB摄像头在主机上可用
插入摄像头USB接口,打开MiniCap,若图像显示成功,则确认无误。
3、确认USB摄像头在ubuntu系统可用
安装相关的软件(任选其一)
sudo apt-get install cheese;
sudo apt-get install mplayer;
sudo apt-get install camorama;