當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]基于SIP的嵌入式無(wú)線可視電話終端設(shè)計(jì)與實(shí)現(xiàn)

目前,許多國(guó)家都采用H.323作為IP電話網(wǎng)關(guān)之間的協(xié)議,把IP電話網(wǎng)關(guān)作為電路交換網(wǎng)和IP網(wǎng)絡(luò)的接口。但是,在下一代網(wǎng)絡(luò)中,由于大量IP產(chǎn)品的應(yīng)用,使得端到端必須基于純IP網(wǎng)絡(luò)。3GPP已經(jīng)確定將SIP協(xié)議作為第三代移動(dòng)通信全I(xiàn)P網(wǎng)絡(luò)的控制協(xié)議。SIP(Session Initiation Protocol)協(xié)議是IETF于1999年提出的一種新的網(wǎng)絡(luò)多媒體通信交互信令,它相對(duì)于市場(chǎng)主體的H.323協(xié)議具有簡(jiǎn)單、擴(kuò)展性好、便于實(shí)現(xiàn)等優(yōu)點(diǎn)。憑借這些優(yōu)點(diǎn),其得到業(yè)界的青睞,逐步成為NGN和3G多媒體子系統(tǒng)域中的重要協(xié)議。市場(chǎng)上出現(xiàn)越來(lái)越多支持SIP的智能多媒體終端及相關(guān)軟件和軟交換設(shè)備,SIP將成為IP視頻電話業(yè)務(wù)的主流協(xié)議之一。

  本文以S3C2410為核心,通過(guò)幾個(gè)功能模塊的擴(kuò)展,開(kāi)發(fā)出一個(gè)基于SIP的嵌入式無(wú)線視頻電話終端。該終端除了具備數(shù)字化和網(wǎng)絡(luò)化特點(diǎn)外,還采用了開(kāi)放的SIP同其他電話設(shè)備進(jìn)行通信,從而將網(wǎng)絡(luò)中任何一臺(tái)主機(jī)變成終端。同時(shí),基于WIFI的無(wú)線網(wǎng)絡(luò)技術(shù)使得多媒體終端具備隨時(shí)部署的特點(diǎn),并且逐步得到企業(yè)的認(rèn)可。

1 總體方案設(shè)計(jì)

1.1 硬件系統(tǒng)結(jié)構(gòu)

  本電話終端系統(tǒng)的硬件方案為:使用三星公司的通用ARM芯片S3C2410配合嵌入式操作系統(tǒng)WINCE5.0.NET實(shí)現(xiàn)各種外圍接口,視音頻編解碼處理和傳輸控制協(xié)議等。這樣既不存在芯片成本高的問(wèn)題,又能保持很高的性能,可通過(guò)簡(jiǎn)單的程序下載實(shí)現(xiàn)軟件升級(jí)或增加新的編解碼標(biāo)準(zhǔn)。系統(tǒng)的硬件結(jié)構(gòu)框圖如圖1所示。實(shí)現(xiàn)該系統(tǒng)的要點(diǎn)是:在WINCE下添加USB攝像頭和USB無(wú)線網(wǎng)卡驅(qū)動(dòng)模塊。

1.2 系統(tǒng)軟件結(jié)構(gòu)

  系統(tǒng)硬件配置完成后,就需要定制平臺(tái)和編寫代碼實(shí)現(xiàn)各個(gè)功能模塊,最終實(shí)現(xiàn)整個(gè)系統(tǒng)。系統(tǒng)的軟件結(jié)構(gòu)如圖2所示。

(1)用戶層:用戶的使用層,實(shí)現(xiàn)用戶用鍵盤撥號(hào)、接聽(tīng)和掛斷電話等操作。

  (2)接口層:完成兩個(gè)功能,一是作為應(yīng)用層和傳輸層的接口—建立套接字(SOCKET);二是擁有調(diào)用模塊層各個(gè)模塊的接口函數(shù)。

  (3)模塊層:系統(tǒng)核心層包括:SIP模塊、數(shù)據(jù)傳輸模塊、語(yǔ)音和視頻模塊。SIP模塊實(shí)現(xiàn)OSIP協(xié)議棧的3個(gè)模塊:解析器、有限狀態(tài)機(jī)和工具模塊。數(shù)據(jù)傳輸模塊中傳輸層使用UDP協(xié)議,用RTP/RTCP進(jìn)行實(shí)時(shí)傳輸和控制。語(yǔ)音模塊和視頻模塊分別完成語(yǔ)音和視頻的采集與編解碼。

2 無(wú)線視頻電話終端的設(shè)計(jì)與實(shí)現(xiàn)

2.1 系統(tǒng)平臺(tái)設(shè)計(jì)

    在WinCE產(chǎn)品開(kāi)發(fā)中,內(nèi)核定制和應(yīng)用程序開(kāi)發(fā)是非常重要的工作。

2.2 音頻編碼模塊的實(shí)現(xiàn)

    系統(tǒng)初始化以后,音頻采集編碼模塊對(duì)應(yīng)的子線程就被創(chuàng)建并掛起,當(dāng)用戶需要采集音頻數(shù)據(jù)時(shí)再分別被喚醒。音頻采集編碼模塊主要完成語(yǔ)音的錄制和編碼。首先打開(kāi)波形音頻輸入設(shè)備,準(zhǔn)備好緩沖區(qū),然后利用聲卡把語(yǔ)音錄入到準(zhǔn)備好的緩沖區(qū)。一個(gè)緩沖區(qū)錄滿后,就可以對(duì)緩沖區(qū)中的數(shù)據(jù)進(jìn)行編碼。其中音頻采集通過(guò)調(diào)用Windows低級(jí)音頻API函數(shù)族WaveIn和WaveOut來(lái)實(shí)現(xiàn)。編碼通過(guò)調(diào)用G.7XX音頻接口提供的編解碼器接口實(shí)現(xiàn)。

2.3 視頻采集編碼模塊的實(shí)現(xiàn)

    筆者采用了OmniVision公司的OV7650 CMOS VGA 芯片。該芯片是一款高性能圖像壓縮芯片,輸出MJPEG視頻流數(shù)據(jù)。它的誤差穩(wěn)定性非常好,可以獲取清晰度很高的視頻圖像,還可以靈活設(shè)置各路視頻清晰度,壓縮幀數(shù)。本系統(tǒng)直接從攝像頭驅(qū)動(dòng)中獲取MJPEG視頻流數(shù)據(jù),圖像采集流程如圖3所示。圖像采集模塊用到的主要函數(shù)有:

 capInitCamera():用來(lái)初始化視頻設(shè)備,并獲取當(dāng)前可用的視頻設(shè)備數(shù)目。

    capSetVideoFormat():設(shè)置視頻格式和分辨率。本系統(tǒng)使用的視頻格式為RGB24,分辨率為320×240像素。

    capGrabFrame():從驅(qū)動(dòng)中抓取1幀圖像,并存儲(chǔ)在緩存FrameBuffer中。

    capGetLastJpeg():將抓取的MJPEG格式的圖像轉(zhuǎn)換成JPEG格式,送到無(wú)線發(fā)送模塊。

    視頻采集部分還有查詢視頻采集格式、設(shè)置明暗度、設(shè)置對(duì)比度等相關(guān)函數(shù),這里不再詳述。在完成視頻采集后,再對(duì)視頻流進(jìn)行MPEG-4的視頻壓縮。視頻編碼通過(guò)調(diào)用xvid視頻解碼器接口提供的編解碼器接口實(shí)現(xiàn)。音頻解碼回放模塊和視頻解碼回放模塊將接收到的音頻和視頻數(shù)據(jù)解碼后播放。視頻播放則將視頻數(shù)據(jù)格式轉(zhuǎn)化為RGB,再用函數(shù)DrawDibDraw將其顯示。

2.4 xvid解碼算法在實(shí)時(shí)傳輸部分的優(yōu)化

2.4.1 xvid解碼對(duì)零系數(shù)塊的處理分析

    在解碼過(guò)程中,如果知道圖像宏塊/塊為零系數(shù)塊,則可以直接跳過(guò)該塊的解碼過(guò)程(包括IQ和IDCT過(guò)程),從而大大節(jié)省解碼的計(jì)算量。在MPEG-4編碼器模型Xvid的程序中看到,在IDCT部分,參數(shù)CBP(編碼塊模式)是專門用來(lái)指示正在進(jìn)行編碼和不再進(jìn)行編碼的宏塊的信息。它是一個(gè)6bit的稽核,每個(gè)都代表了一個(gè)宏塊的一小塊。bit的狀態(tài)表示了該塊是否被編碼。如果塊的所有系數(shù)都為零,則塊就沒(méi)有被編碼。這個(gè)參數(shù)在進(jìn)行IQ、IDCT、反向掃描和重建之前被檢驗(yàn),這些過(guò)程并不對(duì)CBP為零的塊進(jìn)行。通過(guò)CBP解碼過(guò)程,在塊的基礎(chǔ)上的所有冗余計(jì)算都被減少了。

    在Xvid解碼程序decoder.c的decoder_mbinter()函數(shù)中,最后有如下判斷:

    If(cbp)

    Decoder_mb_decode(dec,cbp,bs,py_cur,pu_cur,pv_cur,reduced_resolution,pMB);

由此說(shuō)明在參數(shù)CBP為零的情況下是不做宏塊解碼工作的。

    但是這里可以看出,CBP參數(shù)為零代表的是整個(gè)宏塊量化后的DCT系數(shù)都為零,這里執(zhí)行的是對(duì)整個(gè)宏塊后續(xù)解碼的跳出工作。而對(duì)于整個(gè)宏塊量化后的DCT系數(shù)不全為零,只有幾個(gè)8×8的塊量化后的DCT系數(shù)為零的情況下,在decode.c的decoder_mb_decode()函數(shù)中有如下過(guò)程:

    For(i=0;i<6;i++){

    If(cbp&(1<<(5-i)))){

    Memset(block,0,64*sizeof(int16_t));

    Start_timer();

    Get_inter_block(bs,block,direction);

    Stop_coding_timer();

    …

    Stop_iquant_timer();

    Stop_idct_timer();

    }

    }

    從以上程序看出:由于CBP有6bit,每個(gè)bit都代表了一個(gè)宏塊中的一個(gè)8×8小塊,因此當(dāng)相應(yīng)的8×8塊為零時(shí),就直接跳過(guò)對(duì)該8×8塊的反向量化和IDCT過(guò)程。

2.4.2 xvid解碼中IDCT和IQ的優(yōu)化

    在IDCT程序中加入判斷語(yǔ)句,把全系數(shù)IDCT根據(jù)判斷前6個(gè)(精確度低一些)或者10個(gè)DCT系數(shù)的值分別進(jìn)行0系數(shù)IDCT變化(直接賦零)、3系數(shù)IDCT變換、64系數(shù)IDCT變換,這樣得到的程序計(jì)算量比原程序減少很多。

    在這里用If判斷,如果這10個(gè)DCT系數(shù)都為零,則認(rèn)為此塊是全0DCT系數(shù),直接令此塊的所有IDCT后的系數(shù)為零。如果前3個(gè)系數(shù)block[0]、block[1]、block[8]不全為零,后7個(gè)系數(shù)block[2]、block[3]、block[9]、block[10]、block[16]、block[17]、block[24]全為零,則認(rèn)為此子塊系數(shù)是3DCT系數(shù)的,直接對(duì)其進(jìn)行3系數(shù)的IDCT(程序已編好)。如果上述兩種都不滿足,就對(duì)其進(jìn)行全系數(shù)的IDCT。

    判斷工作在XVID程序的idct.c中進(jìn)行,在原始的函數(shù)idct_int32(short*const block)中加入判斷程序。

    IQ部分的優(yōu)化思路和IDCT優(yōu)化類似,不再詳述。

2.5 用戶代理的實(shí)現(xiàn)

    SIP UA模塊用于會(huì)話的建立、修改、終止,起著信令控制作用。此模塊使用的SIP協(xié)議棧是OSIP2和EXOSIP。

    OSIP2協(xié)議棧的開(kāi)發(fā)步驟為:

    (1)初始化:主要調(diào)用函數(shù)osip_global_init()和osip_init(),操作代碼如下:

    Osip_t*osip;

    if(!osip_global_init())

    Return -1;

    If(!osip_init())

    Return -1;

    Osip棧需要在運(yùn)行前初始化。在使用Osip棧之前,osip_global_init()函數(shù)是第一個(gè)被調(diào)用的,并且只能調(diào)用一次。調(diào)用這個(gè)函數(shù)將初始化語(yǔ)法分析。

    (2)注冊(cè)回調(diào)函數(shù):包括發(fā)送消息、結(jié)束事務(wù)、發(fā)送失敗和4個(gè)狀態(tài)機(jī)相關(guān)的函數(shù)。

    (3)建立事務(wù):在注冊(cè)完回調(diào)函數(shù)后,應(yīng)用可以建立用來(lái)調(diào)用OSIP的解析器。

    EXOSIP有二種工作模式:事件模式和回調(diào)模式。本軟件采用的是事件模式。使用一個(gè)定時(shí)器,定時(shí)到時(shí)就通過(guò)函數(shù)eXosip_wait_event()去獲取SIP事件,SIP事件主要有EXOSIP_CALL_NEW、EXOSIP_CALL_ANSWERED等。事件獲取后,調(diào)用相應(yīng)的事件處理函數(shù),如SipCallNew、SipCallRinging、SipCallAnswered等。要建立、修改、終止呼叫還需要調(diào)用EXOSIP的osip_build_initial_invite、eXosip_initiate_call等函數(shù)。

2.6 音視頻數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)

    利用RTP/RTCP實(shí)現(xiàn)語(yǔ)音視頻流的實(shí)時(shí)傳輸。RTP負(fù)責(zé)數(shù)據(jù)發(fā)送和接收,RTCP負(fù)責(zé)網(wǎng)絡(luò)丟包、誤碼情況的反饋等。通過(guò)調(diào)用JRTPLIB提供的庫(kù)函數(shù)就可以開(kāi)發(fā)出高質(zhì)量的音/視頻傳輸程序。

    發(fā)送端調(diào)用JRTPLIB提供的庫(kù)函數(shù)實(shí)現(xiàn)語(yǔ)音視頻等的實(shí)時(shí)發(fā)送過(guò)程為:(1)通過(guò)調(diào)用RTPSession類的構(gòu)造函數(shù)創(chuàng)建一個(gè)RTP會(huì)話實(shí)例,然后調(diào)用RTPSession類的方法對(duì)其初始化,設(shè)置負(fù)載類型、標(biāo)識(shí)和時(shí)戳增量,以及指定流媒體的目標(biāo)地址;(2)設(shè)置RTP會(huì)話參數(shù),通過(guò)調(diào)用RTPSessionParams類的SetOwnTimeStampUnit()方法設(shè)置時(shí)間戳和RTP傳輸參數(shù);(3)通過(guò)調(diào)用SendPacket()方法向目標(biāo)地址發(fā)送采集編碼后的音視頻數(shù)據(jù)。接收端的創(chuàng)建RTP會(huì)話實(shí)例和RTP會(huì)話參數(shù)設(shè)置與發(fā)送端的設(shè)置相同。

    本文設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)基于SIP的嵌入式網(wǎng)絡(luò)無(wú)線可視電話終端模型。該終端支持音頻和視頻的實(shí)時(shí)通信。終端之間采用開(kāi)放的SIP進(jìn)行通信,SIP的應(yīng)用避免了采用私有協(xié)議所帶來(lái)的封閉性,提高了同其他設(shè)備的互通性;同時(shí)利用WiFi技術(shù)提高了視頻電話終端的便攜性。SIP協(xié)議具有簡(jiǎn)單、可擴(kuò)展的特性,將會(huì)在下一代網(wǎng)絡(luò)中占有重要地位。目前對(duì)SIP在視頻電話系統(tǒng)中的應(yīng)用還處于試驗(yàn)階段,能與之通信的SIP設(shè)備還不多,但隨著NGN平臺(tái)的建立和SIP設(shè)備的不斷增多,其靈活性和互通性的優(yōu)點(diǎn)會(huì)逐漸體現(xiàn)出來(lái)。支持多人的可視電話終端將是進(jìn)一步要研究的課題,前景一片光明。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉