徐文莉 熊燕 李燕
摘 要:P2P技術因其非中心化、身份對等、可擴展性等優(yōu)勢,在即時通信領域受到重視?;赑2P的即時通信系統(tǒng),廣泛應用于個人通信、商務洽談、企業(yè)管理等領域。為完善系統(tǒng)功能,提高開發(fā)效率,對在.NET平臺下建立完全對等的P2P拓撲結構,實現(xiàn)局域網通信關鍵技術及應用方式進行了研究。利用PNRP協(xié)議編程實現(xiàn)了對等節(jié)點的發(fā)現(xiàn),通過對DirectShow的封裝高效完成了音視頻數據的采集與壓縮,在TCP/UDP協(xié)議及多線程技術支持下實現(xiàn)了數據有效傳輸。實際應用表明,系統(tǒng)架構設計合理,關鍵技術應用可行。
關鍵詞:即時通信;對等網絡;TCP/UDP;PNRP;DirectShow
DOI:10.11907/rjdk.172275
中圖分類號:TP319 文獻標識碼:A 文章編號:1672-7800(2017)009-0151-03
Abstract:Due to its advantages of non-centrality, identity equivalence, scalability, P2P technology has gradually attracted more attention in the field of instant messaging. Instant messaging system has been widely applied in certain areas based on P2P technology, such as personal communication, business negotiation, enterprise management and so on. With the purpose of improving systems function and enhancing development efficiency, some key technologies and application methods of establishing completely equivalent P2P topology in .NET platform are under research and analysis. By programming with PNRP protocol, peer node discovery is realized. The work of collecting and compressing audio and video data with packaged DirectShow is finished as well. In the end, data effective transmission is solved with the support of TCP/UDP protocol and multithread technology. It can be proved that systems architecture is reasonable, and the application of key technology is feasible and effective.
Key Words:instant messaging; P2P; TCP/UDP; PNRP; DirectShow
0 引言
即時通信系統(tǒng)的發(fā)展,滿足了人們對信息交流實時性、多樣性、有效性需求。其中,P2P即時通信系統(tǒng)利用P2P技術及網絡通信技術,以計算機網絡為載體,以弱化或消除服務器分工為前提,以實現(xiàn)交互雙方便捷有效的文字、圖像、音視頻信息通信為目的,在計算機網絡與通信領域受到廣泛關注,主流產品包括MSN、騰訊QQ、Skype等。
局域網即時通信系統(tǒng)具有輕型、高效、便利、易管理等特點,較多服務于校園網、企業(yè)網領域,例如建設多人視頻會議平臺、網絡教學平臺、企業(yè)內部服務平臺等,這些系統(tǒng)大多依賴服務端的管理或協(xié)調功能運作[1]。本文討論的即時通信系統(tǒng)是基于.NET平臺開發(fā)的一種無服務器的完全對等型P2P通信應用軟件,重點分析了系統(tǒng)功能實現(xiàn)過程中的對等節(jié)點發(fā)現(xiàn)、音視頻數據采集及傳輸、網絡消息管理等解決方案。
1 即時通信系統(tǒng)架構及功能
1.1 系統(tǒng)架構選擇
P2P架構系統(tǒng)優(yōu)勢是對等和分布。隨著P2P技術的發(fā)展,絕大多數即時通信系統(tǒng)功能實現(xiàn)都建立在P2P方式架構之上。使用P2P方式架構的系統(tǒng)可分為單純型P2P及混合型P2P兩大類,區(qū)別在于是否依賴于專用服務器[2]。
以騰訊QQ為代表的傳統(tǒng)即時通信軟件數據傳輸采用P2P技術,具有集中式P2P網絡拓撲結構,客戶端通信需要索引服務器的協(xié)調配合。而以Skype為代表的P2P VoIP軟件,則是從連接建立到數據傳輸過程中都采用P2P實現(xiàn),建立混合式P2P網絡拓撲結構,通信節(jié)點根據計算能力不同設立不同的分工。兩者都屬于混合型P2P系統(tǒng),需要服務器完成分發(fā)或存儲,同時還要解決網絡中地址的轉換(NAT)問題[3]。
PNRP協(xié)議的出現(xiàn),更好地支持了單純型P2P系統(tǒng)發(fā)展,為開發(fā)P2P應用程序提供了新的解決途徑[4]。單純型P2P系統(tǒng)所有節(jié)點都是對等的,任何一個節(jié)點只要安裝了同一個P2P應用軟件,就可和其它安裝此軟件的節(jié)點直接通信,節(jié)點的管理機制更加簡化。但由于PNRP全局云基于IPv6協(xié)議,因此,在IPv6尚未完全普及的今天,PNRP協(xié)議較多應用在本地云系統(tǒng)中[2]。考慮到網絡復雜性控制,本文選擇建立單純型P2P局域網即時通信系統(tǒng)。
1.2 系統(tǒng)功能分析
單純型P2P系統(tǒng)可分為登錄模塊、通信模塊、消息存儲與管理模塊及可擴展模塊,見圖1。
相關模塊的實現(xiàn)及對應的關鍵技術支持密不可分,各模塊具體功能如下:endprint
(1)登錄模塊:實現(xiàn)對等節(jié)點的注冊與注銷。對等節(jié)點通過登錄模塊,以IP地址及端口為唯一標識,加入或退出網絡拓撲,同時完成用戶在線狀態(tài)的實時更新,在通信列表中能查看到在線用戶信息。對初次登錄節(jié)點生成新的本地存檔文件,用于保存通信記錄。重新登錄時,更新該文件相關數據。
(2)通信模塊:包含文本、音頻、視頻3種通信方式,是系統(tǒng)的核心模塊,分為音視頻處理框架和即時通信協(xié)議兩部分。音視頻處理框架集成了音視頻采集、音視頻編解碼、音視頻分流控制、音視頻數據流網絡擁塞控制等技術模塊,能夠完成音視頻數據流的采集、編碼、分流等基本處理流程。即時通信協(xié)議則負責為音視頻數據協(xié)商傳輸通道,在協(xié)商好的傳輸通道上建立對應連接,從而為音視頻數據的順暢傳輸提供保障。
(3)消息存儲與管理模塊:用本地XML文檔存儲用戶信息及通信消息[5]。該文檔的作用類似于日志文件,記載通信數據,可用于通信記錄查詢、用戶行為分析等功能。
(4)可擴展模塊:包括消息群發(fā)、文件傳輸、圖像截取、音視頻錄制等,可擴展系統(tǒng)功能。
2 關鍵技術分析
2.1 PNRP協(xié)議編程
PNRP是微軟公司設計的基于IPv4和IPv6的點對點協(xié)議,提供了安全靈活的動態(tài)名稱注冊和名稱解析[6]。系統(tǒng)登錄模塊本質就是完成局域網中對等節(jié)點名稱的注冊與解析,可基于.NET平臺的PNRP協(xié)議編程實現(xiàn)。
.NET平臺的System.Net.PeerToPeer及System.Net.PeerToPeer.Collaboration命名空間包含了實現(xiàn)PNRP的類。對等節(jié)點名稱注冊及名稱解析是完成PNRP資源發(fā)現(xiàn)的關鍵,處理流程如圖2所示。
2.1.1 名稱注冊
用戶登錄過程即對應名稱注冊。將對等名稱發(fā)布到云中,以便其它對等節(jié)點解析,主要涉及到PeerName類、PeerNameRegistration類,前者用于構建對等名稱實例對象,后者用于完成對等名稱實例注冊。其中,設定Peer端點所有連接本機的PNRP群及注冊PNRP Peer Name到PNRP Cloud中的代碼為:
peerNameRegistration.Cloud = Cloud. Available; //設定Cloud的屬性值
peerNameRegistration.Start(); //調用Start()方法完成注冊
2.1.2 名稱解析
名稱解析是利用對等名稱獲取注冊到云中的對等節(jié)點的IP地址和端口過程。完成名稱解析,則完成了通信節(jié)點定位,可通過PeerNameResolver類的Resolve方法實現(xiàn):
PeerNameRecordCollection recColl = myRes.Resolve(myPeer)
由于P2P網絡允許參與其中的各個對等用戶自主加入和退出,為實現(xiàn)在線對等節(jié)點信息實時更新,需要使用多線程編程技術完成名稱實時解析,主要涉及到委托回調機制。
2.2 DirectShow與音視頻信息處理
音視頻信息處理框架設計能有效保證系統(tǒng)功能的多樣化,DirectShow技術為音視頻信息處理提供了高效的解決方法[7]。
2.2.1 .NET對DirectShow封裝
為使C#開發(fā)者能方便使用DirectShow,.NET對DirectShow系統(tǒng)框架設計了C#開源封裝。利用DirectX.Capture(基于DirectShow.Net的類庫)及DShowNET(DirectShow的組件封裝類)實現(xiàn)DirectShow的各種功能[7]。
2.2.2 音視頻信息處理
根據實際應用需求,用戶可完成純文本/語音通信或音視頻實時通信,需要分開建立文本、音頻及視頻傳輸模塊,音視頻模塊的數據處理流程基本類似[8]。音視頻處理模塊的Filter Graph鏈路、各功能塊Filter及數據流處理流程見圖3。
過濾器圖表提供了音視頻數據的轉換輸出流程[9]。源過濾器負責采集原始數據,經由轉換過濾器處理數據并生成輸出流,通過提交過濾器接收數據,將數據提交給外設呈現(xiàn)。DirectX.Capture類庫通過Filters類構建音視頻的源Filter、音視頻壓縮Filter,通過Capture類實現(xiàn)音視頻數據的相關處理[10]。
由源過濾器到轉換過濾器的實現(xiàn),主要包括音視頻設備的識別、基本屬性的設置、數據采集、音視頻壓縮Filter的創(chuàng)建等過程。
(1)數據采集。Capture類定義了Start()和Stop()方法,實現(xiàn)數據采集的開始與停止控制。利用創(chuàng)建的過濾器圖表管理器(Filter Graph Manager)可引出ImediaControl接口,該接口是DirectShow的常用接口,用于控制媒體流在FilterGraph中的流動,從而實現(xiàn)對應的Start()及Stop()方法,來開啟或停止音視頻數據的采集。另外視頻幀圖像的獲取,可以利用Sample Grabber過濾器的一個接口IsampeGrabberCB來實現(xiàn)。
(2)創(chuàng)建音視頻壓縮Filter。音視頻壓縮的實現(xiàn)過程是安裝需要的音視頻編解碼器,DirectX.Capture可枚舉出相應的壓縮Filter,由AudioCompressor和VideoCompressor屬性分別記錄對應設定值。這兩個屬性通過DirectShow的IBaseFilter接口定義,用來實現(xiàn)數據壓縮的處理[11]。音頻壓縮采用G.729標準,視頻壓縮采用H.264壓縮標準。
從音視頻壓縮Filter的定義方式可看出,壓縮標準的選擇需要在數據采集前就完成設定,否則系統(tǒng)內部的FilterGraph會因改變而重建,可能造成有效數據的丟失。endprint
(3)DirectShow音視頻同步播放控制。由于視頻比音頻的數據量大,音頻數據比視頻數據傳輸速率快這一特性,使得音視頻同步成為音視頻通信的關鍵技術。DirectShow通過給媒體數據加蓋時間戳來實現(xiàn)音頻和視頻的同步播放,但局域網中音視頻的采集方式具有間隔均勻(采樣頻率決定)、實時性等特點,可適當簡化數據同步控制環(huán)節(jié)。
2.3 傳輸層技術應用
P2P即時通信系統(tǒng)中,通信節(jié)點間可直接發(fā)送文本消息或進行音、視頻實時通信。區(qū)分各類數據信息的關鍵在于對應數據類型的定義不同,數據的通信交互流程基本原理是相同的。
對比TCP協(xié)議及UDP協(xié)議各自優(yōu)勢,選擇采用UDP方式收發(fā)通信消息,監(jiān)聽控制則選用TCP協(xié)議來保證可靠傳輸。在有效接收文本消息的同時,將數據保存在XML文檔中。
2.3.1 文本信息傳輸
用戶可利用UdpClient對象負責發(fā)送和接收消息。在System.Net.Sockets命名空間下的UdpClient類對基礎Socket進行封裝,提供發(fā)送和接收UDP數據報的方法。在發(fā)送線程中,利用UdpClient對象的Send方法,將UDP數據報發(fā)送到位于指定遠程結點的主機;在接收線程中,利用該對象的Receive方法來獲取從遠程主機發(fā)送的UDP數據報。UDP方式不需要建立連接,可以在任何時候直接向網絡中的任意主機發(fā)送UDP數據。
2.3.2 音視頻數據實時傳輸
在建立網絡傳輸通路時,需要分別創(chuàng)建音視頻數據的Socket連接,對應的數據傳輸也是分離的。利用DirectShow技術,在構建Filter Graph前,將Socket相關操作都放入音視頻的接收/發(fā)送Filter中,可簡化設計流程。
3 結語
本文對.NET平臺下實現(xiàn)單純型P2P即時通信系統(tǒng)的關鍵技術進行了研究,包括P2P網絡技術、PNRP名稱解析協(xié)議及基于DirectShow技術的音視頻處理等,為P2P應用軟件開發(fā)提供了一種有效的解決方法。由于條件限制,系統(tǒng)功能還有待進一步完善,例如消息存儲與管理功能中,可考慮采用數據緩存機制,減少XML文檔讀寫頻率,對于音視頻數據可添加錄制、保存功能等。另外,僅討論了局域網的P2P通信,對位于不同子網的對等節(jié)點通信還需進一步研究與探討。
參考文獻:
[1] 張鵬.P2P技術在即時通信中的應用及安全策略[J].信息通信,2015(1):178-179.
[2] 鄭阿奇.Visual C#網絡編程[M].北京:電子工業(yè)出版社,2012:134-145.
[3] 張春紅,裘曉峰,弭偉,等.P2P技術全面解析[M].北京:人民郵電出版社,2010:150-152.
[4] 段明瑋,王振,周弟偉.基于PNRP的P2P技術實現(xiàn)方案[J].科技研究,2012(11):109-110.
[5] 祝遠緩.基于P2P的即時通信系統(tǒng)的研究[D].長春:東北師范大學,2012.
[6] 范先龍,郭傳雄,遲學斌.一種基于Windows Peer to Peer網絡的VoIP系統(tǒng)及其實現(xiàn)[J].計算機應用研究,2006,11(4):220-223.
[7] 崔龍衛(wèi).基于P2P的音視頻通訊系統(tǒng)的研究與設計[D].武漢:武漢理工大學,2011.
[8] 雷文禮,任新成,張棟,等.基于DirectShow的網絡視頻點播系統(tǒng)的設計與實現(xiàn)[J].現(xiàn)代電子技術,2015,38(7):31-33.
[9] 王新蕾,劉乃豐,夏濟海.基于DirectShow的視頻處理Filter組件設計與實現(xiàn)[J].現(xiàn)代電子技術,2016,39(13):46-50.
[10] 方文驍,張在琛.基于.NET框架的網絡視頻處理[J].計算機工程,2011(37):359-361.
[11] 孟月華,鄧基園.DirectShow技術的應用研究與開發(fā)[J].計算機系統(tǒng)應用,2013,22(6):196-199.
(責任編輯:杜能鋼)endprint