转载请标明出处: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. 【好文推荐】查看mysql安装位置
  2. 打工人的一把辛酸泪,网站提现为啥多于800要扣20%的税?我想这些东西你需要明白
  3. mvc如何嵌套第三方页面_长文观点丨为什么我不再使用MVC框架?
  4. javaweb基础 02--javaweb基础概念
  5. CentOS 6.5 生产环境编译安装LNMP
  6. 经典数据可视化案例-百度迁徙图
  7. 弘辽科技:天猫国际预测2022六大进口消费趋势
  8. 用SQL表达并交差操作
  9. easyboot的一个严重不足
  10. 研究生可以不用学英语?只要考研英语或六级分数高!
  11. 出方向链路负载均衡技术(原理部分)
  12. mac php pear pecl,mac 安装 pecl pear
  13. java解压obb,使用 OBB 文件(Android)
  14. AWS - Amazon Simple Email(ASE) 邮件服务
  15. 获取中文字符串的拼音
  16. 【风马一族_Android】Android学习
  17. Echart API
  18. java p2p 下载_java p2p文件传输(含服务器端与jsp源码)
  19. 福昕阅读器PDF文件不能标记不能高亮的原因与解决方案
  20. 最新gcc下载和linux环境变量设置

热门文章

  1. 全套免费视频下载平台
  2. 最长单词(输出最长字符串)
  3. PHP验证码--汉字,PHP验证码汉字校检
  4. uml 菱形_UML建模之类图常用符号及关系详解!
  5. 窄带随机过程(未完成)
  6. 视频智能合并去除原声,添加新音频及文案导出保存
  7. 51单片机期末考试试卷及答案
  8. SQL 怎样 远程备份数据库到本地
  9. Oculus关闭VR电影制作部门,却留下如此美好的作品
  10. 11.03 P73 模拟+堆+贪心