directshow 虚拟摄像头 实例 代码解读

本文只介绍这个源码的大致构成以及怎么修改,因为其他的我也不会啊哈哈哈,我就是用QQ调用虚拟摄像头读取我自己的视频或者图片播放给别人让别人以为这就是实时的而已。
1,示例代码QQ可用 Directshow实现的虚拟摄像头(win10+vs2013,c++代码)    没有积分的又需要代码可以邮件找我huqiaoping23@qq.com
 
2,源码说明
此源码包含了directshow的库文件,相关配置文件也保存在工程中,可以直接运行,不需要额外安装DirectShow或者DirectX的SDK。
此源码是注册注销虚拟摄像头的源码,跑起来可以让QQ视频显示每个像素为随机数的图片(需要其他功能可以自行设计写代码修改)。如下图
3、代码解读
 
结构说明:
文件Filter.cpp和Filter.h是虚拟摄像头具体的配置信息,比如提供给虚拟摄像头什么数据,要改代码改数据读取不一样的东西就看这俩文件;
文件Dll.cpp、Dll.def是虚拟摄像头的注册、注销等函数,要看directshow怎么工作就看这里;
文件DibHelper.h和DibHelper.cpp是获取电脑屏幕像素点的函数,如果你想让QQ视频的另一方看到的是你的电脑实时的画面,就会用到这里面的函数,因为最初的代码功能是让QQ视频对方看到自己的电脑屏幕所以用到了它们,但是现在的代码没有读取电脑屏幕,直接赋值,写随机数进去,所以不要这俩文件一样可以跑通。
 
读代码
从Dll.def开始读起
该工程生成的是库文件VCam.ax,类似我们平常用的.dll文件,不是.exe这种可执行文件,所以无法像我们以前一样调试,我不知道对库文件有什么调试方法,所以一旦出错只好通过人眼检查来查看排查错误。
试着在工程中搜索DllMain、DllRegisterServer、DllUnregisterServer能有关虚拟摄像头的函数,具体函数功能可以查看官网上的介绍,这里给出链接,我就不翻译了
 
Dll.def和Dll.cpp对应着看,就是directshow怎么用的。(其中g_wszFilterName这个是虚拟摄像头的名字,你可以试着改成你自己的名字)
具体的虚拟摄像头配置信息(也就是Filter.cpp和Filter.h)是怎么和配置进去的,也就是怎么和Dll.cpp和Dll.def联系起来的,请自行搜索CLSID_VirtualCamera
Filter.cpp和Filter.h重点要注意的函数是FillBuffer,这个函数是具体填写数据的函数,此实例上是直接填写随机数,所以QQ视频时调用看上去就是一堆灰度不断变化的东东。
如果要看Filter具体怎么配置怎么写的,从CVCam这个类开始看起。
 
4,尝试着用虚拟摄像头播放你自己的一张图片(试着自己修改示例代码)
说明:
上图中框着的部分就是写数据的部分,cbData是大小,pData是具体的数据,这里都是随机数。也就是现在要读一张自己的图片,把数据填进去,仅此而已。
我之前只用过opencv读图片读视频,我也不知道其他方式应该怎么读,所以我就直接用opencv了。
我的环境是opencv3.0,环境配置我就不说了,其他opencv的版本也一样。
为了方便以后改成视频,我写了一个Mat类图片读取到buffer中的函数,如下
 
把上一张图片中的红框部分注释掉,用opencv读取图片后,直接调用这个函数就可以了。当然这个函数是针对彩色图片的,如果你是灰度图,就又不一样了。
可以注意到复制数据时是倒着复制的,这个是因为bitmap和Mat在存储数据时的不同,另外我貌似没有管左右的问题,反正看着还行。
代码修改及其测试结果:
可以看到当我用电脑登陆QQ进行视频时,左右看上去是正常的,但是对方收到的图片,左右却是相反的,所以说我这个读Mat类数据的函数还有一点问题,即,左右反了,读者自行修改,或者我晚点修改好了再上传。
如果会传照片了,后面传视频什么的都顺其自然了。此文不再赘述
 
 
http://blog.csdn.net/u011668104/article/details/53335117

directshow 虚拟摄像头 实例 代码解读的更多相关文章

  1. asp.net中生成缩略图并添加版权实例代码

    这篇文章介绍了asp.net中生成缩略图并添加版权实例代码,有需要的朋友可以参考一下 复制代码代码如下: //定义image类的对象 Drawing.Image image,newimage; //图 ...

  2. Jsoup代码解读之四-parser

    Jsoup代码解读之四-parser 作为Java世界最好的HTML 解析库,Jsoup的parser实现非常具有代表性.这部分也是Jsoup最复杂的部分,需要一些数据结构.状态机乃至编译器的知识.好 ...

  3. macOS平台下虚拟摄像头的研发总结

    一.背景介绍 虚拟摄像头,顾名思义,就是利用软件技术虚拟出一个摄像头硬件设备供用户使用.当我们需要对视频图像进行处理再输出时,虚拟摄像头就具备非常大的价值了.关于如何在Windwos上实现一个虚拟设备 ...

  4. MXNet--DMLC-Core代码解读与宏

    MXNet--DMLC-Core代码解读与宏 dmlc-core是Distributed (Deep) Machine Learning Community的一个基础模块,这个模块用被应用到了mxne ...

  5. vivi虚拟摄像头驱动程序

    一.vivi虚拟摄像头驱动 基于V4L2(video for linux 2)摄像头驱动程序,我们减去不需要的ioctl_fops的函数,只增加ioctl函数增加的必要的摄像头流查询等函数: #inc ...

  6. (四) 虚拟摄像头vivi体验

    目录 虚拟摄像头vivi体验 源码下载 修改Makefile 安装xawtv 测试体验 title: 虚拟摄像头vivi体验 date: 2019/4/23 19:20:00 toc: true -- ...

  7. weex官方demo weex-hackernews代码解读(上)

    一.介绍 weex 是阿里出品的一个类似RN的框架,可以使用前端技术来开发移动应用,实现一份代码支持H5,IOS和Android.最新版本的weex已默认将vue.js作为前端框架,而weex-hac ...

  8. V4L2学习(五)VIVI虚拟摄像头驱动

    概述 前面简单分析了内核中虚拟摄像头驱动 vivi 的框架与实现,本文参考 vivi 来写一个虚拟摄像头驱动,查询.设置视频格式相对简单,难点在于 vb2_buf 的处理过程. 数据采集流程分析 在我 ...

  9. 13.Ext.extend用法以及代码解读

    转自:http://www.blogjava.net/dragonshrimp/archive/2008/03/01/183060.html Ext.extend用法以及代码解读 概述 Ext.ext ...

随机推荐

  1. BZOJ - 4318: OSU! (期望DP&Attention)

    Description osu 是一款群众喜闻乐见的休闲软件.  我们可以把osu的规则简化与改编成以下的样子:  一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1 ...

  2. HDU1671 水题字典树

    #include<cstdio> #include<cstdlib> #include<iostream> #include<cstring> #inc ...

  3. SpringDataJpa增删改查

    资料来源网址:http://www.cnblogs.com/hawell/p/SpringDataJpa.html Repository(几个常用的例子) @Repository public int ...

  4. Windows 10 自带那么多图标,去哪里找呢?

    无意间发现我的 D 盘根目录中大部分的文件夹都是系统专用文件夹,有自己的独特图标,偶有一两个开发用的文件夹是默认图标.于是想把它们改成独特样式,而且是 Windows 10 那些新图标样式! 这是我的 ...

  5. ResultSet.TYPE_SCROLL_SENSITIVE到底发生了什么?

    转自:https://blog.csdn.net/axman/article/details/3984103 这个问题我在几年前说过,但今天再次从CSDN上看到有人问这个问题,可以看出,真正懂这个问题 ...

  6. 静态分析工具PMD使用说明

    质量是衡量一个软件是否成功的关键要素.而对于商业软件系统,尤其是企业应用软件系统来说,除了软件运行质量.文档质量以外,代码的质量也是非常重要的.软件开发进行到编码阶段的时候,最大的风险就在于如何保证代 ...

  7. maven创建多模块项目

    在eclipse下构建maven项目,该项目由多个子模块组成. 1.创建一个父项目 NEW -->project-->maven-->maven Project,点击下一步,进入ne ...

  8. [MEF]第02篇 MEF的导入导出契约

    一.演示概述此演示介绍了如何为Export指定导出的协议名和类型,以及如何为Import指定导入的协议名和类型,只有确保导出和导入的协议名和类型相匹配了,才能注入成功,否则注入就会失败.相关下载(屏幕 ...

  9. drone 学习五 集成gitlab 配置以及简单测试

    备注: 使用docker-compose  进行安装 同时集成gitlab,预备环境 docker  docker-compose  gitlab 1. docker-compose version: ...

  10. phoenix 使用activerecord模式框架ecto 访问数据库

    备注:    需要先安装mysql 以及phoenix 框架,测试使用的是docker 进行安装,具可以参考代码    1. 创建项目 mix phx.new first --database mys ...