<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > 一種基于ARM Linux的無(wú)線音視頻對(duì)講系統(tǒng)設(shè)計(jì)方案

          一種基于ARM Linux的無(wú)線音視頻對(duì)講系統(tǒng)設(shè)計(jì)方案

          作者: 時(shí)間:2017-06-08 來(lái)源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/201706/351028.htm

          隨著數(shù)字化和網(wǎng)絡(luò)化時(shí)代的到來(lái),尤其是寬帶無(wú)線網(wǎng)絡(luò)的發(fā)展,為音視頻這樣大數(shù)據(jù)量傳輸業(yè)務(wù)在無(wú)線網(wǎng)絡(luò)上的應(yīng)用提供了契機(jī)。同時(shí)由于音視頻獨(dú)特的感官特性,使其相關(guān)的應(yīng)用需求也變得越來(lái)越迫切。無(wú)線多媒體是多媒體和移動(dòng)通信這兩個(gè)領(lǐng)域的技術(shù)相互融合的產(chǎn)物,成為當(dāng)今通信領(lǐng)域的一個(gè)熱點(diǎn)。鑒于Linux內(nèi)核的開(kāi)源性,采用其作為操作系統(tǒng),從而使整個(gè)系統(tǒng)具有更好的實(shí)時(shí)性和穩(wěn)定性。整個(gè)系統(tǒng)以ARM11為核心處理器、采用新一代視頻編解碼標(biāo)準(zhǔn)H.264進(jìn)行編譯碼,并通過(guò)無(wú)線網(wǎng)絡(luò)傳輸音視頻。它充分利用S3C6410微處理器內(nèi)部集成的多媒體編解碼器(Multi-Formatvideo Codec,MFC),有效提高了系統(tǒng)的性價(jià)比。整個(gè)系統(tǒng)為無(wú)線多媒體音視頻的傳輸提供了一個(gè)好的解決方案,可廣泛應(yīng)用在遠(yuǎn)程監(jiān)控、視頻電話等各種領(lǐng)域,具有較好的實(shí)用價(jià)值和推廣應(yīng)用前景。

          1.系統(tǒng)總體方案設(shè)計(jì)

          通信雙方系統(tǒng)中音頻和視頻采集模塊負(fù)責(zé)采集模擬信號(hào),并將采集到的音視頻數(shù)據(jù)送到音視頻管理模塊,經(jīng)過(guò)壓縮處理,再加上數(shù)據(jù)包頭一起由WiFi發(fā)送到對(duì)方;對(duì)方接收到數(shù)據(jù)后,經(jīng)過(guò)相關(guān)處理,判斷音視頻幀類(lèi)型,再送往解壓縮處理模塊,恢復(fù)出音視頻數(shù)據(jù)。通信雙方設(shè)備均包含音視頻管理模塊和無(wú)線收發(fā)模塊。無(wú)線WiFi收發(fā)模塊運(yùn)行在2.4 GHz頻段,符合IEEE 802.11b無(wú)線局域網(wǎng)協(xié)議標(biāo)準(zhǔn)。

          2.系統(tǒng)硬件設(shè)計(jì)

          系統(tǒng)硬件設(shè)計(jì)以ARM11為核心微處理器,主頻為532 MHz,能夠滿足實(shí)時(shí)處理的要求,其內(nèi)部集成有256 MB SDRAM、2 GB FLASH、音頻錄、放音接口、Camera視頻接口、無(wú)線WiFi接口、LCD接口、SD卡接口等,同時(shí)以開(kāi)源的Linux 2.6.28為內(nèi)核,yaffs2為根文件系統(tǒng),Qtopia 4.4.3作為用戶界面,為開(kāi)發(fā)調(diào)試和系統(tǒng)設(shè)計(jì)提供了良好的平臺(tái)。

          2.1音視頻采集模塊

          音頻采用處理器內(nèi)部集成的(Inter-IC SoundBus)音頻接口和WM9714音頻芯片。是飛利浦公司為數(shù)字音頻設(shè)備之間的音頻數(shù)據(jù)傳輸而定制的一種總線標(biāo)準(zhǔn)。在飛利浦公司的標(biāo)準(zhǔn)中,既規(guī)定了硬件接口系統(tǒng),也規(guī)范了音頻數(shù)據(jù)的格式?;诖擞布敖涌谝?guī)范,實(shí)現(xiàn)了集成音頻輸出、Linein輸入和Mic輸入功能。

          視頻采集使用的是OV9650CMOS攝像頭模塊,分辨率高達(dá)130萬(wàn)像素,可直接與OK6410開(kāi)發(fā)板的Camera接口相接。適用于高端消費(fèi)類(lèi)電子產(chǎn)品、工業(yè)控制、車(chē)載導(dǎo)航、多媒體終端、行業(yè)PDA、教育培訓(xùn)、個(gè)人學(xué)習(xí)等。其結(jié)構(gòu)較簡(jiǎn)單,提供硬件驅(qū)動(dòng)程序,便于使用和調(diào)試。

          2.2無(wú)線傳輸模塊

          本系統(tǒng)的無(wú)線傳輸模塊采用工作在2.4 GHz公共頻段的WiFi模塊來(lái)實(shí)現(xiàn),它遵循IEEE 802.11b/g網(wǎng)絡(luò)標(biāo)準(zhǔn),可用于在后期開(kāi)發(fā)中將終端接入Internet,其最高數(shù)據(jù)率為54 Mb/s,支持WinCE、Linux系統(tǒng)。室內(nèi)通信距離可達(dá)100 m,室外開(kāi)闊地可達(dá)300 m.只需要對(duì)ARM-Linux操作系統(tǒng)進(jìn)行簡(jiǎn)單的配置就可以由以太網(wǎng)連接模式轉(zhuǎn)化為雙機(jī)通信AD-HOC模式,在系統(tǒng)啟動(dòng)之后,設(shè)計(jì)了基于Qt的窗口設(shè)計(jì),方便切換連接模式。

          選用WiFi具有很好的可擴(kuò)展性,可以通過(guò)無(wú)線路由器的WiFi連接到廣域網(wǎng),具有很好的應(yīng)用前景。同時(shí)大多數(shù)手機(jī)等終端設(shè)備具有WiFi功能,后期還可以將軟件升級(jí)至Andriod系統(tǒng),方便開(kāi)發(fā)和移植。它減少了音視頻實(shí)時(shí)傳輸?shù)拈_(kāi)發(fā)成本和周期,也給現(xiàn)代移動(dòng)通信提供了一種新的音視頻通信方式。

          WiFi的驅(qū)動(dòng)配置好后,應(yīng)用層和以太網(wǎng)接口模式編程完全相同。由于此設(shè)計(jì)音視頻數(shù)據(jù)量較大,不宜采用UDP,因?yàn)楫?dāng)數(shù)據(jù)量過(guò)大或傳輸信號(hào)不好時(shí),UDP會(huì)嚴(yán)重丟包,所以最終選擇面向連接的TCP傳輸協(xié)議,保證了系統(tǒng)音視頻有效傳輸。由于TCP是應(yīng)答時(shí)式傳輸數(shù)據(jù),在局域網(wǎng)內(nèi),無(wú)需考慮TCP丟包問(wèn)題,為實(shí)現(xiàn)系統(tǒng)功能提供了可靠的保障。

          3.軟件設(shè)計(jì)

          軟件分為用戶界面設(shè)計(jì)和數(shù)據(jù)處理、傳輸?shù)饶K的設(shè)計(jì)。

          3.1基于的軟件總體設(shè)計(jì)

          系統(tǒng)軟件架構(gòu)如圖1所示,它是音視頻單向采集、壓縮、傳輸、接收、解壓縮、處理回放音視頻流控制過(guò)程,各個(gè)模塊采用線程處理,由信號(hào)量處理線程間優(yōu)先級(jí)構(gòu)成循環(huán)的線程,有效地處理了音視頻數(shù)據(jù)流。系統(tǒng)各功能模塊化,便于修改和移植,代碼簡(jiǎn)短精悍。



          圖1軟件架構(gòu)


          3.2回音消除

          系統(tǒng)開(kāi)始時(shí)出現(xiàn)回音和延時(shí)問(wèn)題,延時(shí)是由于采集傳輸過(guò)程中造成的,所以只能盡量縮短延時(shí),而無(wú)法做到即時(shí)播放,這也是此系統(tǒng)的缺陷之一。回音是由于延時(shí)造成的,文中最后采用開(kāi)源的Speex算法消除了回音。具體做法:將該算法編譯成庫(kù)文件,加入到Linux內(nèi)核,即可以使用Speex的API函數(shù),實(shí)現(xiàn)音頻的回音消除。

          3.3音視頻的同步

          本文的基本思想是以視頻流為主媒體流,音頻流為從媒體流,視頻的播放速率保持不變,根據(jù)本地系統(tǒng)時(shí)鐘確定實(shí)際時(shí)間,通過(guò)調(diào)整音頻播放速度來(lái)達(dá)到音視頻同步。

          首先選擇一個(gè)本地系統(tǒng)時(shí)鐘參考(LSCR),然后將LSCR發(fā)送到視頻解碼器和音頻解碼器,由這兩個(gè)解碼器根據(jù)各幀的PTS值對(duì)照本地系統(tǒng)時(shí)鐘,參考產(chǎn)生各幀準(zhǔn)確的顯示或回放的時(shí)間。也就是說(shuō),生成輸出數(shù)據(jù)流時(shí)依據(jù)本地參考時(shí)鐘上的時(shí)間給每個(gè)數(shù)據(jù)塊都打上時(shí)間戳(一般包括開(kāi)始時(shí)間和結(jié)束時(shí)間)。在播放時(shí),讀取數(shù)據(jù)塊上的時(shí)間戳,同時(shí)根據(jù)本地系統(tǒng)時(shí)鐘參考上的時(shí)間來(lái)安排播放。

          整個(gè)系統(tǒng)的音視頻同步數(shù)據(jù)流程如圖2所示。



          圖2音視頻同步數(shù)據(jù)流程


          4.音視頻通道管理

          為了節(jié)約內(nèi)存資源,便于通道的管理,本設(shè)計(jì)采用分通道的線程池管理,音、視頻分別由自己的通道完成任務(wù)。

          音視頻采集使用同一個(gè)線程處理,采用select系統(tǒng)調(diào)用,每執(zhí)行到此線程,就判斷音視頻設(shè)備是否就緒,若就緒即采集音頻或視頻到音視頻緩沖區(qū),再交給音視頻采集壓縮線程,最后再交給發(fā)送線程打包后采用TCP發(fā)送。需要說(shuō)明的是本設(shè)計(jì)線程之間均采用信號(hào)量完成線程間基于TCP的音視頻軟件架構(gòu)的同步管理。發(fā)送完以后進(jìn)入接收線程等待對(duì)方發(fā)音視頻數(shù)據(jù)。在接受端由接收線程接收到數(shù)據(jù)以后,判斷數(shù)據(jù)的包頭,再交由解壓縮處理線程處理,然后播放音視頻,再等待對(duì)方發(fā)數(shù)據(jù)到本機(jī)。

          由于處理器的高速處理和高效率視頻硬件H.264解壓縮,使得整個(gè)系統(tǒng)實(shí)時(shí)性基本達(dá)到要求。嵌入式音視頻管理模塊實(shí)現(xiàn)了整個(gè)系統(tǒng)的統(tǒng)籌控制和實(shí)時(shí)處理,為音視頻數(shù)據(jù)管理提供可靠的保證。


          5.結(jié)語(yǔ)

          目前基于嵌入式無(wú)線終端的視頻監(jiān)控產(chǎn)品由于無(wú)需布線、傳輸距離遠(yuǎn)、環(huán)境適應(yīng)能力強(qiáng),性能穩(wěn)定及通信便利等優(yōu)勢(shì)而倍受青睞,在安全監(jiān)察、巡查通信、施工聯(lián)絡(luò)、人員調(diào)配等場(chǎng)合發(fā)揮著不可替代的作用。本系統(tǒng)是基于嵌入式Linux的通信手持式終端,其體積較小、攜帶方便,采用鋰電池經(jīng)過(guò)開(kāi)關(guān)電源芯片降壓的方式給整個(gè)系統(tǒng)供電,其效率較傳統(tǒng)直流穩(wěn)壓大大提高。在戶外可視化娛樂(lè)、施工現(xiàn)場(chǎng)監(jiān)控、大型安保聯(lián)絡(luò)等場(chǎng)合均可使用,具有廣泛的應(yīng)用前景。



          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();