基于嵌入式Linux和MiniGUI的SIP電話設計
0 引言
隨著VoIP的迅猛發展,越來越多的個人用戶正在使用軟件電話、IP電話通過VoIP系統撥打國內和國際長途,IP電話的需求量越來越大,同時,人們對IP電話的要求也越來越高,例如要求IP電話體積小、方便攜帶、功耗低、待機時間長、漂亮的人機交互界面,功能可擴展等。解決這些需求的可行方案就是用嵌入式系統,具體而言就是采用一款32位嵌入式處理芯片(如ARM、Power PC),將Linux操作系統和MiniGUI圖形庫經過裁減移植到這些嵌入式處理芯片所構建的硬件平臺上。由于Linux具有強大的網絡功能,而MiniGUI是一款優秀的針對嵌入式Linux的輕量級圖形用戶界面庫,在它們的基礎上做應用開發,能夠保證IP電話的穩定性和功能擴展,也能開發出漂亮的人機交互界面。
目前用來實現VoIP系統的協議有三種:SIP、MGCP和H.323,其中SIP協議是應用得最廣泛的協議,所謂SIP電話就是支持SIP協議的IP電話。
1 SIP電話實現方案
根據IP電話的功能需求,SIP電話應當實現人機界面的交互、呼叫處理、語音的采集和播放、語音的編碼和解碼、語音的實時傳輸。本設計人機界面的交互使用嵌入式系統硬件平臺上的LCD和功能按鍵,采用MiniGUI圖形庫和Linux按鍵驅動;呼叫處理模塊使用硬件平臺上的網絡接口,采用eXoSIP協議棧;語音的采集與播放使用硬件平臺上的音頻接口,采用Linux音頻設備驅動;語音的編碼和解碼直接采用開源G.7-29A源代碼;語音的實時傳輸使用RTP協議,采用開源的JRTPLIB庫。
SIP電話軟件結構圖如圖1所示。SIP電話由八個模塊組成。每一模塊對應一個線程。其中,主線程(線程1)的任務是:a.加載配置文件到內存中;b.初始化音頻設備和功能按鍵設備;c.創建RTP會話實例和初始化eXoSIP協議棧;d.初始化四個數據區緩沖結構;e.創建、管理、撤消子線程;f. 顯示SIP配置文件的配置信息和狀態信息,處理來自呼叫處理模塊子線程的消息。呼叫處理模塊子線程(線程2)的任務是:通過調用eXoSIP協議棧的API函數,實現SIP電話的呼叫過程控制。語音采集模塊子線程(線程3)的任務是:實現語音的采集并將采集到的語音數據存儲到全局數據緩沖區隊列1中。語音編碼模塊子線程(線程4)的任務是:從全局數據緩沖區隊列1中讀取PCM碼流并對其進行編碼,將轉化過后的G.729碼流存儲到全局數據緩沖區隊列2中。數據發送模塊子線程(線程5)的任務是:從全局數據緩沖區隊列2中提取G.729碼流,打包成RTP數據包發送到出去。數據接收模塊子線程(線程6)的任務是:檢測接收端口上的RTP語音包,提取G.729碼流存儲到全局數據緩沖區隊列3中。語音解碼模塊子線程(線程7)的任務是:從全局數據緩沖區隊列3中讀取G.729碼流對其進行解碼,將轉化過后的PCM碼流存儲到全局數據緩沖區隊列4中。語音播放模塊子線程(線程8)的任務是:從全局數據緩沖區隊列4中讀取PCM碼流,通過D/A轉換成模擬語音信號。
評論