VC++简易网络会议系统设计(8)
时间:2017-04-21 13:06 来源:毕业论文 作者:毕业论文 点击:次
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),由于虚拟机虚拟的是实体机的有线网卡的方式,选择桥接方式可为之后的下一步,做铺垫。 (责任编辑:qin) |