天天看點

Visual Basic環境下Video/ Audio壓縮資料流播放技術

國防科技大學 
張漢華 計科峰 
---- 1. 引言 

---- 銀行的數字化監視監控系統是目前比較有市場及應用前景的開發項目,基于不同的MPEG采集卡與      
硬體外圍裝置開發的監視監控系統在國内外都有比較成型的技術。為了滿足實時監視、實時采集壓縮、      
随時回放、壓縮資料流的傳播等具體要求,在該系統中使用了一種用于網絡視訊/音頻多點傳輸(視訊廣播)      
的視訊資料采集卡,提供AVI(MPEG I Frame壓縮編碼)采集、MPG采集。發送端廣播MPEG流,接受端接      
受MPEG流并顯示,網絡傳輸采用WinSock 2 IP-Multicast。如果本機為發送端,網絡上另外任何一台      
PC可以作為接收端。隻要指定不同端口号,同時可以有多台PC機作為發送端,多台PC機作為接收端接收      
不同發送端的視訊資料,也可在傳送資料的同時在本機将資料存為MPEG檔案。本文主要介紹在VB的環境      
下開發MPEG卡采集的Audio/Video資料播放的一些程式設計技巧。 

---- 2. MPEG的内容與發展簡介 

---- 多媒體資訊主要包括圖像、聲音和文本三大類。其中視訊、音頻等信号的資訊量是非常大的,而且      
這些資訊的表達方式、輸入、輸出的要求也各不同。對這些資料進行有效的表達和适當處理是很重要的,      
它使多媒體資訊壓縮技術成為多媒體通信領域中的關鍵技術之一。ISO與IEC于1988年聯合成立的MPEG      
(Moving Picture Expert Group),緻力于運動圖像及其伴音編碼的全球标準化工作。它包括MPEG      
系統:MPEG視訊、MPEG音頻。為了推動社會由文本資訊時代向多媒體資訊時代過渡,ISO繼MPEG-1、2      
和4後又推出了MPEG-7。 

---- MPEG-1制定于1993年(ISO/IEC 11172),是針對1.5Mbit/s以下資料傳輸率的數字存儲媒質      
運動圖像及其伴音編碼的國際标準。視訊壓縮率為26:1。MPEG-2制定于1995年(ISO/IEC 13818),      
是CCIR601建議的圖像品質DVB、HDTV和DVD制定的3-10Mbit/s的運動圖像及其伴音編碼的國際标準。      
與前面基于資訊論的波形編碼理論,針對一定比特率的視訊、音頻編碼的MPEG标準不同的是,于1998年      
11月公布的國際标準MPEG-4更加注重多媒體系統的互動性和靈活性。它引入AV對象(Audio/Visual       
Objects),使得更多的互動操作成為可能。1998年10月國際标準化組織又推出了MPEG-7的構想,預      
計于2001年初最終完成并公布,其正式名稱為"多媒體内容描述接口"(Multimedia Content       
Description Interface)。它提出了一種适用于現實生活中的各種多媒體内容的标準化描述方案,      
以提取待描述對象的各方面特征為基礎,友善人們對所需的多媒體材料進行快速、有效的檢索。 

---- 3.VB開發MPEG -- Audio/Video資料流的播放技術 

---- 3.1.VB中Multimedia MCI 控件,MediaPlayer控件播放MPEG資料流的缺點 

---- VB中常用的多媒體控件是Multimedia MCI 控件,它管理媒體控制接口 (MCI) 裝置上的多媒體      
檔案的記錄與回放。它被用來向諸如聲霸卡、MIDI 序列發生器、CD-ROM 驅動器、視訊 CD 播放器和視      
頻錄音帶記錄器及播放器等裝置發出 MCI 指令,還支援 Windows (*.avi) 視訊檔案的回放。采用      
Multimedia MCI 控件播放采集的MPEG資料流,播放速度比實時監控顯示要快,在測試時還發現MPEG      
檔案長度縮短到500k-600k時,就無法看到播出的圖像了。改用VB中的MediaPlayer控件上叙缺點仍然      
存在。分析原因是:因為MPEG檔案長度太短了,播放裝置剛打開就已經關閉了,這是程式設計無法控制的。      
而且,對于使用者要求擷取的某些有關壓縮資料流的資訊和希望實作的某些功能,比如圖線尺寸、      
Copmression Rate、圖形的縮放顯示、界面的美觀等,上叙控件所提供的為友善程式開發人員使用的高      
層接口已不适用,要想在此基礎上實作對底層的一些操作,難度可想而知。在解決上叙實際性問題時,我      
們調用了動态連結庫Quatrz.dll。 

---- 3.2.提供對MPEG流友善的底層操作和高層接口的動态連結庫Quatrz.dll 

---- 在Windows/System下可找到一個動态連結庫Quatrz.dll,這是Windows中帶的用于控制運動圖      
像的播放的一個類型庫,隻要在VB的"引用"菜單中将它添加進來即可使用。該庫中定義了IBasicAudio,      
IBasicVideo和IBasicVideo2,IMediaEvent 、IMediaEventEx、IMediaPosition等類,可友善      
地在CommandButton控件的Click等事件中添加代碼設定和讀取Audio的相關值,設定或讀取Video的輸      
入輸出源的相關參數,直接調用無參函數Run、Pause、Stop等控制播放事件程序,利用IMediaPosition      
類對具體播放細節進行操作。對于壓縮的MPEG資料流的輸出顯示并不需要特别的控件,在VisualBasic中      
你可以選擇一個窗體作為容器或窗體上的PictureBox控件作為容器。為了界面的美觀和使用者查取相關資訊      
的友善,我們采用了PictureBox控件作為容器顯示播放的MPEG資料流。 

---- 3.3.用PictureBox控件顯示MPEG資料流 

---- Visual Basic中PictureBox 控件可以顯示來自位圖、圖示或者元檔案,以及來自增強的元檔案、      
JPEG 或 GIF 檔案的圖形。亦可在代碼中操作圖形屬性和方法,以建立動畫或進行仿真。在窗體上放置了      
一個PictureBox控件picTV,在調用了Windows/System下動态連結庫Quatrz.dll的基礎上,定義一個      
全局的Object對象pMC,令 pMC指向 FilgraphManager的一個新執行個體,打開壓播放的MPEG檔案;再定義      
一個局部對象 pVW 為 IVideoWindow的新執行個體,打開一個播放Video的視窗;令pVW = pMC,給對象引      
用pVW指派,将picTV的屬性值hWnd賦給pVW的Owner ,這樣picTV就能顯示接收的MPEG資料流了。具體      
操作如下: 

Set pMC = New FilgraphManager
    pMC.RenderFile "C:/Bank/Montior/Example.MPG"   
Set pVW = pMC
    pVW.WindowStyle = CLng(&H6000000)
    pVW.Left = 0
pVW.Top = 0
OldWidth = pVW.width
    OldHeight = pVW.Height
    picTV.width = pVW.width * 15
    picTV.Height = pVW.Height * 15
    pVW.Owner = picTV.hWnd
---- 可以單獨定義一個函數包括這些代碼,也可将其放到CommandButton控件的Click事件中。 
---- 3.4.MPEG資料流的縮放顯示 

---- 放大或縮小MPEG圖像是各種多媒體播放軟體中常用的圖像顯示處理手段。VisualBasic中對于靜      
态圖檔進行縮放處理可以使用Image控件,将控件的Stretch屬性設為True,則裝入的圖檔會改變比例      
适應Image控件的範圍,是以對圖檔的縮放處理變成對Image控件的Height、Width屬性值的大小變化。      
由于控件的尺寸發生變化,顯示的點距不能改變,造成顯示點的像素點與圖檔不能完全一一對應,顯示質      
量明顯變差。隻有Image控件才能對圖檔進行縮放,如果PictureBox控件不足以顯示整幅圖象,則裁剪圖      
象以适應控件的大小。要想實作用PictureBox控件實作對輸出MPEG圖像的縮放,必須改變MPEG資料流的      
輸出比例,在調節PictureBox控件的尺寸去适應輸出的MPEG圖像。實際上,在上面的第3小節裡,為了顯      
示輸出MPEG圖像已經這樣做了。隻不過用的是讀取出的MPEG圖像OldWidth、 OldHeight,下面給出一個      
以原來的1/2大小輸出MPEG圖像的例子。 

pVW.width = OldWidth / 2
pVW.Height = OldHeight / 2
picTV.Left = 135
picTV.Top = 135
picTV.width = pVW.width * 15
picTV.Height = pVW.Height * 15
pVW.Owner = picTV.hWnd

---- 在放大或縮小MPEG圖像的尺寸時要注意保持Width、Height的比例一緻,以免輸出的圖像變形。 
---- 3.5.滑鼠拖動播放MPEG資料流 

---- 用滑鼠拖動滾動條随意播放MPEG資料流是Windows中多媒體播放機播放VCD的常用技術。VB中的      
Slider 控件是包含滑塊和可選擇性刻度标記的視窗,可以通過拖動滑塊,用滑鼠單擊滑塊的任意一側或      
者使用鍵盤移動滑塊。在選擇離散數值或某個範圍内的一組連續數值時,Slider 控件十分有用。通過将      
滑塊移動到刻度标記處,可以對MPEG資料流進行定位播放。在窗體上放置一個Slider 控件Slider 1,      
設定好光标移動的最大步長LargeChange=5,最小步長SmallChange=1,最大移動範圍Max=50,實作程      
序如下: 

Private Sub Slider1_Scroll()
注釋:
    Dim pMP As IMediaPosition
    Dim v As Double
    
    If Not bOpen Then Exit Sub
    
    bSeeking = True
    pMC.Pause

    Set pMP = pMC

    v = Slider1.Value - Slider1.Min
    v = v / Slider1.Max * pMP.Duration
    pMP.CurrentPosition = v
    Set pMP = Nothing

         pMC.Run
    注釋:
End Sub

---- 3.6.MPEG資料流采集時間的擷取 
---- VisualBasic裡提供了一個函數FileDateTime可用來擷取檔案建立或是更新的日期與時間。      
定義一個局部對象 pMP 為IMediaPosition的新執行個體,令pMP = pMC,給對象引用pMP指派;再      
定義兩個Double型的變量curpos 、length,将pMP.CurrentPosition賦給curpos,取得MPEG      
資料流的目前相對位置時間,将pMP.Duration 賦給length,取得MPEG資料流的時間長度值;就能      
擷取MPEG資料流相對的采集時間。根據MPEG采集檔案建立的特性将兩個日期時間作加法或減法則可以      
得到MPEG資料流的采集時間。 

---- 在整個MPEG的播放過程中,都要求實時顯示MPEG資料流的采集時間,可定義一個擷取采集時間      
的函數,采用Timer控件的Timer事件來驅動。通過引發 Timer 事件,Timer 控件可以有規律地隔一      
段時間執行一次函數擷取到MPEG資料流的采集時間。 

---- 4.結束語 

---- 将成熟的圖像壓縮技術用于電視監視監控領域具有十分重要的意義。例如:在銀行的監視監控系      
統中,由于客戶(銀行)身份的特殊性,在對冒領他人存款、銀行失竊或被搶劫等擾亂銀行正常工作秩      
序的事件的調查及其進行中,采集的壓縮資料流是很重要的辦案線索與證據。在該系統中不僅要求監視      
畫面清晰,采集的資料備援度低,MPEG資料流的播放技術也是很重要的。本文介紹了在Windows環境下      
,利用VisualBasic自身條件和原有控件開發MPEG卡采集的Audio/Video資料的播放技術。充分利用      
了VB的優越條件,靈活地與VB中各種現有控件結合,開發出來的MPEG媒體播放器功能完善,回放的MPEG      
畫面能清晰地重制資料采集時場景、做到了"聞其聲,見其人"、并能準确确定事件發生的時間時刻。對隻      
記錄了單幀的Audio/Video資料流也能同樣播放。上述技術已在監控系統中使用,并效果良好。
      

繼續閱讀