2014/04/29 meeteasy
1、引言
VolP(Voice over Internet Protoco1)技術,是在以 IP(internet Protoco1)為網絡層協議的計算機網絡中進行語言通信的技術,通常所說的網絡電話即為IP電話,也可稱作VolP電話。VoIP可分為軟件電話和硬件電話,軟件電話就是在電腦上下載網絡電話軟件,購買網絡電話卡,通過耳麥和對方手機、固話進行通話。目前網絡電話中使用的主流協議 有兩種:H.323協議、SIP(Session Initiation Protoco1)協議。H.323協議的技術比較成熟,有助于軟件供應商開發出性能穩定的設備,消除不同供應商互操作中出現的問題。SIP被認為是一種輕量級協議,因為它使用的簡單文本命令可以被終端設備生成和分析,且只使用6個主要指令管理呼叫控制信息。相對于H.323協議而言,SIP的開發更為簡單,擁有豐富的擴展功能,且為下一帶網絡(NGN) 的核心協議,因此SIP已成大勢所趨 。
2、VOIP系統
IP電話主要是依靠因特網來傳輸數據的,因此各終端要直接或間接連接到網絡才能相互通信,個人PC或其他的固定終端可以直接通過網線連接到網絡,而移動終端則可以通過WiFi等無線通信技術來與網絡相連,當然通話的時候要盡量到信號強的地方去,以達到最佳通話效果。網絡中的各個終端 必須到指定的服務器上注冊,這樣各終端才能識別對方。為了讓IP終端能夠與傳統電話進行通信,因特網要通過代理服務器與公共交換電話網(PSTN)相連,再經過公共交換電話網服務提供商的服務器。因特網中的終端就可以與傳統電話進行通信了,系統的總體框架如圖1所示。
3、終端硬件平臺實現
一個典型的移動VOIP終端系統應該能有效的完成語音的編解碼,提供必要的存儲設備來儲存數據,網絡接口,還有觸摸屏以便用戶與用戶進行友好交互,如圖2所示。
系統處理器采用基于ARM9內核架構的芯片, ARM內核芯片采用的是精簡指令集,由于其高性能、廉價、低功耗等特點在移動計算領域取得了很大的成功。平臺采用的是三星公司針對移動PDA所設計的基于ARM9內核的處理器芯片s3C2440,主頻為400MHz,最高可達533MHz,足以滿足系統需求。Flash芯片可以使用三星公司的NAND FLASH 芯片,也可以使用東芝、現代的FLASH芯片。移動終端通話過程中的數據是通過網絡傳輸的,所以終端必須要有以太網接口,典型的接口芯片有 DM9000以及RTLS019AS,而后通過RJ一45接口與網絡相連。當然為了移動方便可以接上無線網卡芯片,通過WiFi無線接人網絡,以達到隨時隨地通信 的目的。語音信號要經過編碼才能在網絡中傳輸,當然也要經過解碼才能通過聽筒播放出來,編解碼芯片采用飛利浦半導體公司的UDA1341音頻編解碼器,通過它來實現編解碼系統。市面上的觸摸屏 有很多種品牌,可以從中選出適合自己的型號,接人到系統中。
4、終端軟件平臺的實現
軟件平臺的實現主要有三個方面的內容,包括整個系統平臺的搭建,PJSIP協議的移植及軟終端 的實現,圖形用戶界面(GUI)設計。通過移植開源的嵌人式linux操作系統,可以減少開支。移植過程包括網卡驅動、聲卡驅動、觸摸屏驅動等各種驅動程序的移植,幸運的是在下載的linux內核源代碼中, 大部分的驅動程序都已經包含在其中,且大多都是 按照一定的模式來移植的,故可節省大量的開發時間。
4.1 系統平臺搭建
目前嵌入式產品都采用宿主機/目標機的模式。在宿主機中安裝了桌面linux操作系統,如fedora、ubuntu等。然后配置開發必須的服務,包括網絡文件系統服務(NFS),簡單文本傳輸協議服務(TFI1P)等。接著就是安裝交叉編譯器。由于最終設計的程序終是要在目標機上運行的,故不能使用宿主機上的原有編譯器對程序進行編譯,否則編譯出來的程 序將不能在目標機上運行,這時就需要交叉編譯器了。目前在網絡上有針對arm-linux的交叉編譯器可以下載,當然也可以使用特定的制作程序來制作自己的交叉編譯器,如crosstool-ng、ptxdist等。制作交叉編譯器的時候要注意添加對嵌人式應用二進制接口(EABI)的支持。
4.2 PJSIP移植
PJSIP是實現SIP協議的眾多開源協議棧中的一種,代碼全部由C語言來實現。由于其支持的平臺很多,代碼占用空間很小,系統資源使用率低,擴展性強等特點,非常適合在嵌人式系統中應用,且官方網站中提供了大量的開發文檔,為開發人員進行開發提供了便利。
首先從PJSIP官方網上下載源碼包,并解壓出來。進入PJSIP根目錄,修改build.mak文件,添加對開發平臺的支持:
export MACHINE—NAME:=arm
export OS—NAME:=linux
export CC—NAME:=gcc
export HOST—NAME:=linux
export TARGET—NAME:=arm-linux
export CROSS—COMPILE:=alT/l-linux-
依次設置了目標機的處理器、宿主機的系統、宿主機的編譯器、宿主機的名稱、目標機的名稱以及交 叉編譯器。
然后運行命令:./configure-host:aim-linux &&make dep&&make。運行結束后,基于目標平臺的嵌入式PJSIP庫就建立起來了。
VOIP軟終端的實現。實際上PJSIP源代碼中提供了實現SIP協議的PJSIP協議棧,以及PJM-DIA媒體棧,用來實現更多功能的VOIP電話。此外它還提供了一套供多媒體用戶代理程序調用的更高層次的應用程序接口(PJSUA API),這種接口把各種信號和多媒體功能結合起來,可以更容易調用, 同時提供了SIP賬戶管理、好友管理、在線提示、即時信息等功能。使用這套API來開發嵌入式VOIP電話,編寫過程中把必須的頭文件和庫文件路徑添加到相應的搜索路徑中。程序的主流程圖如圖3所示。
4.3 圖形用戶界面設計
Qt是一個跨平臺的C++圖形用戶界面開發軟件,使用Qt開發的軟件可以在任何支持的平臺上編譯、執行,在這過程中不需要修改源代碼。Qt的授權模式分為商業版和開源版,使用商業版開發的軟件的源代碼是不共享的,而開源版的程序必需遵循GPL協議,總的來說就是使用靜態鏈接的代碼必需開源,而動態鏈接的代碼則可以不開源 。使用Qt開發軟件,必需要深入理解信號與槽機制(signal&slot),這種機制提供了任意兩個Qt對象之間的通信機制。其中信號是在某種變化的情況或動作下產生,而槽就是接收并處理各種信號的函數。 信號和槽機制的常見連接方式為:
QObject::connect(Objectl,SIGNAL(signa1), Object2,SLOT(slot))
實現的VOIP電話用戶界面主要有三個選項頁面,其中第一個頁面是撥號頁面,實現數字撥號及接聽電話等功能。第二個頁面是高級選項頁面,提供麥克風及揚聲器音量調節功能。最后一個頁面實現的是對電話終端的運行進行監控。
5、結束語
討論嵌入式VOIP終端的實現方法,包括硬件平臺的實現以及軟終端的設計。對實現SIP的PJ-SIP協議棧進行了深入描述。為了使終端與用戶能夠進行友好交互,設計了圖形用戶界面。經過測試, 終端通信的SIP信令符合RFC3261標準,達到預定要求。故協議棧的移植及軟終端的設計是成功的, 這為深人理解嵌人式IP語音通信、即時信息的實現以及進行視頻通信奠定了基礎。
40088 411661033743080@qq.com
中國廣東省深圳市南山區西麗九祥嶺工業區10棟3樓