4. AVIFILE.DLL:支持由标准多媒体I/O(MMIO)函数提供的更高的命令来访问AVI文件。
5. 压缩管理器(ICM):管理用于视频压缩-解压缩的编解码器(CODEC)
6. 音频压缩管理器ACM:提供与ICM相似的服务,不同的是它适于波形音频
系统流程图如图所示。
图3.2 网络视音频实现流程图
在系统中使用VFW首先必须在VC++的工程中添加VFW方面提供的vfw32.lib库,完成之后就保证能够在系统工程调用VFW的库函数。本程序将捕获代码封装于VideoCapture.h 和VideoCapture.cpp中,下面将针对具体的代码说明程序的实现。
加入静态链接库的代码:
#pragma comment(lib,"vfw32")
#pragma comment(lib,"winmm")
如同任何类的使用方式一样,在程序中首先声明一个VideoCapture的实例用于视频的捕获,声明代码如下:
vidcap=new VideoCapture();
之后将此实例与显示对话框相绑定。
vidcap->SetDialog(this);
接下来初始化视频捕获的实例。在这里需要完成很多工作,例如初始化视频驱动程序的连接,设置要求的视频格式等等。如果返回TRUE则表示初始化成功,实现代码如下:
vidcap->Initialize();
注:以上所述初始化的内容均封装到了,实例的初始化函数中,所以程序实现时只需要简单地调用初始化函数就可以了。
在连接成功之后,程序就可以获取到上文所述格式的位图信息。这些信息就是用于显示的捕获视频。获取位图信息的代码如下:
this->m_bmpinfo=&vidcap->m_bmpinfo;
在完成以上工作之后,程序就可以开始启动视频捕获并显示了。启动代码如下:
vidcap->StartCapture();
当视频捕获启动之后,在OnCaptureVideo函数中将接收到含有视频帧的信息,在这里调用视频显示函数将本地视频显示出来。
最后,在不再需要捕获视频的时候,停止视频的捕获,同时必须调用销毁函数来销毁你所创建的视频捕获的实例,实现代码如下:
停止捕获
vidcap->StopCapture();
销毁实例
vidcap->Destroy();
3.2.4视频的显示
通过上文的描述已经知道了在OnCaptureVideo函数中将会不断地收到捕获的视频帧。在视频显示这一部分要完成的功能就是把这些视频帧通过windows的API函数进行显示。Windows有很多显示视频的API函数,本程序中选用的是DvrawDib函数,函数为设备无关位图(DIBs)提供了高性能的图形绘制能力。直接写入视频内存,性能较之其他API函数更好。实现代码如下:
首先,初始化一个DIB的显示设备:
HDRAWDIB hdib=::DrawDibOpen();
其次,调用开始绘制函数,开始视频帧的显示
::DrawDibBegin(hdib,...);
在这一步就可以把所捕获到的视频帧作为参数,调用显示函数在对应位置显示出来
::DrawDibDraw(hdib,...);
最后,关闭绘图的设备上下文,并释放内存。
::DrawDibEnd(hdib);
::DrawDibClose(hdib);
在本系统中,客户端实时捕获摄像头采集到的视频数据,并在客户端显示主窗口中显示其采集的视频。
3.3 VMware技术介绍
VMwareWorkstaion的存在,才可以使得我在没有网络环境的条件下,搭建两台虚拟机,并且以静态IP的方式,给予他们统一网段的IP,从而实现IP的互相通讯,从而使得,我的课题能够在这2台虚拟机上实现互连。
首先,需要搭建起一台虚拟机,分给他相应的内存和硬盘空间。
其次,需要给他装好操作系统(本课题用的是XP系统)。
然后选择网卡设置,选择桥接方式,(如图3.3.1),由于虚拟机虚拟的是实体机的有线网卡的方式,选择桥接方式可为之后的下一步,做铺垫。 VC++简易网络会议系统设计(8):http://www.751com.cn/jisuanji/lunwen_5423.html