基于Java的远程会商系统的研究与实现

计算机时代 / 2018年08月10日 06:06

互联网+

左宪禹+张河+王栋

摘 要: 通過对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.

1.环球科技网遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.环球科技网的原创文章,请转载时务必注明文章作者和"来源:环球科技网",不尊重原创的行为环球科技网或将追究责任;3.作者投稿可能会经环球科技网编辑修改或补充。