转载请标明出处:https://blog.csdn.net/u013752202/article/details/96502576

简介

网络摄像头,即常说的免驱摄像头,其采用UVC协议通过USB跟主机通信,因其不需要编写单独的驱动,方便使用而得到广泛使用。

主机端无论是windows还是linux使用UVC摄像头都非常简单,也有很多文章详细介绍使用方法。但如何使自己的设备变成一个网络摄像头,却鲜有文章提及,本文重点分析如何构建一台网络摄像头。

硬件和软件基础

硬件:一套带有MIPI/DVP摄像头模组和USB接口的嵌入式主板

软件:系统linux,MIPI/DVP驱动是通的(本文不做介绍)

系统结构

网络摄像头涉及到两套linux驱动框架,V4L2视频采集框架,USB驱动框架。两套框架在linux系统中已经非常成熟,我们只需要会配置和应用就可以搭建出一个网络摄像头了。网络摄像头的系统结构如图1所示。

图1 网络摄像头系统结构

驱动配置

网络摄像头系统结构分为两部分,即驱动和应用。

驱动又分为视频采集驱动和视频输出驱动,如果只想从文件中读取视频然后通过USB传输到电脑上观看的话,那么视频采集驱动不是必需的。

视频采集驱动的功能是通过i2c配置CMOS模组的寄存器并采集图像数据,如果有需要编码的话,还负责编码数据。该驱动需要根据CMOS寄存器实现一个v4l2的子设备即可。具体目录为:drivers/media/i2c/soc_camera

视频输出驱动配置

在linux中已经实现了webcam的虚拟摄像头驱动,只要配置打开即可。这里有两种配置方法,linux原生驱动和Android usb驱动。这里先介绍linux原生驱动。

图2 linux原生webcam驱动配置

执行make menuconfig,按照图2 webcam配置即可。配置完成后编译kernel。源码目录位于:drivers/usb/gadget

应用编写

根据图1结构图,网络摄像头需要一个应用程序uvc_gadget来从视频输入设备或者文件中获取视频流,然后通过视频输出设备向电脑或其他USB主机输出视频。

视频输入设备的打开、配置和读取跟平常一样操作,分为Open->format setting->request buffer(mmap) ->stream on->read frame->stream off。设备缓存类型配置为:V4L2_BUF_TYPE_VIDEO_CAPTURE

视频输出设备会复杂一点,需要根据UVC建立连接的过程来配置和打开设备,UVC的事件包括:CONNECT/DISCONNECT/SETUP/DATA/STREAMON/STREAMOFF。

其中虚拟摄像头的配置需要在STREAMON的时候配置,STREAMOFF的时候关闭,否则只能打开一次摄像头,重新打开只能重新插拔USB了。设备缓存类型配置为:V4L2_BUF_TYPE_VIDEO_OUTPUT

可以用select()监控视频输出设备的事件状态和写状态,当可写时候,即可把视频输入设备读取到的视频流填充到输出设备的缓存中,这样电脑上就能看到画面了。

网络摄像头源码:待发布……(可与作者联系)

转载请标明出处:https://blog.csdn.net/u013752202/article/details/96502576

Linux网络摄像头设备端调试过程相关推荐

  1. Linux网络 - 数据包的接收过程

    Linux网络 - 数据包的接收过程 嵌入式Linux中文站 嵌入式Linux中文站 微信号 emblinux 功能介绍 嵌入式Linux中文站提供专业嵌入式Linux开发技术资讯 Table of ...

  2. RK3568驱动OV13850摄像头模组调试过程

    摄像头介绍 品牌:Omnivision 型号:CMK-OV13850 接口:MIPI 像素:1320W OV13850彩色图像传感器是一款低电压.高性能1/3.06英寸1320万像素CMOS图像传感器 ...

  3. Linux网络数据包接收处理过程

    因为要对百万.千万.甚至是过亿的用户提供各种网络服务,所以在一线互联网企业里面试和晋升后端开发同学的其中一个重点要求就是要能支撑高并发,要理解性能开销,会进行性能优化.而很多时候,如果你对Linux底 ...

  4. linux网络摄像头服务器,网络摄像头Logitech和Linux

    我有罗技c310相机,宣称的特点是720p30fps. 如果您将相机连接到Windows,则记录与所述720p 30fps完全一致-图片清晰. 挑战是将同一个摄像头连接到Orangepi(服务器Arm ...

  5. linux receive函数,Linux网络 - 数据包的接收过程

    的方式写入到指定的内存地址,该地址由网卡驱动分配并初始化.注: 老的网卡可能不支持DMA,不过新的网卡一般都支持. 3: 网卡通过硬件中断(IRQ)通知CPU,告诉它有数据来了 4: CPU根据中断表 ...

  6. Linux网络 - 数据包的发送过程

    继上一篇介绍了数据包的接收过程后,本文将介绍在Linux系统中,数据包是如何一步一步从应用程序到网卡并最终发送出去的. 如果英文没有问题,强烈建议阅读后面参考里的文章,里面介绍的更详细. 本文只讨论以 ...

  7. linux网络接口数据重新封包,Linux网络之设备接口层:发送数据包流程dev_queue_xmit...

    写在前面 本文主要是分析kernel-3.8的源代码,主要集中在Network的netdevice层面,来贯穿interface传输数据包的流程,kernel 博大精深,这也仅仅是一点个人愚见,作为一 ...

  8. 网络摄像头Androi端显示(mjpeg)源码分析

    main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and ...

  9. linux网络编程中端口号和ip地址转换方法

    0.字节序 网络字节序:是大端序,即:高字节放在低地址位置 比如:0x7F000101 对于一个整型,如上,我们看到的该形式,只是在大小端主机中存储的顺序是相反的. 网络序的存储方式是  7F 00 ...

最新文章

  1. smarty模板基本语法
  2. 漫谈递归:从斐波那契开始了解尾递归
  3. cornerHarris函数
  4. 官方乌镇定调互联网金融,P2P、众筹专项对待
  5. altium 去掉部分铺铜_干货|HFSS器件导入Altium进行PCB制作教程!!!
  6. 极具潜力的新兴职业!
  7. 复习上学期的HTML+CSS(1)
  8. 牛客多校10 - Tournament(找规律)
  9. 2015美国数学建模a代码c语言,1985~2015美国大学生数学建模竞赛题目集锦.docx
  10. C#合并文件夹图片列表 自定义排版顺序
  11. 嵌入式码头,Vaadin和焊接
  12. Java封装图书信息类
  13. 操作系统笔记(三)进程管理之管理
  14. 526个儿童游戏APP应用音效游戏声音集合音效素材 Kids Game Sound Effects
  15. 《Windows核心编程系列》十异步IO之IO完成端口
  16. 计算机重启很慢,电脑重启慢的原因
  17. Latex添加一条水平线
  18. Android之设置WebView的UserAgent
  19. phpstudy安装和使用
  20. PPT乱码如何解决?

热门文章

  1. EMAS 移动 DevOps 解决方案 —— Mobile DevOps
  2. 索引推荐神器Paw Index Advisor使用手册(2)-语法支持
  3. 微信订水水站小程序开发有哪些作用
  4. 从 TPCH 测试学习性能优化技巧之 Q10
  5. 微信登录 errcode:40163,errmsg:code been used
  6. 2022年7月1日-7月5日linux基本语句
  7. 金融直播营销方案有哪些内容?
  8. java JDK安装与环境配置详解(超超超级详细)
  9. 前端003_模拟数据接口_easymock
  10. python 串口助手 简书_[pyqt5-pyserial实现一个串口调试工具记录]