天天看點

視訊播放器制作學習(DirectDraw DirectShow)

對DirectShow 和 OPenCV 無法選擇,對SDK等相關概念不夠透徹,且環境的配置還是蠻複雜的。好在,通過學習,我沒有了這些問題。是以這篇筆記應運而生。

第五步是建立在已經打開一個檔案的基礎上的,就不能在這個InitDD中了。對于一個新手(比如我啊,我也在一邊學習一邊寫文章)打開檔案就很迷茫,因為這個檔案不是BMP檔案,BMP檔案還有固定的結構體,視訊檔案是什麼樣的格式呢?更直接的說,我怎麼得到視訊檔案中的裸資料!網上有人建議去看一下“陸其明”《DirectShow開發指南》。也就是說這裡我們應該使用DirectShow。這DirectShow又是什麼呢?我們再百度一下。

MSDN上的介紹是:

Directshow is a media streaming architecture for the Microsoft Windows platform.Using DirectShow ,your applications can perform high-quality video and audio playback or capture.

好了,問題的關鍵是我們怎麼使用這個開發包播放視訊檔案呢。類似DirectDraw的學習,這個開發包中的主要接口是什麼(我的學習思路是對着的吧?)。

我覺得比較好的方法(如果你時間多耐得住看MSDN上的英文)就是順着

學下去。我這裡就不按部就班了,我寫下我關心的也是程式設計中必須注意的(都翻譯自上面的topics)第一個就是配置下環境,對所有的Directshow 應用程式都應該包含Dshow.h ,有些DirectShow接口還需要額外的頭檔案,具體的會在相應的接口說明中說。需要的庫檔案是“Strmiids.lib”,“Quartz.lib”,

這裡又産生了一個問題,編譯了就是找不到“Dshow.h”頭檔案,有人說我沒安裝DX SDK,難道我裝了作業系統,或者說裝了VC 內建環境這些東西沒有一塊安裝嗎?(因為DirectShow與DirectX不是一個部門開發,它們的開發進度和更新速度與DirectX不一樣,是以微軟将它們分開,DirectShow SDK在DirectX Extras和PlatForm SDK 中都有)

開始/運作 輸入dxdiag 打開DirectX診斷工具:

可以看到目前DirectX版本為 9.0c

我想我又學糊塗了,不過沒關系,又糊塗到清醒的過程才是進步的過程:事實是這樣的,首先Microsoft DirectX SDK 是開發包,用于程式設計,是我們程式員用的,上面dxdialog顯示的是DirectX 9.0驅動版本号,是3D驅動,很多遊戲需要,我們關心的是作業系統裝好之後自帶DirectX SDK嗎?答案是系統是不會帶SDK的,VC也不帶directX SDK,我們需要單獨下載下傳安裝,然後把相應的頭檔案目錄和庫檔案目錄添加到VC的目錄清單中,就可以使用DirectX SDK中的頭檔案和函數了。

接着,我順便有了這些疑問,Platform SDK 是什麼呢?Platform SDK(有時也簡稱PSDK)現在已被Windows SDK 取代,Windows SDK從Windows Vista開始使用,它包含以前platform SDK 中的所有内容,同時還包括.Net架構的内容。這麼說PSDK不會再有新的版本。其實,微軟每推出一個重要的Windows 版本,一般都會同時推出一個SDK(Software Development Kit)SDK 包含了開發該WINdows 版本所需要的Windows函數和常數定義、API 函數說明文檔、相關工具和示例。SDK一般使用C語言,但是不包含編譯器,是以我們安裝完作業系統後(同樣沒有SDK),需要自己下載下傳SDK,但是下載下傳下來也沒有用,因為它隻是些API等,沒有編譯器,于是我們下載下傳了一個Visual C++ 這麼個IDE 。哈哈,我告訴你一個秘密:其實我們安裝好Visual C++之後已經有了PSDK了,是以沒必要自己下載下傳它(除非你嫌棄這個自帶的,需要更新鮮的,但是VC誕生于98年,比較過時了,你要用新的SDK,與VC關聯不敢保證沒有錯誤)。從Windows 98往後,Windows SDK叫Platform SDK 後來到了Vista 又換回去了。說到程式設計,我又想起來了兩種程式設計方式,一個就是所謂的SDK程式設計,另一個就是使用Application Framework,MFC便是其一(其他的還有如BCB的OWL),Application Framework是對SDK的封裝,有非常強大的優點(現在流行的侯俊傑的 《深入淺出MFC》便是介紹MFC機制的書籍)。SDK程式設計就是直接使用Windows API進行程式設計,API(Application Programming Interface)有幾千個函數組成,MFC(或其他的Application Framework)是API的封裝,結合面向對象的繼承、多态組成一個個類,形成類庫。呵呵再說就啰嗦了,還想提醒下看文章的你,API不是Windows 特有的,Linux 有,可程式設計的資料采集卡有。MFC從哪來的呢?我需要下載下傳嗎?似乎這些問題太怪異了。微軟早期為友善程式員開發程式,成立了一個AFX小組(AF即Application Framework 的意思,後面綴一個X沒什麼具體含義,為了酷吧)。有些作業系統在安裝好之後在system目錄就有了MFC的動态庫檔案MFC42d.dll 。有的則沒有,這又說道MFC在程式設計時分靜态連結和動态連結,到此為止。MSDN壓縮包解壓就可以發現,它不僅僅包含了我們經常用的一些HTML幫助,還包括許多東西,如samples(其中就有DirectX的)。

P的學生,我覺得很有必要看看這些名詞概念:Platform SDK、MSDN、API、VC 、DirectX(DX)、DirectShow(為什麼單獨,聽說它與DX已經分離,它與DX開發包一起釋出,并內建DX中的其它技術,如DirectDraw、DirectSound)、OpenCV。

下載下傳DirectShow位址:

繼續閱讀