郭星 海軍701工廠,北京 100015
基于BF531的VoIP終端的設計與實現
郭星 海軍701工廠,北京 100015
本文介紹了VoIP原理和關鍵技術,分析了SIP協議的呼叫流程,提出基于BF531的VoIP終端的設計方案,實現了一款支持通話、短信、通信錄等多種功能的終端。
VoIP;BF531;會話初始化協議;Qt/E
VoIP即Voice Over IP,通過對語音進行數字化編碼壓縮成幀并封裝成IP包在Internet上傳輸,數據到達目的地后進行解壓、數模轉換還原語音,是一種利用Internet技術進行語音通信的新業務。由于VoIP技術促進了網絡資源利用,降低語音業務成本,因此在全球范圍內得到了迅速的發展,可以說是當前世界上發展最快,普及最廣的應用服務技術之一。鑒于VoIP在網絡和通信領域所占的重要地位以及表現出來的廣闊前景,本文提出一種在技術上可行的設計方案,即在高性能低功耗的BF531處理器平臺上實現VoIP終端。
1.1 VoIP原理
VoIP原理:運用語音壓縮算法對語音數據進行壓縮編碼,然后把語音數據按有關協議進行打包,經由IP網絡把數據包發送到接收地,接著再把語音數據包串起來,經過解碼解壓縮處理后,就可以恢復成原來的語音信號了,從而實現互聯網傳送語音的目的。
1.2 VoIP關鍵技術
VoIP完全建立在IP網絡基礎上,關鍵技術包含信令、編碼、實時傳輸等。
1.2.1 信令
保障電話呼叫的實現和話音質量好壞的前提就是信令,VoIP主要信令包括ITU-T的H.323和會話初始化協議SIP。
1.2.2 語音編碼
由于現代信息技術的不斷發展,尤其是互聯網和無線通信的蓬勃發展,作為多媒體通信中信息傳輸重要環節的語音,也越來越受到重視,對語音編碼要求也就越來越高,在要求低延時、低碼率的同時還要保證語音的高質量。語音壓縮編碼的目標就是要在盡可能低的比特率下,最大化的提取語音信號的特征信息,并且在接收端還原出清晰自然的聲音。
1.2.3 實時傳輸
VoIP電話是一種語音通信,需要對音頻數據進行實時傳輸。其中主要涉及到RTP協議和RTCP協議。
(1)RTP協議
RTP是一種應用型的傳輸層協議,為應用提供端到端的實時網絡傳輸。RTP需要與底層網絡協議相配合才可以實現傳輸數據的任務。由于語音傳輸對實時性要求較高,所以一般采用UDP來完成數據傳輸。
(2)RTCP協議
艦艇、飛行器和車輛對于核動力裝置的空間要求遠高于核能發電廠,而傳統核聚變反應堆體積、重量很大,遠超這些運輸工具的體積和重量限制,難以做成適配于這些需求的移動式能量供應源。洛馬公司稱該堆的體積僅為同功率傳統托卡馬克裝置的1/10,一座直徑7米、長18米的該型反應堆就可實現200兆瓦的熱功率輸出,運行一年所需的燃料量僅為25千克,可以在線補充燃料,無需像裂變堆那樣定期停堆更換燃料棒,可連續運行,大幅提升續航能力,而且設計與建造周期也只有數月,成本遠低于大型聚變裝置。
RTCP是配合RTP的一種實時傳輸控制協議。它自己沒有QoS保證功能,但是能通過階段性的向會話參與者傳送控制分組數據,并以此來提供網絡狀況的有關參數。
1.3 SIP協議
1.3.1 SIP簡介
S I P是2001年推出的I E T F標準(RFC3261),用于在IP網絡上建立、改變和終結多媒體會話,是基于應用層的控制協議。同時SIP可以邀請第三方加入會話,也支持重定向服務和名字映射。
1.3.2 SIP呼叫流程
SIP是通過用戶代理之間的交互消息來建立呼叫的,它繼承了Internet中客戶機/服務器的模式,即主叫代理充當UAC,被叫代理充當UAS。SIP大致有三種呼叫模式:a.UAC向UAS直接呼叫,b.UAC在重定向服務器的配合下進行重定向的呼叫,c.代理服務器代表UAC向被叫方發起呼叫。下面我們以直接呼叫為例(如圖1)說明呼叫過程的建立。

圖1 直接呼叫流程
2.1 VoIP終端組成框圖

圖2 VoIP終端組成框圖
2.2 硬件設計
硬件采用模塊化設計,包括IP電話處理器、電源管理模塊、語音處理模塊、網絡接口模塊、存儲器、鍵盤和LCD7部分。其中IP電話處理芯片采用BF531,語音芯片采用UDA1341。
2.3 軟件設計
終端軟件分驅動層、中間層和應用層三層設計,其中應用層軟件采用Qt/E開發,移植開源軟件linphone的庫文件,采用多線程設計思想,將整個應用程序劃分為四部分,分別由四個線程來實現。
UI線程主要用來響應用戶的鍵盤輸入和屏幕的顯示及傳遞消息到協議棧。通過在main.cpp程序中創建QApplication類型的對象實現。QApplication類負責圖形界面應用程序的控制流以及主要設置管理,包括主事件的循環、應用程序的初始化和結束及對話管理。
Codec語音線程主要完成語音處理,包括本地語音采集與編碼工作,網絡語音數據解碼、混音及播放等。
SIP信令交互線程調用linphone所依賴的eXoSIP和oSIP庫,使用UDP實現底層SIP接收/發送,并且封裝了SIP消息解析器。利用系統初始化時創建的eXosip_execute線程不斷查詢是否有數據需要處理。當它發現狀態機中有需要處理的數據時,它會調用在系統初始化時eXosip_set_callbacks 注冊的事件處理函數。利用函數eXosip_listen_ addr監聽端口,等待連接。如果有數據,立即接收并解析數據,放到事件隊列中。
RTP/RTCP收發線程調用linphone所依賴的oRTP庫,用Socket套接字實現RTP/RTCP數據包收發工作。RTP負責傳送語音數據,RTCP對數據分發質量等信息進行反饋。其中初始化函數:rtp_session_ init,它執行rtp會話的一些必要的初始話工作。發送函數:rtp_ session _send_with_ ts,發送rtp數據包,session是rtp會話結構體,返回值是成功發送到網絡中字節數。接收函數:rtp_ session _recv _with_ ts,接收rtp數據包。
首先向SIP服務器注冊主叫方和被叫方的SIP地址,分別為100200@192.168.1.231和100300@192.168.1.23,然后進行了通話測試,并進行了語音時延測量。通過測試發現VoIP終端能夠實現語音通話,語音清晰流暢,沒有出現明顯的時延和回音,達到預期效果,已在實際中應用。
本文在深入分析VoIP原理和SIP機制的基礎上,提出基于BF531處理器的設計方案,利用Qt/E開發出一款支持通話、短信、通訊錄等多種功能的終端。通過測試結果分析,設計的終端達到了預期的目標,驗證了本文提出的設計方案的可行性。
[1]徐熾,張聞芳.基于SIP協議的VOIP系統設計與實現[J].科學技術與工程,2008.8(10)
[2]倪繼利.Qt及Linux操作系統窗口設計[M].電子工業出版社,2006.P212~248
[3]陳峰.Blackfin系列DSP原理與系統設計[M].電子工業出版社,2010.P295~302
[4]陶慧明.基于SIP的嵌入式VoIP終端的設計與實現[學位論文].華中科技大學,2008
[5]刁扣鎖.短信息在嵌入式Linux系統中的設計與實現[學位論文].東南大學,2005
郭星,海軍701工廠,工程師,主要研究方向是嵌入式開發。
10.3969/j.issn.1001-8972.2012.05.024