2 視頻捕獲
視頻數據的實時採集,主要通過AVICAP模塊中的消息、宏函數、結構以及回調函數來完成。視頻捕獲的一般過程如下:
2.1 建立捕獲窗口
利用AVICAP 組件函數 capCreateCaptureWindow() 建立視頻捕獲窗口,它是所有捕獲工作及設置的基礎,其主要功能包括:① 動態地同視頻和音頻輸入器連接或斷開;② 設置視頻捕獲速率;③ 提供視頻源、視頻格式以及是否採用視頻壓縮的對話框;④ 設置視頻採集的顯示模式爲Overlay或爲Preview; ⑤ 實時獲取每一幀視頻數據;⑥ 將一視頻流和音頻流捕獲並保存到一個AVI文件中; ⑦ 捕獲某一幀數字視頻數據,並將單幀圖像以DIB格式保存;⑧ 指定捕獲數據的文件名,並能將捕獲的內容拷貝到另一文件。
2.2 登記回調函數[2]
登記回調函數用來實現用戶的一些特殊需要。在以一些實時監控系統或視頻會議系統中,需要將數據流在寫入磁盤以前就必須加以處理,達到實時功效。應用程序可用捕獲窗來登記回調函數,以便及時處理以下情況:捕獲窗狀態改變、出錯、使用視頻或音頻緩存、放棄控制權等,相應的回調函數分別爲 capStatusCallback(), capErrorCallback(), capVideoStreamCallback(), capWaveStreamCallback(),capYieldCallback()。
2.3 獲取捕獲窗口的缺省設置
通過宏capCaptureGetSetup(hWndCap,&m_Parms,sizeof(m_Parms))來完成。
2.4 設置捕獲窗口的相關參數
通過宏capCaptureSetSetup(hWndCap,&m_Parms,sizeof(m_Parms))來完成。
2.5 連接捕獲窗口與視頻捕獲卡
8) AVIFileRelease();AVIFileExit(); //釋放AVI文件。
若數據是壓縮過的,則用AVIStreamGetFrameOpen(),AVIStreamGetFrame()和AVIStreamGetFrameClose()來操作,可以完成對視頻流的逐幀分解。
3.2 視頻播放
對於實現視頻流的播放,VFW提供了MCIWnd窗口類[4],主要用於創建視頻播放區,控制並修改MCI窗口當前加載媒體的屬性。一個由函數、消息和宏組成的庫與MCIWnd相關聯,通過它們可以進行AVI文件操作,很方便地使應用程序完成視頻播放功能。
1)MCIWndCreate(); //註冊MCIWnd窗口類,創建MCIWnd窗口,並指定窗口風格;
2)AVIFileInit(); //初始化;
3) AVIFileOpen(); //打開AVI文件;
4) AVIFileGetStream(); //獲得視頻流;
5)運用相關函數進行各種播放任務:MCIWndPlay()