網頁

搜尋此網誌

2010年5月14日 星期五

DirectShow Overview

我們繼續談談DirectShow的架構,從系統的觀點來學習,避免陷入見樹不見林的困境當中。

DirectShow的設計是為了解決多媒體(Multimedia)的開發困境,因為要在Windows上開發多媒體應用遇到的挑戰有:
  • 多媒體的資料是大量的串流形式,而且必須快速的處理(process)。
  • 聲音(Audio)和影像(Video)必須同步(synchronize)處理,意思是開始與停止都必須一致且同樣的速率進行。
  • 資料來源(Source)具有多樣性,來源可以是本機磁碟機、網路、電視廣播或是視訊攝影機。
  • 資料格式(Format)是多變不定的規格,例如Audio-Video Interleaved (AVI)、Advanced Streaming Format (ASF)、Motion Picture Experts Group (MPEG)或Digital Video (DV)等等。
  • 程式設計人員不會事先知道使用者端的硬體系統規格。
先看DirectShow的架構圖,諺語(adage)說A picture is worth a thousand words
High level architecture

DirectShow的架構設計上使我們的應用程式(Application)和底層「複雜的資料、硬體差異和影音同步」隔離(加了一層),而為了解決底層的多樣性,DirectShow採用模組化架構的元件(稱為Filter,本身是COM 元件,為什麼叫做Filter?)。Filter元件對底層支援Windows Driver Model (WDM)的裝置,另外,也支援Video for Windows (VfW) 、Audio Compression Manager (ACM)和Video Compression Manager (VCM)的遺留元件,當然,程式開發人員也可以開發自己的Filter元件。

DirectShow利用DirectDraw有效率的呈獻(render)影像,聲音則是利用DirectSound播放。同步的問題則是利用時間戳記(time-stamped)取樣的方式解決,DirectShow在多媒體資料上加入時間資訊(聰明的方法)。

整個DirectShow的如架構圖所示,可以清楚看到FilterFilter GraphFilter Graph Manager的關係,Application只須和Filter Graph Manager溝通而簡化開發的困難度。

參考資料:http://msdn.microsoft.com/en-us/library/dd375470(VS.85).aspx

沒有留言:

張貼留言

熱門文章