设为首页 加入收藏

TOP

基于V4L2的Webcam应用过程详解【附源码】
2014-11-24 07:37:38 来源: 作者: 【 】 浏览:1
Tags:基于 V4L2 Webcam 应用 过程 详解 源码

尝试编写了一个基于 v4l2 的摄像头应用,目前仅仅实现从摄像头捕捉视频,然后本地回显。


有图有正相,先上效果图,其中左侧小点为预监窗口,右侧为经过 x264 压缩,tcp 传输,libavcodec 解压,再用 qt 显示的效果,延迟很低很低 :)


基于V4L2的Webcam应用过程详解


主要就是以下几个知识点:


1. v4l2接口:
2. X11的本地回显:
3. 使用 libswscale 进行拉伸:
4. 使用 libx264 压缩:


1. v4l2接口: 大眼一看, 密密丫丫的 VIDIOC_XXXX, 其实静下心来, 也没多少, 很清晰, 大体流程如下:
capture_open(name)
open /dev/video0 // 打开设备
check driver caps // 检查一些 caps
VIDIOC_REQBUFS // 使用 streaming mode, mmap mode, 分配
VIDIOC_QUERYBUF // 获取分配的buf, 并且mmap到进程空间
mmap
VIDIOC_QBUF // buf 入列
VIDIOC_STREAMON // 开始


使用的数据结构


struct Buffer
{
void *start;
size_t length;
};
typedef struct Buffer Buffer;
struct Ctx
{
int vid;
int width, height; // 输出图像大小
struct SwsContext *sws; // 用于转换
int rows; // 用于 sws_scale()
int bytesperrow; // 用于cp到 pic_src
AVPicture pic_src, pic_target; // 用于 sws_scale
Buffer bufs[2]; // 用于 mmap
};
typedef struct Ctx Ctx;


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux下如何隐藏命令行参数 下一篇基于V4L2的Webcam应用 本地预监(..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·PostgreSQL 索引 - (2025-12-25 22:20:43)
·MySQL Node.js 连接 (2025-12-25 22:20:41)
·SQL 撤销索引、表以 (2025-12-25 22:20:38)
·Linux系统简介 (2025-12-25 21:55:25)
·Linux安装MySQL过程 (2025-12-25 21:55:22)