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

正文內(nèi)容

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

2025-01-08 17:08 本頁面
 

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