USB设备驱动开发之扩展(利用USB虚拟总线驱动模拟USB摄像头)

本文介绍了如何利用USB虚拟总线驱动模拟USB摄像头,通过分析UVC协议和USB抓包,实现了从USB描述符模拟到视频数据传输的全过程。代码将在优快云上发布,提供简单的API供开发者扩展,用于创建虚拟摄像头。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                         fanxiushu 2016-10-08 转载或引用,请注明原始作者

做这个事情写这篇文章之前,压根没朝模拟USB摄像头这方面去想过。

直到优快云上一位朋友提出问题,才想到还有这么一个玩意。
因此花了4,5天时间,利用自己之前开发的USB驱动,实现了一个虚拟USB摄像头的实例代码。
稍后会公布到优快云上。

记得最早的一篇文章也是介绍虚拟摄像头驱动的开发的,只是当时采用的是windows的流内核实现的,
windows实现视频驱动(包括摄像头,声卡等等多媒体相关的)本身就是采用流内核作为微端口框架来实现的。
因此很容易想到使用AVStream流内核框架来实现虚拟摄像头,
事实上,USB接口的摄像头,在经过底层的USB总线层,上升到驱动的功能层,
依然需要利用AVStream微端口实现摄像头的功能。

而USB接口的摄像头,如果它的USB接口传输的协议是符合UVC(USB Video Class)标准的,
则windows会自动加载自己的usbvideo驱动,而无需再额外开发驱动,这就是大家所说的是免驱的。
不光是USB摄像头,因为USB的通用性和普遍性,很多很多的USB接口设备,包括U

VidCap所有函数具体说明请参阅csVidCap.h。 一、 预览/录象流程 1、 初始化并获取当前系统活动的摄像头数量;VidCapInit 2、 连接并打开指定的摄像头;VidCapConnect 3、 设定摄像头输出分辨率和图象格式;VidCapSetFormat 4、 启动摄像头,并传入回调函数地址;VidCapStart 5、 摄像头开始工作,获得数据后调用回调函数通知应用程序;VidCapCallbackProc 6、 停止摄像头;VidCapStop 7、 关闭摄像头;VidCapDisconnect 8、 释放资源。VidCapUninit 二、 拍照流程 1、 初始化并获取当前系统活动的摄像头数量;VidCapInit 2、 连接并打开指定的摄像头;VidCapConnect 3、 设定摄像头输出分辨率和图象格式;VidCapSetFormat 4、 启动摄像头,并传入静态图片回调函数地址;VidCapStart 5、 摄像头开始工作; 6、 用户按下摄像头上拍照按钮或应用程序调用拍照函数;VidCapTakeStillPicture 7、 摄像头拍照并调用静态图片回调函数通知应用程序;VidCapCallbackProc 8、 停止摄像头;VidCapStop 9、 关闭摄像头;VidCapDisconnect 10、 释放资源。VidCapUninit 三、 摄像头分辨率和输出格式 1、 获取当前摄像头所支持的分辨率和输出格式数量;VidCapGetNumberOfCapabilities 2、 遍历每个支持的分辨率和格式的详细信息;VidCapGetStreamCaps 3、 选择并设定当前所需的分辨率和输出格式。VidCapSetFormat 四、 摄像头控制 1、 获取控制参数的范围和默认值;VidCapGetRange 2、 获取控制参数的当前设定值;VidCapGet 3、 设定控制参数新值。VidCapSet
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨中风华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值