简单的视频采集demo

时间:2023-03-09 09:55:50
简单的视频采集demo

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

在网上查了许久资料,终于搞清楚了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

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

简单的视频采集demo

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

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

简单的视频采集demo

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

简单的视频采集demo

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

简单的视频采集demo

因为对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的播放部分:)