專利名稱:一種sip終端及其會(huì)話處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信領(lǐng)域,具體涉及一種會(huì)話發(fā)起協(xié)議(SIP)終端及其會(huì)話處理方法。
背景技術(shù):
SIP協(xié)議借鑒了超文本傳輸協(xié)議(HTTP)和簡(jiǎn)單郵件傳輸協(xié)議(SMTP),具有結(jié)構(gòu)簡(jiǎn) 單以及有可擴(kuò)充性、可擴(kuò)展性的優(yōu)點(diǎn);此外還提供了良好的服務(wù)質(zhì)量(QoQ支持,因此基于 SIP的多媒體交互通信越來(lái)越得到人們的認(rèn)可和重視。SIP協(xié)議用于控制互聯(lián)網(wǎng)或者其他 網(wǎng)絡(luò)上的設(shè)備初始化、管理和終止的交互式會(huì)話進(jìn)程,包括了語(yǔ)音和整個(gè)網(wǎng)絡(luò)有關(guān)的內(nèi)容。 SIP網(wǎng)絡(luò)采用客戶機(jī)-服務(wù)器的工作方式,SIP網(wǎng)絡(luò)包含兩類組件SIP用戶代理和網(wǎng)絡(luò)服 務(wù)器。用戶代理是一個(gè)終端系統(tǒng),代表了要加入會(huì)話的用戶。Applet是Java小應(yīng)用程序,可以直接嵌入到網(wǎng)頁(yè)中或者其他特定的容器中,并能 產(chǎn)生特殊的效果。Applet繼承了 Java優(yōu)良的跨平臺(tái)特性,而且還可以在多種瀏覽器中運(yùn) 行。隨著SIP協(xié)議的普及應(yīng)用,各個(gè)公司社團(tuán)都紛紛推出了自身的SIP終端,但普遍存 在如下缺點(diǎn)多為桌面應(yīng)用程序。用戶需要在本地安裝軟件才能夠使用,而能夠在瀏覽器中運(yùn) 行的SIP終端并不多。很多終端是基于C/C++語(yǔ)言開(kāi)發(fā)的,不具有很好的跨平臺(tái)性;即便能夠開(kāi)發(fā)成插件嵌入IE瀏覽器,也會(huì)出現(xiàn)需要安裝插件和瀏覽器不支持的 問(wèn)題。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種SIP終端及其會(huì)話處理方法,保證SIP 終端的免安裝和跨平臺(tái)特性。為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的一種會(huì)話發(fā)起協(xié)議SIP終端,該終端包括呼叫控制模塊,媒體處理模塊和SIP協(xié)議 棧;其中,所述媒體處理模塊,用于在運(yùn)行完JAVA多媒體框架JMF安裝程序后,在對(duì)應(yīng)目 錄中提取關(guān)鍵文件,包括涉及JMF框架的jmf. jar文件、記錄客戶端本地屬性的jmf. properties文件、本地鏈接庫(kù)文件,并將以上文件都放在web服務(wù)器中;還用于在加載并運(yùn) 行SIP終端中的小應(yīng)用程序applet時(shí),下載以上文件到對(duì)應(yīng)的目錄,實(shí)現(xiàn)所述SIP終端的 免安裝;所述呼叫控制模塊,用于基于所述媒體處理模塊實(shí)現(xiàn)的SIP終端的免安裝,進(jìn)行 呼叫控制;所述SIP協(xié)議棧,用于對(duì)包括所述呼叫控制以內(nèi)的通信提供協(xié)議支持。
該終端進(jìn)一步包括用戶界面,用于提供實(shí)現(xiàn)SIP多媒體會(huì)議系統(tǒng)所需要的標(biāo)準(zhǔn)用 戶界面;所述用戶界面包括小應(yīng)用程序的界面和HTML界面。所述呼叫控制模塊,用于通過(guò)與所述用戶界面的交互,調(diào)用應(yīng)用于綜合網(wǎng)絡(luò)的 JavaAPI SIP和所述媒體處理模塊的相關(guān)功能,實(shí)現(xiàn)用戶、SIP終端和SIP服務(wù)器之間的呼 叫連接的建立和拆除;所述呼叫控制模塊的邏輯包括加入會(huì)議、主動(dòng)退出會(huì)議、被動(dòng)退出會(huì)議。所述媒體處理模塊基于JMF實(shí)現(xiàn),并且增加了 JMF對(duì)H. 264視頻編解碼格式的支持。所述媒體處理模塊,進(jìn)一步用于在所述SIP方法剛運(yùn)行時(shí),檢測(cè)客戶端的媒體設(shè)備,包括檢測(cè)本地是否有所述 jmf. properties文件,以及檢測(cè)本地是否有所有需要的本地鏈接庫(kù)文件。一種SIP終端的會(huì)話處理方法,該方法包括運(yùn)行完JMF安裝程序后,在對(duì)應(yīng)目錄中提取關(guān)鍵文件,包括涉及JMF框架的jmf. jar文件、記錄客戶端本地屬性的jmf. properties文件、本地鏈接庫(kù)文件;并將以上文件都 放在web服務(wù)器中;在加載并運(yùn)行SIP終端中的applet時(shí),下載以上文件到對(duì)應(yīng)的目錄,實(shí)現(xiàn)所述SIP 終端的免安裝,并基于此進(jìn)行呼叫控制。所述SIP終端中包括用戶界面,包括小應(yīng)用程序的界面和HTML界面;該方法進(jìn)一步包括由所述用戶界面提供實(shí)現(xiàn)SIP多媒體會(huì)議系統(tǒng)所需要的標(biāo)準(zhǔn)用戶界面。所述SIP終端中包括呼叫控制模塊和媒體處理模塊,所述呼叫控制模塊的邏輯包 括加入會(huì)議、主動(dòng)退出會(huì)議、被動(dòng)退出會(huì)議;該方法進(jìn)一步包括通過(guò)與所述用戶界面的交互,由所述呼叫控制模塊調(diào)用應(yīng)用于綜合網(wǎng)絡(luò)的Java API SIP和所述媒體處理模塊的相關(guān)功能,實(shí)現(xiàn)用戶、SIP終端和SIP服務(wù)器之間的呼叫連 接的建立和拆除。所述媒體處理模塊基于JMF實(shí)現(xiàn),并且增加了 JMF對(duì)H. 264視頻編解碼格式的支持。該方法進(jìn)一步包括在所述SIP終端剛運(yùn)行時(shí),由所述媒體處理模塊檢測(cè)客戶端的媒體設(shè)備,包括檢 測(cè)本地是否有所述jmf. properties文件,以及檢測(cè)本地是否有所有需要的本地鏈接庫(kù)文 件。本發(fā)明的SIP終端及其會(huì)話處理方法,均可在運(yùn)行完JMF安裝程序后,在對(duì)應(yīng) 目錄中提取關(guān)鍵文件,包括涉及JMF框架的jmf. jar文件、記錄客戶端本地屬性的jmf. properties文件、本地鏈接庫(kù)文件;并將以上文件都放在web服務(wù)器中;在加載并運(yùn)行SIP 終端中的applet時(shí),下載以上文件到對(duì)應(yīng)的目錄,實(shí)現(xiàn)所述SIP終端的免安裝,并基于此進(jìn) 行呼叫控制。本發(fā)明的SIP終端及其會(huì)話處理方法,能夠有效保證SIP終端的免安裝和跨 平臺(tái)特性。
圖1為本發(fā)明實(shí)施例的SIP終端結(jié)構(gòu)圖;圖2為本發(fā)明實(shí)施例的媒體發(fā)送序列圖;圖3為本發(fā)明實(shí)施例的媒體接收序列圖;圖4為本發(fā)明實(shí)施例的加入私網(wǎng)穿越功能時(shí)對(duì)REGISTER消息的修改流程圖;圖5為本發(fā)明實(shí)施例的加入私網(wǎng)穿越功能時(shí)對(duì)2000K消息的修改流程圖;圖6為本發(fā)明實(shí)施例的加入私網(wǎng)穿越能力時(shí)對(duì)BYE消息的修改流程圖;圖7為本發(fā)明實(shí)施例的加入私網(wǎng)穿越能力時(shí)對(duì)回復(fù)BYE消息的2000K消息的修改 流程圖;圖8為本發(fā)明實(shí)施例的SIP終端會(huì)話處理流程簡(jiǎn)圖。
具體實(shí)施例方式本發(fā)明實(shí)施例所闡述的基于Web的SIP終端,采用SIP作為信令協(xié)議,可運(yùn)行在各 種系統(tǒng)平臺(tái)上,支持音頻、視頻的媒體傳輸。主要包括四個(gè)組成部分用戶界面,呼叫控制模 塊,媒體處理模塊和SIP協(xié)議棧,基于Web的SIP終端軟件架構(gòu)如圖1所示。所述SIP終端應(yīng)用繼承了 java跨平臺(tái)特性的Applet程序,能夠在多種瀏覽器和 多種平臺(tái)下運(yùn)行,而且除了音頻通信還支持視頻的通信。其中,針對(duì)用戶界面而言,用戶可以通過(guò)嵌入瀏覽器的小應(yīng)用程序界面來(lái)控制程 序運(yùn)行。Applet小應(yīng)用程序嵌入在HTML網(wǎng)頁(yè)中,所述用戶界面主要由兩部分組成小應(yīng)用 程序的界面和HTML界面。用戶界面提供了所有實(shí)現(xiàn)SIP多媒體會(huì)議系統(tǒng)所需要的標(biāo)準(zhǔn)用戶界面,包括以下 部分菜單、LOGO、用戶當(dāng)前的狀態(tài)(如是否已注冊(cè)等),本地視頻窗口、遠(yuǎn)端視頻窗口、退 出會(huì)議控制按鈕等。所述菜單中包含配置、注冊(cè)、解注冊(cè)三個(gè)選項(xiàng)。其中,在配置框中用戶 可以配置URI、注冊(cè)周期、SIP注冊(cè)服務(wù)器地址、STUN服務(wù)器地址(IPV6系統(tǒng)無(wú)此選項(xiàng))和 TURN服務(wù)器地址(IPV6系統(tǒng)無(wú)此選項(xiàng))等。用戶界面通過(guò)事件驅(qū)動(dòng)方式通過(guò)呼叫控制模塊調(diào)用協(xié)議棧,以進(jìn)行消息發(fā)送和實(shí) 現(xiàn)協(xié)議棧狀態(tài)遷移。通過(guò)用戶界面與用戶的直接交互控制其他模塊的操作,并為他們分配 資源,如媒體處理模塊。Java Applet小應(yīng)用程序是嵌入在HTML或JSP中的,并且應(yīng)用瀏覽器運(yùn)行。因此 不必專門開(kāi)發(fā)軟件與網(wǎng)絡(luò)的接口程序,是網(wǎng)絡(luò)應(yīng)用的理想選擇。Applet程序通過(guò)〈applet〉 標(biāo)簽嵌入JSP頁(yè)面中,其中Applet需要的參數(shù)可以寫在〈param〉標(biāo)簽中,這些參數(shù)可以在 Applet初始化執(zhí)行public void init()方法時(shí)讀入。如果瀏覽器打開(kāi)終端所在的頁(yè)面后,不能正常顯示Applet,而是顯示了“您的瀏覽 器不支持Applet或者JRE的版本太低系統(tǒng)請(qǐng)點(diǎn)擊此處此下載”并提供下載JRE的鏈接,表 明Applet未正常顯示,可能的原因是瀏覽器暫時(shí)不支持,或者是JRE未安裝或版本太低。只 要為瀏覽器安裝插件或安裝合適版本的JRE即可。針對(duì)呼叫控制模塊而言,作為整個(gè)系統(tǒng)的主要模塊,呼叫控制模實(shí)現(xiàn)了 SIP終端 的呼叫控制功能;并且,作為整個(gè)系統(tǒng)的樞紐,承接系統(tǒng)的其他三個(gè)部分。通過(guò)與用戶界面
6的交互,調(diào)用應(yīng)用于綜合網(wǎng)絡(luò)的 Java API (Java API for IntegratedNetworks, JAIN) SIP 和媒體處理模塊的相關(guān)功能,實(shí)現(xiàn)用戶、SIP終端和SIP服務(wù)器之間的呼叫連接的建立和拆 除。呼叫控制模塊的邏輯大致分為加入會(huì)議、主動(dòng)退出會(huì)議和被動(dòng)退出會(huì)議三部分。一、加入會(huì)議用戶可以以兩種身份加入會(huì)議。第一種是作為會(huì)議的創(chuàng)建者,即主席。在多媒體 會(huì)議系統(tǒng)主頁(yè)上創(chuàng)建會(huì)議,在會(huì)議開(kāi)始時(shí),SIP服務(wù)器向終端發(fā)起呼叫,使用戶加入會(huì)議; 第二種,作為普通與會(huì)成員,在所欲參與的會(huì)議召開(kāi)之時(shí),SIP服務(wù)器向其終端發(fā)起呼叫,使 其加入會(huì)議。在SIP服務(wù)器邀請(qǐng)用戶加入會(huì)議時(shí),SIP服務(wù)器首先向終端發(fā)送邀請(qǐng)(INVITE)消 肩、οSIP協(xié)議棧監(jiān)聽(tīng)到INVITE消息后,呼叫控制模塊會(huì)查看當(dāng)前是否有會(huì)話,如果當(dāng) 前有會(huì)話,SIP協(xié)議棧返回486BUSY信令,通知SIP服務(wù)器由于終端忙而導(dǎo)致不能加入。若當(dāng)前沒(méi)有會(huì)話,呼叫控制模塊會(huì)通過(guò)SIP協(xié)議棧向SIP服務(wù)器返回ISORing信 令,表示正在呼叫,同時(shí)會(huì)話控制層調(diào)用用戶界面層的功能,彈出對(duì)話框以詢問(wèn)用戶是否能 接受當(dāng)前的呼叫。若接收到用戶點(diǎn)否的確認(rèn),則呼叫控制模塊調(diào)用SIP協(xié)議棧的功能,向 SIP服務(wù)器返回消息486busy,表示暫時(shí)不能加入會(huì)議。若接收到用戶點(diǎn)是的確認(rèn),呼叫控 制模塊調(diào)用SIP協(xié)議棧的功能,向SIP服務(wù)器端回復(fù)帶本地媒體資源描述的2000K,并調(diào)用 媒體處理模塊的相關(guān)功能,為即將到來(lái)的會(huì)話分配媒體資源。所述本地媒體資源描述可以 包含在2000K的會(huì)話描述協(xié)議(SDP)中。此時(shí),SIP服務(wù)器向SIP終端返回帶SDP的ACK消息,呼叫控制模塊調(diào)用SIP協(xié)議 棧的功能處理ACK消息,并調(diào)用媒體處理模塊按ACK中的SDP內(nèi)容(如遠(yuǎn)端音頻、視頻發(fā) 送端口,以及終端和服務(wù)器經(jīng)協(xié)商后采用的統(tǒng)一的音、視頻編解碼格式)進(jìn)一步分配媒體 資源,向SIP服務(wù)器端發(fā)送本地媒體流并接收SIP服務(wù)器發(fā)來(lái)的媒體流。至此,用戶便成功 加入會(huì)議并可以進(jìn)行音視頻通信了。針對(duì)SIP信令中的SDP包而言,2000K和ACK消息內(nèi)都含有SDP包,用于客戶端和 媒體服務(wù)器進(jìn)行媒體協(xié)商。在程序運(yùn)行之初,媒體處理模塊會(huì)首先檢測(cè)終端是否支持音視 頻,以及分別支持音頻和視頻哪些編解碼格式。當(dāng)客戶端收到SIP服務(wù)器發(fā)來(lái)的INVITE, SIP協(xié)議棧會(huì)將所支持的媒體格式寫入2000K消息的SDP包中。所支持的音頻格式可以為G723、G711、GSM、PCMA, G728、G729等。在音頻的媒體 描述MediaDescription中,將寫入媒體類型(audio)、本地接受音頻的端口、支持媒體格 式的代碼,以及每種編解碼格式的屬性,包括屬性名稱、代碼、采樣率等。所支持的視頻格式可以為JPEG、H263, H264, H261等。在視頻的媒體描述 MediaDescription中,將寫入媒體類型(video)、本地接受視頻的端口、支持媒體格式的 代碼,以及每種編解碼格式的屬性,包括名稱、代碼、采樣率、支持的視頻大小(CIF/QCIF)等。SIP協(xié)議棧將含有本地媒體描述的2000K消息發(fā)送到SIP服務(wù)器,SIP服務(wù)器端 再進(jìn)行媒體協(xié)商,最終選取兩端都支持的媒體編解碼格式進(jìn)行交互。SIP服務(wù)器在發(fā)送ACK 時(shí),將選定的編解碼格式的媒體描述一同返回給客戶端??蛻舳送ㄟ^(guò)解析SDP中的內(nèi)容,可 以獲知SIP服務(wù)器端最終選擇的媒體編解碼格式,最終在初始化媒體處理器時(shí),對(duì)處理器進(jìn)行設(shè)置,以便按協(xié)商過(guò)的編解碼格式發(fā)送音視頻。用戶可以以兩種方式退出會(huì)議主動(dòng)退出,即用戶在希望結(jié)束通話時(shí)向SIP服務(wù) 器發(fā)送BYE消息,主動(dòng)申請(qǐng)結(jié)束會(huì)話;被動(dòng)退出,即當(dāng)一個(gè)會(huì)議已經(jīng)結(jié)束或者主席在開(kāi)會(huì)過(guò) 程中執(zhí)行了撤銷該用戶的會(huì)議參與者身份操作后,SIP服務(wù)器會(huì)向客戶端發(fā)送BYE消息,結(jié) 束本次會(huì)議。當(dāng)需要主動(dòng)退出會(huì)議時(shí),用戶以點(diǎn)擊用戶界面的退出會(huì)議按鈕等方式觸發(fā)用戶界 面,用戶界面調(diào)用呼叫控制層的方法來(lái)結(jié)束會(huì)議。呼叫控制層首先調(diào)用SIP協(xié)議棧向SIP 服務(wù)器發(fā)送SIP消息BYE,隨后呼叫控制層找到當(dāng)前的會(huì)話,調(diào)用媒體處理模塊釋放該會(huì)話 所有的媒體資源。最后,呼叫控制層將當(dāng)前的會(huì)話狀態(tài)設(shè)為當(dāng)前沒(méi)有會(huì)話,并將當(dāng)前會(huì)話刪 除。當(dāng)終端收到SIP服務(wù)器發(fā)來(lái)的2000K時(shí),呼叫控制層調(diào)用SIP協(xié)議棧處理該消息。經(jīng)過(guò)以上操作,通過(guò)用戶的主動(dòng)申請(qǐng),用戶已經(jīng)從會(huì)議中退出了。當(dāng)需要被動(dòng)退出會(huì)議時(shí),在主席要求某人退出會(huì)議或者會(huì)議結(jié)束的情況下,SIP服 務(wù)器會(huì)向終端發(fā)來(lái)BYE消息,SIP協(xié)議棧收到BYE消息后向SIP服務(wù)器回復(fù)2000K。呼叫控 制層獲取到當(dāng)前的會(huì)話,調(diào)用媒體處理模塊釋放當(dāng)前會(huì)話所有的媒體資源,最后移除當(dāng)前 的會(huì)話,并將狀態(tài)改為當(dāng)前沒(méi)有會(huì)話。媒體處理模塊主要負(fù)責(zé)對(duì)與會(huì)者的媒體流進(jìn)行采集、發(fā)送,并為用戶終端上層應(yīng) 用提供網(wǎng)絡(luò)上采集到的媒體數(shù)據(jù)。媒體處理模塊首先從媒體設(shè)備采集未經(jīng)處理的媒體信號(hào) 并以特定的編碼格式編碼,編碼后的媒體數(shù)據(jù)以RTP媒體流的形式在網(wǎng)絡(luò)上傳播,而RTP多 基于底層的UDP協(xié)議進(jìn)行傳輸。媒體的接收過(guò)程與此相反,通過(guò)網(wǎng)絡(luò)接收到媒體流、解碼并 播放、顯示。在SIP消息交互過(guò)程中,通過(guò)SDP包寫入本地會(huì)話描述并解析遠(yuǎn)端會(huì)話描述,客戶 端和SIP服務(wù)器之間可以互相通知對(duì)方本地所支持的媒體格式和具體參數(shù)。兩端經(jīng)過(guò)媒體 協(xié)商,采用統(tǒng)一的媒體編解碼格式進(jìn)行媒體通信。媒體處理模塊是獨(dú)立于呼叫控制模塊的,并且通過(guò)JAVA多媒體框架(JMF)來(lái)實(shí) 現(xiàn)。JMF提供了先進(jìn)的媒體處理能力,從而擴(kuò)展了 Java平臺(tái)的功能。這些功能包括媒體捕 獲、壓縮、流轉(zhuǎn)、回放以及對(duì)主要媒體形式和編碼的支持。實(shí)時(shí)傳輸協(xié)議(RTP)是網(wǎng)絡(luò)上針對(duì)多媒體數(shù)據(jù)流的一種傳輸協(xié)議,為實(shí)時(shí)數(shù)據(jù)提 供端到端的服務(wù),RTP通常運(yùn)行在UDP之上。媒體處理模塊主要由以下功能實(shí)體構(gòu)成發(fā)送器、接收器、設(shè)備管理器、播放器、媒 體處理器、RTP管理器等。媒體的發(fā)送過(guò)程如下媒體處理模塊從客戶端的攝像頭和麥克風(fēng)捕捉音、視頻信 號(hào),并在此基礎(chǔ)上建立數(shù)據(jù)源。將視頻的數(shù)據(jù)源復(fù)制,建立和原始數(shù)據(jù)源關(guān)聯(lián)的播放器以播 放本地視頻。將復(fù)制出的數(shù)據(jù)源與處理器關(guān)聯(lián),之后將數(shù)據(jù)壓縮編碼成幀,形成RTP協(xié)議格 式封裝的媒體流,再遞交給RTP分組處理模塊,用于加上此協(xié)議的分組包頭,并根據(jù)采樣時(shí) 鐘打上時(shí)間戳,標(biāo)記順序號(hào),并給定幀頻分辨率相應(yīng)的壓縮格式等參數(shù),然后進(jìn)行發(fā)送。本 地發(fā)送的地址和遠(yuǎn)端接收的地址需要在RTP管理模塊中定義。媒體發(fā)送涉及的主要功能實(shí)體包括發(fā)送器、設(shè)備管理器、播放器、媒體處理器、 RTP管理器等。進(jìn)行媒體發(fā)送時(shí)的具體流程如圖2所示,圖2所示流程包括以下步驟
1、發(fā)送器調(diào)用設(shè)備管理器以獲取用戶設(shè)備列表;2、設(shè)備管理器向發(fā)送器返回給捕捉到的媒體設(shè)備;3、發(fā)送器從設(shè)備管理器獲得媒體設(shè)備的定位器;4、發(fā)送器得到當(dāng)前設(shè)備的媒體定位器;5、發(fā)送器通過(guò)得到的視頻、音頻設(shè)備的媒體定位器分別創(chuàng)建視頻數(shù)據(jù)源和音頻數(shù) 據(jù)源,為了既能顯示本地視頻又能向遠(yuǎn)端發(fā)送本地視頻,可以將本地視頻數(shù)據(jù)源復(fù)制,將原 始的視頻數(shù)據(jù)源與音頻數(shù)據(jù)源共同生成混合數(shù)據(jù)源,用來(lái)創(chuàng)建媒體處理器,而復(fù)制出的視 頻數(shù)據(jù)源和播放器相關(guān)聯(lián),用來(lái)播放本地視頻;6、發(fā)送器將視頻數(shù)據(jù)源復(fù)制,并利用復(fù)制得到的數(shù)據(jù)源創(chuàng)建播放器;7、發(fā)送器啟動(dòng)播放器,使播放器開(kāi)始播放本地采集到的視頻;8、發(fā)送器獲取播放器的可視組件;9、發(fā)送器獲得可視組件;10、發(fā)送器將播放器的可視組件添加到前臺(tái)用戶界面上,使用戶在用戶界面上可 以看到本地視頻,至此本地視頻已經(jīng)可以成功顯示;11、發(fā)送器創(chuàng)建混合了音頻和視頻的數(shù)據(jù)源,據(jù)此創(chuàng)建媒體處理器,如果只有一種 數(shù)據(jù)源則基于該數(shù)據(jù)源創(chuàng)建媒體處理器;12、發(fā)送器設(shè)置處理器的輸出格式為RTP格式;13、媒體處理器的狀態(tài)變?yōu)閷?shí)例化;14、發(fā)送器獲取媒體處理器的輸出數(shù)據(jù),并作為數(shù)據(jù)源;15、發(fā)送器在媒體處理器建立的數(shù)據(jù)源的基礎(chǔ)上建立RTP管理器;16、發(fā)送器將本地媒體流的發(fā)送地址綁定在RTP管理器上;17、發(fā)送器將發(fā)送媒體流的目的地址綁定在RTP管理器上;18、發(fā)送器在媒體處理器產(chǎn)生的數(shù)據(jù)源基礎(chǔ)上調(diào)用RTP管理器以創(chuàng)建輸出流;19、發(fā)送器以調(diào)用輸出流的方式將本地媒體流發(fā)向網(wǎng)絡(luò)。至此,終端可以正常地向網(wǎng)絡(luò)發(fā)送媒體流。媒體的接收過(guò)程與發(fā)送過(guò)程相反,RTP管理器綁定本地接收地址和遠(yuǎn)端發(fā)送地址, RTP管理器處理接收到的數(shù)據(jù),根據(jù)其會(huì)話標(biāo)識(shí)和序列號(hào)進(jìn)行鑒別,過(guò)濾掉自身發(fā)送的信 息,再傳遞給不同解碼器解壓,最后發(fā)送給播放器以便回放。用于媒體接收的主要功能實(shí)體包括接收器、RTP管理器、播放器等。進(jìn)行媒體接收時(shí)的具體流程如圖3所示,圖3所示流程包括以下步驟1、接收器創(chuàng)建并初始化RTP管理器;2、接收器得到新創(chuàng)建的RTP管理器;3、接收器調(diào)用RTP管理器綁定本地媒體監(jiān)聽(tīng)地址,準(zhǔn)備接收輸入流;4、接收器調(diào)用RTP管理器開(kāi)始綁定遠(yuǎn)端媒體發(fā)送地址;5、接收器監(jiān)聽(tīng)到RTP管理器的收到新流事件;6至7、接收器獲取輸入流;8至9、接收器獲取基于輸入流的數(shù)據(jù)源,得到其句柄;10、接收器利用剛剛得到的數(shù)據(jù)源創(chuàng)建播放器;11、接收器為播放器添加監(jiān)聽(tīng)器,監(jiān)聽(tīng)播放器的狀態(tài);
12、接收器實(shí)例化播放器;13、當(dāng)播放器完全具體化時(shí),接收器獲取播放器的可視化組件;14、接收器獲得播放器可視化組件的句柄;15、如果可視化組件不為空,則接收器將該組件加入到用戶界面上,以顯示和播放 遠(yuǎn)端媒體數(shù)據(jù)。至此,遠(yuǎn)端音、視頻可正常顯示在用戶界面上了。針對(duì)H. 264編解碼方法的集成涉及如下內(nèi)容媒體處理模塊是基于JMF實(shí)現(xiàn)的,但是JMF默認(rèn)不支持視頻H. 264編解碼格式。在 此按如下步驟增加了 JMF對(duì)H. 264視頻編解碼格式的支持。雖然JMF默認(rèn)不支持H. 264編碼,但它提供一些接口,可以擴(kuò)展JMF的功能??梢?以插件的形式實(shí)現(xiàn)H. 264編解碼器,并通過(guò)相應(yīng)的接口注冊(cè)到JMF內(nèi)部。為了增加對(duì)H. 264 編碼格式的支持,以Windows平臺(tái)為例,可以進(jìn)行如下操作(1)生成ffmpeg. dll文件,提供H. 264的編解碼器。ffmpeg. dll具體生成過(guò)程如 下編寫ffmpeg. java文件,在此文件在中需要定義一些常量和函數(shù),作為操作編解 碼器的接口。編譯ffmpeg. dll文件。使用javah命令,生成頭文件(javah ffmpeg)。生成dll文件。使用c/c++編輯器生成ffmpeg. c文件,程序中添加函數(shù)ffmpeg. h中函數(shù)的實(shí)現(xiàn),函數(shù)名必須用jni規(guī)定格式,可以照到.h文件里的聲明來(lái)編寫。注意把 ffmpeg. h,jni. h,jni_md. h 以及 ffmpeg 類庫(kù)中白勺 1 ibavuti 1Λ1 ibavcodecΛ1 ibavformat 制到編輯器工程目錄中,然后編譯生成ffmpge. dl 1。(2)將生成的包含H. 264編解碼器的dll文件放到path指定的路徑下,此時(shí)用戶 可在java程序中通過(guò)jni調(diào)用該dll對(duì)音視頻進(jìn)行編碼。(3)根據(jù)jmf規(guī)范,定義H. 264的編碼器和解碼器,它們都必須實(shí)現(xiàn)jmf的codec 接口。在H.沈4的編碼器里,設(shè)置其需要的輸入媒體格式、輸出媒體格式、編碼視頻的分辨 率、碼率等參數(shù),并通過(guò)open初始化函數(shù)將一些參數(shù)設(shè)置到ffmpeg中。對(duì)壓縮過(guò)的數(shù)據(jù)還 可通過(guò)packetizer將其分割成小的數(shù)據(jù)塊,讓后打包成rtp包在網(wǎng)上傳輸。在H. 264解碼 器里面,同樣需要設(shè)置和編碼器中基本相同的參數(shù)和初始化工作,設(shè)置支持的輸入格式為 H264_RTP。解碼過(guò)程也是通過(guò)調(diào)用ffmpeg. dll動(dòng)態(tài)鏈接庫(kù)的函數(shù)實(shí)現(xiàn)的。(4)將實(shí)現(xiàn)好的codec注冊(cè)到j(luò)mf框架中,使jmf能夠識(shí)別這些編解碼器把定義好的編解碼器完整類名定義成字符串類型變量,并將所有的編解碼器名保 存在一個(gè)數(shù)組中;從JMF的PluginManager中取出JMF默認(rèn)支持的編解碼器,并保存在Collection 中;依次遍歷集合中定義的編解碼器,并判斷此編解碼器是否在Collection中, 如果當(dāng)前不支持該種編解碼器,則利用反射機(jī)制,生成此編解碼器的對(duì)象,并加到 PluginManager 中,讓 JMF 的 PluginManager 進(jìn)行管理。在視頻會(huì)話初始化時(shí),將H.沈4格式的視頻格式注冊(cè)到JMF的 RTPManager (rtpManager. addFormat (Format, int))中,列入 RTPManager 的管理。
10
通過(guò)以上操作,已經(jīng)將H. 264的編解碼器實(shí)現(xiàn)并注冊(cè)到JMF框架中,JMF框架可以 像管理自身默認(rèn)的編解碼器一樣管理這些以插件的形式加入的編解碼器。終端與終端之間 或終端與SIP服務(wù)器之間通過(guò)SDP協(xié)商后,通過(guò)媒體格式選擇的策略,如果選擇H. 264為視 頻的傳輸格式,JMF就可以使用上述完成的H. 264插件完成視頻的壓縮和打包。JMF的免安裝方法涉及如下內(nèi)容為了使用戶不需要安裝附加軟件(但是JRE必須安裝)就能使用SIP終端,這種 基于Web的SIP終端做了 JMF的免安裝處理,使用戶能夠在不安裝JMF軟件包的情況下使 用網(wǎng)頁(yè)版SIP終端??梢园慈缦路椒▽?shí)現(xiàn)JMF基于Windows系統(tǒng)的免安裝運(yùn)行完JMF安裝程序后,在對(duì)應(yīng)目錄中提取關(guān)鍵文件。要提取的文件有1) Jmf. jar JMF 框架的 Jar 包;2) Jmf. properties 記錄客戶端本地的一些屬性;3)本地鏈接庫(kù)文件 Jmdaud. dll, jmdaudc. dll, jmh263enc. dll, jmutil. dll, jmf723. dll, jmvfw. dll, jmvh263. dll。對(duì)于1),通過(guò)調(diào)用jmf. jar里的應(yīng)用編程接口(API),Applet版的SIP終端可以 使用Java Media Framework提供的媒體處理能力。因此需要把jmf. jar提取出來(lái)并放到 Applet程序能夠訪問(wèn)的路徑下。對(duì)于2~),jmf. properties文件是jmf用來(lái)記錄客戶端本地媒體屬性的文件,其中 記錄了客戶端所支持的媒體設(shè)備和每種媒體設(shè)備所支持的編解碼格式。在第一次安裝JMF 時(shí)會(huì)生成jmf. properties文件;因此在安裝JMF時(shí),可以插入攝像頭,使jmf. properties 將攝像頭作為本地所支持的媒體設(shè)備。并且在安裝時(shí)選中允許Applet讀本地文件的選項(xiàng), 為Applet的終端開(kāi)放權(quán)限,否則Applet無(wú)法從本地媒體設(shè)備讀取媒體流。對(duì)于幻,這些本地鏈接庫(kù)文件是用來(lái)對(duì)媒體流做編解碼處理的。以上dll文件均 為SIP終端需要支持的編解碼格式所對(duì)應(yīng)的本地鏈接庫(kù)文件。將以上文件都放在web服務(wù)器中;在加載并運(yùn)行applet時(shí),下載以上文件到對(duì)應(yīng)的目錄Jmf. jar 在JSP中,Applet標(biāo)簽的ARCHIVE屬性后寫入jmf. jar ;使用戶加載SIP 終端的Applet程序時(shí),jmf. jar能夠被一同加載到用戶本地;Jmf. properties 程序在用戶目錄下創(chuàng)建jmf文件夾,將jmf. properties下載到 該目錄(下載前,程序會(huì)檢測(cè)本地是否有jmf. properties文件,如果有則跳過(guò)下載過(guò)程;否 則,從服務(wù)器下載這些文件)。本地鏈接庫(kù)文件在用戶目錄下創(chuàng)建dll文件夾,將所有的鏈接庫(kù)文件下載到該 目錄(下載前,程序會(huì)檢測(cè)本地是否有這些鏈接庫(kù)文件,如果有責(zé)跳過(guò)下載操作)。在SIP終端開(kāi)始運(yùn)行時(shí),需要做的設(shè)置工作如下在終端剛剛運(yùn)行時(shí),媒體處理模塊首先需要檢測(cè)客戶端的媒體設(shè)備。這個(gè)過(guò)程需 要讀取jmf. properties文件。所以在檢測(cè)設(shè)備之前,首先檢測(cè)本地是否有jmf. properties 文件,如果有則跳過(guò)下載過(guò)程;否則在用戶工作目錄下創(chuàng)建jmf目錄,將jmf. properties下 載到該目錄下,并將此目錄的絕對(duì)路徑添加到classpath中,以便能夠找到該文件。之后,檢測(cè)設(shè)備便可以讀取jmf. properties文件了。另一方面,媒體處理模塊還需要對(duì)媒體流進(jìn)行相應(yīng)的編解碼,這需要用到對(duì)應(yīng)的 本地鏈接庫(kù)文件。所以在這之前需要將SIP服務(wù)器上的本地鏈接庫(kù)文件下載到本地。在用 戶工作目錄下創(chuàng)建dll目錄,將本地鏈接庫(kù)文件下載到其中。下載前檢測(cè)本地是否有所有 需要的本地鏈接庫(kù)文件,如果有則跳過(guò)下載過(guò)程;否則,從SIP服務(wù)器下載這些文件。最后 要將該目錄的絕對(duì)路徑加在系統(tǒng)環(huán)境變量path下,以便能夠找到對(duì)應(yīng)的dll文件。經(jīng)過(guò)以上操作,在不安裝JMF軟件的情況下,用戶也可以使用基于JMF框架的終端 了。對(duì)于其他的系統(tǒng),如linux,可以用相同方法進(jìn)行JMF的免安裝處理。只不過(guò)此時(shí) 從JMF的安裝目錄下抽取出的是.so文件??梢栽谙到y(tǒng)加載運(yùn)行時(shí)檢測(cè)操作系統(tǒng)類型,如 果是Windows,下載所需要的DLL文件;如果是Linux或Solaris,則下載對(duì)應(yīng)的.so文件。由于JMF提供對(duì)多種平臺(tái)的支持,因此經(jīng)過(guò)如上處理,終端便可以運(yùn)行在多種平 臺(tái)中,解決了系統(tǒng)的跨平臺(tái)問(wèn)題。在實(shí)際應(yīng)用時(shí),可以通過(guò)多線程方式實(shí)現(xiàn)本地和遠(yuǎn)端視頻初始化。在用戶同意建立多媒體連接之后,終端開(kāi)始顯示本地視頻和收到的遠(yuǎn)端視頻。顯 示本地和遠(yuǎn)端視頻可以用兩種方式,一種方式是順序顯示本地視頻以及遠(yuǎn)端視頻,但是這 種方式使用戶的等待時(shí)間較長(zhǎng);另一種方式是通過(guò)Java的并發(fā)機(jī)制使本地視頻和遠(yuǎn)端視 頻同時(shí)初始化,以減少用戶的等待時(shí)間?;赪eb的SIP終端的協(xié)議棧是基于JAIN SIP協(xié)議棧開(kāi)發(fā)的。JAIN SIP提供以 下功能以方便應(yīng)用程序的實(shí)現(xiàn),首先是解析器功能提供了 SIP URI的解析功能、SIP消息 解析功能和SDP解析功能。當(dāng)SIP消息處理完畢后,將待發(fā)送的SIP消息結(jié)構(gòu)轉(zhuǎn)換成文本 并發(fā)送。其次是事務(wù)層的功能,提供用戶使用時(shí)間機(jī)制控制應(yīng)用程序,并調(diào)用相應(yīng)方法來(lái)響 應(yīng)時(shí)間。其核心是事務(wù)處理,事務(wù)處理由有限狀態(tài)機(jī)表示,狀態(tài)機(jī)內(nèi)部的跳轉(zhuǎn)可以由事件觸 發(fā)。在需要集成私網(wǎng)穿越功能,需要對(duì)信令進(jìn)行修改。具體而言,隨著應(yīng)用TCP/IP的 互聯(lián)網(wǎng)的普及,私有網(wǎng)絡(luò)(簡(jiǎn)稱私網(wǎng))的數(shù)量和規(guī)模都越來(lái)越大,私網(wǎng)這種組網(wǎng)方式在組建 各種規(guī)模局域網(wǎng)時(shí)被大量應(yīng)用。為了能夠適應(yīng)復(fù)雜的網(wǎng)絡(luò)環(huán)境,多媒體會(huì)議系統(tǒng)的WEB版 SIP終端,也集成了私網(wǎng)穿越的功能,包括對(duì)稱NAT和非對(duì)稱NAT兩種方式。在WEB版SIP終端中,是否采用NAT技術(shù)取決于用戶是否在配置對(duì)話空中填寫對(duì) 應(yīng)的服務(wù)器地址。如果采用對(duì)稱NAT技術(shù),則需要配置TURN服務(wù)器的地址和端口,如果采 用非對(duì)稱NAT技術(shù)進(jìn)行私網(wǎng)穿越,則需要配置STUN服務(wù)器的地址和端口。為了融合NAT技術(shù),當(dāng)用戶選擇了采用NAT技術(shù)時(shí),需要修改對(duì)應(yīng)的SIP消息。當(dāng) 用戶只需要簡(jiǎn)單地在配置界面上選擇使用STUN或者TURN功能時(shí),就可以開(kāi)啟對(duì)應(yīng)的私網(wǎng) 穿越功能,并根據(jù)用戶的選擇改變相應(yīng)的SIP消息內(nèi)容。終端可結(jié)合自身的STUN和TURN 模塊,所以用戶無(wú)需填寫STUN和TURN的IP地址與端口,使用方便。對(duì)比于其他的終端,有些終端不支持私網(wǎng)穿越,遇到復(fù)雜的網(wǎng)絡(luò)環(huán)境完全不能使 用;有些需要第三方提供私網(wǎng)穿越服務(wù)的服務(wù)器地址才能使用私網(wǎng)穿越功能,這對(duì)于初級(jí) 用戶而言很不方便,并且對(duì)于不知道能提供私網(wǎng)穿越服務(wù)的地址的用戶而言,終端相當(dāng)于 沒(méi)有私網(wǎng)穿越能力;有些融合進(jìn)私網(wǎng)穿越功能的終端也只提供STUN或者TURN兩者中的一種穿越方式。而本發(fā)明實(shí)施例中不但集成了常用的STUN的私網(wǎng)穿越方法,還集成了 TURN 方法,基本可以滿足絕大多數(shù)復(fù)雜的網(wǎng)絡(luò)拓?fù)洵h(huán)境下用戶對(duì)私網(wǎng)穿越功能的需求??梢愿鶕?jù)用戶是否使用私網(wǎng)穿越功能去改變某些關(guān)鍵SIP消息的內(nèi)容,如對(duì)于注冊(cè)(REGISTER)消息,如果使用了 STUN服務(wù)器,將消息體中ViaHeader中的 地址和ContactHeader中的地址改成NAT出口地址。建立REGISTER消息的流程如圖4所 示,圖4所示流程包括以下步驟1、創(chuàng)建 Register 消息體;2、判斷是否使用STUN,如果判斷結(jié)果為是,進(jìn)入步驟3 ;否則,進(jìn)入步驟5 ;3、將via頭改為出口 NAT的地址;4、將contact頭改為出口 NAT的地址,進(jìn)入步驟5 ;5、發(fā)送 Register 消息;在程序使用了 STUN或TURN的情況下,如果客戶端收到來(lái)自SIP服務(wù)器的為注冊(cè) 消息返回的2000K,則創(chuàng)建線程reRegisterTimer,該線程的任務(wù)是定時(shí)向服務(wù)器發(fā)送注冊(cè) 消息。并且,該線程在解注冊(cè)時(shí)被停止。需要說(shuō)明的是,創(chuàng)建該線程的作用主要是保持NAT 上的端口映射關(guān)系映射。如為了保持NAT上SIP信令監(jiān)聽(tīng)端口的映射端口,需要定期發(fā)送 SIP消息,體現(xiàn)在實(shí)現(xiàn)上即終端每隔一定時(shí)間向SIP服務(wù)器發(fā)送一次注冊(cè)消息。另外,為回復(fù)SIP服務(wù)器的INVITE消息而發(fā)送的2000K也需要做相應(yīng)修改,主要 需要修改SDP包中描述本地媒體的監(jiān)聽(tīng)端口和2000K消息中的contact頭。創(chuàng)建SDP的流程如圖5所示,圖5所示流程包括以下步驟1、獲得所分配的音頻視頻監(jiān)聽(tīng)端口的值;2、判斷是否使用STUN服務(wù)器且沒(méi)有使用TURN服務(wù)器,如果判斷結(jié)果為是,進(jìn)入步 驟3;否則,進(jìn)入步驟4;3、將媒體描述中的媒體端口改為對(duì)應(yīng)的NAT出口端口,并進(jìn)入步驟7 ;4、判斷是否使用TURN服務(wù)器,如果判斷結(jié)果為是,進(jìn)入步驟5;否則,進(jìn)入步驟6 ;5、將媒體描述中的媒體端口改為對(duì)應(yīng)的中轉(zhuǎn)服務(wù)器上的端口,并進(jìn)入步驟7 ;6、將為監(jiān)聽(tīng)媒體流分配的原端口寫入媒體描述中;7、為SDP包加入其他正常通信消息,創(chuàng)建完整的SDP包;關(guān)于contactHeader,主要修改其中的 ContactURI。如果使用 了 STUN,contactURI 中的地址改為對(duì)應(yīng)的NAT出口 IP,port改為對(duì)應(yīng)的NAT出口端口。如果使用了 TURN,則利用INVITE消息中的TO域中的URI來(lái)建立contact頭中的 contactURI。在發(fā)送2000K之后,還要?jiǎng)?chuàng)建UDP發(fā)送線程。該線程的作用是,定時(shí)通過(guò)本地的媒 體監(jiān)聽(tīng)端口向外界發(fā)UDP包。設(shè)計(jì)UDP發(fā)送線程的原因有兩個(gè)—個(gè)原因是在有防火墻的網(wǎng)絡(luò)環(huán)境,終端的某一個(gè)端口必須先向外發(fā)包,外界才 能將包送到這個(gè)端口。而媒體服務(wù)器會(huì)在終端不發(fā)任何媒體包之前先向本地的媒體監(jiān)聽(tīng)端 口發(fā)試探包,如果發(fā)送不成功,媒體服務(wù)器會(huì)主動(dòng)結(jié)束本次連接。因此,為了能正常的收到 試探包,終端需要在發(fā)送2000K后,通過(guò)向外發(fā)送UDP包,實(shí)現(xiàn)在防火墻上打通媒體監(jiān)聽(tīng)對(duì) 應(yīng)的UDP端口。
另一個(gè)原因是為了保持NAT上的端口映射關(guān)系。本地接收音、視頻媒體流和發(fā)送 音、視頻媒體流的端口分別是四個(gè)不同的端口,因此接收媒體流的兩個(gè)端口會(huì)一直保持只 收不發(fā)的狀態(tài)。為了保持NAT上媒體流接收端口的映射端口有效,需要定期通過(guò)這兩個(gè)接 收端口向外發(fā)送UDP包。對(duì)于用戶主動(dòng)發(fā)出的BYE消息,需要修改ViaHeader的對(duì)應(yīng)內(nèi)容。創(chuàng)建BYE消息。 加入私網(wǎng)穿越能力對(duì)BYE消息的修改流程如圖6所示,圖6所示流程包括以下步驟1、建立 BYE 的 request 消息體;2、判斷是否使用了 STUN服務(wù)器,如果判決結(jié)果為是,進(jìn)入步驟3 ;否則,進(jìn)入步驟 4 ;3、將ViaHeader中的本地IP改為對(duì)應(yīng)的出口 NAT的IP,并進(jìn)入步驟4 ;4、判斷是否使用了 STUN或者TURN,如果判決結(jié)果為是,進(jìn)入步驟5 ;否則,進(jìn)入步 驟6 ;5、確認(rèn)開(kāi)啟了 UDP線程,停止UDP發(fā)送線程,并進(jìn)入步驟6 ;6、釋放媒體資源;7、判斷是否使用了 TURN服務(wù)器,如果判決結(jié)果為是,進(jìn)入步驟8 ;否則,進(jìn)入步驟 9 ;8、向TURN服務(wù)器發(fā)送消息,通知服務(wù)器釋放之前被占用的端口,以便下次使用;9、向TURN服務(wù)器發(fā)送BYE消息,并從會(huì)話列表中刪除當(dāng)前會(huì)話,同時(shí)修改會(huì)話狀 態(tài)。當(dāng)收到服務(wù)器發(fā)來(lái)的BYE消息時(shí),對(duì)回復(fù)BYE的2000K消息同樣需要進(jìn)行修改,以 加入私網(wǎng)穿越能力;具體的流程如圖7所示,圖7所示流程包括以下步驟1、建立并向服務(wù)器返回2000K消息;2、從會(huì)話列表中刪除當(dāng)前會(huì)話,同時(shí)修改會(huì)話狀態(tài);3、判斷是否使用了 STUN或者TURN服務(wù)器,如果判斷結(jié)果為是,進(jìn)入步驟4 ;否則, 進(jìn)入步驟5 ;4、確認(rèn)開(kāi)啟了 UDP線程,停止UDP發(fā)送線程;5、釋放媒體資源;6、判斷是否使用了 TURN服務(wù)器,并在判斷結(jié)果為是時(shí)進(jìn)入步驟7 ;7、向TURN服務(wù)器發(fā)送消息,通知服務(wù)器釋放之前被占用的端口,以便下次使用。另外,在用戶界面對(duì)私網(wǎng)穿越的支持體現(xiàn)在用戶可以從對(duì)話框中選擇希望使用的 私網(wǎng)穿越方法,如STUN或TURN。當(dāng)用戶填入某種穿越方式的服務(wù)器地址并點(diǎn)擊確定后,呼 叫控制模塊開(kāi)啟對(duì)應(yīng)的穿越方法,并調(diào)用SIP協(xié)議棧以向服務(wù)器發(fā)送注冊(cè)消息。會(huì)話控制模塊對(duì)私網(wǎng)穿越功能的支持還體現(xiàn)在定時(shí)發(fā)包以打通防火墻這一功能 上假如某個(gè)局域網(wǎng)中有防火墻,需要做打通防火墻的操作。防火墻有如下行為模式 不允許防火墻外的主機(jī)首先通過(guò)特定端口向內(nèi)網(wǎng)發(fā)包,而必須是先由內(nèi)網(wǎng)通過(guò)此端口向外 網(wǎng)發(fā)包后,才允許此端口接收外網(wǎng)發(fā)送來(lái)的數(shù)據(jù)包。由于媒體服務(wù)器會(huì)先向終端發(fā)送媒體流,因此如果不提前向外發(fā)包打通防火墻, 媒體流始終會(huì)被攔在防火墻以外;所以要先向外網(wǎng)發(fā)包,打通防火墻。
由于TURN的穿越方式是中轉(zhuǎn)的方式,(即終端先發(fā)給TURN服務(wù)器,TURN服務(wù)器再 轉(zhuǎn)發(fā)給媒體服務(wù)器或者會(huì)議服務(wù)器;同理,服務(wù)器發(fā)來(lái)的媒體流或者信令也是通過(guò)TURN服 務(wù)器轉(zhuǎn)發(fā)給終端的),所以在媒體流到達(dá)之前已經(jīng)向中轉(zhuǎn)服務(wù)器發(fā)過(guò)消息,因此TURN的穿 越方式不需要提前打通防火墻。在用戶選擇使用STUN的穿越方式時(shí),當(dāng)服務(wù)器邀請(qǐng)用戶進(jìn)入會(huì)議而且用戶同意 時(shí),會(huì)話控制層會(huì)向媒體服務(wù)器的地址發(fā)送簡(jiǎn)單UDP包,以打通防火墻。在隨后的的媒體交 互過(guò)程中,終端始終向媒體服務(wù)器發(fā)送簡(jiǎn)單UDP包,以保持防火墻上的對(duì)應(yīng)端口可用。終端對(duì)基于IPV6的通信和基于IPV4的通信均可支持。媒體處理模塊的JMF和 SIP協(xié)議棧的JAIN SIP本身均支持IPV4和IPV6雙棧。所以只要做簡(jiǎn)單改動(dòng)即可。每次在系統(tǒng)啟動(dòng)時(shí),呼叫控制模塊都要獲取本機(jī)IP,以支持基于SIP協(xié)議的通信 和基于媒體的通信。在呼叫控制模塊獲取本機(jī)IP時(shí),如果用戶輸入的服務(wù)器地址是IPV6 的地址,則取一個(gè)IPV6地址作為本機(jī)地址;若用戶輸入的服務(wù)器地址是IPV4地址,則取一 個(gè)IPV4地址做為本機(jī)地址。在SIP協(xié)議棧創(chuàng)建SDP消息時(shí),根據(jù)當(dāng)前地址類型將Connection和Origin域的 地址設(shè)為IP4或IP6。對(duì)應(yīng)的如果是IPV4環(huán)境,SDP包中這兩個(gè)域中的IP6應(yīng)替換為IP4。針對(duì)用戶界面,如果本機(jī)IP為IPV6地址,則配置STUN和TURN的對(duì)話框不會(huì)出現(xiàn) 在用戶界面中,因?yàn)樵贗PV6的環(huán)境下不需要私網(wǎng)穿越功能。目前所采用的SIP協(xié)議棧是基于JAIN SIP的,這樣可以保持Java的可移植性和 Applet程序在多種瀏覽器中運(yùn)行的特點(diǎn)。其他的協(xié)議棧也有很多,如0PAL是使用C++語(yǔ) 言開(kāi)發(fā)的;reSIProcate也是使用C++開(kāi)發(fā)的;oSip是使用C語(yǔ)言開(kāi)發(fā)的;sipX是使用C++ 實(shí)現(xiàn)的。這些協(xié)議棧都各有優(yōu)缺點(diǎn),但是考慮到跨平臺(tái)性和瀏覽器對(duì)其作為插件的支持上, 可以優(yōu)先選用基于Java語(yǔ)言開(kāi)發(fā)的JAINSIP協(xié)議棧?;谝陨纤黾夹g(shù)內(nèi)容可知,本發(fā)明SIP終端的會(huì)話處理方法具有如圖8所示的 操作思路。參見(jiàn)圖8,圖8為本發(fā)明實(shí)施例的SIP終端會(huì)話處理流程簡(jiǎn)圖,該流程包括以下 步驟步驟810 運(yùn)行完JMF安裝程序后,在對(duì)應(yīng)目錄中提取關(guān)鍵文件,包括涉及JMF框 架的jmf. jar文件、記錄客戶端本地屬性的jmf. properties文件、本地鏈接庫(kù)文件;并將以 上文件都放在web服務(wù)器中。步驟820 在加載并運(yùn)行SIP終端中的applet時(shí),下載以上文件到對(duì)應(yīng)的目錄。綜上所述可見(jiàn),無(wú)論是裝置還是方法,本發(fā)明的會(huì)話處理技術(shù)具有如下優(yōu)點(diǎn)第一,基于Web的SIP終端具有很好的跨平臺(tái)特性。Java語(yǔ)言有著跨平臺(tái)的特性, 只要有Java虛擬機(jī),Java程序就能夠運(yùn)行。而基于Web的SIP終端是基于Java語(yǔ)言開(kāi)發(fā) 的Java小應(yīng)用程序,因此也具有跨平臺(tái)的特性。只要客戶端安裝了 JAVA虛擬機(jī),而且有瀏 覽器程序,系統(tǒng)就可以在客戶端的瀏覽器程序中正常運(yùn)行,應(yīng)用的范圍廣泛。第二,由于不用進(jìn)行插件的安裝,用戶使用起來(lái)很方便。Applet本身不需要安裝就 可以使用。雖然JMF需要安裝才能使用,但是由于終端集成了 JMF,因此不需要運(yùn)行JMF安 裝文件,免去了安裝的過(guò)程。第三,基于Web的SIP終端能夠在多種瀏覽器中正常運(yùn)行。由于很多主流瀏覽器 對(duì)Applet都有很好的支持,所以通過(guò)Applet標(biāo)簽嵌入網(wǎng)頁(yè)的Java小應(yīng)用程序能夠在大多數(shù)瀏覽器中運(yùn)行,即基于Web的SIP終端能夠通過(guò)多種瀏覽器打開(kāi)。經(jīng)測(cè)試,終端在IE、 FireFox, Opera、Chrome等瀏覽器上均可正常運(yùn)行。另外,系統(tǒng)能夠在復(fù)雜的網(wǎng)絡(luò)環(huán)境中順利運(yùn)行。系統(tǒng)具有私網(wǎng)穿越的能力,能夠進(jìn) 行STUN和TURN穿越。因此,面對(duì)對(duì)稱NAT網(wǎng)關(guān)、非對(duì)稱NAT網(wǎng)關(guān)甚至是多級(jí)串聯(lián)的NAT網(wǎng) 關(guān),系統(tǒng)都能順利運(yùn)行。最后,終端支持多種媒體編解碼格式。所支持的音頻格式為G723、G711、GSM、 PCMA.G728.G729 ;所支持的視頻格式為JPEG、H263、擬64、H261。以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍,凡在 本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù) 范圍之內(nèi)。
權(quán)利要求
1.一種會(huì)話發(fā)起協(xié)議SIP終端,其特征在于,該終端包括呼叫控制模塊,媒體處理模塊 和SIP協(xié)議棧;其中,所述媒體處理模塊,用于在運(yùn)行完JAVA多媒體框架JMF安裝程序后,在對(duì)應(yīng)目錄中提 取關(guān)鍵文件,包括涉及JMF框架的jmf. jar文件、記錄客戶端本地屬性的jmf. properties 文件、本地鏈接庫(kù)文件,并將以上文件都放在web服務(wù)器中;還用于在加載并運(yùn)行SIP終端 中的小應(yīng)用程序applet時(shí),下載以上文件到對(duì)應(yīng)的目錄,實(shí)現(xiàn)所述SIP終端的免安裝;所述呼叫控制模塊,用于基于所述媒體處理模塊實(shí)現(xiàn)的SIP終端的免安裝,進(jìn)行呼叫 控制;所述SIP協(xié)議棧,用于對(duì)包括所述呼叫控制以內(nèi)的通信提供協(xié)議支持。
2.根據(jù)權(quán)利要求1所述的終端,其特征在于,該終端進(jìn)一步包括用戶界面,用于提供實(shí) 現(xiàn)SIP多媒體會(huì)議系統(tǒng)所需要的標(biāo)準(zhǔn)用戶界面;所述用戶界面包括小應(yīng)用程序的界面和HTML界面。
3.根據(jù)權(quán)利要求2所述的終端,其特征在于,所述呼叫控制模塊,用于通過(guò)與所述用戶 界面的交互,調(diào)用應(yīng)用于綜合網(wǎng)絡(luò)的Java API SIP和所述媒體處理模塊的相關(guān)功能,實(shí)現(xiàn) 用戶、SIP終端和SIP服務(wù)器之間的呼叫連接的建立和拆除;所述呼叫控制模塊的邏輯包括加入會(huì)議、主動(dòng)退出會(huì)議、被動(dòng)退出會(huì)議。
4.根據(jù)權(quán)利要求1至3任一項(xiàng)所述的終端,其特征在于,所述媒體處理模塊基于JMF實(shí) 現(xiàn),并且增加了 JMF對(duì)H. 264視頻編解碼格式的支持。
5.根據(jù)權(quán)利要求4所述的終端,其特征在于,所述媒體處理模塊,進(jìn)一步用于在所述SIP方法剛運(yùn)行時(shí),檢測(cè)客戶端的媒體設(shè)備,包括檢測(cè)本地是否有所述jmf. properties文件,以及檢測(cè)本地是否有所有需要的本地鏈接庫(kù)文件。
6.一種SIP終端的會(huì)話處理方法,其特征在于,該方法包括運(yùn)行完JMF安裝程序后,在對(duì)應(yīng)目錄中提取關(guān)鍵文件,包括涉及JMF框架的jmf. jar 文件、記錄客戶端本地屬性的jmf. properties文件、本地鏈接庫(kù)文件;并將以上文件都放 在web服務(wù)器中;在加載并運(yùn)行SIP終端中的applet時(shí),下載以上文件到對(duì)應(yīng)的目錄,實(shí)現(xiàn)所述SIP終 端的免安裝,并基于此進(jìn)行呼叫控制。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述SIP終端中包括用戶界面,包括小 應(yīng)用程序的界面和HTML界面;該方法進(jìn)一步包括由所述用戶界面提供實(shí)現(xiàn)SIP多媒體會(huì)議系統(tǒng)所需要的標(biāo)準(zhǔn)用戶界面。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述SIP終端中包括呼叫控制模塊和媒體 處理模塊,所述呼叫控制模塊的邏輯包括加入會(huì)議、主動(dòng)退出會(huì)議、被動(dòng)退出會(huì)議;該方法進(jìn)一步包括通過(guò)與所述用戶界面的交互,由所述呼叫控制模塊調(diào)用應(yīng)用于綜合網(wǎng)絡(luò)的JavaAPI SIP和所述媒體處理模塊的相關(guān)功能,實(shí)現(xiàn)用戶、SIP終端和SIP服務(wù)器之間的呼叫連接的 建立和拆除。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述媒體處理模塊基于JMF實(shí)現(xiàn),并且增加了 JMF對(duì)H. 264視頻編解碼格式的支持。
10.根據(jù)權(quán)利要求9所述的方法,其特征在于,該方法進(jìn)一步包括 在所述SIP終端剛運(yùn)行時(shí),由所述媒體處理模塊檢測(cè)客戶端的媒體設(shè)備,包括檢測(cè)本 地是否有所述jmf. properties文件,以及檢測(cè)本地是否有所有需要的本地鏈接庫(kù)文件。
全文摘要
本發(fā)明公開(kāi)了一種SIP終端及其會(huì)話處理方法,均可在運(yùn)行完JMF安裝程序后,在對(duì)應(yīng)目錄中提取關(guān)鍵文件,包括涉及JMF框架的jmf.jar文件、記錄客戶端本地屬性的jmf.properties文件、本地鏈接庫(kù)文件;并將以上文件都放在web服務(wù)器中;在加載并運(yùn)行SIP終端中的applet時(shí),下載以上文件到對(duì)應(yīng)的目錄,實(shí)現(xiàn)所述SIP終端的免安裝,并基于此進(jìn)行呼叫控制。本發(fā)明的SIP終端及其會(huì)話處理方法,能夠有效保證SIP終端的免安裝和跨平臺(tái)特性。
文檔編號(hào)H04L29/06GK102123154SQ20111006571
公開(kāi)日2011年7月13日 申請(qǐng)日期2011年3月17日 優(yōu)先權(quán)日2011年3月17日
發(fā)明者劉傳昌, 吳步丹, 商彥磊, 秦斯, 程渤, 章洋, 陳俊亮 申請(qǐng)人:北京郵電大學(xué)