宋東民 吳瑞輝
1河北鋼鐵集團(tuán)礦業(yè)有限公司 河北 063000 2河北農(nóng)業(yè)大學(xué)機(jī)電工程學(xué)院 河北 071000
該軟件采用 Microsoft公司的 VC++.NET進(jìn)行開發(fā)。VC++.NET具有以下特點(diǎn):以C++語言為基礎(chǔ),生成的可執(zhí)行文件小,效率高;具有強(qiáng)大的調(diào)試功能;具有強(qiáng)大的硬件控制功能和較強(qiáng)的底層控制能力;具有豐富的幫助文檔MSDN;對(duì)Windows系統(tǒng)新技術(shù)具有很好的支持。
通過對(duì)用戶的需求分析,設(shè)計(jì)了系統(tǒng)的框架。視頻會(huì)議管理軟件由視頻管理、綜合設(shè)置、會(huì)議管理、系統(tǒng)維護(hù)和系統(tǒng)幫助組成。設(shè)計(jì)各部分的具體功能如下:
(1)視頻管理模塊:該模塊包括視頻采集和結(jié)束采集。
(2)綜合設(shè)置模塊:該模塊由視頻格式設(shè)定、綜合設(shè)定、圖像截取、視頻壓縮和錄像5部分組成。
(3)會(huì)議管理模塊:該模塊包括會(huì)議記錄和會(huì)議查詢。
(4)系統(tǒng)維護(hù)模塊:該模塊包括數(shù)據(jù)備份、數(shù)據(jù)恢復(fù)、系統(tǒng)初始化和自動(dòng)運(yùn)行4部分。
(5)系統(tǒng)幫助模塊:該模塊包括視頻簡介和幫助內(nèi)容。
系統(tǒng)采用SQL Server 2000數(shù)據(jù)庫,系統(tǒng)的數(shù)據(jù)庫名為DB_Video。SQL Server 2000的數(shù)據(jù)庫創(chuàng)建有兩種方式,一種是利用企業(yè)管理器,另一種是在SQL Server 2000的查詢分析器中使用Transact-SQL語句來創(chuàng)建。這里,采用第二種方法。數(shù)據(jù)庫DB_Video的創(chuàng)建過程如下:
CREATE DATABASE DB_Video
USE DB_Video
這樣,便創(chuàng)建了DB_Video數(shù)據(jù)庫。然后,使用CREATE TABLE語句創(chuàng)建 DB_Video數(shù)據(jù)庫中的會(huì)議信息表(tb_conference)和登錄信息表(tb_login)。兩個(gè)表的結(jié)構(gòu)分別見表1和表2。
表1 會(huì)議信息表
表2 登錄信息表
系統(tǒng)采用單文檔/視圖結(jié)構(gòu)框架。設(shè)計(jì)步驟如下:
(1)打開 VC++.NET,依次選擇菜單“file-new”,打開new窗口。選擇“projects”選項(xiàng)卡。
(2)在new窗口中選擇“MFC AppWizard(exe)”選項(xiàng),在“project name”編輯框中輸入項(xiàng)目名稱“Video”,單擊“OK”按鈕進(jìn)入MFC AppWizard-Step1窗口。
(3)選擇“Single document”選項(xiàng),表示創(chuàng)建的是單文檔/視圖結(jié)構(gòu)應(yīng)用程序,單擊“Finish”按鈕創(chuàng)建應(yīng)用程序框架。
系統(tǒng)采用 ADO技術(shù)操作數(shù)據(jù)庫,為了方便對(duì)數(shù)據(jù)庫進(jìn)行操作,程序?qū)DO進(jìn)行了簡單封裝。過程如下:
(1)引入ADO類庫。為了使用ADO技術(shù),需要導(dǎo)入一個(gè)ADO動(dòng)態(tài)鏈接庫。具體過程為在項(xiàng)目的頭文件“StdAfx.h”中添加代碼“#import"c:program filesCommon filessystemadomsado.dll"
o_namespace ename("EOF","adoEOF")
Using namespaceADOBS;”
(2)封裝ADO數(shù)據(jù)庫對(duì)象。首先新建類CDataManage,在其頭文件中為其添加成員,代碼為:
_connection p_Con;
_RecordsetPtr p_Record;
_commandPtr p_Com;
然后為類 CDataManage添加成員函數(shù) InitADO()和ConnectionDatabase(LPTSTR ConStr)。在類CDataManage中添加代碼以下完成封裝。
//析構(gòu)函數(shù)
CDataManage::~ CDataManage()
{
if(p_Com!=NULL)
p_Com.Release();
if(p_Record!=NULL)
p_Record.Realse();
if(p_Con.Release();
}
//連接數(shù)據(jù)庫
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;
}
//進(jìn)行初始化
bool CDataManage::InitADO()
{
try
{
p_Con.CreateInstance(_uuidof(Connection));
p_Con.CreateInstance(_uuidof(Command));
p_Record.CreateInstance(_uuidof(Recordset));
}
catch()
{
return false;
}
return true;
}
視頻采集用于在程序中顯示攝像頭捕捉的信息。本系統(tǒng)采用Microsift公司的VFW數(shù)字視頻軟件包。VFW提供了VBX和AVICap窗口類的高級(jí)編程工具,可方便我們通過發(fā)送消息和設(shè)置屬性來捕獲、播放和編輯視頻。運(yùn)行效果如圖1。
圖1 視頻會(huì)議管理系統(tǒng)
系統(tǒng)對(duì)視頻的控制是通過類CCapture_Main實(shí)現(xiàn)的。在類 CCapture_Main中定義變量 m_display,通過調(diào)用變量m_dispaly的EnablePreviewVideo()方法進(jìn)行視頻采集。具體代碼為:
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);
}
視頻錄像用于將攝像頭捕捉到的信息以AVI格式保存到磁盤中。AVI文件格式是一種RIFF指定的應(yīng)用程序,用來對(duì)音頻/視頻流進(jìn)行捕捉。
視頻錄像是通過函數(shù)OnCapture()實(shí)現(xiàn)的。主要是通過其m_display對(duì)象的CaptureAVI方法進(jìn)行錄像。實(shí)現(xiàn)代碼為:
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);
}
}
會(huì)議記錄用于記錄會(huì)議的主題、主持人、參加成員、時(shí)間等信息。
會(huì)議記錄的功能是通過類CConference實(shí)現(xiàn)的。它通過函數(shù)InfoIsNull()判斷用戶輸入的信息是否為空,若為空,返回 TRUE,否則返回 FALSE,然后使用 Connection對(duì)象的Execute方法執(zhí)行SQL語句來保存信息到數(shù)據(jù)庫中。部分代碼為:
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();
}
系統(tǒng)登錄的設(shè)計(jì)可以防止非法用戶進(jìn)入系統(tǒng),從而增加系統(tǒng)的安全性。在系統(tǒng)啟動(dòng)時(shí),首先顯示登錄窗口,要求用戶輸入登錄信息,如果輸入錯(cuò)誤將禁止進(jìn)入系統(tǒng)。系統(tǒng)登錄是由類CLogin實(shí)現(xiàn)的。通過函數(shù)LoadOperators()加載用戶信息,然后有函數(shù) OnConfirm()檢查用戶信息是否存在,若不存在,則進(jìn)行提示并返回;若存在,則以用戶名和密碼為條件從數(shù)據(jù)庫中查詢數(shù)據(jù),若信息正確則登錄成功,否則發(fā)生錯(cuò)誤并提示重新輸入用戶名和密碼。
本系統(tǒng)利用VC++.NET開發(fā),具有良好穩(wěn)定的性能、友好的界面和可擴(kuò)展性,對(duì) Windows系統(tǒng)具有很好的支持。通過VFW和MFC實(shí)現(xiàn)對(duì)視頻的提取,完成了視頻的采集、分析與監(jiān)測、編輯處理和存儲(chǔ)。為企業(yè)的及時(shí)聯(lián)系和決策處理提供了一個(gè)新的有效途徑。目前,系統(tǒng)實(shí)現(xiàn)了對(duì)視頻采集的簡單操作,要完成更復(fù)雜的視頻采集與分析,還有待進(jìn)一步的研究。
[1]周緒,管麗娜,白海波.SQL Server 2000入門與提高[M].清華大學(xué)出版社.2002.
[2]譚浩強(qiáng).C++程序設(shè)計(jì)[M].北京:清華大學(xué)出版社.2007.
[3]Kate Gregory著,蔡眾眾等譯.Visual C++.NET編程詳解[M].電子工業(yè)出版社.2003.
[4]張雨,阮偉良等.Visual C++工程應(yīng)用與項(xiàng)目實(shí)踐[M].機(jī)械工業(yè)出版.2005.