下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
多媒體客戶端視音頻引擎的設(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é)合了多媒體客戶端視音頻數(shù)據(jù)處理過程的每個(gè)環(huán)節(jié),屏蔽了應(yīng)用開發(fā)人員復(fù)雜的視音頻底層概念,提供了引擎開發(fā)的清晰接口,并實(shí)現(xiàn)了實(shí)時(shí)、高效和穩(wěn)定的效勞。經(jīng)實(shí)際測試說明,本引擎合乎要求。
關(guān)鍵詞:視音頻引擎DirectXH.264Speex
中圖分類號:TP391.41文獻(xiàn)標(biāo)識碼:A文章編號:1007-9416〔2022〕01-0000-00
1引言
當(dāng)前,大多數(shù)網(wǎng)絡(luò)視頻會議及實(shí)時(shí)工作平臺的工作方式都是依托多媒體客戶端發(fā)展的,在多媒體客戶端所能提供的效勞當(dāng)中,視音頻效勞最為重要,而且,伴隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的不斷進(jìn)步,視音頻效勞已成為其重中之重,因此,設(shè)計(jì)并實(shí)現(xiàn)高質(zhì)量的視音頻引擎效勞已成為當(dāng)前的熱點(diǎn)。本設(shè)計(jì)來源于互聯(lián)網(wǎng)會議系統(tǒng)的引擎開發(fā)工程,其目的是研發(fā)一套可以滿足實(shí)用功耗小、占用帶寬低、主觀質(zhì)量好要求,且可以支持互聯(lián)網(wǎng)會議效勞的視音頻引擎系統(tǒng),該引擎可以提供給用開發(fā)人員多樣模式的接口,從而使用戶獲得更好的實(shí)際體驗(yàn),進(jìn)而降低了互聯(lián)網(wǎng)會議系統(tǒng)研制的本錢。
2視音頻引擎的'設(shè)計(jì)與實(shí)現(xiàn)
視音頻引擎所要提供的效勞,首先是對視音頻數(shù)據(jù)的采集。在視音頻編解碼技術(shù)中,H.264及Speex以其良好的實(shí)用性被用戶廣泛使用,所以,本設(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ù)采集
引擎提供的視音頻效勞,首先是對其數(shù)據(jù)進(jìn)行采集,視頻和語音的采集是在攝像頭與麥克風(fēng)翻開的同時(shí)進(jìn)行的。
2.1.1視音頻設(shè)備的獲取
在采集的初始時(shí)刻,應(yīng)用程序先判定系統(tǒng)中視音頻設(shè)備的可用性,然后通過DirectSho創(chuàng)立系統(tǒng)設(shè)備的明細(xì)表,這樣可以便與選擇相應(yīng)的設(shè)備來進(jìn)行工作。當(dāng)設(shè)備選定后,程序?qū)⒂涗浽撛O(shè)備的ID,并開始數(shù)據(jù)捕捉。
2.1.2視音頻數(shù)據(jù)的捕獲
在獲取設(shè)備的ID后,開始捕捉數(shù)據(jù),系統(tǒng)通過識別ID來翻開指定設(shè)備,同時(shí)開始數(shù)據(jù)采集,并通過回調(diào)函數(shù)MMGrabber取出視音頻數(shù)據(jù)。
〔1〕IcaptureGraphBuilder2接口初始化。對于應(yīng)用DirectSho實(shí)現(xiàn)的視音頻捕捉,在建立應(yīng)用程序時(shí),DirectSho提供一個(gè)名為CaptureGraphBuilder的對象,并提供一個(gè)IcaptureGraphBuilder2的接口,通過調(diào)用該接口可實(shí)現(xiàn)CaptureGraph的建立與控制。在建立視頻捕捉程序時(shí),應(yīng)先獲取并初始化IcaptureGraphBuilder2接口,然后選擇視頻捕捉設(shè)備?!?〕創(chuàng)立Capturefilter。在完成接口初始化并選定設(shè)備后,應(yīng)創(chuàng)立對應(yīng)設(shè)備的Capturefilter。創(chuàng)立完畢后,通過調(diào)用AddiFilter將對應(yīng)設(shè)備的Capturefilter添加到FilterGraph中,從而開始視音頻數(shù)據(jù)的采集。〔3〕實(shí)現(xiàn)視音頻數(shù)據(jù)捕獲。在完成設(shè)備Capturefilter的創(chuàng)立及添加后,啟動(dòng)系統(tǒng)程序并運(yùn)行,此時(shí)DirectSho將實(shí)時(shí)捕獲的對應(yīng)視音頻設(shè)備的視頻數(shù)據(jù),并交送給系統(tǒng)的編解碼模塊,從而進(jìn)行后續(xù)的視音頻壓縮編解碼處理。
2.2視音頻數(shù)據(jù)編解碼
為了減小互聯(lián)網(wǎng)傳輸數(shù)據(jù)量的容量,視音頻數(shù)據(jù)必須要經(jīng)過壓縮處理,所以,要選取適宜的視音頻編解碼計(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)立,編碼器的工作是對視音頻幀進(jìn)行編碼。本設(shè)計(jì)采用Video_CreateEncoder來創(chuàng)立編碼器,在創(chuàng)立編碼器前,預(yù)先定義需要的變量?!?〕動(dòng)態(tài)調(diào)整參數(shù)。在視音頻編碼器創(chuàng)立后,需要啟動(dòng)運(yùn)行過程中的動(dòng)態(tài)參數(shù)調(diào)整許可,即允許動(dòng)態(tài)設(shè)置編碼器參數(shù)。當(dāng)參數(shù)重設(shè)后,編碼器將根據(jù)新的參數(shù)進(jìn)行操作。對于重置編碼參數(shù),需要調(diào)用數(shù)x264_param_parse重置參數(shù),并且需調(diào)用x264_encoder_reconfig進(jìn)行參數(shù)更新。〔3〕視音頻編碼。當(dāng)編碼器創(chuàng)立完成之后,采用video_EncodeFrame對視音頻數(shù)據(jù)進(jìn)行編碼。在編碼處理時(shí),通過相應(yīng)參數(shù)確定編碼器ID,之后,傳入內(nèi)存中的初始數(shù)據(jù)信息。四、銷毀編碼器。當(dāng)完成視音頻數(shù)據(jù)的編碼操作后,需要銷毀已經(jīng)建立好的編碼器,此時(shí),需要調(diào)用函數(shù)video_ReleaseEncoder來完成。當(dāng)調(diào)用video_release_encoder時(shí),其內(nèi)部會調(diào)用x264_picture_clean清理對應(yīng)編碼器里的結(jié)構(gòu)空間,并應(yīng)用x264_encoder_close銷毀編碼器。
2.2.2接收端解碼處理
〔1〕解碼器創(chuàng)立。圖2所示為接收端解碼處理的根本流程圖。在程序初始化時(shí),程序首先會創(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)立完成后,開始進(jìn)行解碼操作。當(dāng)已壓縮好的視頻數(shù)據(jù)被轉(zhuǎn)入接收端時(shí),創(chuàng)立的解碼器將進(jìn)行視音頻幀數(shù)據(jù)解碼。在解壓操作完成后,將會轉(zhuǎn)入播放接口進(jìn)行視音頻播放。為了便于操作,設(shè)置視音頻數(shù)據(jù)解碼操作函數(shù)video_decode_frame為雙輸入型,除了需制定解碼器的ID外,就是定制兩段存儲空間,其中一段存儲解碼前信息,另一段存儲解碼后信息?!?〕銷毀解碼器。解碼器與編碼器的創(chuàng)立于銷毀都是相對應(yīng)的,均是資源的分配與回收。當(dāng)程序結(jié)束時(shí),為了釋放所占用的資源,為后續(xù)操作留下足夠空間,需要銷毀解碼器。當(dāng)應(yīng)用程序結(jié)束時(shí),會按照流程銷毀解碼器,通過調(diào)用函數(shù)video_ReleaseDecoder和x264_encoder_close來釋放解碼器所占資源和銷毀編碼器。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í),同樣,會釋放視頻窗口資源。在窗口創(chuàng)立后,需要顯示緩沖區(qū)的數(shù)據(jù),此時(shí),應(yīng)輸入一些窗口的對應(yīng)參數(shù)以完成視頻顯示準(zhǔn)備?!?〕視頻顯示。無論針對本地圖像或是遠(yuǎn)端圖像,都將使用顯示功能函數(shù)來獲取支持。本系統(tǒng)設(shè)計(jì)了Render系列函數(shù)來支持這些功能,render_CreateRender、render_DraBuffer和render_ReleaseRender,分別實(shí)現(xiàn)創(chuàng)立一個(gè)視頻顯示窗口、顯示緩沖區(qū)中數(shù)據(jù)和釋放一個(gè)視頻顯示窗口。在視頻圖像顯示時(shí),仍需要使用DirectDra接口來輔助完成。
2.3.2音頻播放
對于音頻播放,應(yīng)首先創(chuàng)立DirectSound對象,然后填充DSBUFFERDESC結(jié)構(gòu)〔該結(jié)構(gòu)體保留了緩沖區(qū)的重要信息〕。DirectSound播放聲音的難點(diǎn)是對緩沖存儲區(qū)處理,其中關(guān)鍵環(huán)節(jié)就是對緩沖存儲區(qū)的加鎖操作,由于要保證聲音的連續(xù)播放,就需不斷的循環(huán)緩沖區(qū)內(nèi)存數(shù)據(jù)。在聲音播放時(shí),負(fù)責(zé)讀取數(shù)據(jù)的讀指針伴隨著讀取的進(jìn)行而不斷向前,當(dāng)移動(dòng)到存儲空間的結(jié)束位置時(shí),將跳到緩沖存儲區(qū)的開始位置繼續(xù)進(jìn)行讀操作。添加數(shù)據(jù)的寫指針必須滯后于播放數(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í),程序就會產(chǎn)生一個(gè)事件,此時(shí)調(diào)用Lock函數(shù)鎖住寫游標(biāo)的位置,然后開始執(zhí)行寫操作,寫入數(shù)據(jù)的長度為兩個(gè)通知點(diǎn)的實(shí)際聚類。在寫入數(shù)據(jù)完成后,需要解鎖緩沖區(qū)。在實(shí)現(xiàn)聲音混音和回放時(shí),需創(chuàng)立IDirectSound對象,同時(shí),DirectSound自動(dòng)創(chuàng)立主緩沖區(qū),但是,輔助緩沖區(qū)需自主創(chuàng)立。在調(diào)用輔助緩沖區(qū)時(shí),也要使用加鎖和解鎖、機(jī)制和通知機(jī)制來輔助完成。
2.4視音頻引擎的測試
局域網(wǎng)視音頻測試比照分析了本視音頻引擎與一款商業(yè)視頻引擎的測試程序。在圖像方面,測試工程包括圖像質(zhì)量、帶寬、CPU占用率。在語音方面,測試工程只為其主觀收聽效果。圖像測試效果分析:在局域網(wǎng)測試中,網(wǎng)絡(luò)帶寬可以保證的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年江西財(cái)經(jīng)職業(yè)學(xué)院高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 2024年江西中醫(yī)藥高等專科學(xué)校高職單招語文歷年參考題庫含答案解析
- 2024年畢節(jié)工業(yè)職業(yè)技術(shù)學(xué)院高職單招語文歷年參考題庫含答案解析
- 二零二五年股權(quán)質(zhì)押借款合同爭議預(yù)防及處理協(xié)議3篇
- 2024年曲靖醫(yī)學(xué)高等??茖W(xué)校高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 二零二五年度高品質(zhì)按揭購房合同標(biāo)準(zhǔn)版3篇
- 2024年廣西工商職業(yè)技術(shù)學(xué)院高職單招語文歷年參考題庫含答案解析
- 2024年廣元中核職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 2024年廣東茂名健康職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
- 2024年崇左幼兒師范高等??茖W(xué)校高職單招語文歷年參考題庫含答案解析
- 光伏電站設(shè)備監(jiān)造與性能驗(yàn)收
- 10kV架空線路施工方案
- 2018江蘇蘇州中考英語真題解析
- 10KV戶外封閉型噴射式熔斷器技術(shù)規(guī)范書
- (完整版)項(xiàng)目工程款收款收據(jù)
- 井點(diǎn)降水臺班記錄表
- 奇瑞汽車4S店各類表格模板
- 特域冷水機(jī)參數(shù)列表
- 藻類名稱(漢拉對照)
- 勞資專管員任命書
- 公務(wù)員考核量化測評標(biāo)準(zhǔn)
評論
0/150
提交評論