freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

計(jì)算機(jī)本科畢業(yè)設(shè)計(jì)--流媒體處理報(bào)告正文(編輯修改稿)

2025-01-08 17:08 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 tShow 的設(shè)計(jì)讓應(yīng)用程序開發(fā)人員從復(fù)雜的數(shù)據(jù)傳輸,硬件差異 ,同步性等工作中解脫出來(lái),總體應(yīng)用框架和底層工作由 DirectShow 來(lái)完成。 這樣,運(yùn)用基于 DirectShow 框架開發(fā)的多媒體應(yīng)用程序就會(huì)變得非常簡(jiǎn)單! 開發(fā)工具的選擇:由于 DirectShow 是一套基于 Windows 平臺(tái),進(jìn)行流媒體處理的開發(fā)包,所以,運(yùn)用 VB ,Delphi, VC, C等語(yǔ)言均可開發(fā)基于 DirectShow的媒體軟件。但考慮到 VB 語(yǔ)言比較復(fù)雜,本人對(duì) Delphi 語(yǔ)言不熟悉, C#對(duì)開發(fā)硬件要求比較高,所以,本人選擇 VC為語(yǔ)言開發(fā)環(huán)境,本打算用 C++ Builder開發(fā)軟件,但考慮到 可能開發(fā)軟件之間存在兼容性問題,所以,還是選擇了Microsoft 的 為開發(fā)工具。 8 課題 應(yīng) 達(dá)到的技術(shù)要求 ( 1) 基于 DirectShow 系統(tǒng)編寫可以對(duì)音頻文件進(jìn)行播放的音 頻播放器; ( 2) 該播放器可以播放各種音頻文件 ; ( 3) 可以控制播放速度以及播放進(jìn)度 ; ( 4) 具有播放列表功能 ; ( 5) 可以控制音量,有靜音功能 。 9 3 過 程 實(shí) 現(xiàn) 程序設(shè)計(jì)的關(guān)鍵技術(shù)與理論 DirectShow 的 基本工作原理 DirectShow 使用一種叫 Filter Graph 的模型來(lái)管理整個(gè)數(shù)據(jù)流的處理過程;參與數(shù)據(jù)處理的各個(gè)功能模塊叫做 Filter;各個(gè) Filter 在 Filter Graph中按一定的順序連接成一條 “ 流水線 ” 協(xié)同工作。大家可以看到,按照功能來(lái)分,F(xiàn)ilter 大致分為三類: Source Filters、 Transform Filters 和 Rendering Filters。 Source Filters 主要負(fù)責(zé)取得數(shù)據(jù),數(shù)據(jù)源可以是文件、因特網(wǎng)、或者計(jì)算機(jī)里的采集卡、數(shù)字?jǐn)z像機(jī)等,然后將數(shù)據(jù)往下傳輸; Transform Fitlers主要負(fù)責(zé)數(shù)據(jù)的格式轉(zhuǎn)換、傳輸; Rendering Filtes 主要負(fù)責(zé)數(shù)據(jù)的最終去向,我們可以將數(shù)據(jù)送給聲卡、顯卡進(jìn)行多媒體的演示,也可以輸出到文件進(jìn)行存儲(chǔ)。值得注意的是,三個(gè)部分并不是都只有一個(gè) Filter 去完成功能。恰恰相反,每個(gè)部分往往是有幾個(gè) Fitler 協(xié)同工作的。比如, Transform Filters 可能包含了一個(gè) Mpeg 的解碼 Filter、以及視頻色彩空間的轉(zhuǎn)換 Filter、音頻采樣頻率轉(zhuǎn)換 Filter 等等。除了系統(tǒng)提供的大量 Filter 外,我們可以定制自己的 Filter,以完成我們需要 的功能。在 DirectShow 系統(tǒng)之上,我們看到的,即是我們的應(yīng)用程序( Application)。應(yīng)用程序要按照一定的意圖建立起相應(yīng)的 Filter Graph,然后通過 Filter Graph Manager 來(lái)控制整個(gè)的數(shù)據(jù)處理過程。 DirectShow 能在Filter Graph 運(yùn)行的時(shí)候接收到各種事件,并通過消息的方式發(fā)送到我們的應(yīng)用程序。這樣,就實(shí)現(xiàn)了應(yīng)用程序與 DirectShow 系統(tǒng)之間的交互。 圖 為一個(gè)典型的媒體文件的回訪鏈路,圖 為一個(gè) Directshow 應(yīng)用程序一般開發(fā)過程 [1]。 圖 一個(gè)典型的媒體文件的回訪鏈路 10 圖 Directshow 應(yīng)用程序一般開發(fā)過程 (1) 過濾器( filter) 過濾器是 DirectShow 最基本的組成元件。過濾器是一個(gè) COM 組件,是完成DirectShow 處理過程的基本單元。 DirectShow 提供了一組標(biāo)準(zhǔn)的過濾器供應(yīng)用程序使用,程序開發(fā)者也可以創(chuàng)建自定義的過濾器來(lái)擴(kuò)充 DirectShow 的功能,但必須是以 COM 形式建立的。 DirectX 為用戶提供了 DirectShow 基類庫(kù)( DirectShow Base Class Library),用戶自定義的過濾器都可以從基類庫(kù)提供的基類和接口派生出來(lái)。 過濾器主要分為以下幾種類型: A 源過濾器( source filter):源過濾器引入數(shù)據(jù)到過濾器圖表中,數(shù)據(jù)來(lái)源可以是文件、網(wǎng)絡(luò)、照相機(jī)等。不同的源過濾器處理不同類型的數(shù)據(jù)源。 B 變換過濾器( transform filter):變換過濾器的工作是獲取輸入流,處理數(shù)據(jù),并生成輸出流。變換過濾器對(duì)數(shù)據(jù)的處理包括編解碼、格式轉(zhuǎn)換、壓縮解壓縮等。 C 提交過濾器( renderer filter):提交過濾器在過濾器圖表里處于最后一級(jí),它 們接收數(shù)據(jù)并把數(shù)據(jù)提交給外設(shè)。 D 分割過濾器( splitter filter):分割過濾器把輸入流分割成多個(gè)輸出。例如, AVI 分割過濾器把一個(gè) AVI 格式的字節(jié)流分割成視頻流和音頻流。 E 混合過濾器( mux filter):混合過濾器把多個(gè)輸入組合成一個(gè)單獨(dú)的數(shù)據(jù)流。例如, AVI 混合過濾器把視頻流和音頻流合成一個(gè) AVI 格式的字節(jié)流。 過濾器的這些分類并不是絕對(duì)的,例如一個(gè) ASF 讀過濾器( ASF Reader filter)既是一個(gè)源過濾器又是一個(gè)分割過濾器。 在 DirectShow 里,一組過濾器稱為一個(gè)過 濾器圖表( filter graph)。過濾器圖表用來(lái)連接過濾器以控制媒體流,它也可以將數(shù)據(jù)返回給應(yīng)用程序,并搜索所支持的過濾器。過濾器有三種可能的狀態(tài):運(yùn)行、停止和暫停。暫停是一種 11 中間狀態(tài),停止?fàn)顟B(tài)到運(yùn)行狀態(tài)必定經(jīng)過暫停狀態(tài)。暫??梢岳斫鉃閿?shù)據(jù)就緒狀態(tài),是為了快速切換到運(yùn)行狀態(tài)而設(shè)計(jì)的。在暫停狀態(tài)下,數(shù)據(jù)線程是啟動(dòng)的,但被提交過濾器阻塞了。通常情況下,過濾器圖表中所有過濾器的狀態(tài)是一致的 。 (2) 引腳( pin) 過濾器可以和一個(gè)或多個(gè)過濾器相連,連接的接口也是 COM形式的,稱為引腳。過濾器利用引腳在各個(gè) 過濾器間傳輸數(shù)據(jù)。每個(gè)引腳都是從 Ipin 這個(gè) COM對(duì)象派生出來(lái)的。每個(gè)引腳都是過濾器的私有對(duì)象,過濾器可以動(dòng)態(tài)的創(chuàng)建引腳,銷毀引腳,自由控制引腳的生存時(shí)間。引腳可以分為輸入引腳( Input pin)和輸出引腳( Output pin)兩種類型,兩個(gè)相連的引腳必須是不同種類的,即輸入引腳只能和輸出引腳相連,且連接的方向總是從輸出引腳指向輸入引腳。 過濾器之間的連接(也就是引腳之間的連接),實(shí)際上是連接雙方媒體類型( Media Type)協(xié)商的過程。連接的大致過程為:如果調(diào)用連接函數(shù)時(shí)已經(jīng)指定了完整的媒體類型,則 用這個(gè)媒體類型進(jìn)行連接,成功與否都結(jié)束連接過程;如果沒有指定或不完全指定了媒體類型,則進(jìn)入下面的枚舉過程 —— 枚舉欲連接的輸入引腳上所有的媒體類型,逐一用這些媒體類型與輸出引腳進(jìn)行連接(如果連接函數(shù)提供了不完全媒體類型,則要先將每個(gè)枚舉出來(lái)的媒體類型與它進(jìn)行匹配檢查),如果輸出引腳也接受這種媒體類型,則引腳之間的連接宣告成功;如果所有輸入引腳上枚舉的媒體類型,輸出引腳都不支持,則枚舉輸出引腳上的所有媒體類型,并逐一用這些媒體類型與輸入引腳進(jìn)行連接,如果輸入引腳接受其中的一種媒體類型,則引腳之間的連接宣告成功; 如果輸出引腳上的所有媒體類型,輸入引腳都不支持,則這兩個(gè)引腳之間的連接過程宣告失敗。過濾器與引腳連接如圖 所示 。 圖 過濾器與引腳連接 圖 (3) 媒體類型( Media Type) 媒體類型是描述數(shù)字媒體格式的一種通用的可擴(kuò)展方式。兩個(gè)過濾器相連時(shí),必須使用一致的媒體類型,否則這兩個(gè)過濾器就不能相連。媒體類型 能識(shí)別上一級(jí)過濾器傳送給下一級(jí)過濾器的數(shù)據(jù)類型,并對(duì)數(shù)據(jù)進(jìn)行分類。 實(shí)際在很多應(yīng)用程序中,用戶根本不需要擔(dān)心媒體類型的問題, DirectShow會(huì)處理好所有的細(xì)節(jié)。但有些應(yīng)用程序需要對(duì)媒體類型進(jìn)行操作。媒體類型一般 12 可以有兩種表示: AM_MEDIA_TYPE 和 CMediaType。前者是一個(gè)結(jié)構(gòu),后者是從這個(gè)結(jié)構(gòu)繼承過來(lái)的類。 每個(gè) AM_MEDIA_TYPE 由三部分組成: Major type、 Subtype 和 Format type。這三個(gè)部分都使用 GUID(全局唯一標(biāo)識(shí)符)來(lái)唯一標(biāo)示。 Major type 主要 定性描述一種媒體類型,這種媒體類型可以是視頻、音頻、比特?cái)?shù)據(jù)流或 MIDI 數(shù)據(jù)等等; Subtype 進(jìn)一步細(xì)化媒體類型,如果是視頻的話可以進(jìn)一步指定是 RGB24,還是 RGB32,或是 UYVY 等等; Format type 則用一個(gè)結(jié)構(gòu)更進(jìn)一步細(xì)化媒體類型。 如果媒體類型的三個(gè)部分都指定了某個(gè)具體的 GUID 值,則稱這個(gè)媒體類型是完全指定的;如果媒體類型的三個(gè)部分中有任何一個(gè)值是 GUID_NULL,則稱這個(gè)媒體類型是不完全指定的。 GUID_NULL 具有通配符的作用。 (4) 過濾器圖表管理器( Filter Graph Manager) DirectShow 通過過濾器圖表管理器來(lái)控制過濾器圖表中的過濾器。過濾器圖表管理器是 COM 形式的,它的功能有:協(xié)調(diào)過濾器間的狀態(tài)轉(zhuǎn)變;建立參考時(shí)鐘;把事件( event)傳送給應(yīng)用程序;為應(yīng)用程序提供建立過濾器圖表的方法。 一些常用的過濾器圖表管理器接口如下: IGraphBuilder:為應(yīng)用程序提供創(chuàng)建過濾器圖表的方法。 IMediaControl:提供控制過濾器圖表中多媒體數(shù)據(jù)流的方法,包括運(yùn)行、暫停和停止。 IMediaEventEx:繼承自 IMediaEvent 接口,處理過濾器圖表的事件。 IVideoWindow:用于設(shè)置多媒體播放器窗口的屬性,應(yīng)用程序可以用它來(lái)設(shè)置窗口的所有者、位置和尺寸等屬性。 IBasicAudio:用于控制音頻流的音量和平衡。 IBasicVideo:用于設(shè)置視頻特性,如視頻顯示的目的區(qū)域和源區(qū)域。 IMediaSeeking:提供搜索數(shù)據(jù)流位置和設(shè)置播放速率的方法。 IMediaPosition:用于尋找數(shù)據(jù)流的位置。 IVideoFrameStep:用于步進(jìn)播放視頻流,可使 DirectShow 應(yīng)用程序,包括DVD 播放器一次只播放一幀視頻。 ( 5) 過濾器圖表中的數(shù)據(jù)流動(dòng) 當(dāng)用戶要?jiǎng)?chuàng)建自定義的過濾器時(shí),就需要了解媒體數(shù)據(jù)是如何在過濾器圖表中傳輸?shù)?。為了在過濾器圖表中傳送媒體數(shù)據(jù), DirectShow 過濾器需要支持一些協(xié)議,稱之為傳輸協(xié)議( transport)。相連的過濾器必須支持同樣的傳輸協(xié) 13 議,否則不能交換媒體數(shù)據(jù)。 大多數(shù)的 DirectShow 過濾器把媒體數(shù)據(jù)保存在主存儲(chǔ)器中,并通過引腳把數(shù)據(jù)提交給其它的過濾器,這種傳輸稱為局部存儲(chǔ)器傳輸( local memory transport)。雖然局部存儲(chǔ)器傳輸在 DirectShow 中最常用,但并不是所有的過濾器都使用它。例如,有些過濾器通過硬件傳送媒體數(shù)據(jù),引腳只是用來(lái)提交控制信息,如 IOverlay 接口 [1]。 具體設(shè)計(jì)過程 準(zhǔn)備工作 下載 DirectX ,安裝后閱讀 “ DirectX Documentation for C++” 中的DirectShow 部分。安裝 Visual Studio 熟悉使用 C++。 首先創(chuàng)建一個(gè) VC 工程, 打開 ,選擇文件 \新建,在工程框中選擇 MFC APPWIZARD[EXE],創(chuàng)建一個(gè)名叫 Audiobox 的工程,并選擇工作區(qū)域,點(diǎn)擊確定。 開發(fā)環(huán)境的配置: (1) 編 譯 基 類 源 代 碼 , 至 少 生 成 兩 個(gè) 靜 態(tài) 庫(kù) 文 件 ― ― 打 開 D:\DXSDK\Sample\C++\DirectShow\BaseClasses\, Debug 版本生成 strmbasd .lib, Release 版本生成 . (2) 配置 VC 的編譯環(huán)境: Include 目錄合 Lib 目錄。執(zhí)行 VC 的菜單命令Tool\Options,在隨后的彈出的對(duì)話框中單擊 Directories 標(biāo)簽。 在 Show directories for 下拉列表中選擇 Include files 然后配置如下: D:\DX90SDK\LIB D:\DX90SDK\INCLUDE D:\DX90SDK\SAMPLES\C++\DIRECTSHOW\BASECLASSES D:\DX90SDK\SAMPLES\C++\COMMON\INCLUDE D:\Program Files\Microsoft Visual Studio\VC98\INCLUDE D:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE D:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE 在 Show directories for 下拉列表中選擇 Library files,配置如下: D:\DX90SDK\LIB D:\DX90SDK\SAMPLES\C++\DIRECTSHOW\BASECLASSES\DEBUG D:\DX90SDK\SAMPLES\C++\DIRECTSHOW\BASECLASSES\RELEASE D:\DX90SDK\SAMPLES\C++\DIRECTSHOW\C
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1