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. HDU3853LOOPS (师傅逃亡系列•三)(基础概率DP)

    Akemi Homura is a Mahou Shoujo (Puella Magi/Magical Girl). Homura wants to help her friend Madoka sa ...

  2. BZOJ4709 Jsoi2011 柠檬【决策单调性+单调栈】

    Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们从 ...

  3. BZOJ4245 ONTAK2015 OR-XOR 【位运算+贪心】*

    BZOJ4245 ONTAK2015 OR-XOR Description 给定一个长度为n的序列a[1],a[2],…,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所有数字的 ...

  4. 【模板】NTT

    NTT模板 #include<bits/stdc++.h> using namespace std; #define LL long long const int MAXL=22; con ...

  5. 携程框架Apollo实现.NET Core微服务统一配置(测试环境-单机)

    Apollo实现.NET Core微服务统一配置(测试环境-单机) https://www.cnblogs.com/guolianyu/p/10065999.html 一.前言 注:此篇只是为测试环境 ...

  6. 获得消息的x,y的窗口内坐标(包括边框和titlebar高度

    rectWindow = D2D.GetWindowRect(self.hwnd)#窗口大小 rectClient = D2D.GetWindowRect(self.hwnd,True)#客户区大小 ...

  7. GCC用法

    http://www.cnblogs.com/hibernate6/archive/2010/08/24/2522057.html

  8. NumPy-快速处理数据--ndarray对象--多维数组的存取、结构体数组存取、内存对齐、Numpy内存结构

    本文摘自<用Python做科学计算>,版权归原作者所有. 上一篇讲到:NumPy-快速处理数据--ndarray对象--数组的创建和存取 接下来接着介绍多维数组的存取.结构体数组存取.内存 ...

  9. linux安装oracle12c

    参考: https://blog.csdn.net/who__are__you_/article/details/79178303 记录:

  10. 导航条且手机版.html——仿照官网例子

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...