基於VFW的視頻應用程序開發

視頻捕獲

視頻數據的實時採集,主要通過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 連接捕獲窗口與視頻捕獲卡

通過宏capDriveConnect(hWndCap,0)來完成。
2.6 獲取採集設備的功能和狀態
通過宏capDriverGetCaps(hWndCap,&m_CapDrvCap,sizeof(CAPDRIVERCAPS))來獲取
視頻設備的能力,通過宏capGetStatus(hWndCap,&m_CapStatus,sizeof(m_CapStatus))
來獲取視頻設備的狀態。
2.7 設置捕獲窗口顯示模式
視頻顯示有Overlay(疊加)和Preview(預覽)兩種模式。在疊加模式下,捕獲視頻數據布展系統資源,顯示速度快,視頻採集格式爲YUV格式,可通過capOverlay(hWndCap,TRUE)來設置;預覽模式下要佔用系統資源,視頻由系統調用GDI函數在捕獲窗顯示,顯示速度慢,它支持RGB視頻格式。
2.8 捕獲圖像到緩存或文件並作相應處理
若要對採集數據進行實時處理,則應利用回調機制,由capSetCallbackOnFrame(hWndCap, FrameCall-
backProc)完成單幀視頻採集;由capSetCallbackOnVideoStream(hWndCap, VideoCallbackProc)完成視頻流採集。如果要保存採集數據,則可調用capCaptureSequence(hWnd);要指定文件名,可調用capFileSetCap-
ture(hwnd, Filename)。
2.9 終止視頻捕獲 斷開與視頻採集設備的連接
調用capCatureStop(hWndCap)停止採集,調用capDriverDisconnect(hWndCap), 斷開視頻窗口與捕獲驅動程序的連接。
3  視頻編輯和播放
利用VFW,不僅可以實現視頻流的實時採集,還提供了編輯和播放功能,主要通過AVIFILE、ICM、ACM、MCIWnd 等組件之間的協作來完成。
       1) AVIFileInit();//初始化;
2) AVIFileOpen(); //打開一個AVI文件並獲文件的句柄;
3) AVIFileInfo(); //獲取文件的相關信息,如圖像的Width和Height等;
4) AVIFileGetStream(); //建立一個指向需要訪問的數據流的指針;
5) AVIStreamInfo(); //獲取存儲數據流信息的AVISTREAMINFO結構;
6) AVIStreamRead(); //讀取數據流中的原始數據, 對AVI文件進行所需的編輯處理
  7) AVIStreamRelease(); //釋放指向視頻流的指針;

 

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()

 
發佈了26 篇原創文章 · 獲贊 0 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章