天天看點

window7+vs2013+DirectShow(windows sdk v7.1)配置0 DirectShow簡介1 平台介紹2 軟體安裝3. DirectShow程式開發配置4. filter程式開發配置

轉載自:http://blog.csdn.net/misskissc/article/details/8846392

0 DirectShow簡介

        DirectShow概念

        DirectShow(有時縮寫如DS或DShow),開發代号Quartz,是一種由微軟公司開發的能夠讓軟體開發者對媒體檔案執行各種不同處理的應用程式設計接口。基于微軟公司Windows元件對象模型(COM)架構,DirectShow為大部份微軟公司程式設計語言提供了一個媒體的普遍接口,而且是一個可擴充的,能在使用者或開發者的指令下播放或記錄媒體檔案的,以Filter為基礎的架構。DirectShow開發工具及憑證被加入到微軟公司SDK平台的一部份。Windows Media Player這樣的應用程式運用DirectShow或者它的各種派生來播放來自檔案或是網際網路上的内容。DirectShow's的最大的競争對手是蘋果計算機的QuickTime架構。

      DirectShow設計模式

      DirectShow運作的方式通常是一個開發者建立一個Filter Graph,把一些Filter - 可能訂制 - 加入Filter Graph,然後播放檔案,或者播放來自網際網路或照相機的資料。當播放程序運作時,Filter Graph在Windows注冊中尋找注冊了的Filters并且為這些Filter建立本地提供的Graph。在這之後,它将所有的Filter連接配接在一起,并且在開發者的請求下,播放/中止創造的Graph。

1 平台介紹

         win 7。

        我不知道以下做法是不是vs2010與directshow操作正确的唯一途徑,但是我經過以下安裝和配置之後就可以寫DirectShow程式和開發filter(繼承父filter)了。

2 軟體安裝

2.1 安裝順序

        按照下面的順序安裝軟體:

(1)visual studio 2010

(2)Windows sdk 7.1

(3)Visual studio 2010 sp1

(4)VC-Compiler-KB2519277.exe

各軟體的下載下傳網址我就不粘貼了,可以用google搜尋的。

2.2 注意

(1)在安裝Windows SDK之前,一定要先解除安裝比Microsoft Visual C++ 2010 x86(x64) Redistributable - 10.0.30319更高的版本(不包括Microsoft Visual C++ 2010 x86(x64) Redistributable - 10.0.30319),如果你是首次安裝vs,這個問題就不存在。

(2)在安裝windows sdk的時候不要安裝VC編譯器,在安裝完vs 2010 sp1後再安裝VC-Compiler-KB2519277.exe補上。

至于每一個軟體的安裝過程就不貼圖了,圖比較多。如果不清楚的話可以到谷歌裡搜一下作為參考的。具體看開發需要。

3. DirectShow程式開發配置

        隻是開發direcshow程式時,如隻進行視訊預覽而不繼承父filter時的配置如下:

打開VS2010的Property Manager 即屬性管理器,右鍵目前項目-->properties(屬性)-->VC++ Directories

在Include Directories中添加Directshow以下目錄:

C:\Program Files\Microsoft SDKs\Windows\v7.1\Include

在Library Directories中添加DirectShow的庫目錄:

C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib

好了,可以開發DirectShow程式了。

4. filter程式開發配置

4.1編譯BaseClasses

        一般來說開發filter的程式需要用到filter基類,directshow的基類在(SDK samples root)\DirectShow\BaseClasses下。是以首先需要用vs2010來build BaseClasses項目,使之生成相應的庫檔案。在開始中以管理者的身份打開vs2010,然後打開BaseClasses項目,分别以Debug(生成strbasd.lib庫檔案,供debug項目所調用)和Release(生成strbase.lib庫檔案,供release項目所調用)方式Build(F7)baseclasses項目(不要用Debug,用了Debug之後可能會出現找不到BaseClasses.lib的錯誤提示)。

4.2 配置vs2010

4.2.1 包含目錄

依然打開vs2010 屬性管理器,然後經相同的步驟到VC++目錄下:

在Include Directories中包含direcshow目錄如下:

C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses

C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\common

C:\Program Files\Microsoft SDKs\Windows\v7.1\Include

 在 Libray Directories中包含以下目錄:

C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib

C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\Debug

C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\Release

4.2.2 注意

注意以上頭檔案的包含順序!!

4.2.3 如果目錄包含順序不對

如果包含目錄順序不對則會出現以下錯誤:

1>e:\microsoft sdks\windows\v6.0\samples\multimedia\directshow\baseclasses\refclock.h(80) : error C2061: syntax error : identifier ''CAMSchedule''

1>e:\microsoft sdks\windows\v6.0\samples\multimedia\directshow\baseclasses\refclock.h(139) : error C2143: syntax error : missing '';'' before ''*''

1>e:\microsoft sdks\windows\v6.0\samples\multimedia\directshow\baseclasses\refclock.h(139) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

1>e:\microsoft sdks\windows\v6.0\samples\multimedia\directshow\baseclasses\refclock.h(139) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

1>e:\microsoft sdks\windows\v6.0\samples\multimedia\directshow\baseclasses\refclock.h(139) : warning C4183: ''GetSchedule'': missing return type; assumed to be a member function returning ''int''

1>e:\microsoft sdks\windows\v6.0\samples\multimedia\directshow\baseclasses\refclock.h(178) : error C2143: syntax error : missing '';'' before ''*''

1>e:\microsoft sdks\windows\v6.0\samples\multimedia\directshow\baseclasses\refclock.h(178) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

1>e:\microsoft sdks\windows\v6.0\samples\multimedia\directshow\baseclasses\refclock.h(178) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

1>e:\microsoft sdks\windows\v6.0\samples\multimedia\directshow\baseclasses\refclock.h(139) : error C2065: ''m_pSchedule'' : undeclared identifier

1>e:\microsoft sdks\windows\v6.0\samples\multimedia\directshow\baseclasses\refclock.h(166) : error C2227: left of ''->GetEvent'' must point to class/struct/union/generic type

第一次出現這個錯誤後就去将vs2010的環境配置目錄修改為以上順序吧。好像隻要編譯通過了,包含目錄的順序就無所謂了。



繼續閱讀