劉廣文 李相偉 陳廣秋
(1、長春理工大學,吉林 長春 130022 2、空軍航空大學,吉林 長春 130022)
以多媒體為代表的信息技術和信息產業的發展和應用對人類社會產生的影響和作用越來越顯著,但是多媒體信息帶來了“信息爆炸”,無疑給存儲器的存儲容量、通信干線的信道傳輸率以及計算機的速度都增加了極大的壓力。數據壓縮技術是個行之有效的方法,通過數據壓縮手段把信息數據量壓下來,以壓縮形式存儲和傳輸,既緊縮節約了存儲空間,又提高了通信千線的傳輸效率,同時也使計算機實時處理音頻、視頻信息,以保證播放出高質量的視頻、音頻節目成為可能。VFW(Video for Windows)是Microsoft公司推出的關于數字視頻的一個軟件包,它能使應用程序數字化并播放從傳統模擬視頻源得到的視頻剪輯。VFW的一個關鍵思想是播放時不需要專用硬件,為了解決數字視頻數據量大的問題,需要對數據進行壓縮。于是,它引進了AVI文件標準,該標準未規定如何對視頻進行捕獲、壓縮及播放,僅規定視頻和音頻該如何存儲在硬盤上,在AVI文件中交替存儲視頻幀和與之相匹配的音頻數據,VFW給程序員提供。
VFW主要由以下6個模塊組成。
(1)AVICAP.DLL:包括了執行視頻捕獲的函數,它給AVI文件I/O和視頻、音頻設備驅動程序提供了一個高級接口。
(2)MSVIDEO.DLL:用一套特殊的DrawDib函數來處理屏幕上的視頻操作。
(3)MCIAVI.DRV:此驅動程序包括對VFW的MCI命令的解釋器。
(4)AVIFILE.DLL:支持由標準多媒體I/O(MMIO)函數提供的更高的命令來訪問.AVI文件。
(5)壓縮管理器(ICM):管理用于視頻壓縮-解壓縮的編解碼器(CODEC)。
(6)音頻壓縮管理器ACM:提供與ICM相似的服務,不同的是它適于波形音頻。
Visual C++在支持VFW方面提供有vfw32.lib、msacm32.lib、winmm.lib 等類似的庫。特別是它提供了功能強大、簡單易行、類似于MCIWnd的窗口類AVICap為應用程序提供了一個簡單的、基于消息的接口,使之能訪問視頻和波形音頻硬件,并能在將視頻流捕獲到硬盤上的過程中進行控制。而用視頻捕捉設備驅動程序才能真正控制視頻流的大小。捕捉設備驅動程序和相應的底層硬件決定了視頻捕捉的方方面面,包括可接受的視頻源、顯示方式、格式以及壓縮方式。一個音頻驅動程序會指定被捕捉到的音頻數據的存儲格式和壓縮方式。
可以用WM-CAP-DRIVER-GET-CAPS消息(或者capDriverGetCaps宏)來得到連接到當前捕捉窗口的硬件的性能。這個消息通過CAPDRIVERCAPS結構返回設備驅動程序和硬件的性能信息。
每個捕捉驅動器都可以提供4個對話框來控制視頻的數字化和捕捉過程,為了減少視頻數據的大小,它們還會定義視頻的壓縮屬性。視頻源對話框用于控制視頻輸入頻道的選擇和一些影響視頻圖像被數字化的幀緩沖的參數選擇。這個對話框枚舉連續視頻源的捕捉卡的信號種類,并且控制顏色、對比度、飽和度的改變。如果視頻捕捉驅動程序支持,還可以用WMCAP-DLG-VIDEOSOURCE消息(或者capDlgVideoSource宏)來更新和顯示這個對話框。
一個捕捉驅動程序能提供兩個方法來顯示輸入視頻流:預覽和疊加模式。如果兩個方法都提供了,用戶就可以從中選擇一種使用了。
預覽模式將數字幀從捕捉設備傳到系統內存,然后用圖形設備接口(GUI)函數來把這些幀顯示到捕捉窗口上。當父窗口失去焦點時,應用程序會減小預覽頻率,而當父窗口得到焦點時,應用程序會增加預覽頻率。因為預覽操作很比較消耗CPU資源,這一操作會減小系統的整體響應時間。
有3條消息用來控制預覽操作。
(1)通過把WM-CAP-SET-PREVIEW消息(或capPreview宏)發送給捕捉窗口來使預覽模式有效或者失效。
(2)通過把WM-CAP-SET-PREVIEWRA TE消息(或capPreviewRate宏)發送給捕捉窗口來設置在預覽模式夏幀的顯示頻率。
(3)用WM-CAP-SET-ShCALE消息(或capPreviewScale宏)來使預覽模式的縮放有效或者無效。
可以發送WM-CAP-GET-VIDEOFORMAT消息給捕捉窗口(或者用capGetVideoFormat和capGetVideoFormatSize宏)來得到視頻格式的結構和該結構的大小。而向捕捉窗口發送WM-CAP-SET-VIDEOFORMAT消息(或者用capSetVideoFormat宏)則可以設置視頻格式。
CAPTUREPARMS結構體里面包含了許多視頻流捕捉的控制參數,控制視頻捕捉過程中的幾個方面,對它進行操作可以完成一些功能:指定幀頻率;指定申請的視頻緩沖區的大小;使音頻捕捉有效或無效;指定捕捉間隔;指定MCI設備在捕捉過程中是否使用;指定鍵盤或者鼠標來控制捕捉結束;指定捕捉中的默認視頻類別。
可以發送WM-CAP-GET-SEQUENCESETUP消息給捕捉窗口(或者用capCaptureGetSetup宏)來得到一個CAPTUREPARM S結構體類型的返回值,里面有當前的捕捉設備。而要設備捕捉窗口的設備,要先把設備值填充到一個CAPTUREPARMS結構體內,然后把它作為參數,用WM-CAP-GET-SEQUENCESETUP消息(或者capCaptureGetSetup宏)發送給捕捉窗口。
可以發送WM-CAP-GET-AUDIOFORMAT消息給捕捉窗口(或者用capGetAudioFormat和capGetAudioFormatSize宏)來得到音頻數據的格式和該格式結構體的大小。默認的捕捉音頻格式是mono、8-bitHE和11kHz PCM。當用WM-CAP-GET-AUDIOFORMAT消息得到格式時,通常會用WAVEFORMATEX結構。可以向捕捉窗口發送WM-CAP-SET-AUDIOFORMAT消息(或者用capSetAudioFormat宏)來設置音頻格式。設置時要傳入一個WAVEFORMAT、WAVEGORMATEX或者PCMWAV EFORMAT結構的指針,到底選用哪種結構取決于音頻類型。
[1]黎洪松.數字視頻技術及其應用[M].清華大學出版社,1997.
[2]精英科技編著.視頻壓縮與音頻編碼技術[M].中國電力出版社,1999.
[3]胡國榮.數字視頻及其壓縮標準[M].北京廣播學院出版社,2000.
[4]黃衛農,賴宏彬,陳健.MPEG-4視頻編碼算法結構分析[J].上海交通大學信號處理研究所 電視技術[J],2000年7月總第217期.
[5]劉瑋.Visual C++視頻/音頻開發實用工程案例精選[M].人民郵電出版社,1992.
[6]鐘玉琢,王琪,賀玉文.基于對象的多媒體數據壓縮編碼國際標準MPEG-4及其校驗模型[M].科學出版社,2000.