


下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
多媒體客戶(hù)端視音頻引擎的設(shè)計(jì)與實(shí)現(xiàn)范文摘要:文章基于當(dāng)前視音頻技術(shù)的特點(diǎn),根據(jù)DirectX技術(shù)的采集與播放計(jì)劃,融合H.264和Speex的編解碼技術(shù),設(shè)計(jì)了一套多媒體視音頻引擎的實(shí)現(xiàn)計(jì)劃。本引擎的實(shí)現(xiàn)結(jié)合了多媒體客戶(hù)端視音頻數(shù)據(jù)處理過(guò)程的每個(gè)環(huán)節(jié),屏蔽了應(yīng)用開(kāi)發(fā)人員復(fù)雜的視音頻底層概念,提供了引擎開(kāi)發(fā)的清晰接口,并實(shí)現(xiàn)了實(shí)時(shí)、高效和穩(wěn)定的效勞。經(jīng)實(shí)際測(cè)試說(shuō)明,本引擎合乎要求。
關(guān)鍵詞:視音頻引擎DirectXH.264Speex
中圖分類(lèi)號(hào):TP391.41文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1007-9416〔2022〕01-0000-00
1引言
當(dāng)前,大多數(shù)網(wǎng)絡(luò)視頻會(huì)議及實(shí)時(shí)工作平臺(tái)的工作方式都是依托多媒體客戶(hù)端發(fā)展的,在多媒體客戶(hù)端所能提供的效勞當(dāng)中,視音頻效勞最為重要,而且,伴隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的不斷進(jìn)步,視音頻效勞已成為其重中之重,因此,設(shè)計(jì)并實(shí)現(xiàn)高質(zhì)量的視音頻引擎效勞已成為當(dāng)前的熱點(diǎn)。本設(shè)計(jì)來(lái)源于互聯(lián)網(wǎng)會(huì)議系統(tǒng)的引擎開(kāi)發(fā)工程,其目的是研發(fā)一套可以滿(mǎn)足實(shí)用功耗小、占用帶寬低、主觀質(zhì)量好要求,且可以支持互聯(lián)網(wǎng)會(huì)議效勞的視音頻引擎系統(tǒng),該引擎可以提供給用開(kāi)發(fā)人員多樣模式的接口,從而使用戶(hù)獲得更好的實(shí)際體驗(yàn),進(jìn)而降低了互聯(lián)網(wǎng)會(huì)議系統(tǒng)研制的本錢(qián)。
2視音頻引擎的'設(shè)計(jì)與實(shí)現(xiàn)
視音頻引擎所要提供的效勞,首先是對(duì)視音頻數(shù)據(jù)的采集。在視音頻編解碼技術(shù)中,H.264及Speex以其良好的實(shí)用性被用戶(hù)廣泛使用,所以,本設(shè)計(jì)選用H.264及Speex作為終端編解碼方式。據(jù)引擎功能的實(shí)現(xiàn),可將其分為三個(gè)應(yīng)用模塊:〔1〕視音頻數(shù)據(jù)采集模塊;〔2〕視音頻數(shù)據(jù)編解碼模塊;〔3〕視音頻數(shù)據(jù)播放模塊。文中引擎的設(shè)計(jì)就是依據(jù)上述三個(gè)模塊進(jìn)行研究的。
2.1視音頻數(shù)據(jù)采集
引擎提供的視音頻效勞,首先是對(duì)其數(shù)據(jù)進(jìn)行采集,視頻和語(yǔ)音的采集是在攝像頭與麥克風(fēng)翻開(kāi)的同時(shí)進(jìn)行的。
2.1.1視音頻設(shè)備的獲取
在采集的初始時(shí)刻,應(yīng)用程序先判定系統(tǒng)中視音頻設(shè)備的可用性,然后通過(guò)DirectSho創(chuàng)立系統(tǒng)設(shè)備的明細(xì)表,這樣可以便與選擇相應(yīng)的設(shè)備來(lái)進(jìn)行工作。當(dāng)設(shè)備選定后,程序?qū)⒂涗浽撛O(shè)備的ID,并開(kāi)始數(shù)據(jù)捕捉。
2.1.2視音頻數(shù)據(jù)的捕獲
在獲取設(shè)備的ID后,開(kāi)始捕捉數(shù)據(jù),系統(tǒng)通過(guò)識(shí)別ID來(lái)翻開(kāi)指定設(shè)備,同時(shí)開(kāi)始數(shù)據(jù)采集,并通過(guò)回調(diào)函數(shù)MMGrabber取出視音頻數(shù)據(jù)。
〔1〕IcaptureGraphBuilder2接口初始化。對(duì)于應(yīng)用DirectSho實(shí)現(xiàn)的視音頻捕捉,在建立應(yīng)用程序時(shí),DirectSho提供一個(gè)名為CaptureGraphBuilder的對(duì)象,并提供一個(gè)IcaptureGraphBuilder2的接口,通過(guò)調(diào)用該接口可實(shí)現(xiàn)CaptureGraph的建立與控制。在建立視頻捕捉程序時(shí),應(yīng)先獲取并初始化IcaptureGraphBuilder2接口,然后選擇視頻捕捉設(shè)備。〔2〕創(chuàng)立Capturefilter。在完成接口初始化并選定設(shè)備后,應(yīng)創(chuàng)立對(duì)應(yīng)設(shè)備的Capturefilter。創(chuàng)立完畢后,通過(guò)調(diào)用AddiFilter將對(duì)應(yīng)設(shè)備的Capturefilter添加到FilterGraph中,從而開(kāi)始視音頻數(shù)據(jù)的采集。〔3〕實(shí)現(xiàn)視音頻數(shù)據(jù)捕獲。在完成設(shè)備Capturefilter的創(chuàng)立及添加后,啟動(dòng)系統(tǒng)程序并運(yùn)行,此時(shí)DirectSho將實(shí)時(shí)捕獲的對(duì)應(yīng)視音頻設(shè)備的視頻數(shù)據(jù),并交送給系統(tǒng)的編解碼模塊,從而進(jìn)行后續(xù)的視音頻壓縮編解碼處理。
2.2視音頻數(shù)據(jù)編解碼
為了減小互聯(lián)網(wǎng)傳輸數(shù)據(jù)量的容量,視音頻數(shù)據(jù)必須要經(jīng)過(guò)壓縮處理,所以,要選取適宜的視音頻編解碼計(jì)劃才可實(shí)現(xiàn)互聯(lián)網(wǎng)終端的快速傳輸。在本設(shè)計(jì)中,分別以H.264和Speex作為視音頻的編解碼方式,從而實(shí)現(xiàn)數(shù)據(jù)的壓縮與解壓縮處理。
視音頻數(shù)據(jù)的編解碼操作分為:發(fā)送端編碼操作和接收端解碼操作。
2.2.1發(fā)送端編碼處理
〔1〕編碼器創(chuàng)立。圖1所示為發(fā)送端編碼處理的流程圖,由圖1可知,發(fā)送端編碼處理的初始環(huán)節(jié)是要進(jìn)行編碼器的創(chuàng)立,編碼器的工作是對(duì)視音頻幀進(jìn)行編碼。本設(shè)計(jì)采用Video_CreateEncoder來(lái)創(chuàng)立編碼器,在創(chuàng)立編碼器前,預(yù)先定義需要的變量?!?〕動(dòng)態(tài)調(diào)整參數(shù)。在視音頻編碼器創(chuàng)立后,需要啟動(dòng)運(yùn)行過(guò)程中的動(dòng)態(tài)參數(shù)調(diào)整許可,即允許動(dòng)態(tài)設(shè)置編碼器參數(shù)。當(dāng)參數(shù)重設(shè)后,編碼器將根據(jù)新的參數(shù)進(jìn)行操作。對(duì)于重置編碼參數(shù),需要調(diào)用數(shù)x264_param_parse重置參數(shù),并且需調(diào)用x264_encoder_reconfig進(jìn)行參數(shù)更新?!?〕視音頻編碼。當(dāng)編碼器創(chuàng)立完成之后,采用video_EncodeFrame對(duì)視音頻數(shù)據(jù)進(jìn)行編碼。在編碼處理時(shí),通過(guò)相應(yīng)參數(shù)確定編碼器ID,之后,傳入內(nèi)存中的初始數(shù)據(jù)信息。四、銷(xiāo)毀編碼器。當(dāng)完成視音頻數(shù)據(jù)的編碼操作后,需要銷(xiāo)毀已經(jīng)建立好的編碼器,此時(shí),需要調(diào)用函數(shù)video_ReleaseEncoder來(lái)完成。當(dāng)調(diào)用video_release_encoder時(shí),其內(nèi)部會(huì)調(diào)用x264_picture_clean清理對(duì)應(yīng)編碼器里的結(jié)構(gòu)空間,并應(yīng)用x264_encoder_close銷(xiāo)毀編碼器。
2.2.2接收端解碼處理
〔1〕解碼器創(chuàng)立。圖2所示為接收端解碼處理的根本流程圖。在程序初始化時(shí),程序首先會(huì)創(chuàng)立一個(gè)解碼器。同創(chuàng)立編碼器相比,程序?qū)⒉捎煤瘮?shù)video_create_decoder創(chuàng)立一個(gè)解碼器。程序首先繪制遍歷鏈表,并查找H.264和Speex解碼器,之后初始化參數(shù),同時(shí),解碼器的創(chuàng)立操作也相應(yīng)完成。〔2〕數(shù)據(jù)幀解碼。在解碼器創(chuàng)立完成后,開(kāi)始進(jìn)行解碼操作。當(dāng)已壓縮好的視頻數(shù)據(jù)被轉(zhuǎn)入接收端時(shí),創(chuàng)立的解碼器將進(jìn)行視音頻幀數(shù)據(jù)解碼。在解壓操作完成后,將會(huì)轉(zhuǎn)入播放接口進(jìn)行視音頻播放。為了便于操作,設(shè)置視音頻數(shù)據(jù)解碼操作函數(shù)video_decode_frame為雙輸入型,除了需制定解碼器的ID外,就是定制兩段存儲(chǔ)空間,其中一段存儲(chǔ)解碼前信息,另一段存儲(chǔ)解碼后信息。〔3〕銷(xiāo)毀解碼器。解碼器與編碼器的創(chuàng)立于銷(xiāo)毀都是相對(duì)應(yīng)的,均是資源的分配與回收。當(dāng)程序結(jié)束時(shí),為了釋放所占用的資源,為后續(xù)操作留下足夠空間,需要銷(xiāo)毀解碼器。當(dāng)應(yīng)用程序結(jié)束時(shí),會(huì)按照流程銷(xiāo)毀解碼器,通過(guò)調(diào)用函數(shù)video_ReleaseDecoder和x264_encoder_close來(lái)釋放解碼器所占資源和銷(xiāo)毀編碼器。2.3視音頻數(shù)據(jù)播放
2.3.1視頻播放
在解碼處理后,需要在窗口中顯示圖像,這時(shí)應(yīng)使用顯示窗口函數(shù)進(jìn)行處理。
〔1〕視頻顯示窗口創(chuàng)立。視頻顯示仍需要DirectSho支持,首先,應(yīng)創(chuàng)立一個(gè)視頻顯示窗口。由于程序的運(yùn)行環(huán)境是在indos系統(tǒng)下進(jìn)行的,所以,在視頻顯示窗口創(chuàng)立時(shí),應(yīng)將indos句柄作為參數(shù)輸入。在結(jié)束視頻窗口操作時(shí),同樣,會(huì)釋放視頻窗口資源。在窗口創(chuàng)立后,需要顯示緩沖區(qū)的數(shù)據(jù),此時(shí),應(yīng)輸入一些窗口的對(duì)應(yīng)參數(shù)以完成視頻顯示準(zhǔn)備?!?〕視頻顯示。無(wú)論針對(duì)本地圖像或是遠(yuǎn)端圖像,都將使用顯示功能函數(shù)來(lái)獲取支持。本系統(tǒng)設(shè)計(jì)了Render系列函數(shù)來(lái)支持這些功能,render_CreateRender、render_DraBuffer和render_ReleaseRender,分別實(shí)現(xiàn)創(chuàng)立一個(gè)視頻顯示窗口、顯示緩沖區(qū)中數(shù)據(jù)和釋放一個(gè)視頻顯示窗口。在視頻圖像顯示時(shí),仍需要使用DirectDra接口來(lái)輔助完成。
2.3.2音頻播放
對(duì)于音頻播放,應(yīng)首先創(chuàng)立DirectSound對(duì)象,然后填充DSBUFFERDESC結(jié)構(gòu)〔該結(jié)構(gòu)體保留了緩沖區(qū)的重要信息〕。DirectSound播放聲音的難點(diǎn)是對(duì)緩沖存儲(chǔ)區(qū)處理,其中關(guān)鍵環(huán)節(jié)就是對(duì)緩沖存儲(chǔ)區(qū)的加鎖操作,由于要保證聲音的連續(xù)播放,就需不斷的循環(huán)緩沖區(qū)內(nèi)存數(shù)據(jù)。在聲音播放時(shí),負(fù)責(zé)讀取數(shù)據(jù)的讀指針伴隨著讀取的進(jìn)行而不斷向前,當(dāng)移動(dòng)到存儲(chǔ)空間的結(jié)束位置時(shí),將跳到緩沖存儲(chǔ)區(qū)的開(kāi)始位置繼續(xù)進(jìn)行讀操作。添加數(shù)據(jù)的寫(xiě)指針必須滯后于播放數(shù)據(jù)的讀指針,只有這樣才能保證播放的連貫。在實(shí)際操作時(shí),設(shè)置通知點(diǎn)是較易出錯(cuò)的地方。在DirectSound中,LPDIRECTSOUNDNOTIFY結(jié)構(gòu)體SetNotificationPositions函數(shù)負(fù)責(zé)設(shè)置通知點(diǎn)。在定義通知點(diǎn)時(shí),需要設(shè)定好DSBPOSITIONNOTIFY結(jié)構(gòu)〔保留著通知點(diǎn)距離內(nèi)存起始位置的偏移量以及系統(tǒng)時(shí)間通知句柄〕。當(dāng)負(fù)責(zé)播放的游標(biāo)達(dá)到通知所在的偏移位置時(shí),程序就會(huì)產(chǎn)生一個(gè)事件,此時(shí)調(diào)用Lock函數(shù)鎖住寫(xiě)游標(biāo)的位置,然后開(kāi)始執(zhí)行寫(xiě)操作,寫(xiě)入數(shù)據(jù)的長(zhǎng)度為兩個(gè)通知點(diǎn)的實(shí)際聚類(lèi)。在寫(xiě)入數(shù)據(jù)完成后,需要解鎖緩沖區(qū)。在實(shí)現(xiàn)聲音混音和回放時(shí),需創(chuàng)立IDirectSound對(duì)象,同時(shí),DirectSound自動(dòng)創(chuàng)立主緩沖區(qū),但是,輔助緩沖區(qū)需自主創(chuàng)立。在調(diào)用輔助緩沖區(qū)時(shí),也要使用加鎖和解鎖、機(jī)制和通知機(jī)制來(lái)輔助完成。
2.4視音頻引擎的測(cè)試
局域網(wǎng)視音頻測(cè)試比照分析了本視音頻引擎與一款商業(yè)視頻引擎的測(cè)試程序。在圖像方面,測(cè)試工程包括圖像質(zhì)量、帶寬、CPU占用率。在語(yǔ)音方面,測(cè)試工程只為其主觀收聽(tīng)效果。圖像測(cè)試效果分析:在局域網(wǎng)測(cè)試中,網(wǎng)絡(luò)帶寬可以保證的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 樓盤(pán)變廢為寶活動(dòng)方案
- 桐鄉(xiāng)八年級(jí)數(shù)學(xué)活動(dòng)方案
- 油田插花活動(dòng)方案
- 植樹(shù)節(jié)樹(shù)木掛牌活動(dòng)方案
- 殷都區(qū)安全教育活動(dòng)方案
- 校長(zhǎng)講安全活動(dòng)方案
- 水泥廠東宿舍活動(dòng)方案
- 森林沙龍活動(dòng)方案
- 民營(yíng)企業(yè)家聯(lián)誼活動(dòng)方案
- 氣墊抽獎(jiǎng)活動(dòng)方案
- 河北省石家莊市2025年七年級(jí)下學(xué)期語(yǔ)文期末考試卷及答案
- 四川省德陽(yáng)市2025年七年級(jí)下學(xué)期語(yǔ)文期末試卷及答案
- 石獅子購(gòu)銷(xiāo)合同協(xié)議
- 2025廣州市荔灣區(qū)輔警考試試卷真題
- 課題申報(bào)書(shū):基于核心素養(yǎng)發(fā)展理念的小學(xué)數(shù)學(xué)跨學(xué)科主題學(xué)習(xí)設(shè)計(jì)的策略研究
- 模聯(lián)面試題及答案
- 上海市楊浦區(qū)2025屆高三語(yǔ)文一模質(zhì)量調(diào)研試卷(含答案)
- 貴州省遵義市2024年八年級(jí)《數(shù)學(xué)》上學(xué)期期末試題與參考答案
- 隔壁拆房相鄰協(xié)議書(shū)
- GB/T 320-2025工業(yè)用合成鹽酸
- 2025(人教版)小升初數(shù)學(xué)總復(fù)習(xí) 知識(shí)點(diǎn)總結(jié)+專(zhuān)項(xiàng)練習(xí)(含答案)
評(píng)論
0/150
提交評(píng)論