1. 程式人生 > >sip phone系列之Java sip phone(peers)原始碼淺析

sip phone系列之Java sip phone(peers)原始碼淺析

    從整理幾款sip phone,到簡單修改播放聲音檔案,發現少了最基本的環境搭建及原始碼的認識,現在重新記錄下。
    1.sip簡要介紹
    這裡提及一些sip相關的必要知識,方便對該協議有個整體的瞭解,同時也可以為後續相關的應用開發提供準備。更詳細的內容可以參考對應的RFC文件(RFC3261等等)。sip(Session Initiation Protocol)會話初始協議,簡單來說就是負責多媒體通訊(兩個或者多個終端)會話的建立、修改和終止,而且是一個應用層控制協議。可以看到它是不足以支撐完整的多媒體會話的,但它可以方便的通過與SDP(會話描述協議,協商採用的協議)、RTP(實時傳輸協議)等結合提供完整多媒體通訊功能。後面在介紹這款Java sip phone(peers)的原始碼框架時會看到。
   單就sip協議來說(RFC3261),sip協議的功能實現使用者的註冊,會話的邀請或者接受會話,會話引數服務的修改,會話的結束等(沒有用官方的使用者定位等功能描述,需要的可以自己檢視),因此需要註冊伺服器、代理伺服器實現使用者註冊,位置查詢,進而實現會話邀請等sip訊息(主要就是請求和響應兩種)的轉發,對應的客戶端有UserAgent(包括UAC:UserAgent Client和UAS:UserAgent Server )來負責實現會話的邀請和響應等。
   sip協議棧如下圖所示,但據說只是邏輯實體,真正的實現上可能會有所重合的


   SIP的最底層是語法和編碼層(對應上圖協議棧),其上是傳輸層(記住sip協議是應用層協議),傳輸層之上是事務層,再上是事務使用者層;其中一個事務定義為UAC傳送的一個請求報文和由這個請求報文所引起的所有由UAS傳送的響應報文。事務層負責處理應用層的報文超時重傳、定時器設定、報文排序、重複報文處理和響應報文與請求報文的匹配等等;事務使用者層它描述了不同SIP實體在事務層之上對SIP報文的處理,例如當要傳送一個請求時,事務使用者會建立一個客戶機事務的例項並將請求報文和目標必要資訊(包括目標IP地址、埠號、傳輸層協議等)傳遞給該事務進行處理。
    2.環境搭建及使用
    在瞭解上述概念後,我們來看環境搭建,本人是在Windows XP下配合使用虛擬機器完成。sip phone一般的使用方式還是C/S模式的,因此,需要一個伺服器來實現註冊、代理轉發、重定向等功能,我這裡使用的是sipfoundry,客戶端使用Peers,配合X-Lite,Jitsi(功能強大的軟電話,前者是個商用產品,後者也是個開源軟體,前文裡有說。)sipfoundry可以直接下載光碟映象,我的是和CentOS系統一起的Iso檔案,從虛擬機器中安裝即可,官方有詳細的安裝文件,當系統安裝完成後,啟動有如下介面:


    然後可以通過上述的IP從瀏覽器中直接訪問,當然那個IP是需要在安裝時配置的。進入管理介面後的新增使用者之類的操作之類不再細說。
    X-Lite和Jitsi下載後直接可以使用,Peers下載後點擊bat檔案直接執行,當下載的為原始碼時,可以通過Eclipse匯入工程,然後執行即可。注意Jitsi和Peers撥號時的名稱完整為sip:[email protected],在Jitsi中省略了sip:。可以來體驗下,現在伺服器中新增200 和201使用者,假設伺服器地址為192.168.0.50,那麼啟動X-Lite,Accounts setting中配置使用者名稱和地址(200),啟動Peers設定使用者名稱201或者不設也行,在Peers中輸入
[email protected]
,點選call即可撥打,後面都簡單了。
   3.peers原始碼框架
   peers的文件也非常詳細,可以好好閱讀下。Peers的原始碼包目錄如下:


   其中conf中包括peers的配置檔案,有使用者名稱、密碼等等;logs裡是日誌檔案,media中在除錯模式下時,會產生媒體除錯輸出資訊,一般匯出的可執行Jar包包括這三個目錄即可。

   net.sourceforge.peers目錄中為Log,config等資訊程式碼,其它的可以從下圖中看到其作用,因此如果沒有特別要求,標準的JDK已經足夠,不需要下載額外的庫。


   在原始碼目錄中的core.useragent也正是上面闡述的,包括UAC和UAS,而我們接觸最多的也正是這兩個。在peers執行中,gui目錄中維持了會話狀態的狀態機,而其中實現各種事件響應的主要是CallFrame和Eventmanager,其中CallFrame主要負責介面上的按鍵響應,Eventmanager則一方面實現CallFrameListener的事件響應,另一方面建立了UserAgent例項,並實現了SipListener的事件響應。UserAgent則是sip phone中最重要的部分了,裡面包括了UAC UAS等等一系列實現多媒體通訊的例項物件,因此,整合自己的應用可以再gui目錄中提取出自己想要的部分,主要是EventManager類。
   最後,提醒注意幾個問題,一是如果本機有虛擬機器,會造成Peers接收結束通話等訊息錯誤,主要是因為其繫結的IP可能是虛擬機器IP,因此需要正確設定IP;另一方面是如果想建立多個sip客戶端時,即使在gui等方面取消了限制,注意埠繫結的問題。
   
    轉載註明出處:http://blog.csdn.net/w7849516230/article/details/7714552
    聯絡郵箱:[email protected]