宋東民 吳瑞輝
1河北鋼鐵集團礦業有限公司 河北 063000 2河北農業大學機電工程學院 河北 071000
該軟件采用 Microsoft公司的 VC++.NET進行開發。VC++.NET具有以下特點:以C++語言為基礎,生成的可執行文件小,效率高;具有強大的調試功能;具有強大的硬件控制功能和較強的底層控制能力;具有豐富的幫助文檔MSDN;對Windows系統新技術具有很好的支持。
通過對用戶的需求分析,設計了系統的框架。視頻會議管理軟件由視頻管理、綜合設置、會議管理、系統維護和系統幫助組成。設計各部分的具體功能如下:
(1)視頻管理模塊:該模塊包括視頻采集和結束采集。
(2)綜合設置模塊:該模塊由視頻格式設定、綜合設定、圖像截取、視頻壓縮和錄像5部分組成。
(3)會議管理模塊:該模塊包括會議記錄和會議查詢。
(4)系統維護模塊:該模塊包括數據備份、數據恢復、系統初始化和自動運行4部分。
(5)系統幫助模塊:該模塊包括視頻簡介和幫助內容。
系統采用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 登錄信息表
系統采用單文檔/視圖結構框架。設計步驟如下:
(1)打開 VC++.NET,依次選擇菜單“file-new”,打開new窗口。選擇“projects”選項卡。
(2)在new窗口中選擇“MFC AppWizard(exe)”選項,在“project name”編輯框中輸入項目名稱“Video”,單擊“OK”按鈕進入MFC AppWizard-Step1窗口。
(3)選擇“Single document”選項,表示創建的是單文檔/視圖結構應用程序,單擊“Finish”按鈕創建應用程序框架。
系統采用 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;
}
視頻采集用于在程序中顯示攝像頭捕捉的信息。本系統采用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);
}
視頻錄像用于將攝像頭捕捉到的信息以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);
}
}
會議記錄用于記錄會議的主題、主持人、參加成員、時間等信息。
會議記錄的功能是通過類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();
}
系統登錄的設計可以防止非法用戶進入系統,從而增加系統的安全性。在系統啟動時,首先顯示登錄窗口,要求用戶輸入登錄信息,如果輸入錯誤將禁止進入系統。系統登錄是由類CLogin實現的。通過函數LoadOperators()加載用戶信息,然后有函數 OnConfirm()檢查用戶信息是否存在,若不存在,則進行提示并返回;若存在,則以用戶名和密碼為條件從數據庫中查詢數據,若信息正確則登錄成功,否則發生錯誤并提示重新輸入用戶名和密碼。
本系統利用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.