p; zeromemory(OutBuffer,OutBufferSize); ICDecompressBegin(CapVar.hic,@BmpInInfo.bmiHeader, @BmpOutInfo^.bmiHeader);
最后,当然是视频数据的解压过程
if VIDEO_DATA.bKeyFrame then Result:=ICDecompress(CapVar.hic,0,@BmpInInfo,@VIDEO_DATA.Buf, @BmpOutInfo.bmiHeader,OutBuffer) else Result:=ICDecompress(CapVar.hic,ICDECOMPRESS_NOTKEYFRAME,@BmpInInfo,@VIDEO_DATA.Buf, @BmpOutInfo.bmiHeader,OutBuffer); if (Result=ICERR_OK) then begin SetDIBitsToDevice(Canvas.Handle,0,0,bmptmp.Width,bmptmp.Height,0,0,0,BmpOutInfo^.bmiHeader.biHeight , OutBuffer,BmpOutInfo^,DIB_RGB_COLORS); end;
这样,传送过来的视频数据变直接画到了Canvas.Handle上了。 还忘记了服务端关闭摄像头的方法,调用capDriverDisconnect(CapWnd) 就OK了。
全文就Over了,jasonke还要说的就是,这个方法是用的微软的老函数,不过实现起来很简单,相信会点API的都能开发出来,还有一种方法当然是用DirectShow了哟,这需要你开发Filter,要搞明白微软的几个接口,你可以看看DShowNetwork例子。这个方法也有很多C++的兄弟在痛苦的实现,想一想DirectShow的功能真是强大哟,哈哈。
欢迎大家光临《黑雨共享软件》,谢谢大家对中国共享软件的支持
http://brsoft.0033.cn http://brsoft.008.net
上一页 [1] [2] 没有相关教程
|