版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 編號(hào) 畢 業(yè) 設(shè) 計(jì)(論文)基于directshow的多媒體播放器設(shè)計(jì)與實(shí)現(xiàn) 目 錄摘 要iabstractii1 緒論11.1 課題研究的背景與意義11.2 課題國內(nèi)外研究現(xiàn)狀11.3 可行性分析21.3.1 技術(shù)可行性分析21.3.2 經(jīng)濟(jì)可行性分析21.3.3 管理可行性分析21.4 論文的主要內(nèi)容及章節(jié)安排32 相關(guān)平臺(tái)及開發(fā)技術(shù)簡介32.1 microsoft visual c+ 2010概述32.1.1 micosoftvisual c+ 2010特點(diǎn)32.1.2 mfc概述42.2 ado訪問數(shù)據(jù)庫技術(shù)概述42.2.1 ole db和ado簡介42.2.2 ado主要對(duì)象介紹5
2、2.2.3 vc+中使用ado進(jìn)行數(shù)據(jù)庫開發(fā)的基本流程52.3 directshow核心技術(shù)52.3.1 directshow整體架構(gòu)52.3.2 com組件62.3.3 filter概述及連接62.3.4 濾波器鏈表管理器72.3.5 濾波器鏈表中數(shù)據(jù)傳輸72.3.6 事件通知機(jī)制82.4 skin+皮膚庫概述92.4.1 skin+簡介92.4.2 skin+特性93 系統(tǒng)需求分析93.1 系統(tǒng)業(yè)務(wù)需求93.2 系統(tǒng)數(shù)據(jù)需求103.3 功能需求103.4 非功能需求103.4.1 適應(yīng)性103.4.2 安全性103.4.3 可靠性113.4.4 可擴(kuò)充性113.4.5 可維護(hù)性113.4.
3、6 可移植性114 多媒體播放器的設(shè)計(jì)114.1 系統(tǒng)功能設(shè)計(jì)114.1.1 媒體文件添加(數(shù)據(jù)輸入)114.1.2 媒體文件存儲(chǔ)和顯示(數(shù)據(jù)存儲(chǔ)及顯示)124.1.3 媒體文件播放及控制(數(shù)據(jù)流傳輸、控制及輸出)124.2 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)124.3 系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)134.4 播放器濾波器鏈表結(jié)構(gòu)設(shè)計(jì)134.5 directshow智能連接134.5.1 智能連接概述134.5.2 智能連接的實(shí)現(xiàn)145 多媒體播放器的實(shí)現(xiàn)145.1 基于directshow播放器的實(shí)現(xiàn)145.1.1 初始化com145.1.2 創(chuàng)建濾波器鏈表管理器155.1.3 智能連接建立濾波器鏈表155.2 directs
4、how接口實(shí)現(xiàn)155.3 媒體文件信息存儲(chǔ)實(shí)現(xiàn)155.3.1 數(shù)據(jù)庫存儲(chǔ)165.3.2 鏈表存儲(chǔ)165.3.3 list列表顯示175.4 播放控制功能的實(shí)現(xiàn)185.4.1 定位185.4.2 播放195.4.3 暫停、停止195.4.4 全屏195.4.5 截圖205.4.6 靜音控制205.4.7 速率控制215.4.8 上一個(gè)和下一個(gè)215.4.9 查找225.4.10 刪除225.4.11 排行榜235.4.12 播放模式設(shè)置245.4.13 幫助245.4.14捕獲本地?cái)z像頭255.5 歌詞關(guān)聯(lián)實(shí)現(xiàn)265.5.1 歌詞構(gòu)造原理概述265.5.2 獲取歌詞方法及過程275.5.3 遇到
5、難點(diǎn)和問題275.6 用戶管理功能實(shí)現(xiàn)285.6.1 用戶注冊285.6.2 用戶登錄295.6.3 用戶使用系統(tǒng)整體流程295.7 播放jpg格式圖片實(shí)現(xiàn)305.7.1 jpg格式圖片縮放實(shí)現(xiàn)305.7.2 jpg格式圖片的顯示306 測試多媒體播放器實(shí)例及結(jié)論316.1 測試環(huán)境設(shè)計(jì)316.1.1 軟件環(huán)境316.1.2 硬件環(huán)境326.2 測試用例設(shè)計(jì)326.3 測試結(jié)果分析336.3.1 多媒體播放器的主題界面336.3.2 多媒體播放器測試結(jié)果記錄346.4 測試結(jié)論35結(jié)束語35致 謝35參考文獻(xiàn)36 摘 要隨著數(shù)字音視頻處理、數(shù)字信息存儲(chǔ)技術(shù)的不斷發(fā)展,基于數(shù)字編解碼的多媒體應(yīng)用
6、已經(jīng)越來越深入到人們的日常生活中,如何高效處理聲音、視頻數(shù)據(jù)以及支持媒體文件格式則成為主要的問題。directshow sdk是微軟公司提供的一套在windows平臺(tái)上進(jìn)行媒體處理的開發(fā)包,它支持高品質(zhì)的數(shù)字視頻、高保真的音頻及其它特殊效果,廣泛應(yīng)用于流媒體播放器的開發(fā)、多媒體流的高質(zhì)量捕捉和回放、視頻點(diǎn)播技術(shù)等。 本論文概括性的闡述了基于directshow開發(fā)多媒體播放器的具體過程。重點(diǎn)實(shí)現(xiàn)了播放、暫停、停止、前后切換 、聲音控制、進(jìn)度控制、抓取視頻幀、排行榜、刪除、查找、播放模式控制、全屏等功能。其中使用的技術(shù)包括visual c+以及mfc程序設(shè)計(jì)方法、利用directshow實(shí)現(xiàn)播放
7、器核心技術(shù)、ado數(shù)據(jù)庫訪問技術(shù)、skin+皮膚庫技術(shù)。通過對(duì)系統(tǒng)的需求分析、設(shè)計(jì)、實(shí)現(xiàn),完成了媒體播放器系統(tǒng),各項(xiàng)功能正常使用、并給出了實(shí)現(xiàn)關(guān)鍵代碼。論文中第二章是對(duì)相關(guān)技術(shù)的介紹,第三、四章是對(duì)系統(tǒng)需求分析和設(shè)計(jì),第五章是本論文的重點(diǎn),詳細(xì)介紹播放器實(shí)現(xiàn)細(xì)節(jié),第六章是對(duì)系統(tǒng)的測試和總結(jié)。directshow是基于com組件,它是二進(jìn)制級(jí)別的(不受限于編程語言和操作系統(tǒng)),具有很好的兼容性和移植性。由于本人是directshow的初學(xué)者,播放器存在一些瑕疵,directshow發(fā)展前景廣闊,以后有機(jī)會(huì)深入研究它,在現(xiàn)有的基礎(chǔ)上把播放器做得更加完美。關(guān)鍵字:visual c+ mfc dire
8、ctshow 播放器abstractwith digital audio and video processing, digital information storage technology continues to evolve, based on the digital encoding and decoding of multimedia applications has become increasingly penetrated into peoples daily lives, how to efficiently handle voice, video, data, and
9、support for media file format has become a major problem.directshow sdk is a set of microsoft corporation on the windows platform for media processing development kit, which supports high-quality digital video, high-fidelity audio, and other special effects, widely used in the development of streami
10、ng media player, multimedia streaming high-quality capture and playback, video-on-demand technology.this thesis describes the broad development of multimedia player based on directshow specific process. focus to achieve the play, pause, stop, forward or backward, sound control, schedule control, gra
11、b video frames, leaderboards, delete, search, playback mode control, full screen and other functions.which use technologies include visual c+ and mfc program design methods, the use of directshow player core technology, ado database access technology, skin+ library technology skin.through the system
12、 requirements analysis, design, implementation, completed a media player system, various functions normal use, and gives the realization key code.the second chapter is a paper related to technology introduction, two chapters is the system requirements analysis and design, the fifth chapter is the fo
13、cus of this paper, detailing the implementation details of the player, the sixth chapter is the system testing and summary.directshow is based on the com component, it is a binary level (not limited to programming languages and operating systems), has good compatibility and portability. since i was
14、a beginner directshow, the player has some flaws, directshow development prospects, have the opportunity to study it in depth, on the basis of the existing players more perfect.key words:visual c+ mfc directshow player1 緒論1.1 課題研究的背景與意義當(dāng)今信息技術(shù)越來越發(fā)達(dá),社會(huì)越來越信息化、智能化,多媒體在未來社會(huì)應(yīng)用越來越廣泛。microsoft的windows操作系統(tǒng)作為
15、全球最主流、最常用的操作系統(tǒng),掌握在它上面的多媒體開發(fā)技術(shù)顯得越來越需要,相對(duì)于其他多媒體開發(fā)技術(shù),掌握它本身提供的directx多媒體開發(fā)包顯得更為適合。directshow是微軟提供的多媒體開發(fā)包directx中的一部分,它是建立在directdraw和directsound基礎(chǔ)之上。 microsoft給directshow程序員提供了一套開發(fā)多媒體標(biāo)準(zhǔn)的、統(tǒng)一的、高效的api接口,這些接口使得多媒體數(shù)據(jù)的回放變得簡單,剝離了應(yīng)用程序和硬件底層的差異性。而directshow是基于com組件的開發(fā)包,com是基于二進(jìn)制代碼級(jí)的協(xié)議(與編程語言無關(guān)的協(xié)議),對(duì)使用directshow開發(fā)的
16、軟件以后的移植和兼容問題提供了良好的解決方案。 directshow使用智能連接開發(fā)多媒體應(yīng)用程序,大大簡化了開發(fā)人員工作量,同時(shí)開發(fā)人員亦可開發(fā)自定義的濾波器。使得基于directshow的應(yīng)用程序可以充分滿足不同用戶的需求。在未來幾年中,directshow技術(shù)的發(fā)展前景將是非常廣闊的。 1.2 課題國內(nèi)外研究現(xiàn)狀directshow流媒體視頻技術(shù)現(xiàn)在廣泛的應(yīng)用在國內(nèi)外,涉及視頻處理、視頻捕捉、網(wǎng)絡(luò)視頻監(jiān)控、網(wǎng)絡(luò)視頻傳輸和電子商務(wù)等各個(gè)方面。 國內(nèi)的視頻播放器多種多樣,有暴風(fēng)影音、qq影音、迅雷看看等多種播放器,它們各自有各自的特點(diǎn),目前暴風(fēng)影音占據(jù)著市場的最大份額,它們各自采用的實(shí)現(xiàn)技術(shù)
17、有所異同。隨著internet的商業(yè)化,一些商家紛紛行動(dòng)規(guī)劃開發(fā)適用于本企業(yè)的播放器。根據(jù)iresearch艾瑞資訊最新退出的網(wǎng)民連續(xù)用戶行為研究系統(tǒng)iusertracker的最新數(shù)據(jù)顯示,目前,比較流行的多媒體播放器有:microsoft windows media player、realone、豪杰超級(jí)解霸以及暴風(fēng)影音等,暴風(fēng)影音和windows media player是使用最廣泛的影視播放軟件,而這量大播放器的核心編碼已成控件,因此全球網(wǎng)絡(luò)化的公司都在利用這兩大核心控件開發(fā)適合自己使用的播放器;網(wǎng)絡(luò)上也有不少的研究者熱衷于播放器的研究利用控件或mct接口開發(fā)自己的播放器,并取得了很大的
18、進(jìn)步,推動(dòng)了播放器的發(fā)展。筆者所開發(fā)的多媒體播放器是使用的directshow技術(shù),使用k-lite_codec_pack進(jìn)行解碼,能播放任意格式的媒體文件,和其他播放器不同的是,我加入了排行榜、播放模式控制、捕獲設(shè)備視頻等功能,界面清晰,使用簡單。 1.3 可行性分析1.3.1 技術(shù)可行性分析本人熟悉計(jì)算機(jī)相關(guān)基本知識(shí)、熟悉程序設(shè)計(jì)方法、熟練掌握vc+編程、mfc開發(fā)方法和技巧,具備一定的編程經(jīng)驗(yàn)和獨(dú)立編程能力?;赿irectshow視頻播放器實(shí)現(xiàn)原理可以通過查閱相關(guān)資料、請教老師和他人進(jìn)行學(xué)習(xí)掌握,所以在技術(shù)上具有可行性。1.3.2 經(jīng)濟(jì)可行性分析該軟件的開發(fā)、測試、運(yùn)行使用等步驟皆在自
19、己pc上完成,無需提供其他設(shè)備。 開發(fā)過程中涉及到的知識(shí)、軟件開發(fā)成本、交付后的運(yùn)營維護(hù)皆由本人控制、完成,所用的軟件和硬件配置環(huán)境均為現(xiàn)成,所以經(jīng)濟(jì)上具有可行性。1.3.3 管理可行性分析本軟件運(yùn)用到實(shí)際生活、工作中,將會(huì)使音頻/視頻的播放和處理變得便利、經(jīng)濟(jì)及娛樂,而且還可以根據(jù)朋友、他人的用戶體驗(yàn)不斷完善此軟件,可以感受到成就感,所以管理上具有可行性。綜上所述,本課題的可行性是有保障的。1.4 論文的主要內(nèi)容及章節(jié)安排論文的主要內(nèi)容:詳細(xì)的闡述利用directshow實(shí)現(xiàn)多媒體播放器的原理、實(shí)現(xiàn)過程以及實(shí)現(xiàn)之后的演示效果,當(dāng)中包含大量的visual c+程序設(shè)計(jì)方法和數(shù)據(jù)庫操作。論文內(nèi)容
20、整體安排如下:第一章:介紹此課題的意義、相關(guān)背景和現(xiàn)狀。第二章:介紹完成此軟件所用到的平臺(tái)和技術(shù)。第三章:闡述此軟件的需求分析,包括業(yè)務(wù)分析、數(shù)據(jù)分析、功能需求和非功能需求。第四章:闡述此軟件的整體結(jié)構(gòu)和各個(gè)模塊設(shè)計(jì)。第五章:詳細(xì)闡述此軟件的具體實(shí)現(xiàn)過程,包括各功能的核心代碼。 最后是總結(jié)、致謝。 2 相關(guān)平臺(tái)及開發(fā)技術(shù)簡介2.1 microsoft visual c+ 2010概述microsoft visual c+,(簡稱visual c+、msvc、vc+或vc)微軟公司的c+開發(fā)工具,具有集成開發(fā)環(huán)境,可提供編輯c語言,c+以及c+/cli等編程語言。vc+整合了便利的除錯(cuò)工具,特別
21、是整合了微軟視窗程式設(shè)計(jì)(windows api)、三維動(dòng)畫directx api,microsoft .net框架。2.1.1 micosoftvisual c+ 2010特點(diǎn)microsoft visual c+是微軟公司推出的開發(fā)win32環(huán)境程序、面向?qū)ο蟮目梢暬删幊滔到y(tǒng)。它的主要優(yōu)點(diǎn)如下:(1)程序框架自動(dòng)生成(2)靈活方便的類管理(3)代碼編寫和界面設(shè)計(jì)集成交互操作(4)可開發(fā)多種程序(5)支持?jǐn)?shù)據(jù)庫接口、ole2、winsock網(wǎng)絡(luò)和3d控制界面2.1.2 mfc概述mfc(microsoft foundation classes)是一個(gè)微軟公司提供的類庫(class lib
22、raries),以c+類的形式封裝了windows的api,并且包含一個(gè)應(yīng)用程序框架,以減少應(yīng)用程序開發(fā)人員的工作量。mfc中的關(guān)鍵技術(shù):(1) mfc程序的初始化過程建立一個(gè)mfc窗口:從cwinapp派生一個(gè)應(yīng)用程序類,然后建立應(yīng)用程序?qū)ο螅╰heapp)。(2) 動(dòng)態(tài)創(chuàng)建運(yùn)行時(shí)創(chuàng)建指定類的對(duì)象。如框架窗口對(duì)象、視對(duì)象等,比如文檔對(duì)象需要由文檔模版類對(duì)象來動(dòng)態(tài)的創(chuàng)建。 (3) 串行化程序中盡管有著各種各樣的數(shù)據(jù),串行化機(jī)制會(huì)像流水一樣按順序存儲(chǔ)到單一的文件中,而又能按順序的取出,變成各種不同的對(duì)象數(shù)據(jù)。 (4) 消息映射和傳遞mfc把sdk編程中對(duì)消息的產(chǎn)生、傳遞、到過程函數(shù)中響應(yīng)的過程封
23、裝起來,形成消息映射宏、消息映射表和消息響應(yīng)函數(shù)體系,更加直觀和便于操作。 2.2 ado訪問數(shù)據(jù)庫技術(shù)概述2.2.1 ole db和ado簡介ole db(object link and embedding database)是visual c+開發(fā)數(shù)據(jù)庫應(yīng)用程序時(shí)提供的新技術(shù),它對(duì)所有的文件系統(tǒng)包括關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫都提供了統(tǒng)一的接口。ado(activex data object)技術(shù)基于ole db,它繼承了ole db技術(shù)的優(yōu)點(diǎn),對(duì)其接口作了封裝,使程序開發(fā)得到簡化。 2.2.2 ado主要對(duì)象介紹(1) 連接對(duì)象(connection object)代表一個(gè)和數(shù)據(jù)源的連接
24、,以后的數(shù)據(jù)庫操作都是建立在這個(gè)連接上的。 (2) 命令對(duì)象(command object)用來處理數(shù)據(jù)庫的一些操作,在某些方面具有和連接對(duì)象相同的功能(3) 記錄集對(duì)象(recordset object)代表了一個(gè)記錄集,用來訪問記錄集。在使用這3個(gè)對(duì)象的時(shí)候,需要定義與之對(duì)應(yīng)的3個(gè)智能指針,分別為:_connectionptr、_commandptr和_recordsetptr。2.2.3 vc+中使用ado進(jìn)行數(shù)據(jù)庫開發(fā)的基本流程(1)引入ado動(dòng)態(tài)鏈接庫。(2)初始化ole/com庫環(huán)境。(3)用connection對(duì)象連接數(shù)據(jù)庫。(4)利用建立好的連接,打開記錄,通過connecti
25、on、command對(duì)象執(zhí)行sql語句或利用recordset對(duì)象取得結(jié)果記錄集進(jìn)行查詢、處理操作。 (5)使用完畢后關(guān)閉連接、釋放對(duì)象。2.3 directshow核心技術(shù)2.3.1 directshow整體架構(gòu)directshow sdk為流媒體的開發(fā)帶來了極大的便利。提供了從底層的視頻采集到頂層的流媒體交互應(yīng)用的解決方案,并且把應(yīng)用程序從數(shù)據(jù)傳輸、硬件差別和同步機(jī)制等復(fù)雜問題中分離出來。其整體架構(gòu)如下圖所示: 圖2.1 driectshow系統(tǒng)架構(gòu)2.3.2 com組件directshow是基于com的流媒體處理的開發(fā)包。com是一種跨應(yīng)用和語言共享的二進(jìn)制代碼的方法,它是個(gè)開放的組件標(biāo)
26、準(zhǔn),具有很強(qiáng)的擴(kuò)充和擴(kuò)展能力。其優(yōu)點(diǎn)如下:(1) 可以將系統(tǒng)中的組件用新的替換掉,以便隨時(shí)進(jìn)行系統(tǒng)的升級(jí)和定制。(2) 可以方便的將應(yīng)用系統(tǒng)擴(kuò)展到網(wǎng)絡(luò)環(huán)境中。 (3) 可以在多個(gè)應(yīng)用系統(tǒng)中重復(fù)利用同一個(gè)組件。 (4) com組件與語言和平臺(tái)無關(guān)。 2.3.3 filter概述及連接濾波器filter是一個(gè)com組件,是directshow中最基本的元件,directshow提供了標(biāo)準(zhǔn)濾波器,亦可自定義。濾波器主要分為以下幾種類型:(1)源濾波器(2)變換濾波器(3)提交濾波器。濾波器之間通過輸出引腳(outpin)和輸入(inputpin)引腳之間連接來進(jìn)行數(shù)據(jù)傳輸,所有的濾波器連接起來形成濾
27、波器鏈表即filter graph manager。 數(shù)據(jù)流的傳輸過程如下圖所示:圖2.2 數(shù)據(jù)傳輸流動(dòng)過程2.3.4 濾波器鏈表管理器在directshow中,使用濾波器鏈表管理器來控制濾波器鏈表中的所有濾波器,它也是com形式的。它通過使用迭代的方法將各個(gè)濾波器連接起來建立濾波器鏈表。 最重要的是它提供了一系列的接口給應(yīng)用程序,比如imediacontrol(控制數(shù)據(jù)流)、imediaeventex(處理濾波器鏈表事件)、ibasicaudio(控制音頻流的音量和平衡)等,使得應(yīng)用程序方便、實(shí)時(shí)的控制、改變?yōu)V波器鏈表中的狀態(tài),以達(dá)到用戶想要的要求和效果。 2.3.5 濾波器鏈表中數(shù)據(jù)傳輸濾
28、波器之間傳遞的數(shù)據(jù)內(nèi)容不是直接指向內(nèi)存塊的指針,而是一個(gè)管理內(nèi)存的com對(duì)象,稱之為媒介樣品(mediasample),它由一個(gè)叫做(分配器)allocator的com對(duì)象來創(chuàng)建和管理。 濾波器、媒介樣品和分配器三者之間的關(guān)系如下圖所示: 圖2.3 分配器、媒介樣品和濾波器之間的關(guān)系directshow為數(shù)據(jù)在濾波器鏈表中傳輸定義了兩種機(jī)制:(1)推模式(push model):上一級(jí)濾波器將生成的數(shù)據(jù)提交給下一級(jí)濾波器,下一級(jí)被動(dòng)的接收數(shù)據(jù),依次進(jìn)行傳遞。 (2)拉模式(pull model):下一級(jí)濾波器向上一級(jí)濾波器請求數(shù)據(jù),上一級(jí)濾波器才傳送數(shù)據(jù)給它,依次進(jìn)行傳遞。 2.3.6 事件通
29、知機(jī)制directshow中的事件通知機(jī)制和windows中的消息機(jī)制非常類似,各種濾波器,濾波器鏈表管理器都是通過事件通知的方式和應(yīng)用程序進(jìn)行交互、通信的。 比如多媒體文件的播放、暫停、停止等狀態(tài)變化都是通過此方式通知應(yīng)用程序,應(yīng)用程序自定義響應(yīng)函數(shù)來處理各種事件。在本軟件中,響應(yīng)最多的是多媒體文件播放結(jié)束事件通知。 具體實(shí)現(xiàn)過程:(1) 自定義濾波器鏈表通知給指定窗口消息 #define wm_graphnotify (wm_user + 20)(2)設(shè)置消息通知到指定窗口 m_pfiltergraph-setnotifywindow(this-getsafehwnd(); (3)自定義響
30、應(yīng)函數(shù)中解析事件(回調(diào)函數(shù)) pevent-getevent(&eventcode,&eventparam1,&eventparam2,infinite)(4)響應(yīng)操作2.4 skin+皮膚庫概述2.4.1 skin+簡介skin+,采用獨(dú)特的軟件界面開發(fā)技術(shù),讓原本復(fù)雜繁瑣的界面編程變得輕松自如,只需要在您的程序中添加一句代碼,skin+就能讓您的界面煥然一新,并擁有多種主題風(fēng)格和色調(diào)的動(dòng)態(tài)切換功能。2.4.2 skin+特性(1)支持windows系統(tǒng)對(duì)話框與控件。(2)支持廣泛的開發(fā)工具。(3)皮膚資源海量。2.4.3 skin+換膚流程(1) 應(yīng)用程序啟動(dòng),加載skin+庫。(2) 執(zhí)
31、行skin+加載皮膚文件api函數(shù)。(3) 應(yīng)用程序退出,卸載skin+庫。3 系統(tǒng)需求分析3.1 系統(tǒng)業(yè)務(wù)需求此軟件是基于directshow的多媒體播放器,主要的業(yè)務(wù)需求是正確播放不同格式的音頻和視頻文件。3.2 系統(tǒng)數(shù)據(jù)需求此軟件的數(shù)據(jù)需需求主要為播放器接收到的數(shù)據(jù)源,此處包括mp3、wma、flac等格式的音頻文件,mp4、mkv、rmvb、avi格式的視頻文件。它們以不同編碼方式傳入播放器,在播放器為它們構(gòu)建的濾波器鏈表中分離、轉(zhuǎn)換、傳輸、解碼,最后在音頻/視頻設(shè)備上播放出來即為數(shù)據(jù)輸出。3.3 功能需求系統(tǒng)的功能需求如下:(1) 控制用戶權(quán)限(有帳號(hào)的用戶順利登錄,沒有帳號(hào)的用戶無
32、權(quán)限進(jìn)入系統(tǒng))。(2) 順利打開各種格式媒體文件。(3) 在安裝解碼器的情況下,能順利播放各種格式媒體文件。(4) 播放畫面流暢、穩(wěn)定,音質(zhì)清晰。(5) 用戶順利使用各種控制功能,如暫停、停止、前后切換、音量控制、截圖、排行榜等。(6) 播放器控制界面友好、交互性良好、易于操作。(7) 用戶使用完播放器順利退出。 3.4 非功能需求3.4.1 適應(yīng)性此軟件適合在任何安裝了windows操作系統(tǒng)的主機(jī)上使用。此軟件設(shè)計(jì)界面、操作較為簡單,適應(yīng)人群廣泛,大人小孩皆能使用,適應(yīng)性較好。 3.4.2 安全性用戶只有注冊符合要求的帳號(hào)后才能進(jìn)入系統(tǒng),安全性得到保障。3.4.3 可靠性此軟件整體結(jié)構(gòu)不復(fù)雜
33、,實(shí)現(xiàn)邏輯清晰,性能穩(wěn)定,可靠性較好。 3.4.4 可擴(kuò)充性此軟件為單機(jī)軟件,能添加和擴(kuò)充的功能很多(比如網(wǎng)絡(luò)、界面美化交互等),系統(tǒng)并未像蘋果一樣封閉,可擴(kuò)充性較好。3.4.5 可維護(hù)性此軟件的原理、流程、細(xì)節(jié)皆有本人掌握、完成和修改,如出現(xiàn)問題、異常本人即可完成,可維護(hù)性較好。3.4.6 可移植性此軟件使用visual c+中mfc編寫,在安裝了windows系統(tǒng)的主機(jī)間移植只要包含可執(zhí)行文件和相關(guān)庫即可,在不同操作系統(tǒng)間移植性較差。 4 多媒體播放器的設(shè)計(jì)4.1 系統(tǒng)功能設(shè)計(jì)此軟件的系統(tǒng)功能設(shè)計(jì)分為三部分,具體如下所示。 4.1.1 媒體文件添加(數(shù)據(jù)輸入) 系統(tǒng)的輸入數(shù)據(jù)來源于用戶打開
34、讀取媒體文件,包含打開單個(gè)媒體文件和文件夾兩個(gè)選擇。 4.1.2 媒體文件存儲(chǔ)和顯示(數(shù)據(jù)存儲(chǔ)及顯示)系統(tǒng)得到輸入數(shù)據(jù)后,對(duì)它們進(jìn)行存儲(chǔ)和顯示,為后續(xù)播放、控制操作奠定基礎(chǔ)。 4.1.3 媒體文件播放及控制(數(shù)據(jù)流傳輸、控制及輸出)在已知媒體文件存儲(chǔ)信息的基礎(chǔ)上,執(zhí)行源濾波器-分解濾波器-音/視頻解碼濾波器-音/視頻播放濾波器-數(shù)據(jù)輸出(音視頻設(shè)備)流程以及對(duì)整個(gè)過程的控制。 4.2 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)此軟件的整體結(jié)構(gòu)設(shè)計(jì)如下圖所示: 圖4.1 系統(tǒng)整體結(jié)構(gòu)4.3 系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)此軟件中在存儲(chǔ)媒體文件信息和用戶帳號(hào)信息用到數(shù)據(jù)庫,此處使用名為mediaplayerdatabase的數(shù)據(jù)庫,其中包含兩
35、張存儲(chǔ)信息使用的表,分別名為:fileinformation和userinformation,具體情況如下:圖4.2 系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)4.4 播放器濾波器鏈表結(jié)構(gòu)設(shè)計(jì)圖4.3 播放器的濾波器鏈表結(jié)構(gòu)4.5 directshow智能連接4.5.1 智能連接概述智能連接是濾波器鏈表管理器用以構(gòu)建濾波器鏈表的機(jī)制,它包含了一系列選擇濾波器和將其添加到鏈表中去的算法。本軟件即采用此方法構(gòu)建供數(shù)據(jù)流傳輸?shù)臑V波器鏈表。 4.5.2 智能連接的實(shí)現(xiàn)智能連接的基本方法為試連接,它首先用內(nèi)存中的filter試連接,若不成功,則對(duì)當(dāng)前的filter graph中還沒有完全連接的filter進(jìn)行試連接。如果不行,再從
36、系統(tǒng)filter里選取匹配的、最合適的filter進(jìn)行試連,直到連接成功。若找不到合適的filter,則失敗返回。所以只要filter graph中有不同類型的、可接受同一媒體類型的filter,則采用智能連接,每個(gè)filter都可連在正確的位置。為什么在智能連接中不同類型的filter會(huì)連在各自的位置上呢?因?yàn)檫@些filter能接受的媒體類型不同。從源filter出來的數(shù)據(jù)流只帶有編碼格式信息,其他信息都是未知的,所以音視頻解碼filter和處理filter都不能用,只能使用分離filter匹配這種媒體類型,所以只會(huì)試連接分離filter。而從分離filter出來的數(shù)據(jù)分為音、視頻兩路,每路
37、的數(shù)據(jù)流都加上了音頻或者視頻的信息,但沒有標(biāo)明這是何種音頻或視頻的信息,所以可以被音視頻解碼器filter接受,但不能被音視頻處理filter接受。而從音視頻解碼filter出來的數(shù)據(jù)流帶上了具體格式的音視頻媒體類型的信息,所以能被音視頻處理filter接受,最后發(fā)送到提交過濾器。5 多媒體播放器的實(shí)現(xiàn)5.1 基于directshow播放器的實(shí)現(xiàn)5.1.1 初始化comdirectshow是基于com組件的開發(fā)包,所以此在應(yīng)用程序的最開始應(yīng)該初始化com庫環(huán)境。 實(shí)現(xiàn)為:在應(yīng)用程序?qū)ο髆ediaplayerapp的initinstance函數(shù)中調(diào)用afxoleinit()或者coinitial
38、ize(null)函數(shù)。 5.1.2 創(chuàng)建濾波器鏈表管理器濾波器鏈表是整個(gè)多媒體播放器的入口點(diǎn),每次播放一個(gè)新的媒體文件前應(yīng)該先釋放前一個(gè)濾波器鏈表,再針對(duì)當(dāng)前媒體文件建立濾波器鏈表管理器,其實(shí)現(xiàn)為:cocreateinstance(clsid_filtergraph,null,clsctx_inproc_server,iid_igraphbuilder,(void *)&m_pgraph)5.1.3 智能連接建立濾波器鏈表創(chuàng)建了和指定媒體文件對(duì)應(yīng)的濾波器鏈表管理器之后,就應(yīng)該利用智能鏈接方法為該媒體文件創(chuàng)建完整的濾波器鏈表,其具體創(chuàng)建過程參照智能連接設(shè)計(jì)一節(jié)。其實(shí)現(xiàn)為:m_pgraph-re
39、nderfile(szfilepath,null);其中szfilepath為媒體文件的絕對(duì)路徑,且為寬型字符。為了使本播放器能成功為各種格式的音視頻建立完整的濾波器鏈表,應(yīng)該為電腦安裝音/視頻解碼器。 本軟件運(yùn)行環(huán)境安裝的是k-lite codec pack解碼器。5.2 directshow接口實(shí)現(xiàn)在為指定媒體文件創(chuàng)建好濾波器鏈表管理器,應(yīng)該在其中查詢、初始化所有必須的directshow接口,以便之后的控制和運(yùn)用。 各接口的初始化方式類似,例如初始化媒體控制接口實(shí)現(xiàn):m_pgraph-queryinterface(iid_imediacontrol,(void *)&m_pmediaco
40、ntrol);需要注意的是,必須是所有的接口都查詢、初始化成功才能返回初始化成功、繼續(xù)進(jìn)行后面的操作。具體實(shí)現(xiàn)方法為把所有接口查詢結(jié)果進(jìn)行或運(yùn)算。 5.3 媒體文件信息存儲(chǔ)實(shí)現(xiàn)運(yùn)用基于directshow實(shí)現(xiàn)的多媒體播放器最重要的是提供媒體文件的絕對(duì)路徑,在此軟件中,一共采用三種方式存儲(chǔ)媒體文件的絕對(duì)路徑,具體情況如下。:5.3.1 數(shù)據(jù)庫存儲(chǔ)在本軟件中,建立了一個(gè)名為mediaplayerdatabase的數(shù)據(jù)庫,該數(shù)據(jù)庫中包含兩張表,分別為fileinformation和userinformation,各自用來存儲(chǔ)媒體文件信息(路徑)和用戶注冊信息。 當(dāng)用戶點(diǎn)擊打開文件打開一個(gè)媒體文件或者
41、點(diǎn)擊打開文件夾打開多個(gè)媒體文件時(shí),應(yīng)用程序會(huì)自動(dòng)的把媒體文件的絕對(duì)路徑和文件名添加到表fileinformation中,其實(shí)現(xiàn)為:strsql = _t(insert into fileinformation(filepath,filename,playcount) + values; m_pconnection-execute(_bstr_t(strsql),&recordsaffected,adcmdtext);當(dāng)用戶退出系統(tǒng)時(shí),此軟件會(huì)自動(dòng)刪除表fileinformation中所有數(shù)據(jù)(這個(gè)依具體情況和需求而定)。實(shí)現(xiàn)后示例效果如下: 圖5.1 媒體文件信息數(shù)據(jù)庫存儲(chǔ)5.3.2 鏈表存儲(chǔ)
42、跟上一小節(jié)中數(shù)據(jù)庫存儲(chǔ)的由來一樣,此處是定義的一個(gè)結(jié)構(gòu)體來存儲(chǔ)媒體文件信息,結(jié)構(gòu)體為:typedef struct _filenode cstring m_sourcefilepath;cstring m_sourcefilename;_filenode *m_nextnode;filenode;每添加一個(gè)新媒體文件即新建一個(gè)filenode節(jié)點(diǎn),采用尾插法實(shí)現(xiàn),其實(shí)現(xiàn)關(guān)鍵代碼:m_filelistq = new filenode; m_filelistq-m_nextnode = null;m_filelistp-m_nextnode = m_filelistq;m_filelistp =
43、m_filelistp-m_nextnode;其示意圖如下:圖5.2 鏈表尾插法實(shí)現(xiàn)另外,因?yàn)樵谕瓿纱塑浖^程中,先使用鏈表存儲(chǔ)后使用數(shù)據(jù)庫操作。在此有點(diǎn)重復(fù)和冗余,但鏈表作為程序設(shè)計(jì)中一種非常重要的數(shù)據(jù)結(jié)構(gòu)和思想,它的應(yīng)用顯得必要,可根據(jù)特定需要進(jìn)行修改。 5.3.3 list列表顯示前面的數(shù)據(jù)庫和鏈表對(duì)媒體文件信息存儲(chǔ)都是后臺(tái)的,看不見的,在播放器界面中有一個(gè)能看見媒體文件的列表,且可供用戶選擇、操作。 此軟件采用mfc對(duì)話框控件clistbox來顯示媒體文件列表。 響應(yīng)用戶的雙擊播放、前后移動(dòng)、增添,刪除和查找等操作。 其實(shí)現(xiàn)如下:m_listbox.insertstring(m_lis
44、tindex+,m_mediafilename.getbuffer();添加后的媒體文件列表顯示如下圖所示: 圖5.3 媒體文件顯示列表及雙擊播放操作5.4 播放控制功能的實(shí)現(xiàn)將媒體文件添加到列表中以后,就可以對(duì)其執(zhí)行播放操作,此軟件設(shè)定為雙擊文件列表選項(xiàng)。雙擊的同時(shí),控制面板中與之對(duì)應(yīng)的圖標(biāo)會(huì)發(fā)生變化,給用戶的體驗(yàn)更加直觀,播放進(jìn)度條和聲音控制條也會(huì)動(dòng)起來,給用戶帶來強(qiáng)烈的視覺感觀。然后用戶可以根據(jù)需要在控制面板或者菜單選項(xiàng)中選擇自己想要的功能和效果,具體實(shí)現(xiàn)操作如下所示。 5.4.1 定位有時(shí)用戶在播放音視頻時(shí),想大概瀏覽一下整體內(nèi)容或者跳開一些自己不太感興趣的片段。定位操作就滿足了用戶的
45、這一需求,用戶可以直接拖動(dòng)控制面板中的進(jìn)度條,因?yàn)樵撨M(jìn)度條是跟媒體文件的時(shí)間長度相綁定的,故可以滿足用戶的需求。其實(shí)現(xiàn)如下:m_pfiltergraph-getduration(&duration);double pos = duration * m_sliderplayer.getpos() / 100.0;m_pfiltergraph-setcurrentposition(pos);先獲取媒體文件時(shí)間長度和進(jìn)度條的位置,然后按照當(dāng)前進(jìn)度條占整體進(jìn)度條的比例來確定播放媒體文件中的時(shí)間點(diǎn)。 5.4.2 播放當(dāng)為指定媒體文件創(chuàng)建濾波器鏈表管理器、將其渲染和綁定顯示窗口完成后,此時(shí)會(huì)使媒體文件顯示
46、第一幀圖像(視頻)或者暫停(音頻)。接下來會(huì)執(zhí)行播放操作,調(diào)用已經(jīng)初始化的媒體控制接口中的運(yùn)行函數(shù),其實(shí)現(xiàn)如下:m_pmediacontrol-run();與此同時(shí),相關(guān)圖標(biāo)和進(jìn)度條狀態(tài)與之對(duì)應(yīng)發(fā)生變化。此處設(shè)置一個(gè)定時(shí)器,每隔100毫秒,進(jìn)度條移動(dòng)一次,并顯示當(dāng)前時(shí)間,這樣用戶視覺上進(jìn)度條是平滑的移動(dòng),效果更好。 其實(shí)現(xiàn)如下:m_playertimer = settimer(slider_timer,100,null);void cmediaplayerdlg:ontimer(uint_ptr nidevent);5.4.3 暫停、停止當(dāng)用戶在播放媒體文件過程中,想暫?;蛘咄V共シ牛瑒t可以點(diǎn)
47、擊相應(yīng)菜單選項(xiàng)、圖標(biāo)或者按鈕即可。原理跟播放操作類似,即調(diào)用濾波器鏈表管理器控制接口中的暫停/停止函數(shù),其實(shí)現(xiàn)如下:m_pmediacontrol-pause();m_pmediacontrol-stop();其中,點(diǎn)擊暫停后,點(diǎn)擊一下播放按鈕即可恢復(fù)播放狀態(tài),點(diǎn)擊停止后則需點(diǎn)擊播放按鈕兩下。5.4.4 全屏用戶在播放視頻文件時(shí),經(jīng)常需要將播放畫面放大以至全屏,視覺效果和體驗(yàn)更好。在此軟件中也做了該操作,原理為調(diào)用濾波器鏈表管理器的視頻窗口接口的全屏函數(shù),其實(shí)現(xiàn)如下:m_pvideowindow-put_fullscreenmode(inenabled?oatrue:oafalse)其中參數(shù)i
48、nenabled為確定全屏或者退出全屏模式,針對(duì)此操作,捕獲了esc按鈕消息亦可響應(yīng)。此軟件在實(shí)際操作中,能夠正常使視頻畫面全屏顯示,但不能恢復(fù),退出全屏模式時(shí)出現(xiàn)異常,此bug有待研究和解決。 5.4.5 截圖用戶在播放視頻文件中,有時(shí)根據(jù)實(shí)際需要想要把某幀畫面截取下來存放到指定目錄以供使用。此軟件亦實(shí)現(xiàn)了此功能,在此默認(rèn)的是把截取的圖片放到跟應(yīng)用程序的可執(zhí)行文件的同一目錄下且保存為bmp格式的圖片。原理是調(diào)用濾波器鏈表管理器的基本視頻接口中的抓取當(dāng)前幀函數(shù),其實(shí)現(xiàn)如下:m_pbasicvideo-getcurrntimage(&bitemapsize,(long*)buffer);參數(shù)bi
49、temapsize為整個(gè)位圖的尺寸,buffer為用戶存放該位圖的緩沖區(qū)。 先獲取buffer緩沖區(qū)的文件頭,然后在輸出路徑建立可讀寫的二進(jìn)制文件,然后把已知文件頭寫入到該二進(jìn)制文件,最后把緩沖區(qū)的內(nèi)容寫入該文件,抓圖、存盤工作完成。 其實(shí)現(xiàn)如下:lpbitmapinfoheader lpbi; lpbi = (lpbitmapinfoheader)buffer;cfile bitmapfile(lpctstr(outfile),cfile:modereadwrite | cfile:modecreate | cfile:typebinary);bitmapfile.write(&hdr,si
50、zeof(bitmapfileheader);bitmapfile.write(buffer,bitemapsize);其效果如下圖所示:圖5.4 抓圖5.4.6 靜音控制有時(shí)用戶在播放音頻/視頻中需要關(guān)掉聲音,除了可以調(diào)節(jié)音量大小外,還可以使用靜音操作更為快捷。 原理為調(diào)用濾波器鏈表管理器的基本聲音接口的設(shè)置聲音函數(shù),其實(shí)現(xiàn)如下:m_pbasicaudio-put_volume(-10000);恢復(fù)聲音:long lvolume = (m_nvolume - 100) * 100; m_pbasicaudio-put_volume(lvolume); 在directshow中,聲音的最大值表
51、示為0,最小值表示為-10000。5.4.7 速率控制用戶在播放音視頻過程中,有時(shí)需要快進(jìn)或者慢放,這里跟拖動(dòng)進(jìn)度條實(shí)現(xiàn)快進(jìn)不同,這里是使整個(gè)播放過程速度均勻保持快進(jìn)或者慢放。 此軟件中設(shè)置了三種播放速率,1/2正常速率、正常速率和2倍正常速率。原理為調(diào)用濾波器鏈表管理器媒體定位接口的設(shè)置速率函數(shù),其實(shí)現(xiàn)如下:m_pmediaseeking-setrate(inrate);參數(shù)inrate為相對(duì)于正常速率的比例,此處可以為1/2、1和2。同時(shí)在播放器的頂端標(biāo)題處會(huì)顯示當(dāng)前媒體文件的播放速率,顯得直觀、易見。 5.4.8 上一個(gè)和下一個(gè)用戶在使用播放器時(shí),很多時(shí)候會(huì)在多個(gè)媒體文件間進(jìn)行切換,最常
52、用的是前后切換。此軟件亦實(shí)現(xiàn)了此功能,此軟件默認(rèn)是上下前后切換時(shí)打開媒體文件進(jìn)行播放,默認(rèn)最后一個(gè)文件下一個(gè)是列表中第一個(gè)媒體文件,默認(rèn)第一個(gè)文件前一個(gè)是列表的最后一個(gè)文件。 此處是對(duì)前面提到的媒體文件信息存儲(chǔ)中鏈表存儲(chǔ)進(jìn)行操作,原理是鏈表中節(jié)點(diǎn)之間的前后移動(dòng)。其實(shí)現(xiàn)為:m_listbox.setcursel(m_listbox.getcursel() + 1);m_filelisttemp = m_filelisthead-m_nextnode;for (int i = 0; i m_nextnode;m_sourcefile = m_filelisttemp-m_sourcefilepat
53、h;m_mediafilename = m_filelisttemp-m_sourcefilename;如果上一個(gè)或下一個(gè)是列表中第一個(gè)或者最后一個(gè)媒體文件,則不需要進(jìn)行節(jié)點(diǎn)移動(dòng),直接選中播放。 5.4.9 查找有時(shí)用戶在使用播放器時(shí)想快速的查找某媒體文件,則可以使用此功能。用戶只需要輸入想找文件的名字即可,如果列表中有該文件則會(huì)把它選中,如果沒有則會(huì)作出提示。原理是遍歷存儲(chǔ)媒體文件信息的鏈表,其實(shí)現(xiàn)為:if (checkdlg.m_checkfilename = temp)m_listbox.setcursel(i);return;m_filelisttemp = m_filelisttem
54、p-m_nextnode;5.4.10 刪除用戶在使用播放器時(shí),有時(shí)想要?jiǎng)h除某個(gè)媒體文件,此軟件的操作是先選中該文件,然后點(diǎn)擊控制面板中的刪除按鈕即可。用戶刪除該文件時(shí),列表框、鏈表中和數(shù)據(jù)庫表fileinformation中全部刪除該文件信息。 原理跟前面一樣是執(zhí)行對(duì)鏈表的遍歷操作,這里多一個(gè)對(duì)數(shù)據(jù)庫的刪除操作,原理是第二章提到的ado數(shù)據(jù)庫訪問技術(shù)。其實(shí)現(xiàn)如下:m_filelisttemp2 = m_filelisttemp-m_nextnode;m_filelisttemp-m_nextnode = m_filelisttemp2-m_nextnode;delete m_filelisttemp;圖5.5 刪除鏈表中節(jié)點(diǎn)strsql.format(_t(delete from fileinformation where filename = %s),values);m_pconnection-execute(_bstr_t(strsql),&recordsaffected,adcmdtext);5.4.11 排行榜用戶有時(shí)想知道列表中所有媒體文件的受歡迎程度(被點(diǎn)擊播放的次數(shù))
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023七年級(jí)數(shù)學(xué)下冊 第一章 整式的乘除4 整式的乘法第3課時(shí) 多項(xiàng)式與多項(xiàng)式相乘說課稿 (新版)北師大版
- 2024-2025年高中語文 第3單元 5 伶官傳序說課稿(含解析)魯人版《唐宋八大家散文選讀》
- 5 分米和毫米第二課時(shí)(說課稿)-2023-2024學(xué)年二年級(jí)下冊數(shù)學(xué)蘇教版
- 2023三年級(jí)數(shù)學(xué)上冊 一 兩、三位數(shù)乘一位數(shù)第10課時(shí) 乘數(shù)末尾有0的乘法說課稿 蘇教版
- 二零二五年度電子商務(wù)平臺(tái)品牌推廣合作協(xié)議書
- 二零二五年度速凍粘玉米種植基地土地流轉(zhuǎn)合同
- 7權(quán)力受到制約和監(jiān)督 課時(shí)2《權(quán)力運(yùn)行受監(jiān)督》說課稿 2024-2025學(xué)年道德與法治六年級(jí)上冊統(tǒng)編版
- 消費(fèi)者協(xié)議書(2篇)
- 投資經(jīng)營合同(2篇)
- 江西地區(qū)普通高校畢業(yè)生就業(yè)協(xié)議書(2篇)
- 二零二五版電力設(shè)施維修保養(yǎng)合同協(xié)議3篇
- 最經(jīng)典凈水廠施工組織設(shè)計(jì)
- VDA6.3過程審核報(bào)告
- 2024-2030年中國并購基金行業(yè)發(fā)展前景預(yù)測及投資策略研究報(bào)告
- 2024年湖南商務(wù)職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫帶答案
- 骨科手術(shù)中常被忽略的操作課件
- 《湖南師范大學(xué)》課件
- 2024年全國各地中考試題分類匯編:作文題目
- 2024年高壓電工操作證考試復(fù)習(xí)題庫及答案(共三套)
- 《糖拌西紅柿 》 教案()
- 2024-2030年山茶油行業(yè)市場發(fā)展分析及發(fā)展趨勢與規(guī)劃建議研究報(bào)告
評(píng)論
0/150
提交評(píng)論