基于VC++.NET的视频会议管理系统设计
2011-06-12宋东民吴瑞辉
宋东民 吴瑞辉
1河北钢铁集团矿业有限公司 河北 063000 2河北农业大学机电工程学院 河北 071000
0 引言
该软件采用 Microsoft公司的 VC++.NET进行开发。VC++.NET具有以下特点:以C++语言为基础,生成的可执行文件小,效率高;具有强大的调试功能;具有强大的硬件控制功能和较强的底层控制能力;具有丰富的帮助文档MSDN;对Windows系统新技术具有很好的支持。
1 总体设计
通过对用户的需求分析,设计了系统的框架。视频会议管理软件由视频管理、综合设置、会议管理、系统维护和系统帮助组成。设计各部分的具体功能如下:
(1)视频管理模块:该模块包括视频采集和结束采集。
(2)综合设置模块:该模块由视频格式设定、综合设定、图像截取、视频压缩和录像5部分组成。
(3)会议管理模块:该模块包括会议记录和会议查询。
(4)系统维护模块:该模块包括数据备份、数据恢复、系统初始化和自动运行4部分。
(5)系统帮助模块:该模块包括视频简介和帮助内容。
2 软件设计
2.1 数据库设计
系统采用SQL Server 2000数据库,系统的数据库名为DB_Video。SQL Server 2000的数据库创建有两种方式,一种是利用企业管理器,另一种是在SQL Server 2000的查询分析器中使用Transact-SQL语句来创建。这里,采用第二种方法。数据库DB_Video的创建过程如下:
CREATE DATABASE DB_Video
USE DB_Video
这样,便创建了DB_Video数据库。然后,使用CREATE TABLE语句创建 DB_Video数据库中的会议信息表(tb_conference)和登录信息表(tb_login)。两个表的结构分别见表1和表2。
表1 会议信息表
表2 登录信息表
2.2 构建数据库框架
系统采用单文档/视图结构框架。设计步骤如下:
(1)打开 VC++.NET,依次选择菜单“file-new”,打开new窗口。选择“projects”选项卡。
(2)在new窗口中选择“MFC AppWizard(exe)”选项,在“project name”编辑框中输入项目名称“Video”,单击“OK”按钮进入MFC AppWizard-Step1窗口。
(3)选择“Single document”选项,表示创建的是单文档/视图结构应用程序,单击“Finish”按钮创建应用程序框架。
2.3 封装数据库
系统采用 ADO技术操作数据库,为了方便对数据库进行操作,程序对ADO进行了简单封装。过程如下:
(1)引入ADO类库。为了使用ADO技术,需要导入一个ADO动态链接库。具体过程为在项目的头文件“StdAfx.h”中添加代码“#import"c:program filesCommon filessystemadomsado.dll"
o_namespace ename("EOF","adoEOF")
Using namespaceADOBS;”
(2)封装ADO数据库对象。首先新建类CDataManage,在其头文件中为其添加成员,代码为:
_connection p_Con;
_RecordsetPtr p_Record;
_commandPtr p_Com;
然后为类 CDataManage添加成员函数 InitADO()和ConnectionDatabase(LPTSTR ConStr)。在类CDataManage中添加代码以下完成封装。
//析构函数
CDataManage::~ CDataManage()
{
if(p_Com!=NULL)
p_Com.Release();
if(p_Record!=NULL)
p_Record.Realse();
if(p_Con.Release();
}
//连接数据库
Bool CDataManage::ConnectionDatabase(LPTSTR ConStr)
{
try
{
if (p_Con->State==adStateOpen)
p_Con->Close();
p_Con->ConnectionString=ConStr;
p_Con->Open(_T(""),_T(""),_T(""),-1);
}
catch(_com_error&e)
{
AfxMessageBox(e.Description(),64,0);
return false;
}
return true;
}
//进行初始化
bool CDataManage::InitADO()
{
try
{
p_Con.CreateInstance(_uuidof(Connection));
p_Con.CreateInstance(_uuidof(Command));
p_Record.CreateInstance(_uuidof(Recordset));
}
catch()
{
return false;
}
return true;
}
2.4 视频采集
视频采集用于在程序中显示摄像头捕捉的信息。本系统采用Microsift公司的VFW数字视频软件包。VFW提供了VBX和AVICap窗口类的高级编程工具,可方便我们通过发送消息和设置属性来捕获、播放和编辑视频。运行效果如图1。
图1 视频会议管理系统
系统对视频的控制是通过类CCapture_Main实现的。在类 CCapture_Main中定义变量 m_display,通过调用变量m_dispaly的EnablePreviewVideo()方法进行视频采集。具体代码为:
void CMainFrame::OnSetDisplay()
{
m_showed=true;
CRect m_rectview;
this->GetClientRect(m_rect);
CWnd* tempview=m_splitter.GetPane(0,0);
tempview->GetClientRect(m_rectview);
m_display.EnablePreviewVideo(m_hWnd,
m_rectview.right+10,m_rect.top+60,
m_rect.right,m_rect.bottom);
}
2.5 视频录像
视频录像用于将摄像头捕捉到的信息以AVI格式保存到磁盘中。AVI文件格式是一种RIFF指定的应用程序,用来对音频/视频流进行捕捉。
视频录像是通过函数OnCapture()实现的。主要是通过其m_display对象的CaptureAVI方法进行录像。实现代码为:
void CMainFrame::OnCapture()
{
CString Filter;
CString Filename;
Filter="AVI Files(*.avi)︱*avi︱";CFileDialog FileDlg(FALSE, "avi",NULL,OFN_HIDEREADONLY︱OFN_OVERWRITEPROMPT,Filter,this);
if(FileDlg.DoModal()==IDOK)
{
Filename=FileDlg.GetPathName();
m_display.CaptureAVI(Filename,4.0,30,10);
}
}
2.6 会议记录
会议记录用于记录会议的主题、主持人、参加成员、时间等信息。
会议记录的功能是通过类CConference实现的。它通过函数InfoIsNull()判断用户输入的信息是否为空,若为空,返回 TRUE,否则返回 FALSE,然后使用 Connection对象的Execute方法执行SQL语句来保存信息到数据库中。部分代码为:
sql.Format("insert into tb_conference
values(‘%s’,%s’,‘%s’, %s’) ",c_sub,c_compere,c_member,c_time);
try
{
dataManage.p_Con->Execute((bstr_t)sql,NULL,adCmd Text);
AfxMessageBox("操作成功",MB_OK︱MB_ICONINFORMATION);
OnButtoncancel();
}
2.7 系统登录管理
系统登录的设计可以防止非法用户进入系统,从而增加系统的安全性。在系统启动时,首先显示登录窗口,要求用户输入登录信息,如果输入错误将禁止进入系统。系统登录是由类CLogin实现的。通过函数LoadOperators()加载用户信息,然后有函数 OnConfirm()检查用户信息是否存在,若不存在,则进行提示并返回;若存在,则以用户名和密码为条件从数据库中查询数据,若信息正确则登录成功,否则发生错误并提示重新输入用户名和密码。
3 总结
本系统利用VC++.NET开发,具有良好稳定的性能、友好的界面和可扩展性,对 Windows系统具有很好的支持。通过VFW和MFC实现对视频的提取,完成了视频的采集、分析与监测、编辑处理和存储。为企业的及时联系和决策处理提供了一个新的有效途径。目前,系统实现了对视频采集的简单操作,要完成更复杂的视频采集与分析,还有待进一步的研究。
[1]周绪,管丽娜,白海波.SQL Server 2000入门与提高[M].清华大学出版社.2002.
[2]谭浩强.C++程序设计[M].北京:清华大学出版社.2007.
[3]Kate Gregory著,蔡众众等译.Visual C++.NET编程详解[M].电子工业出版社.2003.
[4]张雨,阮伟良等.Visual C++工程应用与项目实践[M].机械工业出版.2005.