• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Linux和Qt的智能家居系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

      2012-07-03 03:36:48劉治國(guó)陳新華
      電子技術(shù)應(yīng)用 2012年4期
      關(guān)鍵詞:編解碼音視頻線程

      劉治國(guó),陳新華

      (山東科技大學(xué) 信息科學(xué)與工程學(xué)院,山東 青島266590)

      針對(duì)智能家居的特點(diǎn)及應(yīng)用背景,設(shè)計(jì)了一種家庭多功能控制系統(tǒng)。該系統(tǒng)采用飛思卡爾公司ARM Cortex A8系列的i.MX51處理器作為MCU,在其上移植嵌入式Linux作為軟件開(kāi)發(fā)平臺(tái),并利用Qt相關(guān)技術(shù)為基礎(chǔ)設(shè)計(jì)友好的用戶(hù)界面,實(shí)現(xiàn)了ARM板的各功能模塊與服務(wù)器端的交互。系統(tǒng)同時(shí)具備數(shù)字可視對(duì)講、信息收發(fā)、家電控制、安防報(bào)警、家庭娛樂(lè)等功能。

      1 系統(tǒng)的架構(gòu)和功能

      家庭智能控制系統(tǒng)主要由室內(nèi)分機(jī)、單元門(mén)口機(jī)、小區(qū)圍墻機(jī)、管理中心終端機(jī)、管理中心服務(wù)器以及附件組成。系統(tǒng)采用分布式網(wǎng)絡(luò)結(jié)構(gòu),可以根據(jù)住戶(hù)數(shù)量對(duì)系統(tǒng)的容量進(jìn)行擴(kuò)充。

      (1)室內(nèi)機(jī)是用戶(hù)在室內(nèi)進(jìn)行操作的主要平臺(tái),其功能組成為:可視對(duì)講、信息服務(wù)、家電控制、安防報(bào)警、家庭娛樂(lè)等??梢晫?duì)講模塊主要實(shí)現(xiàn)雙向可視通話、視頻監(jiān)控、留言/留影、開(kāi)鎖等功能;信息服務(wù)模塊主要用來(lái)收發(fā)物業(yè)信息和小區(qū)廣播,支持文本、圖片形式,并實(shí)現(xiàn)與可視對(duì)講模塊的影音共享;家電控制模塊包括對(duì)燈光、窗簾、空調(diào)、電梯等設(shè)施的無(wú)線控制,并預(yù)設(shè)了情境模式;安防報(bào)警模塊支持對(duì)煙感、門(mén)磁、煤氣泄漏檢測(cè)等的自動(dòng)報(bào)警,并可通過(guò)GPRS/3G技術(shù)將報(bào)警信息傳送到用戶(hù)手機(jī)上;家庭娛樂(lè)模塊支持常見(jiàn)格式的音視頻文件的播放(主要依靠硬件解碼)以及對(duì)常見(jiàn)格式的圖片的瀏覽(電子相框)。

      (2)單元門(mén)口機(jī)的主要功能是完成與所在單元樓的任意住戶(hù)以及管理中心機(jī)的可視通話,除了具備留言/留影功能外,還提供觸摸屏校準(zhǔn)、背光調(diào)節(jié)、密碼設(shè)置等功能。

      (3)圍墻機(jī)的基本功能和單元門(mén)口機(jī)類(lèi)似,但可視對(duì)講、留言/留影功能是針對(duì)小區(qū)內(nèi)所有住戶(hù)的。

      (4)中心機(jī)是整個(gè)系統(tǒng)的神經(jīng)中樞,管理人員通過(guò)管理中心的控制設(shè)備管理各子系統(tǒng)的終端,其功能包括:可視對(duì)講、視頻監(jiān)控、查看報(bào)警信息、排除設(shè)備故障、信息服務(wù)、系統(tǒng)設(shè)置、遠(yuǎn)程管理等。

      2 系統(tǒng)的實(shí)現(xiàn)方案

      2.1 Qt的信號(hào)/槽機(jī)制

      Qt是一個(gè)跨平臺(tái)的C++應(yīng)用程序框架,完全面向?qū)ο蟆⒁子跀U(kuò)展且允許真正的組件編程。Qt的C++類(lèi)庫(kù)封裝了適應(yīng)不同操作系統(tǒng)的訪問(wèn)細(xì)節(jié),這使得它能夠快速地部署于各種桌面與嵌入式系統(tǒng)中[1]。

      信號(hào)/槽機(jī)制是 Qt的核心特性,這種機(jī)制真正實(shí)現(xiàn)了消息的封裝,完全可以取代原始的回調(diào)和消息機(jī)制。信號(hào)和槽的連接通過(guò)connect()函數(shù)完成,connect()函數(shù)是 QObject類(lèi)中的靜態(tài)函數(shù),其函數(shù)原型如下:

      Bool QObject::connect(const QObject*sender,const char*signal,const QObject*receiver,const char*member)

      其中,sender和receiver是指向QObject的指針,signal和slot是不帶有參數(shù)的函數(shù)名。

      2.2 基于XML格式的Socket多線程通信

      Linux中的網(wǎng)絡(luò)編程主要通過(guò)Socket接口實(shí)現(xiàn),在 Qt環(huán)境里,對(duì) Socket進(jìn)行了封裝,并建立了相應(yīng)的QTcpSocket類(lèi)來(lái)實(shí)現(xiàn)TCP客戶(hù)端和服務(wù)器的通信。QTcpSocket繼承了QIODevice,所以QTcpSocket可以使用 QDataStream進(jìn)行數(shù)據(jù)的讀取和寫(xiě)入。

      可擴(kuò)展標(biāo)記語(yǔ)言XML(eXtensible Markup Language)是一種用于數(shù)據(jù)交換和數(shù)據(jù)存儲(chǔ)的多用途文本格式。對(duì)于XML格式的數(shù)據(jù),Qt中的QtXml模塊提供了DOM和SAX兩種處理方式。本文采用的DOM方式把XML文檔轉(zhuǎn)換成一個(gè)可以遍歷的樹(shù)形結(jié)構(gòu),這樣便可以隨意訪問(wèn)其中的節(jié)點(diǎn),因此要明顯簡(jiǎn)潔得多。

      室內(nèi)機(jī)和中心機(jī)之間的通信采用多線程方式實(shí)現(xiàn)。多線程方式具有降低內(nèi)存、提高程序響應(yīng)速度等優(yōu)點(diǎn),特別適用于嵌入系統(tǒng)。系統(tǒng)中建立了三個(gè)主線程:(1)GUI線程:用于執(zhí)行 main()主函數(shù),響應(yīng)用戶(hù)的界面操作;(2)tcpServer偵聽(tīng)線程:用于對(duì)指定端口進(jìn)行監(jiān)聽(tīng);(3)tcpSocket傳輸線程:負(fù)責(zé)消息的接收和回復(fù)。下面以用戶(hù)主動(dòng)更新小區(qū)廣播為例詳細(xì)說(shuō)明Socket通信的流程:(1)室內(nèi)機(jī)首先啟動(dòng)一個(gè)線程,將用戶(hù)的更新請(qǐng)求結(jié)構(gòu)轉(zhuǎn)化成標(biāo)準(zhǔn)的XML格式(如果是新設(shè)備第一次開(kāi)機(jī),要先手動(dòng)進(jìn)行 IP的設(shè)置),(2)調(diào)用 connectToHost()函數(shù)請(qǐng)求與中心機(jī)建立連接,處于監(jiān)聽(tīng)狀態(tài)的中心機(jī)接到請(qǐng)求后,就會(huì)分配一個(gè)Socket套接字來(lái)處理連接:首先根據(jù)解析出來(lái)的XML的Type節(jié)點(diǎn)判斷請(qǐng)求類(lèi)型,如果是純文本則從數(shù)據(jù)庫(kù)的Text表讀取,如果是圖片則從硬盤(pán)讀取,然后調(diào)用 QIODevice::write()函數(shù)發(fā)送;(3)室內(nèi)機(jī)接到應(yīng)答信號(hào)readyRead()后就開(kāi)始進(jìn)行信息的收取,根據(jù)消息的Type節(jié)點(diǎn)類(lèi)型分別寫(xiě)入數(shù)據(jù)庫(kù)和硬盤(pán)。Socket多線程通信流程如圖1所示。

      2.3 并行數(shù)據(jù)庫(kù)設(shè)計(jì)

      為了實(shí)現(xiàn)數(shù)據(jù)庫(kù)的并行操作,使GUI界面與數(shù)據(jù)庫(kù)相分離,從而讓界面能更快地響應(yīng)用戶(hù)的一般操作,同樣要用到Qt的多線程編程。在系統(tǒng)啟動(dòng)時(shí),首先要建立一個(gè)全局對(duì)象m_query,以便于各個(gè)實(shí)體類(lèi)與數(shù)據(jù)庫(kù)類(lèi)進(jìn)行連接。這樣,每當(dāng)有數(shù)據(jù)庫(kù)操作請(qǐng)求時(shí)便會(huì)實(shí)例化一個(gè)m_query來(lái)創(chuàng)建一個(gè)線程用于處理該請(qǐng)求。m_query對(duì)象中包含兩個(gè)類(lèi):(1)QueryThread,用于為每個(gè)數(shù)據(jù)操作創(chuàng)建一個(gè)線程;(2)Worker,用于實(shí)現(xiàn)數(shù)據(jù)庫(kù)的相關(guān)操作,如加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)、進(jìn)行數(shù)據(jù)查詢(xún)/插入/刪除等。

      圖2為數(shù)據(jù)庫(kù)的查詢(xún)操作流程。首先在實(shí)體類(lèi)里創(chuàng)建兩個(gè)connect連接,分別用于發(fā)送和接收查詢(xún)結(jié)果,并生成SQL語(yǔ)句向QueryThread提交查詢(xún)請(qǐng)求信號(hào)。QueryThread收到請(qǐng)求后為其創(chuàng)建一個(gè)線程,并交由Worker類(lèi)進(jìn)行具體數(shù)據(jù)庫(kù)查詢(xún)操作。Worker類(lèi)得出查詢(xún)結(jié)果后,先傳遞給QueryThread,再由其將查詢(xún)結(jié)果返回到實(shí)體類(lèi)。

      圖2 數(shù)據(jù)庫(kù)查詢(xún)操作流程圖

      關(guān)鍵代碼如下:

      connect(this,SIGNAL(seek(const QString&)),m_query,SIGNAL(seek_execute(const QString&)));

      connect(m_query,SIGNAL(seek(const QList<QSqlRecord>&)),this,SLOT(slotResult(const QList<QSqlRecord>&)));

      void text::database(){

      QString sql="select*from Text order by date desc";

      emit seek_execute(sql);

      }

      2.4 音視頻同步傳輸技術(shù)

      i.MX51處理器包含了支持硬件視頻編解碼的VPU單元,并自帶了完整的多媒體解決方案。因此,系統(tǒng)中采用其自帶的多媒體軟件包進(jìn)行音視頻流的采集和編解碼[2]。

      考慮到小區(qū)內(nèi)可視通話時(shí)因并發(fā)數(shù)過(guò)大而可能導(dǎo)致的網(wǎng)絡(luò)擁塞情況,系統(tǒng)還需要提供一定的QoS機(jī)制來(lái)保證在網(wǎng)絡(luò)帶寬較低時(shí)也能達(dá)到音視頻的同步傳輸。本文采用基于時(shí)間戳的實(shí)時(shí)同步傳輸技術(shù),通過(guò)設(shè)置可變大小的緩沖區(qū)機(jī)制,根據(jù)小區(qū)網(wǎng)絡(luò)情況自動(dòng)調(diào)節(jié)傳輸參數(shù),以音頻質(zhì)量?jī)?yōu)先保證為原則,根據(jù)時(shí)間戳實(shí)時(shí)調(diào)節(jié)視頻數(shù)據(jù)的播放。具體實(shí)現(xiàn)過(guò)程如下[3]:

      (1)發(fā)送端采用兩個(gè)獨(dú)立的進(jìn)程分別對(duì)音視頻信息進(jìn)行采樣和打包,然后放到各自的緩沖隊(duì)列中等待發(fā)送。

      (2)音視頻數(shù)據(jù)通過(guò)同一個(gè)通道發(fā)送到網(wǎng)絡(luò)(采用信號(hào)量機(jī)制保證音視頻數(shù)據(jù)對(duì)通道的互斥訪問(wèn))。

      (3)由于音視頻兩個(gè)數(shù)據(jù)包的長(zhǎng)度差別很大,所以將接收端收到的數(shù)據(jù)根據(jù)包的大小進(jìn)行區(qū)分。

      (4)音視頻各自拆包組幀。由于人的聽(tīng)覺(jué)對(duì)聲音的不連續(xù)比視覺(jué)對(duì)圖像的不連續(xù)更敏感,所以采用音頻流作為主流,視頻流作為從流??蛻?hù)端接收到音頻數(shù)據(jù)包后,不必與視頻數(shù)據(jù)包協(xié)調(diào)就可立即播放,而視頻幀到達(dá)時(shí)則根據(jù)時(shí)間戳進(jìn)行對(duì)比,從而進(jìn)行相應(yīng)的同步處理。

      (5)為保證音視頻的實(shí)時(shí)同步,采用多線程分別對(duì)音頻和視頻進(jìn)行播放。

      3 i.MX51平臺(tái)移植

      3.1 搭建LTIB開(kāi)發(fā)環(huán)境

      LTIB(Linux Target Image Builder)是飛思卡爾公司開(kāi)發(fā)的一個(gè)用于部署B(yǎng)SP的工具,含有U-Boot等引導(dǎo)加載程序,支持Bootloader和內(nèi)核映像的構(gòu)建。利用該工具,可以定制出符合GNU/Linux標(biāo)準(zhǔn)的跨平臺(tái)的根文件系統(tǒng)。本設(shè)計(jì)選擇使用飛思卡爾公司提供的L2.6.31_10.07.11_ER_source.tar.gz集成源碼包,在一臺(tái)安裝了Ubuntu 10.04操作系統(tǒng)的PC機(jī)上配置安裝LTIB[4]。其過(guò)程如下:

      (1)解壓縮源碼包,執(zhí)行./install進(jìn)入安裝LTIB的命令提示。

      (2)執(zhí)行./ltib進(jìn)入LTIB的配置界面。

      (3)在 LTIB配置 Platform時(shí)選擇i.MX51平臺(tái)。

      (4)配置 Kernel時(shí)選擇 CLAA WVGA Panel(LCD 觸摸屏驅(qū)動(dòng))和 SoC Audio support for IMX-SGTL5000(聲卡驅(qū)動(dòng)),其他保持默認(rèn)。

      (5)將交叉編譯工具 arm-none-linux-gnueabi-gcc加入PATH環(huán)境變量,在ltib根目錄執(zhí)行下述命令,交叉編譯 Qt庫(kù):

      ./ltib-m prep-p qt-embedded.spec

      ./ltib-m scbuild-p qt-embedded.spec

      (6)執(zhí)行 make install,在 ltib下的 rootfs目錄就會(huì)生成相應(yīng)的U-Boot、內(nèi)核和文件系統(tǒng),將將其復(fù)制到目標(biāo)板的TF卡上。

      3.2 架設(shè)NFS文件系統(tǒng)

      為了簡(jiǎn)化調(diào)試過(guò)程和縮短開(kāi)發(fā)周期,在Linux主機(jī)上建立了NFS網(wǎng)絡(luò)文件系統(tǒng),這樣就實(shí)現(xiàn)了宿主機(jī)與目標(biāo)板的文件共享。開(kāi)發(fā)過(guò)程簡(jiǎn)化為:Linux主機(jī)編譯生成目標(biāo)平臺(tái)的可執(zhí)行文件→復(fù)制文件到NFS共享目錄→目標(biāo)板運(yùn)行程序,從而省去了重復(fù)制作鏡像、下載鏡像、重啟開(kāi)發(fā)板等步驟,節(jié)省了大量的開(kāi)發(fā)時(shí)間。目標(biāo)板的NFS啟動(dòng)信息如圖3所示。

      4 系統(tǒng)測(cè)試及結(jié)果

      4.1 并發(fā)測(cè)試

      并發(fā)測(cè)試主要用來(lái)測(cè)試多個(gè)用戶(hù)同時(shí)訪問(wèn)同一個(gè)應(yīng)用程序、同一個(gè)數(shù)據(jù)記錄時(shí)是否存在死鎖或其他問(wèn)題。由于本系統(tǒng)是面向一個(gè)小區(qū)的住戶(hù),因此系統(tǒng)的并發(fā)測(cè)試尤為重要。

      數(shù)據(jù)庫(kù)并發(fā)測(cè)試:室內(nèi)機(jī)開(kāi)啟多個(gè)線程同時(shí)訪問(wèn)中心機(jī)服務(wù)器,界面并不會(huì)因大量的數(shù)據(jù)操作而出現(xiàn)“凍結(jié)”現(xiàn)象,CPU占用穩(wěn)定,數(shù)據(jù)庫(kù)返回結(jié)果顯示正常。

      信息發(fā)布測(cè)試:中心機(jī)開(kāi)啟多個(gè)線程同時(shí)發(fā)送廣播信息,各室內(nèi)機(jī)接收正常,不會(huì)出現(xiàn)顯示錯(cuò)誤或“丟包”現(xiàn)象。

      4.2 跨網(wǎng)段測(cè)試

      考慮到小區(qū)用戶(hù)一般在幾百甚至上千,一個(gè)網(wǎng)段的IP地址不能滿足需求。為了檢測(cè)在不同網(wǎng)段下通信模塊能否正常工作,使用一臺(tái)華為S5300交換機(jī)(switch)和兩臺(tái)華為5200交換機(jī)搭建了一個(gè)小型的網(wǎng)絡(luò)環(huán)境進(jìn)行相關(guān)測(cè)試。如圖4所示,測(cè)試采用IPv4靜態(tài)路由,使不同網(wǎng)段的任意兩臺(tái)室內(nèi)機(jī)之間能夠互通。測(cè)試表明,分屬不同網(wǎng)段的室內(nèi)機(jī)之間,可視通話、信息互發(fā)等模塊均正常工作,從而驗(yàn)證了本設(shè)計(jì)方案的可行性。

      4.3 可視對(duì)講性能測(cè)試

      可視對(duì)講性能測(cè)試主要是檢測(cè)室內(nèi)機(jī)終端中音視頻的采集、編解碼、收發(fā)和顯示。對(duì)于音視頻的采集、收發(fā)和顯示,可通過(guò)揚(yáng)聲器和LCD顯示直觀地檢測(cè)。而對(duì)編解碼的測(cè)試則比較復(fù)雜,本設(shè)計(jì)是從最長(zhǎng)時(shí)間、最短時(shí)間和平均時(shí)間三個(gè)方面來(lái)測(cè)試編解碼一幀音視頻所需要消耗的時(shí)間。i.MX51平臺(tái)上音視頻編解碼的性能測(cè)試如表1所示。

      由表1可以看出,i.MX51平臺(tái)上能夠?qū)崟r(shí)地完成音頻和視頻通信,且音頻清晰、視頻流暢、失真度小,達(dá)到了可視對(duì)講對(duì)音視頻編解碼器的實(shí)時(shí)性要求。

      本文采用Linux和Qt相關(guān)技術(shù),在飛思卡爾公司i.MX51平臺(tái)上設(shè)計(jì)了一種多功能的智能家居控制系統(tǒng),實(shí)現(xiàn)了客戶(hù)端與服務(wù)器的Socke通信和音視頻同步傳輸?shù)群诵墓δ?。下一步還需要擴(kuò)展家電控制、安防控制等功能。

      表1 音視頻編解碼性能測(cè)試結(jié)果

      [1]楊瀟.基于 Qt的富客戶(hù)端軟件設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2009.

      [2]BLANCHETTE J,SUMMERFIELD M.C++GUI programming with Qt4,second edition[M].北京:電子工業(yè)出版社,2008.

      [3]Freescale Cooperation.i.MX51_EVK_Linux_BSP_userguide.2010.

      [4]RICQUEBOURG V,DURAND D,MENGAETAL D.Context inferring in the smart home:an SWRL approach[C].21st International Conference on Advanced Information Networking and Applications Workshops(AINAW'07).IEEE CS Press,2007.

      猜你喜歡
      編解碼音視頻線程
      1553B總線控制器編解碼設(shè)計(jì)
      3KB深圳市一禾音視頻科技有限公司
      大型民機(jī)試飛遙測(cè)視頻編解碼方法研究
      基于H.265編解碼的高清視頻傳輸系統(tǒng)研究
      WIFI音視頻信號(hào)傳輸?shù)年P(guān)鍵問(wèn)題探究
      電子制作(2018年12期)2018-08-01 00:48:06
      高速公路整合移動(dòng)音視頻系統(tǒng)應(yīng)用
      淺談linux多線程協(xié)作
      Roland專(zhuān)業(yè)音視頻新技術(shù)研討會(huì)在上海召開(kāi)
      主流視頻編解碼軟件的硬件性能分析與設(shè)計(jì)
      Linux線程實(shí)現(xiàn)技術(shù)研究
      云林县| 田东县| 偃师市| 漳浦县| 麟游县| 德钦县| 德保县| 弥渡县| 东台市| 志丹县| 玉龙| 收藏| 怀宁县| 金沙县| 祁东县| 广灵县| 祁连县| 九江县| 乳源| 弋阳县| 庆元县| 新河县| 习水县| 获嘉县| 泸水县| 普陀区| 麻阳| 明溪县| 呼伦贝尔市| 北票市| 河北区| 师宗县| 迭部县| 通河县| 保定市| 彩票| 辛集市| 莱阳市| 麻城市| 平罗县| 高要市|