• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      P2P即時(shí)通信系統(tǒng)關(guān)鍵技術(shù)研究及應(yīng)用

      2017-09-29 21:01:07徐文莉熊燕李燕
      軟件導(dǎo)刊 2017年9期

      徐文莉 熊燕 李燕

      摘 要:P2P技術(shù)因其非中心化、身份對等、可擴(kuò)展性等優(yōu)勢,在即時(shí)通信領(lǐng)域受到重視。基于P2P的即時(shí)通信系統(tǒng),廣泛應(yīng)用于個(gè)人通信、商務(wù)洽談、企業(yè)管理等領(lǐng)域。為完善系統(tǒng)功能,提高開發(fā)效率,對在.NET平臺下建立完全對等的P2P拓?fù)浣Y(jié)構(gòu),實(shí)現(xiàn)局域網(wǎng)通信關(guān)鍵技術(shù)及應(yīng)用方式進(jìn)行了研究。利用PNRP協(xié)議編程實(shí)現(xiàn)了對等節(jié)點(diǎn)的發(fā)現(xiàn),通過對DirectShow的封裝高效完成了音視頻數(shù)據(jù)的采集與壓縮,在TCP/UDP協(xié)議及多線程技術(shù)支持下實(shí)現(xiàn)了數(shù)據(jù)有效傳輸。實(shí)際應(yīng)用表明,系統(tǒng)架構(gòu)設(shè)計(jì)合理,關(guān)鍵技術(shù)應(yīng)用可行。

      關(guān)鍵詞:即時(shí)通信;對等網(wǎng)絡(luò);TCP/UDP;PNRP;DirectShow

      DOI:10.11907/rjdk.172275

      中圖分類號:TP319 文獻(xiàn)標(biāo)識碼: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 引言

      即時(shí)通信系統(tǒng)的發(fā)展,滿足了人們對信息交流實(shí)時(shí)性、多樣性、有效性需求。其中,P2P即時(shí)通信系統(tǒng)利用P2P技術(shù)及網(wǎng)絡(luò)通信技術(shù),以計(jì)算機(jī)網(wǎng)絡(luò)為載體,以弱化或消除服務(wù)器分工為前提,以實(shí)現(xiàn)交互雙方便捷有效的文字、圖像、音視頻信息通信為目的,在計(jì)算機(jī)網(wǎng)絡(luò)與通信領(lǐng)域受到廣泛關(guān)注,主流產(chǎn)品包括MSN、騰訊QQ、Skype等。

      局域網(wǎng)即時(shí)通信系統(tǒng)具有輕型、高效、便利、易管理等特點(diǎn),較多服務(wù)于校園網(wǎng)、企業(yè)網(wǎng)領(lǐng)域,例如建設(shè)多人視頻會議平臺、網(wǎng)絡(luò)教學(xué)平臺、企業(yè)內(nèi)部服務(wù)平臺等,這些系統(tǒng)大多依賴服務(wù)端的管理或協(xié)調(diào)功能運(yùn)作[1]。本文討論的即時(shí)通信系統(tǒng)是基于.NET平臺開發(fā)的一種無服務(wù)器的完全對等型P2P通信應(yīng)用軟件,重點(diǎn)分析了系統(tǒng)功能實(shí)現(xiàn)過程中的對等節(jié)點(diǎn)發(fā)現(xiàn)、音視頻數(shù)據(jù)采集及傳輸、網(wǎng)絡(luò)消息管理等解決方案。

      1 即時(shí)通信系統(tǒng)架構(gòu)及功能

      1.1 系統(tǒng)架構(gòu)選擇

      P2P架構(gòu)系統(tǒng)優(yōu)勢是對等和分布。隨著P2P技術(shù)的發(fā)展,絕大多數(shù)即時(shí)通信系統(tǒng)功能實(shí)現(xiàn)都建立在P2P方式架構(gòu)之上。使用P2P方式架構(gòu)的系統(tǒng)可分為單純型P2P及混合型P2P兩大類,區(qū)別在于是否依賴于專用服務(wù)器[2]。

      以騰訊QQ為代表的傳統(tǒng)即時(shí)通信軟件數(shù)據(jù)傳輸采用P2P技術(shù),具有集中式P2P網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),客戶端通信需要索引服務(wù)器的協(xié)調(diào)配合。而以Skype為代表的P2P VoIP軟件,則是從連接建立到數(shù)據(jù)傳輸過程中都采用P2P實(shí)現(xiàn),建立混合式P2P網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),通信節(jié)點(diǎn)根據(jù)計(jì)算能力不同設(shè)立不同的分工。兩者都屬于混合型P2P系統(tǒng),需要服務(wù)器完成分發(fā)或存儲,同時(shí)還要解決網(wǎng)絡(luò)中地址的轉(zhuǎn)換(NAT)問題[3]。

      PNRP協(xié)議的出現(xiàn),更好地支持了單純型P2P系統(tǒng)發(fā)展,為開發(fā)P2P應(yīng)用程序提供了新的解決途徑[4]。單純型P2P系統(tǒng)所有節(jié)點(diǎn)都是對等的,任何一個(gè)節(jié)點(diǎn)只要安裝了同一個(gè)P2P應(yīng)用軟件,就可和其它安裝此軟件的節(jié)點(diǎn)直接通信,節(jié)點(diǎn)的管理機(jī)制更加簡化。但由于PNRP全局云基于IPv6協(xié)議,因此,在IPv6尚未完全普及的今天,PNRP協(xié)議較多應(yīng)用在本地云系統(tǒng)中[2]??紤]到網(wǎng)絡(luò)復(fù)雜性控制,本文選擇建立單純型P2P局域網(wǎng)即時(shí)通信系統(tǒng)。

      1.2 系統(tǒng)功能分析

      單純型P2P系統(tǒng)可分為登錄模塊、通信模塊、消息存儲與管理模塊及可擴(kuò)展模塊,見圖1。

      相關(guān)模塊的實(shí)現(xiàn)及對應(yīng)的關(guān)鍵技術(shù)支持密不可分,各模塊具體功能如下:endprint

      (1)登錄模塊:實(shí)現(xiàn)對等節(jié)點(diǎn)的注冊與注銷。對等節(jié)點(diǎn)通過登錄模塊,以IP地址及端口為唯一標(biāo)識,加入或退出網(wǎng)絡(luò)拓?fù)?,同時(shí)完成用戶在線狀態(tài)的實(shí)時(shí)更新,在通信列表中能查看到在線用戶信息。對初次登錄節(jié)點(diǎn)生成新的本地存檔文件,用于保存通信記錄。重新登錄時(shí),更新該文件相關(guān)數(shù)據(jù)。

      (2)通信模塊:包含文本、音頻、視頻3種通信方式,是系統(tǒng)的核心模塊,分為音視頻處理框架和即時(shí)通信協(xié)議兩部分。音視頻處理框架集成了音視頻采集、音視頻編解碼、音視頻分流控制、音視頻數(shù)據(jù)流網(wǎng)絡(luò)擁塞控制等技術(shù)模塊,能夠完成音視頻數(shù)據(jù)流的采集、編碼、分流等基本處理流程。即時(shí)通信協(xié)議則負(fù)責(zé)為音視頻數(shù)據(jù)協(xié)商傳輸通道,在協(xié)商好的傳輸通道上建立對應(yīng)連接,從而為音視頻數(shù)據(jù)的順暢傳輸提供保障。

      (3)消息存儲與管理模塊:用本地XML文檔存儲用戶信息及通信消息[5]。該文檔的作用類似于日志文件,記載通信數(shù)據(jù),可用于通信記錄查詢、用戶行為分析等功能。

      (4)可擴(kuò)展模塊:包括消息群發(fā)、文件傳輸、圖像截取、音視頻錄制等,可擴(kuò)展系統(tǒng)功能。

      2 關(guān)鍵技術(shù)分析

      2.1 PNRP協(xié)議編程

      PNRP是微軟公司設(shè)計(jì)的基于IPv4和IPv6的點(diǎn)對點(diǎn)協(xié)議,提供了安全靈活的動態(tài)名稱注冊和名稱解析[6]。系統(tǒng)登錄模塊本質(zhì)就是完成局域網(wǎng)中對等節(jié)點(diǎn)名稱的注冊與解析,可基于.NET平臺的PNRP協(xié)議編程實(shí)現(xiàn)。

      .NET平臺的System.Net.PeerToPeer及System.Net.PeerToPeer.Collaboration命名空間包含了實(shí)現(xiàn)PNRP的類。對等節(jié)點(diǎn)名稱注冊及名稱解析是完成PNRP資源發(fā)現(xiàn)的關(guān)鍵,處理流程如圖2所示。

      2.1.1 名稱注冊

      用戶登錄過程即對應(yīng)名稱注冊。將對等名稱發(fā)布到云中,以便其它對等節(jié)點(diǎn)解析,主要涉及到PeerName類、PeerNameRegistration類,前者用于構(gòu)建對等名稱實(shí)例對象,后者用于完成對等名稱實(shí)例注冊。其中,設(shè)定Peer端點(diǎn)所有連接本機(jī)的PNRP群及注冊PNRP Peer Name到PNRP Cloud中的代碼為:

      peerNameRegistration.Cloud = Cloud. Available; //設(shè)定Cloud的屬性值

      peerNameRegistration.Start(); //調(diào)用Start()方法完成注冊

      2.1.2 名稱解析

      名稱解析是利用對等名稱獲取注冊到云中的對等節(jié)點(diǎn)的IP地址和端口過程。完成名稱解析,則完成了通信節(jié)點(diǎn)定位,可通過PeerNameResolver類的Resolve方法實(shí)現(xiàn):

      PeerNameRecordCollection recColl = myRes.Resolve(myPeer)

      由于P2P網(wǎng)絡(luò)允許參與其中的各個(gè)對等用戶自主加入和退出,為實(shí)現(xiàn)在線對等節(jié)點(diǎn)信息實(shí)時(shí)更新,需要使用多線程編程技術(shù)完成名稱實(shí)時(shí)解析,主要涉及到委托回調(diào)機(jī)制。

      2.2 DirectShow與音視頻信息處理

      音視頻信息處理框架設(shè)計(jì)能有效保證系統(tǒng)功能的多樣化,DirectShow技術(shù)為音視頻信息處理提供了高效的解決方法[7]。

      2.2.1 .NET對DirectShow封裝

      為使C#開發(fā)者能方便使用DirectShow,.NET對DirectShow系統(tǒng)框架設(shè)計(jì)了C#開源封裝。利用DirectX.Capture(基于DirectShow.Net的類庫)及DShowNET(DirectShow的組件封裝類)實(shí)現(xiàn)DirectShow的各種功能[7]。

      2.2.2 音視頻信息處理

      根據(jù)實(shí)際應(yīng)用需求,用戶可完成純文本/語音通信或音視頻實(shí)時(shí)通信,需要分開建立文本、音頻及視頻傳輸模塊,音視頻模塊的數(shù)據(jù)處理流程基本類似[8]。音視頻處理模塊的Filter Graph鏈路、各功能塊Filter及數(shù)據(jù)流處理流程見圖3。

      過濾器圖表提供了音視頻數(shù)據(jù)的轉(zhuǎn)換輸出流程[9]。源過濾器負(fù)責(zé)采集原始數(shù)據(jù),經(jīng)由轉(zhuǎn)換過濾器處理數(shù)據(jù)并生成輸出流,通過提交過濾器接收數(shù)據(jù),將數(shù)據(jù)提交給外設(shè)呈現(xiàn)。DirectX.Capture類庫通過Filters類構(gòu)建音視頻的源Filter、音視頻壓縮Filter,通過Capture類實(shí)現(xiàn)音視頻數(shù)據(jù)的相關(guān)處理[10]。

      由源過濾器到轉(zhuǎn)換過濾器的實(shí)現(xiàn),主要包括音視頻設(shè)備的識別、基本屬性的設(shè)置、數(shù)據(jù)采集、音視頻壓縮Filter的創(chuàng)建等過程。

      (1)數(shù)據(jù)采集。Capture類定義了Start()和Stop()方法,實(shí)現(xiàn)數(shù)據(jù)采集的開始與停止控制。利用創(chuàng)建的過濾器圖表管理器(Filter Graph Manager)可引出ImediaControl接口,該接口是DirectShow的常用接口,用于控制媒體流在FilterGraph中的流動,從而實(shí)現(xiàn)對應(yīng)的Start()及Stop()方法,來開啟或停止音視頻數(shù)據(jù)的采集。另外視頻幀圖像的獲取,可以利用Sample Grabber過濾器的一個(gè)接口IsampeGrabberCB來實(shí)現(xiàn)。

      (2)創(chuàng)建音視頻壓縮Filter。音視頻壓縮的實(shí)現(xiàn)過程是安裝需要的音視頻編解碼器,DirectX.Capture可枚舉出相應(yīng)的壓縮Filter,由AudioCompressor和VideoCompressor屬性分別記錄對應(yīng)設(shè)定值。這兩個(gè)屬性通過DirectShow的IBaseFilter接口定義,用來實(shí)現(xiàn)數(shù)據(jù)壓縮的處理[11]。音頻壓縮采用G.729標(biāo)準(zhǔn),視頻壓縮采用H.264壓縮標(biāo)準(zhǔn)。

      從音視頻壓縮Filter的定義方式可看出,壓縮標(biāo)準(zhǔn)的選擇需要在數(shù)據(jù)采集前就完成設(shè)定,否則系統(tǒng)內(nèi)部的FilterGraph會因改變而重建,可能造成有效數(shù)據(jù)的丟失。endprint

      (3)DirectShow音視頻同步播放控制。由于視頻比音頻的數(shù)據(jù)量大,音頻數(shù)據(jù)比視頻數(shù)據(jù)傳輸速率快這一特性,使得音視頻同步成為音視頻通信的關(guān)鍵技術(shù)。DirectShow通過給媒體數(shù)據(jù)加蓋時(shí)間戳來實(shí)現(xiàn)音頻和視頻的同步播放,但局域網(wǎng)中音視頻的采集方式具有間隔均勻(采樣頻率決定)、實(shí)時(shí)性等特點(diǎn),可適當(dāng)簡化數(shù)據(jù)同步控制環(huán)節(jié)。

      2.3 傳輸層技術(shù)應(yīng)用

      P2P即時(shí)通信系統(tǒng)中,通信節(jié)點(diǎn)間可直接發(fā)送文本消息或進(jìn)行音、視頻實(shí)時(shí)通信。區(qū)分各類數(shù)據(jù)信息的關(guān)鍵在于對應(yīng)數(shù)據(jù)類型的定義不同,數(shù)據(jù)的通信交互流程基本原理是相同的。

      對比TCP協(xié)議及UDP協(xié)議各自優(yōu)勢,選擇采用UDP方式收發(fā)通信消息,監(jiān)聽控制則選用TCP協(xié)議來保證可靠傳輸。在有效接收文本消息的同時(shí),將數(shù)據(jù)保存在XML文檔中。

      2.3.1 文本信息傳輸

      用戶可利用UdpClient對象負(fù)責(zé)發(fā)送和接收消息。在System.Net.Sockets命名空間下的UdpClient類對基礎(chǔ)Socket進(jìn)行封裝,提供發(fā)送和接收UDP數(shù)據(jù)報(bào)的方法。在發(fā)送線程中,利用UdpClient對象的Send方法,將UDP數(shù)據(jù)報(bào)發(fā)送到位于指定遠(yuǎn)程結(jié)點(diǎn)的主機(jī);在接收線程中,利用該對象的Receive方法來獲取從遠(yuǎn)程主機(jī)發(fā)送的UDP數(shù)據(jù)報(bào)。UDP方式不需要建立連接,可以在任何時(shí)候直接向網(wǎng)絡(luò)中的任意主機(jī)發(fā)送UDP數(shù)據(jù)。

      2.3.2 音視頻數(shù)據(jù)實(shí)時(shí)傳輸

      在建立網(wǎng)絡(luò)傳輸通路時(shí),需要分別創(chuàng)建音視頻數(shù)據(jù)的Socket連接,對應(yīng)的數(shù)據(jù)傳輸也是分離的。利用DirectShow技術(shù),在構(gòu)建Filter Graph前,將Socket相關(guān)操作都放入音視頻的接收/發(fā)送Filter中,可簡化設(shè)計(jì)流程。

      3 結(jié)語

      本文對.NET平臺下實(shí)現(xiàn)單純型P2P即時(shí)通信系統(tǒng)的關(guān)鍵技術(shù)進(jìn)行了研究,包括P2P網(wǎng)絡(luò)技術(shù)、PNRP名稱解析協(xié)議及基于DirectShow技術(shù)的音視頻處理等,為P2P應(yīng)用軟件開發(fā)提供了一種有效的解決方法。由于條件限制,系統(tǒng)功能還有待進(jìn)一步完善,例如消息存儲與管理功能中,可考慮采用數(shù)據(jù)緩存機(jī)制,減少XML文檔讀寫頻率,對于音視頻數(shù)據(jù)可添加錄制、保存功能等。另外,僅討論了局域網(wǎng)的P2P通信,對位于不同子網(wǎng)的對等節(jié)點(diǎn)通信還需進(jìn)一步研究與探討。

      參考文獻(xiàn):

      [1] 張鵬.P2P技術(shù)在即時(shí)通信中的應(yīng)用及安全策略[J].信息通信,2015(1):178-179.

      [2] 鄭阿奇.Visual C#網(wǎng)絡(luò)編程[M].北京:電子工業(yè)出版社,2012:134-145.

      [3] 張春紅,裘曉峰,弭偉,等.P2P技術(shù)全面解析[M].北京:人民郵電出版社,2010:150-152.

      [4] 段明瑋,王振,周弟偉.基于PNRP的P2P技術(shù)實(shí)現(xiàn)方案[J].科技研究,2012(11):109-110.

      [5] 祝遠(yuǎn)緩.基于P2P的即時(shí)通信系統(tǒng)的研究[D].長春:東北師范大學(xué),2012.

      [6] 范先龍,郭傳雄,遲學(xué)斌.一種基于Windows Peer to Peer網(wǎng)絡(luò)的VoIP系統(tǒng)及其實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2006,11(4):220-223.

      [7] 崔龍衛(wèi).基于P2P的音視頻通訊系統(tǒng)的研究與設(shè)計(jì)[D].武漢:武漢理工大學(xué),2011.

      [8] 雷文禮,任新成,張棟,等.基于DirectShow的網(wǎng)絡(luò)視頻點(diǎn)播系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2015,38(7):31-33.

      [9] 王新蕾,劉乃豐,夏濟(jì)海.基于DirectShow的視頻處理Filter組件設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2016,39(13):46-50.

      [10] 方文驍,張?jiān)阼?基于.NET框架的網(wǎng)絡(luò)視頻處理[J].計(jì)算機(jī)工程,2011(37):359-361.

      [11] 孟月華,鄧基園.DirectShow技術(shù)的應(yīng)用研究與開發(fā)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2013,22(6):196-199.

      (責(zé)任編輯:杜能鋼)endprint

      昌乐县| 三都| 奇台县| 望都县| 西宁市| 江华| 五大连池市| 济阳县| 利川市| 武定县| 页游| 敖汉旗| 绥江县| 宁津县| 开化县| 上高县| 罗甸县| 元阳县| 东兴市| 云林县| 丰城市| 砀山县| 罗田县| 开封县| 遂溪县| 广南县| 德清县| 林口县| 隆子县| 东海县| 墨江| 宜章县| 庐江县| 澎湖县| 金溪县| 察哈| 互助| 商南县| 台北市| 九台市| 河南省|