前言:
最近问v4l2的人挺多的,等忙完这段时间,后面有空研究一下。今天给大家分享一些应用demo;
开源DEMO介绍:这个项目是利用FFMPEG读取虚拟机的v4l2摄像头设备,并利用SDL播放器显示出来,下面这个是整个项目的框图:
运行的效果如下:
下面我们来看看代码的分析:
- Main函数的分析:
我们来看看main函数的代码,main函数的代码很简单,基本上是一些函数和线程的初始化,在这里我们分别初始化了AVFifoBuffer、摄像头读取线程、SDL显示线程三个部分。
- read_camera_thread(摄像头读取线程):
上面代码就是read_camera_thread的代码、这里的功能主要有几个,首先是利用FFMPEG的API:
代码语言:javascript复制avformat_open_input
去打开V4L2的摄像头设备,我们这里的设备节点是/dev/video0。打开设备之后,利用av_read_frame API进行每一帧摄像头数据的读取。读取完成之后,进行格式转换成YUV420P,转换完成之后把YUV420P的数据存储到AVFifoBuffer队列。
- sdl_show_thread(SDL显示线程):
上面则是,sdl_show_thread线程的代码。这个代码的主要功能是通过av_fifo_generic_read这个API拿到AVFifoBuffer队列的YUV数据,并利用SDL API把YUV数据刷新到播放器上面.