基于VB的流媒體解碼與播放技術
一、 前言
流媒體的定義很廣泛,大多數時候指的是把連續的影像和聲音信息經過壓縮處理后放上網站服務器,讓用戶一邊下載一邊觀看、收聽,而不需要等整個壓縮文件下載到自己機器就可以觀看的視頻/音頻傳輸、壓縮技術。流媒體也指代由這種技術支持的某種特定文件格式:壓縮流式文件,它通過網絡傳輸,并通過個人電腦軟件進行解碼。面對流媒體技術的迅猛發展,作為軟件技術開發人員,關心的是將如何應對的問題。流媒體的處理,以其復雜性和技術性,一向受到工業界和技術界的關注。特別是隨著互聯網的普及,流媒體通過網絡廣泛應用在工業控制、現場監控、視頻會議、大眾娛樂等方面,選擇一種合適的應用方案,可以達到事半功倍的目的。
MCI是微軟為Windows最初提出的多媒體編程接口,它管理媒體控制接口(MCI)設備上的多媒體文件的記錄與回放。它被用來向諸如聲卡、MIDI 序列發生器、CD-ROM 驅動器、視頻CD播放器和視頻磁帶記錄器及播放器等設備發出MCI命令,還支持 Windows (*.avi) 視頻文件的回放。MCI編程實現起來并不困難,但是對于用戶要求獲取的某些有關壓縮數據流的信息和希望實現的某些功能,比如圖線尺寸、Copmression Rate、圖形的縮放顯示等,上敘控件所提供的為方便程序開發人員使用的高層接口已不適用,要想在此基礎上實現對底層的一些操作,難度可想而知;另外隨著多媒體技術的迅速發展,各種壓縮算法在該領域的的應用,MCI技術越來越顯的力不從心,最明顯的是它不支持可變比特率的壓縮算法,對于處理DVD等近年出現的多種新的媒體格式也已經顯的無能為力,怎么辦呢?為此我們介紹一種建立在DirectX技術上的方法來實現操作多媒體數據流。作為MCI的"接班人",微軟適時推出了建立在DirectX(包含DirectDraw、DirectSound、Direct3D)之上的DirectShow技術,它是在DirectX之上的媒體層,支持來自本地或網絡的各種視頻、音頻壓縮格式的媒體文件的解碼和回放,可以從設備上捕捉多媒體流,可以回放各種壓縮算法處理的流媒體。這些格式包括:MPEG的音頻和視頻標準、音頻和視頻交互標準(AVI)、WAVE、MIDI和高級流格式ASF。
DirectShow對媒體數據處理采用流媒體(Multimedia Stream)的方式,在應用中使用該方式可以大大的減少編程的復雜程度,同時又可以自動協商從數據源到應用的轉換,流接口提供了統一的、可以預測的數據存取的控制方法,這樣應用程序在播放媒體數據時不需要考慮它最初的來源和格式。
上面說了那么多,還沒有進入正題,其實在WindowsSystem下有一個Windows中自帶的用于控制運動圖像播放的動態鏈接庫Quatrz.dll,它實現了對DirectShow的簡單封裝,或者說它是當今流行的DirectShow技術的前身,在該庫中定義了IBasicAudio,IbasicVideo、IBasicVideo2,IMediaEvent 、IMediaEventEx、ImediaPosition、ImediaControl和IVideoWindow等類,程序開發人員可以利用它們方便地控制和操作各種格式的流媒體。例如,直接調用ImediaControl類的無參函數Run、Pause、Stop等就可以控制流媒體的播放進程;利用IMediaPosition類對具體播放細節進行定位操作等。對于流媒體的數據輸出顯示并不需要特別的控件,在VisualBasic編程中可以簡單的選擇一個窗體作為容器或一個PictureBox控件作為容器。為了使用該動態連接庫,你需要作的僅僅是在生成一個項目后,點擊VB開發環境的工程/引用菜單,在彈出的對話框中選擇ActiveMovie Control type library就可以了。