1 引 言
用戶能夠通過計算機或相應的用戶前端設備,對服務器提供的視頻節目進行編輯與處理,如暫停、快/慢進、搜索等等。VOD還可以實現上網、家庭購物、旅游指南、訂票預約、股票交易等其他功能。
但是,目前的視頻點播功能具有一定的局限性。播放的節目都是由電視臺決定的,尤其是在比賽的轉播中,電視臺播放哪些畫面、鏡頭,觀眾只能被動地接受,無法選擇。而可控視野的視頻點播是利用攝像機組將現場各方位的畫面都拍攝下來,然后利用視頻融合技術進行處理,供用戶進行點播。這樣,用戶就可以自由地左看、右看了。
2 DirectShow技術
DirectShow是建立在DirectDraw和DirectSound組件基礎上的流媒體處理的開發包,他通過DirectDraw對顯卡進行控制以顯示視頻,通過DirectSound對聲卡進行控制以播放聲音。
過濾器是DirectShow基本的組成元件。過濾器是一個COM組件,是完成DirectShow處理過程的基本單元。
過濾器主要分為以下幾種類型:
(1) 源過濾器(source filter)
源過濾器引人數據到過濾器圖表中,數據來源可以是文件、網絡等。不同的源過濾器處理不同類型的數據源。
(2) 變換過濾器(transform filter)
變換過濾器的工作是獲取輸人流,處理數據,并生成輸出流。變換過濾器對數據的處理包括編解碼、格式轉換、壓縮解壓縮等。
(3) 渲染過濾器(renderer filter)
渲染過濾器在過濾器圖表里處于一級,他們接收數據并把數據提交給外設進行渲染。
在DirectShow里,一組過濾器稱為一個過濾器圖表(filter graph)。過濾器圖表用來連接過濾器以控制媒體流,也可以將數據返回給應用程序,并搜索所支持的過濾器。過濾器有3種可能的狀態:運行、停止和暫停。暫停是一種中間狀態,停止狀態到運行狀態必定經過暫停狀態。暫停可以理解為數據就緒狀態,是為了快速切換到運行狀態而設計的。在暫停狀態下,數據線程是啟動的,但被渲染過濾器阻塞了。通常情況下,過濾器圖表中所有過濾器的狀態是一致的。
3 系統設計
本系統采用客戶端/服務器(C/S)結構。其中,客戶端提供與用戶交互的界面,實現點播功能;服務器端實現視頻節目的存儲管理,用戶信息管理和用戶點播請求的響應功能。
3.1 客戶端概要設計
客戶端主要采用C#技術編程實現友好的視頻點播界面。此外,由于現有的視頻播放器,如Windows MediaPlayer無法收看可控視野的視頻節目,所以采用Direct-Show技術自行開發設計一個播放器。
3.2 服務器端概要設計
服務器端分為Web服務器和視頻服務器兩個部分。他們可以在同一個機器上,也可分布在不同的機器上。隨著應用規模的不斷擴大,可以靈活的增加服務器來提高視頻服務器的資源帶寬。
服務器端的主要模塊有:
身份驗證模塊 對用戶的身份進行驗證。
數據庫管理模塊 負責有關用戶身份驗證的查詢和維護,播放管理模塊對媒體流內容存儲路徑的查詢和維護,完成從邏輯節目到文件物理存儲的映射。
播放管理模塊 負責點播服務的播放響虛功能。
4 系統實現中的關鍵技術
系統客戶端播放器需要接收從服務器端傳送過來的多路視頻流,并將其分別解碼、同步,然后合成播放。其中解碼使用微軟DirectShow現有的過濾器,同步和混合渲染都需要重寫DirectShow中的VMR(Video Mixing Renderer)組件來實現。VMR,即視頻混合渲染器,也是Dj-rectShow的一個渲染過濾器,可以同時呈現多路視頻流,多支持16路輸入流的α混合。
4.1 VMR簡介
VMR位于視頻流的篩選器圖形中。根據具體的配置不同,由2~5個獨立功能的組件構成(不包括輸入引腳)。VMR包括混合器(Mixer)、圖像合成器(Composi-tor)、分配演示器(Allocator Presenter)、核心同步控制器(Core Synchronization Unit)和窗口管理器(Window Man-ager),其結構如圖1所示。
當有多路輸入流時VMR將加載該COM對象。混合器負責收集每路輸入流的信息,并將他們進行Z排序;混合器還決定什么時候每個輸入引腳接受輸入樣本,同時,還要在恰當的時間通知圖像合成器執行實際的混合;混合器也計算每個輸出圖像的時間戳;當應用程序提供一幅位圖用于顯示在合成后的圖像的上層時,即使輸入流的Z順序發生了改變,混合器也必須保證位圖處于上面。
(2) 圖像合成器
該COM對象執行實際的混合,將多路輸入流合成到一個單一的DirectDraw表面,DirectDraw表面由分配演示器提供。VMR提供一個缺省的圖像合成器供應用程序進行二維的a混合。應用程序可以提供一個自定義的圖像合成器實現別的二維或者三維效果,如給部分圖象應用紋理、每個像素進行a混合。
(3) 分配演示器
這同樣是個COM對象,給圖像合成器分配Direct-Draw表面,同時負責與圖形卡打交道。應用程序可以自己實現分配演示器從而控制DirectDraw物體,或者在視頻呈現的時候訪問位信息。
(4) 核心同步控制器
保證每一幀都能在正確的時間呈現出來。核心同步控制器使用過濾器圖表管理器提供的IReferenceClock接口,并且執行質量控制和幀報告函數。
(5) 窗口管理器
只有當VMR工作在窗口(Windowed)模式下時才使用。 VMR的這種組件式結構使應用程序可以根據需要以不同的方式操作他,VMR支持3種不同的操作模式:有窗口(Windowed)、無窗口(Windowless)和無呈現(render-less);兩種混合模式:單(single stream)和多個流(multiple streams)。有窗口模式是默認模式,VMR會創建一個單獨的窗口,并將視頻呈現到該窗口上;無窗口模式通過將視頻直接呈現到應用程序窗口上,為應用程序提供了更強的控制能力;而無呈現模式使用程序自定義的分配演示器對象。
可控視野點播系統需要播放多路視頻流,所以采用無窗口模式。要注意的是,VMR必須被加入到過濾器圖表中,并且必須保證在他連接其他過濾器之前已經全部配置完畢。在VMR被初始化之后,程序必須在所有的連接啟動之前指定VMR將要接收的視頻流的數目。
4.2 VMR的渲染原理
VMR同時接收兩路視頻信號,并把他們同時播放出來。圖2中VMR有默認的4個輸入引腳,如果需要播放超過4路視頻流,可以在程序中設定輸入視頻流的數目。可控視野點播系統的渲染原理與圖2相似,只是視頻源不是文件,而是通過網絡傳輸過來的實時視頻流。
4.3 相關代碼
(1) 配置VMR
首先創建VMR過濾器并查詢IVMRFilterConfig接口,通過IVMRFilterConfig接口設置無窗口模式。其主要的代碼如下:
本文介紹了利用DirectShow中的VMR組件設計的可控視野的視頻點播系統。該系統可以同時播放多路視頻,讓觀眾可以通過鼠標與場景進行交互,實現左視、右視、近看、遠觀等操作,令觀眾有親臨現場的感覺,滿足觀眾個性化的需求。