APP下载

P2P即时通信系统关键技术研究及应用

2017-09-29徐文莉熊燕李燕

软件导刊 2017年9期

徐文莉 熊燕 李燕

摘 要:P2P技术因其非中心化、身份对等、可扩展性等优势,在即时通信领域受到重视。基于P2P的即时通信系统,广泛应用于个人通信、商务洽谈、企业管理等领域。为完善系统功能,提高开发效率,对在.NET平台下建立完全对等的P2P拓扑结构,实现局域网通信关键技术及应用方式进行了研究。利用PNRP协议编程实现了对等节点的发现,通过对DirectShow的封装高效完成了音视频数据的采集与压缩,在TCP/UDP协议及多线程技术支持下实现了数据有效传输。实际应用表明,系统架构设计合理,关键技术应用可行。

关键词:即时通信;对等网络;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 引言

即时通信系统的发展,满足了人们对信息交流实时性、多样性、有效性需求。其中,P2P即时通信系统利用P2P技术及网络通信技术,以计算机网络为载体,以弱化或消除服务器分工为前提,以实现交互双方便捷有效的文字、圖像、音视频信息通信为目的,在计算机网络与通信领域受到广泛关注,主流产品包括MSN、腾讯QQ、Skype等。

局域网即时通信系统具有轻型、高效、便利、易管理等特点,较多服务于校园网、企业网领域,例如建设多人视频会议平台、网络教学平台、企业内部服务平台等,这些系统大多依赖服务端的管理或协调功能运作[1]。本文讨论的即时通信系统是基于.NET平台开发的一种无服务器的完全对等型P2P通信应用软件,重点分析了系统功能实现过程中的对等节点发现、音视频数据采集及传输、网络消息管理等解决方案。

1 即时通信系统架构及功能

1.1 系统架构选择

P2P架构系统优势是对等和分布。随着P2P技术的发展,绝大多数即时通信系统功能实现都建立在P2P方式架构之上。使用P2P方式架构的系统可分为单纯型P2P及混合型P2P两大类,区别在于是否依赖于专用服务器[2]。

以腾讯QQ为代表的传统即时通信软件数据传输采用P2P技术,具有集中式P2P网络拓扑结构,客户端通信需要索引服务器的协调配合。而以Skype为代表的P2P VoIP软件,则是从连接建立到数据传输过程中都采用P2P实现,建立混合式P2P网络拓扑结构,通信节点根据计算能力不同设立不同的分工。两者都属于混合型P2P系统,需要服务器完成分发或存储,同时还要解决网络中地址的转换(NAT)问题[3]。

PNRP协议的出现,更好地支持了单纯型P2P系统发展,为开发P2P应用程序提供了新的解决途径[4]。单纯型P2P系统所有节点都是对等的,任何一个节点只要安装了同一个P2P应用软件,就可和其它安装此软件的节点直接通信,节点的管理机制更加简化。但由于PNRP全局云基于IPv6协议,因此,在IPv6尚未完全普及的今天,PNRP协议较多应用在本地云系统中[2]。考虑到网络复杂性控制,本文选择建立单纯型P2P局域网即时通信系统。

1.2 系统功能分析

单纯型P2P系统可分为登录模块、通信模块、消息存储与管理模块及可扩展模块,见图1。

相关模块的实现及对应的关键技术支持密不可分,各模块具体功能如下:endprint

(1)登录模块:实现对等节点的注册与注销。对等节点通过登录模块,以IP地址及端口为唯一标识,加入或退出网络拓扑,同时完成用户在线状态的实时更新,在通信列表中能查看到在线用户信息。对初次登录节点生成新的本地存档文件,用于保存通信记录。重新登录时,更新该文件相关数据。

(2)通信模块:包含文本、音频、视频3种通信方式,是系统的核心模块,分为音视频处理框架和即时通信协议两部分。音视频处理框架集成了音视频采集、音视频编解码、音视频分流控制、音视频数据流网络拥塞控制等技术模块,能够完成音视频数据流的采集、编码、分流等基本处理流程。即时通信协议则负责为音视频数据协商传输通道,在协商好的传输通道上建立对应连接,从而为音视频数据的顺畅传输提供保障。

(3)消息存储与管理模块:用本地XML文档存储用户信息及通信消息[5]。该文档的作用类似于日志文件,记载通信数据,可用于通信记录查询、用户行为分析等功能。

(4)可扩展模块:包括消息群发、文件传输、图像截取、音视频录制等,可扩展系统功能。

2 关键技术分析

2.1 PNRP协议编程

PNRP是微软公司设计的基于IPv4和IPv6的点对点协议,提供了安全灵活的动态名称注册和名称解析[6]。系统登录模块本质就是完成局域网中对等节点名称的注册与解析,可基于.NET平台的PNRP协议编程实现。

.NET平台的System.Net.PeerToPeer及System.Net.PeerToPeer.Collaboration命名空间包含了实现PNRP的类。对等节点名称注册及名称解析是完成PNRP资源发现的关键,处理流程如图2所示。

2.1.1 名称注册

用户登录过程即对应名称注册。将对等名称发布到云中,以便其它对等节点解析,主要涉及到PeerName类、PeerNameRegistration类,前者用于构建对等名称实例对象,后者用于完成对等名称实例注册。其中,设定Peer端点所有连接本机的PNRP群及注册PNRP Peer Name到PNRP Cloud中的代码为:

peerNameRegistration.Cloud = Cloud. Available; //设定Cloud的属性值

peerNameRegistration.Start(); //调用Start()方法完成注册

2.1.2 名称解析

名称解析是利用对等名称获取注册到云中的对等节点的IP地址和端口过程。完成名称解析,则完成了通信节点定位,可通过PeerNameResolver类的Resolve方法实现:

PeerNameRecordCollection recColl = myRes.Resolve(myPeer)

由于P2P网络允许参与其中的各个对等用户自主加入和退出,为实现在线对等节点信息实时更新,需要使用多线程编程技术完成名称实时解析,主要涉及到委托回调机制。

2.2 DirectShow与音视频信息处理

音视频信息处理框架设计能有效保证系统功能的多样化,DirectShow技术为音视频信息处理提供了高效的解决方法[7]。

2.2.1 .NET对DirectShow封装

为使C#开发者能方便使用DirectShow,.NET对DirectShow系统框架设计了C#开源封装。利用DirectX.Capture(基于DirectShow.Net的类库)及DShowNET(DirectShow的组件封装类)实现DirectShow的各种功能[7]。

2.2.2 音视频信息处理

根据实际应用需求,用户可完成纯文本/语音通信或音视频实时通信,需要分开建立文本、音频及视频传输模块,音视频模块的数据处理流程基本类似[8]。音视频处理模块的Filter Graph链路、各功能块Filter及数据流处理流程见图3。

过滤器图表提供了音视频数据的转换输出流程[9]。源过滤器负责采集原始数据,经由转换过滤器处理数据并生成输出流,通过提交过滤器接收数据,将数据提交给外设呈现。DirectX.Capture类库通过Filters类构建音视频的源Filter、音视频压缩Filter,通过Capture类实现音视频数据的相关处理[10]。

由源过滤器到转换过滤器的实现,主要包括音视频设备的识别、基本属性的设置、数据采集、音视频压缩Filter的创建等过程。

(1)数据采集。Capture类定义了Start()和Stop()方法,实现数据采集的开始与停止控制。利用创建的过滤器图表管理器(Filter Graph Manager)可引出ImediaControl接口,该接口是DirectShow的常用接口,用于控制媒体流在FilterGraph中的流动,从而实现对应的Start()及Stop()方法,来开启或停止音视频数据的采集。另外视频帧图像的获取,可以利用Sample Grabber过滤器的一个接口IsampeGrabberCB來实现。

(2)创建音视频压缩Filter。音视频压缩的实现过程是安装需要的音视频编解码器,DirectX.Capture可枚举出相应的压缩Filter,由AudioCompressor和VideoCompressor属性分别记录对应设定值。这两个属性通过DirectShow的IBaseFilter接口定义,用来实现数据压缩的处理[11]。音频压缩采用G.729标准,视频压缩采用H.264压缩标准。

从音视频压缩Filter的定义方式可看出,压缩标准的选择需要在数据采集前就完成设定,否则系统内部的FilterGraph会因改变而重建,可能造成有效数据的丢失。endprint

(3)DirectShow音视频同步播放控制。由于视频比音频的数据量大,音频数据比视频数据传输速率快这一特性,使得音视频同步成为音视频通信的关键技术。DirectShow通过给媒体数据加盖时间戳来实现音频和视频的同步播放,但局域网中音视频的采集方式具有间隔均匀(采样频率决定)、实时性等特点,可适当简化数据同步控制环节。

2.3 传输层技术应用

P2P即时通信系统中,通信节点间可直接发送文本消息或进行音、视频实时通信。区分各类数据信息的关键在于对应数据类型的定义不同,数据的通信交互流程基本原理是相同的。

对比TCP协议及UDP协议各自优势,选择采用UDP方式收发通信消息,监听控制则选用TCP协议来保证可靠传输。在有效接收文本消息的同时,将数据保存在XML文档中。

2.3.1 文本信息传输

用户可利用UdpClient对象负责发送和接收消息。在System.Net.Sockets命名空间下的UdpClient类对基础Socket进行封装,提供发送和接收UDP数据报的方法。在发送线程中,利用UdpClient对象的Send方法,将UDP数据报发送到位于指定远程结点的主机;在接收线程中,利用该对象的Receive方法来获取从远程主机发送的UDP数据报。UDP方式不需要建立连接,可以在任何时候直接向网络中的任意主机发送UDP数据。

2.3.2 音视频数据实时传输

在建立网络传输通路时,需要分别创建音视频数据的Socket连接,对应的数据传输也是分离的。利用DirectShow技术,在构建Filter Graph前,将Socket相关操作都放入音视频的接收/发送Filter中,可简化设计流程。

3 结语

本文对.NET平台下实现单纯型P2P即时通信系统的关键技术进行了研究,包括P2P网络技术、PNRP名称解析协议及基于DirectShow技术的音视频处理等,为P2P应用软件开发提供了一种有效的解决方法。由于条件限制,系统功能还有待进一步完善,例如消息存储与管理功能中,可考虑采用数据缓存机制,減少XML文档读写频率,对于音视频数据可添加录制、保存功能等。另外,仅讨论了局域网的P2P通信,对位于不同子网的对等节点通信还需进一步研究与探讨。

参考文献:

[1] 张鹏.P2P技术在即时通信中的应用及安全策略[J].信息通信,2015(1):178-179.

[2] 郑阿奇.Visual C#网络编程[M].北京:电子工业出版社,2012:134-145.

[3] 张春红,裘晓峰,弭伟,等.P2P技术全面解析[M].北京:人民邮电出版社,2010:150-152.

[4] 段明玮,王振,周弟伟.基于PNRP的P2P技术实现方案[J].科技研究,2012(11):109-110.

[5] 祝远缓.基于P2P的即时通信系统的研究[D].长春:东北师范大学,2012.

[6] 范先龙,郭传雄,迟学斌.一种基于Windows Peer to Peer网络的VoIP系统及其实现[J].计算机应用研究,2006,11(4):220-223.

[7] 崔龙卫.基于P2P的音视频通讯系统的研究与设计[D].武汉:武汉理工大学,2011.

[8] 雷文礼,任新成,张栋,等.基于DirectShow的网络视频点播系统的设计与实现[J].现代电子技术,2015,38(7):31-33.

[9] 王新蕾,刘乃丰,夏济海.基于DirectShow的视频处理Filter组件设计与实现[J].现代电子技术,2016,39(13):46-50.

[10] 方文骁,张在琛.基于.NET框架的网络视频处理[J].计算机工程,2011(37):359-361.

[11] 孟月华,邓基园.DirectShow技术的应用研究与开发[J].计算机系统应用,2013,22(6):196-199.

(责任编辑:杜能钢)endprint