日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DirectX、Directshow介绍

發(fā)布時間:2023/12/9 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DirectX、Directshow介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1DirectX是什么 DirectX(簡稱:DX)是微軟推出的一套基于Windows系統(tǒng)的多媒體應用程式接口APIs函式。在開發(fā)中,DX分為兩個部分,一個是運行庫,通過DX編譯出來的程式必須要有運行庫的支持,另外一個是開發(fā)庫,也就是常說的SDK,這部分是在編譯DX程序中是必需的。 DirectX是一種圖形應用程序接口(API),簡單的說它是一個輔助軟件,一個提高系統(tǒng)性能的加速軟件,微軟創(chuàng)建開發(fā)的。他的意思不難理解,Direct是直接的意思,X是很多東西,加在一起就是一組具有共性的東西,這個共性就是直接。微軟定義它為“硬件設備無關性”。 DirectX 是微軟開發(fā)的圖形及媒體加速接口,只有安裝了它,系統(tǒng)中軟件才能比較直接的利用硬件加速資源(高速訪問硬件),目前該軟件最高版本為9.0c 在Windows操作系統(tǒng)的體系構架中,在內核與硬件之間有一層抽象層,專門對硬件進行屏蔽抽象,所以用戶不再被允許對硬件進行直接訪問。這樣做以后,大大地提高了操作系統(tǒng)的抗破壞性和抗干擾性,但這樣以來,使硬件操作的效率大打折扣,許多新硬件的新特性無法直接使用,這對多媒體和游戲的發(fā)展顯然是一種障礙。DirectX是微軟公司提供的一套優(yōu)秀的應用程序編程接口(APIs),用于聯(lián)系應用程序和硬件自身,它對發(fā)展Windows平臺下的多媒體應用程序和電腦游戲起到了關鍵的作用。 DirectX組件包括:DirectDraw、DirectSound、DirectPlay、Direct3D、DirectInput、DirectSetup、AutoPlay等
  總之,DirectX的主要好處有兩個:為軟件開發(fā)者提供與硬件的無關性;為硬件開發(fā)提供策略。 為得到最新的版本,應該從最新的Microsoft Platform SDK中將DirectX安裝到系統(tǒng)中。 可以在http://www.microsoft.com/msdn站點或者MSDN光盤中找到platform SDK。缺省情況下,Microsoft Platform SDK被安裝到缺省驅動器根目錄下的\MSSDK目錄中。DirectX 的頭文件安裝在\MSSDK\INCLUDE目錄中,Lib文件安裝在\MSSDK\LIB目錄中。 Platform SDK包含了一些非常好的DirectX例子和文檔。早期發(fā)布的DirectX 文檔非常粗略而且有些是錯誤的,現(xiàn)在的版本已經極大地改正了這一問題。最好要熟悉這些文檔。 所幸的是,不必一次就處理DirectX的全部功能。DirectX是一套可以分別使用的組件。實際上,在編程概念中,DirectX的不同部分互相沒有聯(lián)系。它們僅僅是具有相同的設計風格和目標:使Windows的游戲編程變得容易。 使用DirectX組件的程序有什么特殊的地方嗎?根本沒有。使用DirectX組件的程序是基于Win32的程序,它們使用普通Win32 API集,并且可以訪問所有可以獲得的操作系統(tǒng)工具。實際上,DirectX既可以用于GUI程序,也可以用于控制臺程序。可以直接用Petzold-style SDK編程開發(fā)程序,也可以用基本類庫,如MFC。總的說,唯一的要求是大多數(shù)DirectX組件在程序中需要HWND,所以至少要有一個窗口。 2DirectX 9.0 家族的所有成員 DirectX Graphics:集成了以前的DirectDraw 和Direct3D技術。DirectDraw主要負責2D加速,以實現(xiàn)對顯卡內存和系統(tǒng)內存的直接操作;Direct3D主要提供三維繪圖硬件接口,它是開發(fā)三維DirectX游戲的基礎。 DirectInput:主要支持輸入服務(包括鼠標、鍵盤、游戲桿等),同時支持輸出設備。 DirectPlay:主要提供多人網(wǎng)絡游戲的通信、組織功能。 DirectSetup:主要提供自動安裝DirectX組件的API功能。 DirectMusic:主要支持MIDI音樂合成和播放功能。 DirectSound:主要提供音頻捕捉、回放、音效處理、硬件加速、直接設備訪問等功能。 DirectShow:為Windows平臺上處理各種格式的媒體文件的回放、音視頻采集等高性能要求的多媒體應用,提供了完整的解決方案。 DirectX Media Objects:DirectShow Filter 的簡化模型,提供更方便的流數(shù)據(jù)處理方案。 3DirectX的作用 DirectX軟件開發(fā)包是微軟公司提供的一套Windows操作平臺上的開發(fā)高性能圖形、聲音、輸入、輸出和網(wǎng)絡游戲的編程接口。它提供了硬件設備無關性。 4DirectShow的由來及介紹 DirectShow是從DirectX6.0中的DirectX Media 發(fā)展而來的,它集成了DirectX家族中其他成員(DirectDraw、DirectSound等)的技術。DirectX Media Objects是從DirectX8.1的DirectShow中分離出來的,成為了另一種高效率的流數(shù)據(jù)處理解決方案。 Microsoft DirectShow是一個基于Microsoft Windows平臺的媒體流結構。它支持各種格式,包括高級流模式(ASF)、運動圖像專家組(MPEG)、音頻視頻交錯(AVI)、音頻動態(tài)壓縮第三層(MP3)和WAV聲音文件。它支持Windows驅動模式(WDM)設備的捕捉,以及早期Widows設備的視頻。DirectShow結合了其它的DirectX技術。當視頻和音頻的硬件加速可用時,它能夠自動檢測并進行使用,同時也支持沒有硬件加速的系統(tǒng)。 DirectShow媒體重放、格式轉換和捕捉的任務變得簡單。同時,它為需要自定義的解決方案的應用程序提供了對底層流控制結構的訪問。您也可以創(chuàng)建自己的DirectShow組件,來支持新的格式或自定義效果。 使用DirectShow的應用程序類型包括DVD播放器、視頻編輯應用程序、AVI到ASF的轉換器、MP3播放器和數(shù)字視頻捕捉應用程序。 DirectShow是基于組件對象模型(COM)的。要做一個DirectShow的應用程序,您必須了解COM客戶端編程。對于大多數(shù)應用程序,您不需要實現(xiàn)您自己的COM對象。DirectShow提供了您所需要的組件。(如果您想寫自己的組件擴展DirectShow,則必須以COM對象的方式來實現(xiàn)。) 5、程序開發(fā)包的選擇 請問在Mirosoft DirectX主頁上的下載連接有如下: 它們有什么區(qū)別: l?????????DirectX 9.0 SDK Update - (April 2005) l?????????DirectX 9.0 SDK Update - (April 2005) Symbol Files l?????????DirectX 9.0c Redistributable for Software Developers - (April 2005) l?????????DirectX 9.0c End-User Runtime -------------------------------------------------------------------------------- l?????????DirectX 9.0 SDK Update - (April 2005) - 就是通常說的DXSDK l?????????DirectX 9.0 SDK Update - (April 2005) Symbol Files - 調試時用的符號文件 l?????????DirectX 9.0c Redistributable for Software Developers - (April 2005) - 能夠隨你的程序一起發(fā)行的部分 l?????????DirectX 9.0c End-User Runtime - 普通用戶安裝的DX 6、如何把DirectX關聯(lián)到VC中? 我們要進行DirectX程序的編譯就必須要有DirectX SDK庫文件,此文件可以到微軟或者本站獲取,然后通過VC設置將其關聯(lián)。下面說明了在VC6和VS.Net下的安裝方法。 VC6(英文版):選擇菜單Tools->Options,打開Options對話框,選擇Directions標簽頁,選擇Include files項,在里面添加DirectX頭文件的文件夾路徑目錄,同樣,在Library files項中添加DirectX頭文件的文件夾路徑目錄。 VS.Net(中文版):選擇菜單"工具->選項",打開選項對話框,打開Projects標簽頁,分別選擇"包含文件"和"庫文件"進行相應的路徑添加即可。 注:VC在進行編譯時,會根據(jù)排列順序來進行庫文件選取,假設有兩個相同名字的庫,VC會優(yōu)先使用排列在前面的庫文件。 DirectShow應用程序至少連接庫文件Strmiids.lib和Quartz.lib。前者定義了SirectShow標準的CLSID和IID,后者定義了導出函數(shù)AMGetErrorText(如果應用程序中沒有使用到這個函數(shù),也可以不連接這個庫)。 DirectShow應用程序都應該包含Dshow.h文件,但常常用Streams.h文件來代替它。如果包含了Streams.h,則一般庫文件還要連接strmbasd.lib、uuid.lib和winmm.lib。 7DirectShow開發(fā)環(huán)境的配置 (1)使用VC向導生成一個具體項目,如Win32 Dynamic-Link; (2)包含頭文件streams.h; (3)在VC的菜單中選擇Project|Settings|C/C++,在彈出的對話框中的Category中選擇Code generation,然后在Calling convention中選擇_stdcall; (4)使用多線程語言運行時庫,即在VC的菜單中選擇Project|Settings|C/C++,在彈出的對話框中的Category中選擇Code generation,然后在Use run-time library中,Debug版選擇Debug Multithreaded,Release版選擇Multithreaded。 (5)配置必要的鏈接庫文件,即在VC的菜單中選擇Project|Settings|Link,在彈出的對話框中的Category中選擇General,然后在Object/library modules中輸入如下代碼: Debug版本??? strmbasd.lib, msvcrtd.lib, winmm.lib Release版本 strmbase.lib, msvcrt.lib, winmm.lib 并且選中Ignore all default libraries。 DirectShow SDK建議,DirectShow應用程序應該至少連接庫文件strmiids.lib和quartz.lib。前者定義了DirectShow標準的CLSID和IID,后者定義了導出函數(shù)AMGetErrorText(如果應用程序中沒有使用到這個函數(shù),也可以不連接這個庫)。如果程序里包含了頭文件streams.h,則一般庫文件還要連接strmbasd.lib、uuid.lib、winmm.lib。 (6)將DirectX SDK的Include和Lib目錄配置到VC的系統(tǒng)目錄中去,并且放在標準的VC目錄之前,以保證編譯器能夠拿到最新版本的源文件。選擇Tools|Options|Directories,在彈出的對話框中的Show directories for中選擇Include files,配置如下(假設DirectX SDK安裝在D:\DXSDK目錄下,VC安裝在C:\Program Files下): D:\DXSDK\Include D:\DXSDK\SAMPLES\C++\DIRECTSHOW\BASECLASSES D:\DXSDK\SAMPLES\C++\COMMON\INCLUDE C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE 再在Show directories for中選擇Library files,配置如下: D:\DXSDK\Lib D:\DXSDK\SAMPLES\C++\DIRECTSHOW\BASECLASSES\DEBUG D:\DXSDK\SAMPLES\C++\DIRECTSHOW\BASECLASSES\RELEASE C:\PROGRAM FILES\MICROSOFT SDK\LIB C:\Program Files\Microsoft Visual Studio\VC98\LIB C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB (7)因為DirectShow應用程序是一種COM客戶程序,因此在調用任何COM函數(shù)之前調用CoInitialize()(或CoInitializeEx)函數(shù)進行COM庫的初始化(一般是在應用程序啟動的時候調用一次),在結束COM庫使用時調用CoUninitialize()函數(shù)進行反初始化(一般是在應用程序退出前調用一次)。 8VC編譯DX程序出現(xiàn)"無法解析的外部符號"是怎么回事? 這個錯誤經常出現(xiàn)在初學者要進行編譯DirectX程序的時候,主要是因為沒有將DX的庫文件引用到工程中,這里需要注意,我們將DX SDK的路徑設置到VC后,并不代表我們已設置好了DX SDK,在我們的DX工程中,我們還需要進行相應的設置操作,把我們所需要的庫文件(DirectX SDK Library)加入到我們的工程中,要設置這個庫文件有兩個方法,一個是在你工程的編譯選項中進行添加,另外一種可以通過代碼的方法來添加(推薦)。 命令行:#pragma comment( lib,"xxx.lib" ) 這個是VC的編譯預處理指令,將其加在代碼中即可。 例如:#pragma comment( lib,"ddraw.lib" )  這句的意思是將ddraw.lib庫加入到工程中進行編譯。 注:此命令行不需要加分號(“;”)。 9DirectShow SDK基類庫 在DirectShow SDK基類庫中,除了Filter和Pin類外,還有很多工具類。有了這些類的支持,我們開發(fā)Filter組件或者DirectShow應用程序會更加輕松。這些類主要包括:CPullPin、COutputQueue、CSourceSeeking、CEnumPins、CEnumMedieTypes、CMemAllocator、CMediaSample、CBaseReferenceClock、CMediaType、CBaseProperyPage等。 10DirectShowCOM編程基礎 DirectX采用了COM標準,而DirectShow是一套完全基于COM的應用系統(tǒng)。 DirectShow應用程序實際上是一種COM組件的客戶程序,只是COM組件的“使用”問題。這些問題包括如何創(chuàng)建COM組件、如何得到組件對象上的解風口以及調用接口方法、如何管理組件對象(即需要熟悉COM的引用計數(shù)機制)等。 而對于Filter開發(fā)人員來說,需要掌握的COM知識就要多一點。因為Filter本身是一種COM組件,開發(fā)Filter牽涉到了COM組件的“實現(xiàn)”問題。 COM本身只是一種規(guī)范,而不是實現(xiàn)。但是當使用C++來實現(xiàn)時,COM組件就是一個C++類,而接口都是純虛類。COM規(guī)范規(guī)定,任何組件或接口都必須從IUnknown接口中繼承而來,每個組件都必須實現(xiàn)一個與支相對應的類工廠(Class Factory),類工廠也是一個COM組件,他實現(xiàn)了IClassFactory接口。在IClassFactory的接口函數(shù)CreateInstance中,才能使用new操作生成一個與之對應的COM組件類對象實例。 COM組件有3種類型:進程內組件、本地進程組件和遠程組件。Filter一般是一種進程內組件,以DLL的形式提供服務。 每個COM組件都使用一個GUID來唯一標識。當創(chuàng)建一個COM組件時,總是首先通過這個GUID調用CoGetClassObject來獲得創(chuàng)建這個組件對象的類工廠。然后調用類工廠的接口方法IClassFactory::CreateInstance,就能真正地創(chuàng)建GUID標示的組件對象了。 一個典型的自注冊COM組件DLL所必需的5個函數(shù)如下: l?????????DllMain:DLL的入口函數(shù)(DirectShow實現(xiàn)的是DllEntryPoint); l?????????DllGetClassObject:用于獲得類工廠指針; l?????????DllCanUnloadNow:系統(tǒng)空閑時會調用這個函數(shù),以確定是否可以卸載DLL; l?????????DllRegisterServer:將COM組件注冊到注冊表中; l?????????DllUnregisterServer:刪除注冊表中COM組件的注冊信息。?

轉載于:https://www.cnblogs.com/sunshinejyp/archive/2009/03/25/1421746.html

總結

以上是生活随笔為你收集整理的DirectX、Directshow介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。