打算做个简单的聊天软件,其中一个我没做过的,就是视频采集。

在网上查了许久资料,终于搞清楚了dshow采集视频的流程

参考资料如下:

https://msdn.microsoft.com/en-us/library/ms787619(v=vs.85).aspx%20

http://wiki.opencv.org.cn/index.php/%e4%bd%bf%e7%94%a8DirectShow%e9%87%87%e9%9b%86%e5%9b%be%e5%83%8f%20

http://www.opencv.org.cn/forum.php?mod=viewthread&tid=31555%20

http://www.360doc.com/content/05/1206/10/2269_40540.shtml%20

http://www.tuicool.com/articles/zaeqUnj%20

现在把代码开源在github上,欢迎大家提出意见:

github:https://github.com/qianqians/video

大家如果需要试用,编译工程然后执行即可

因为是准备做聊天软件,所以是有服务器和客户端的c/s结构。

执行的时候,需要先启动chatserver,然后再执行chat

随意输入一个用户名,点确定即可进入主界面

点击加入视频,即可启动视频流程

因为对dshow不熟悉,所以我在采集之后,没有选择用dshow播放视频,而是解码成了bmp图片,然后调用gdi绘制

CDC * dc = theApp.video->GetDC();

HBITMAP hBitmap = CreateCompatibleBitmap(dc->GetSafeHdc(), width, height);
HBITMAP hold = (HBITMAP)dc->SelectObject(hBitmap); BITMAPINFO info;
info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
info.bmiHeader.biWidth = width;
info.bmiHeader.biHeight = height;
info.bmiHeader.biPlanes = ;
info.bmiHeader.biBitCount = ;
info.bmiHeader.biCompression = BI_RGB;
info.bmiHeader.biClrUsed = ;
info.bmiHeader.biSizeImage = ;
info.bmiHeader.biXPelsPerMeter = ;
info.bmiHeader.biYPelsPerMeter = ;
info.bmiHeader.biClrImportant = ; StretchDIBits(dc->GetSafeHdc(), , , width, height, , , width, height, rgbbuf, &info, DIB_RGB_COLORS, SRCCOPY); dc->SelectObject(hold);
DeleteObject(hBitmap); theApp.video->ReleaseDC(dc);

,所以CPU占比比较高,不过出乎意料,视频的播放还算很流畅

希望有熟悉dshow的大牛指点dshow的播放部分:)

简单的视频采集demo的更多相关文章

  1. V4L2视频采集原理

    一.简介 Video for Linuxtwo(Video4Linux2)简称V4L2,是V4L的改进版.V4L2是linux操作系统下用于采集图片.视频和音频数据的API接口,配合适当的视频采集设备 ...

  2. 让OMCS支持更多的视频采集设备

    有些OMCS用户在他的系统使用了特殊的视频采集卡作为视频源(如AV-878采集卡),虽然这些采集卡可以虚拟为一个摄像头,但有些视频采集卡需要依赖于自带了sdk才能正常地完成视频采集工作.在这种情况下, ...

  3. 使用 AForge.NET 做视频采集

    AForge.NET 是基于C#设计的,在计算机视觉和人工智能方向拥有很强大功能的框架.btw... it's an open source framework. 附上官网地址: http://www ...

  4. (三)WebRTC手记之本地视频采集

    转自:http://www.cnblogs.com/fangkm/p/4374610.html 前面两篇文章介绍WebRTC的运行流程和使用框架接口,接下来就开始分析本地音视频的采集流程.由于篇幅较大 ...

  5. WebRTC手记之本地视频采集

    转载请注明出处:http://www.cnblogs.com/fangkm/p/4374610.html 前面两篇文章介绍WebRTC的运行流程和使用框架接口,接下来就开始分析本地音视频的采集流程.由 ...

  6. 转:android 录制视频的Demo

    转:http://blog.csdn.net/peijiangping1989/article/details/7049991 在这里给出自己的一个测试DEMO,里面注释很详细.简单的视频录制功能. ...

  7. Window 下 VFW 视频采集与显示

    引言 经过几天的努力终于将VFW视频采集与显示功能完整实现了,不得不说网上对这方面完整的详细讲解文章是在太少了.所以就要本人来好好总结一下让后来者不再像我一样折腾好久.在本文中我将详细讲解VFW视频采 ...

  8. 入门视频采集与处理(学会分析YUV数据)

    做视频采集与处理,自然少不了要学会分析YUV数据.因为从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264.MPEG视频编解码)的角度来说,也是在原始 ...

  9. Linux之V4L2视频采集编程详解

     V4L2(Video For Linux Two) 是内核提供给应用程序访问音.视频驱动的统一接口. Linux系统中,视频设备被当作一个设备文件来看待,设备文件存放在 /dev目录下,完整路径的设 ...

随机推荐

  1. Redis学习-Set

    在Redis中,Set类型是没有排序的字符集合,和List类型一样,可以在该类型的数据值上执行添加.删除或判断某一元素是否存在等操作.需要说明的是,这些操作的时间复杂度为O(1),即常量时间内完成次操 ...

  2. Linux中grep命令学习

    1.简介 grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.Unix的grep家族包括grep.egrep和fgrep.egrep和fgrep的命令只跟grep有很小 ...

  3. iOS开发,UITableView相关问题

    第一条:UITableViewCell 内容的设置 //文本放到最后 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_dataArr.co ...

  4. (转)static 变量

    一. static 变量 static变量大致分为三种用法1. 用于局部变量中,成为静态局部变量. 静态局部变量有两个用法,记忆功能和全局生存期.2. 用于全局变量,主要作用是限制此全局变量被其他的文 ...

  5. MapReduce运行流程分析

    研究MapReduce已经有一段时间了.起初是从分析WordCount程序开始,后来开始阅读Hadoop源码,自认为已经看清MapReduce的运行流程.现在把自己的理解贴出来,与大家分享,欢迎纠错. ...

  6. MacBook使用之配置jdk&Eclipse

    查看系统版本:关于本机-软件-查看当前版本信息 打开另一个Finder的快捷键:Command + n 终端命令:Finder - 使用工具 - 终端命令 配置jdk系统变量: cd ~ touch ...

  7. Lua学习(5)——迭代器与泛型for

    1. 迭代器 2. 泛型for语义 所谓迭代器就是一种可以遍历一种集合中所有元素的机制.在lua中,迭代器通常表示为函数,每调用依次函数就返回集合中的下一个元素.泛型for 内部保存了迭代器函数 实际 ...

  8. JMeter-Eclipse添加自定义函数 MD5加密 32位和16位

    最近公司的接口都是MD5  16位加密,所以要使用加密功能. 之前也做过加密,因为用的比较少,所以是写了一个加密方法,导出JAR包,调用的.用起来需要很多设置,并且换算效率也不高.听前同事说,jmet ...

  9. JavaScript中的该如何[更好的]做动效

    在用js写动画的时候,无非使用 setTimeout/setInterval 或者 requestAnimationFrame 来处理动画(在jquery的代码里也是这么干的),本文主要为了记录下两者 ...

  10. js设置,获取,删除Cookie

    //JS操作cookies方法! //写cookies function setCookie(name,value) {     var Days = 30;     var exp = new Da ...