左憲禹+張河+王棟
摘 要: 通過對Java媒體框架技術的研究,結合多媒體實時通訊技術,將其應用在遠程視頻會商中,以文字、音頻、視頻、白板、文件和圖片傳輸的交互方式,實現了遠程會商所需的功能。模擬面對面交流的功能,使遠程交互不僅便捷而且形象具體,通過多樣性的信息傳輸,克服了傳統通訊方式抽象,難以表達的缺陷。多樣性的交互方式方便了用戶交流,更大程度的滿足了用戶需求。
關鍵詞: 視頻會商; 多樣性; Java; 多媒體技術
中圖分類號:TP391 文獻標志碼:A 文章編號:1006-8228(2017)03-14-03
Abstract: The Java media framework technology is studied, and combined with the real-time multimedia communication technology, it is applied in remote video consultation, and the required function of remote consultation is realized via the interactive mode of text, audio, video, whiteboard, file and image transmission. The simulation of the functions of face to face communication makes the remote interaction not only convenient but also specific, via the diversity information transmission, the traditional communication method's defects of abstract and difficult to express are overcome. The diversity interactive mode facilitates the communication of users, and meets the needs of users better.
Key words: video consultation; diversity; Java; multimedia technology
0 引言
隨著互聯網的發展,遠程會商已經成為一種重要的交流方式,其無論從時間角度還是經濟角度,都比傳統的交流方式具有優勢。在傳統單一的交流方式中,往往沒法解決太多問題,很多時候會出現“電話里面說不清”的現象。所以要想真正實現用戶順暢的交流,必須實現多種方式的交流,讓用戶能從字面,圖像,視頻,語音,涂鴉板,共享文件等全方面進行交流。因此提供一個功能多,穩定性強的遠程會商服務,極其符合當前快節奏的信息交流方式。
1 框架結構
本系統采用c/s設計結構,服務器端負責實現不同用戶的實時數據接發,并承擔用戶注冊,賬戶密碼驗證,用戶信息管理等工作。用戶登錄之后,可以查找并添加感興趣的用戶成為好友,也可以創建一個主題好友圈組成好友群。用戶可以與其他用戶互發文字、圖片、文件,也可以與好友單人或好友群開啟視頻會商。視頻會商一般默認給予發起人發言權限,用戶在得到發言權限之后,將可以獲得白板的使用權和發送多媒體數據包的權限,同時也允許其他用戶用搶占的方式獲取發言權限。用戶端基于Netty組件建立與服務器的聯系,實現圖片、文字、文件的傳輸,利用RTP(Real-time Transport Protocol)協議實現音頻和視頻的采集、編解碼、傳輸,利用JMF(Java Media Framework)來管理基于時間的多媒體數據的獲取、處理和播放。
2 系統的設計與實現
2.1 用戶注冊認證及相關功能的實現
服務器通過對數據庫的檢索,完成用戶登陸驗證,保證新注冊的用戶不與原有用戶信息沖突,在用戶登陸成功之后,發送其儲存在數據庫里的離線消息,通知其他用戶新用戶上線。
我們選擇Netty框架構建服務器,用bind方法創建兩個NioEventLoopGroup線程組。當用戶發出登錄請求后, 其中一個NioEventLoopGroup線程組與其建立一個channel連接,另一個進行SocketChannel網絡讀寫,并連接oracle數據庫檢索相關信息,在服務器的狀態表中添加新登錄用戶信息,在服務器連接列表中添加新的channel連接[1]。
服務器收到注冊消息之后,將收到的信息與數據庫原有信息進行檢索,保證用戶名正確且不重復的前提下,為其分配一個惟一的ID,并將其注冊相關信息存入數據庫表,作為登錄的驗證依據。
用戶可以通過檢索ID或用戶名、昵稱,尋找其他用戶,添加為好友。每一個用戶成功完成登錄驗證后,服務器都將其加入在線列表中,并更新其他用戶的客戶端,提示好友上線。
2.2 用戶文字、圖片、白板交互,以及文件傳輸的實現
為了用戶之間能發送文字和圖片,我們用一個自定義類Message類定義用戶的基本屬性如ID、姓名、IP等。當用戶發送消息時,我們創建一個Message對象,將要發送的文字和圖片分別賦值給content和Image熟悉。將Message對象序列化,檢索鏈接列表中對應的channel連接發送給服務器,最終到達對應用戶端反序列化獲取發送內容[2]。因為Netty是異步非阻塞的,通過Future-Listener機制,用戶可以方便的主動獲取或通過通知機制獲得IO操作結果,既保證了通訊結果,又緩解了Java序列化CPU資源占用率高的問題。
當用戶需要傳輸文件時,為了降低服務器負載,我們將小于1M的文件,序列化發送。對大于1M的文件,將用戶的IP和端口等連接信息傳遞給發送方,在兩個用戶之間建立鏈接。由于Netty的“零拷貝”功能,不僅避免了文件傳輸中進行字節緩沖區的二次拷貝,而且解決了傳統通過循環write方式導致的內存拷貝問題,使文件傳輸的效率比于傳統基于Java序列化+BIO(同步阻塞IO)的通信框架,性能提升了8倍以上。
2.3 用戶單人及群組會商的實現
⑴ 數據的獲取
我們利用JMF框架中的CaturnDeviceManager獲取對應設備的CaturnDeviceInfo對象,利用Player和Processor方法捕獲攝像頭和話筒數據,利用Processor對視頻數據進行處理[3]。JMF利用RTP協議傳輸數據,為實時數據提供了端到端的網絡交付服務。
⑵ 數據的傳輸
JMF架構的Presentation類和Processing類分別提供了上傳下載多媒體數據的處理方法。通過構建Manager、packageMessager、CaptureDeciceManager和PlugInManager四個管理器,遵循RTP和RTCP協議進行流量控制和擁塞控制。在一個完整的RTP流傳輸中,DataSoure媒體流被處理成RTP格式,會話管理器對數據進行管理,將一個輸出作為DataSoure進行管理和傳輸,最終完成RTP流的傳輸[4]。
⑶ 數據的同步
在實時傳輸過程中,系統時間同步尤為重要。我們利用JMF提供的三個接口:Clock、Time、Duration,確保音視頻數據的同步傳輸,降低丟包率。
RTP包中的順序號可以實時計數RTP數據包,隨時記錄RTP數據包的采樣時間戳,有效降低信息包的抖動,確保數據的同步。
⑷ 多人會話管理
多人在線時,由于可以輪流成為發言人。成為發言人的客戶端,會在短時間內產生大量的多媒體數據,數據的波動可能給服務器帶來很大的壓力。因此我們使用sessionManager管理器管理RTP傳輸,跟蹤監控傳輸過程,及時改變RTCP的管道控制,避免出現卡頓現象,保證輪流對話的通暢。
2.4 用戶間P2P的實現
由于用戶之間文件傳輸和視頻傳輸,會產生大量流數據,服務器壓力過大。所以在文件、視頻傳輸時,如果都采用服務器轉發方式,會給服務器帶來巨大的壓力。因此需要在用戶之間嘗試建立P2P連接,減輕服務器的傳輸壓力。
然而用戶之間的P2P傳輸,不能避免的一個問題就是NAT穿透。NAT(Network Address Translation,網絡地址轉換)自1994年提出以來,因為其在一定程度上解決了IPV4地址不足,得到了廣泛的應用。專用網內部的一些主機通過NAT方法分配本地IP地址(即僅在本專用網內使用的專用地址),并利用同一個公共IP地址與外網通訊,既減少了IP地址的申請,又隱藏了內部網絡構成,增加了安全性。
因為NAT的如上優點,其得到了廣泛應用,與此同時,大量內網用戶共享一個公網IP,這給用戶之間P2P的建立帶來巨大的困擾。由于TCP連接需要確定雙方的IP地址和端口號,而處于內網的用戶是通過NAT 自動分配獲得一個公網IP的端口映射。這使得用戶之間無法通過直接獲取對方IP和端口的方式建立TCP連接[5]。
2.4.1 TCP連接的內網穿透
由于NAT的內網映射分為兩類:克隆式NAT和對稱式NAT。其中克隆式NAT將內網中相同用戶的所有連接請求,都映射到相同的外網地址。對稱式NAT則剛好相反,給內網用戶的每一個連接請求,都映射一個不同的地址。而且對稱式NAT對每一次連接分配映射,有兩種不同的方式:有規律的(一般為順序分配),隨機無規律的分配。
針對不同NAT類型,用如下方式判斷NAT類型。
⑴ 用客戶端端口Port連接服務器,建立TCP連接,記錄下A經過NAT映射后的地址信息IPA。
⑵ 用客戶端端口Port+1重復1中的操作,記錄地址信息IPA'。
⑶ 判斷IPA與IPA'是否相同,則可得知NAT是克隆式,還是對稱式。
⑷ 若NAT部位克隆式,多次執行上述操作,判斷地址是否為有規律的對稱NAT。
因為市面可見的NAT設備多為克隆式,且對稱式NAT無規則的分配方式較為少見,所以不作考慮。
推斷出NAT的映射方式之后,進行如下操作。
⑴ 服務器獲取用戶雙方的外網映射和特殊識別信息,并發送給對方,推斷出下一次連接是分配的地址,雙方用戶分別向該地址發送SYN連接請求,并加入自己的特殊識別信息。由于向該地址發送過請求,所以當收到SYN報文時,NAT允許其進入內網,用戶可以接收對比特殊識別信息。三次握手執行第一步。
⑵ 通過服務器通知雙方SYN消息收到,并向對方機器發送SYN+ACK數據包,并向服務器發送特殊字符P,并將P轉發給對方。
⑶ 收到P字符后停止SYN+ACK數據包發送,產生ACK信息并加入標識符和特殊識別信息,反復向最新的公網地址發送,直至連接成功。
至此,TCP連接建立完成。
2.4.2 UDP連接的內網穿透
UDP連接相對于TCP連接要簡單,與TCP連接類似,UDP連接對于對稱無規則的NAT分配方式無效。在操作過程中,UDP只需要進行一次操作,即通過服務器轉發雙方客戶端消息,雙方客戶端互發消息進行NAT打洞操作。因為UDP的操作相對簡單,目前大多是NAT穿透,均用此方法完成。
2.4.3 服務器轉發
在上述方法均無法連接的情況下,如果服務器允許,可以用服務器轉發的方式完成傳輸。但這會加大服務器帶寬的壓力,應當盡量避免采用。
3 結束語
本文用Java多媒體技術框架,成功實現了遠程視頻會商,能提供穩定的會話和文件的P2P傳輸,有白板書寫功能,基本實現了遠程會商所需要達到的效果。通過多媒體通訊很好的解決了跨區域交流的不便,利用日益發展的互聯網技術,提供更好的用戶體驗,不僅可以減少交流成本,更能節省寶貴的差旅時間,讓面對面才能講清楚的問題,在網上也能講清楚。
隨著網絡帶寬的拓展,以及遠程辦公需求的增多,開發多功能跨平臺的多媒體通訊應用是大勢所趨。在此背景下,多媒體通訊的施展空間將會越來越大,在此基礎上不斷完善功能,提供一個持續穩定,體驗良好的通訊系統符合時代的要求。而且本系統具備Java跨平臺的特點,具備很高的可移植性,能很好地適應以后的發展需要。
本系統在已完成的基礎上,還有很多可以完善和改進的地方,如文檔的在線傳閱、修改,共享電子白板的圖片等共享,如果加以改進和開發,可以為用戶提供更好的使用體驗。
參考文獻(References):
[1] 陳立定,陳偉欣.基于JMF的實時視頻組播系統的研究[J].微計算機信息,2009.12.
[2] 閆改珍,師衛.基于RTP的音頻流多播系統的JMF實現[J].科技情報開發與經濟,2007.5.
[3] 吳來群.多媒體技術在企業宣傳中的應用[J].現代國企研究,2016.6.
[4] 曹津,陳軍.基于用戶體驗的多媒體教學設施預約服務系統研究[J].中國教育信息化,2016.8.
[5] 張連堂,嚴運廣.集群節點連接信息的可視化設計[J].計算機時代,2016.2.