论文部分内容阅读
移动互联网时代以来,以微信、QQ为代表的移动即时通信软件发展迅速,获得了广泛的应用。移动即时通信软件以其快捷方便的特点,逐渐成为人们工作生活中不可或缺的工具。但目前市面上的移动即时通信软件,都需要连接互联网上的服务器,才能和他人进行通信。在只进行文字通信时,这种方式问题不大。但在进行实时语音通信,特别是集群语音通信时,因为语音数据量较大,这时耗费的流量将产生不小的开销。另一方面,Wi-Fi网络越来越普及,只要一台无线路由器就可以搭建一个简单的无线局域网。因此,在一些场景下,需要一种针对移动终端的即时通信系统,使用户通过无线局域网,即使不连接互联网,也可以快捷方便地进行单对单或者多人即时通信。在即时通信系统中,文字通信和实时语音通信是最基本也是最主要的两种需求。针对这两种主要需求,本文给出了一种无线局域网下的移动终端即时通信系统的设计方案,并对方案进行了实现。对于文字通信功能,本文选择了使用XMPP协议作为文字通信的协议。在对XMPP协议和Openfire服务器结构进行了详细分析后,给出了使用Openfire服务器和Smack类库搭建文字通信系统的方案。并围绕注册与登录、联系人管理、聊天会话这三方面给出了客户端的实现方法。对于语音通信功能,本文在对语音通信系统结构的分析的基础上,给出了语音通信系统的架构设计。系统使用本文自行设计的基于HTTP的会话控制协议,客户端和服务器使用模块化设计,包括音频采集和播放、语音压缩编解码、数据收发和混音等模块。针对语音通信系统的几个关键问题,本文给出了各自的解决方案。对语音的同步策略问题,给出了一种由用户数据驱动的同步方案,解决了混音前语音数据按时间对齐的问题:对语音的混音算法问题,讨论了几种不同的混音算法,并分析了不同场景下适宜采用的混音算法;对语音抖动的问题,给出了基于缓冲区的解决方案,使语音在播放时更加平滑流畅;对回声消除问题,介绍了回声消除的原理并给出了基于Android内置API的解决方法,可有效缓解当用户使用扬声器时的回声问题。此外,针对用户的动态接入问题,本文给出了一种优化方案。通过缓存创建开销较大的对象,减小了动态接入时的接入开销,提高了服务器的效率。最后,本文给出了对此即时通信系统的具体的测试方案,验证了系统各项功能的可用性。