基于Android平台的可视即时通信系统的设计与实现

更新时间:2024-04-08 作者:用户投稿原创标记本站原创 点赞:7302 浏览:23237

摘 要 本文基于Android平台及无线局域网的WiFi技术,设计并实现了一套可视即时通信系统.该系统在无线局域网范围内,通过Android智能终端设备上配置的WiFi扫描连接功能连接到无线网络,实现无线局域网范围内用户之间的可视即时通信.同时,采用本地存储通信消息,省去了怎么写作器的使用.通过在Android平台上实际测试,取得了良好的运行效果.

【关 键 词 】Android平台 可视即时通信系统 网络通信

无线通信技术的进步,移动终端的普及以及性能的不断提升,通信方式变得更加轻便化、低成本化和智能化.WiFi是一种能把包含有WiFi模块的终端以无线方式互相连接的基于IEEE802.11标准的网络通信技术.与常见的无线网络技术相比,WiFi拥有更高的带宽,更强的射频信号,更低的功耗和改进的安全性.Android是一种基于Linux的开源操作系统,有着良好的稳定性、开放性和可移植性.本文的研究目的是基于Android平台,利用其对WiFi的支持,设计并实现一套在无线局域网范围内的可视即时通信系统.

1.Android平台概述

Android是Google公司于2007年11月份推出的基于Linux内核的开放性手机操作系统.Android平台的系统架构分为四层结构,从上到下分别是应用程序层、应用程序框架层、系统运行库层以及Linux内核层,Android系统架构如图1所示.

Android是基于Linux2.6内核,其核心系统怎么写作如安全性、内存管理、进程管理、网路协议以及驱动模型都依赖于Linux内核.系统运行库层分成两部分,分别是系统库和Android运行时.系统库是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带.程序在Android运行时中执行,其运行时分为核心库和Dalvik虚拟机两部分.核心库提供了Ja编程语言核心库的大多数功能,每一个应用程序都在它自己的进程中运行,拥有一个独立的Dalvik虚拟机实例.应用程序框架层是开发人员使用这些API框架来开发自己的应用程序,简化了应用程序的架构设计.应用程序层是用Ja语言编写的运行在虚拟机上的程序.


2.无线局域网WiFi技术的发展和应用

无线局域网最常使用的标准是IEEE定义的802.11系列标准,主要用于解决局域网中用户终端的无线接入.WiFi技术历经了多个版本,包括从最早的802.11到后续的802.11a,802.11b,802.11g,802.11i,802.11n.可以说WiFi技术代表的就是802.11协议体系.WiFi具有无需布线、较长距离工作、高速无线传输、与有线网络无缝融合等特点,得到广泛的应用,WiFi功能模块也越来越多的集成在智能终端设备中.Android系统支持WiFi,成为连接用户和网络的重要纽带.

3.系统通信机制研究

套接字(Socket)是网络通信的基石,是支持TCP/IP和UDP协议的网络通信的基本操作单元.它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口.TCP和UDP是目前最为常用的两种网络通讯协议.TCP是一种面向连接的、可靠的、基于字节流的运输层通信协议,怎么写作器和客户端的传输数据之前必须先建立连接.TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端.但是WiFi无线网络对TCP链路存在一个限制,即TCP链路在长时间没有数据流量时,会自动降低此链路的优先级直至强制断开此链路,所以在本通信系统中,采用发送心跳包的方式来维持此链路.而UDP是一种无连接的传输层协议,UDP在传输数据报前不用在客户和怎么写作器之间建立一个连接,没有超时重发机制,因而传输速度很快,同时它不提供可靠通信保证,数据包可能会丢失.分析比较两者的特点,本文的可视通信系统在Android设备之间文字消息和语音数据采用UDP协议,视频图片采用TCP协议来建立网络连接.

4.可视即时通信方案

本文在对相关通信机制研究是基础上,设计出了一种Android通信系统,该系统利用Android设备的WiFi模块连入无线局域网,采用点对点架构的体系结构,客户端之间通过Socket传送消息,除了文本消息的传输外,还增加了语音可视功能.采用多线程技术,增强了程序对系统资源的利用.可视即时通信方案如图2所示.

4.1 文本通信模块实现

客户端程序在开始定义了用于监听连接使用的怎么写作端口号和IP地址,每个IP都会开启一个消息队列来缓存消息.子线程从消息队列中取出消息,使用AndroidAPI中的android.os.Handler这个类来接收子线程发送的消息数据,并用此数据配合主线程更新UI,更新聊天的显示内容.具体的流程图如图3所示.

4.2 语音功能模块实现

语音数据基于UDP协议进行传输,通信模式为单工方式.客户端通过Android系统自带的音频系统框架来进行开发.在发送端,通过Android平台的AudioRecord组件设定音频通道为CHANNEL_IN_MONO,编码方式为ENCODING_PCM_16BIT,获得音频的采样大小,并按设定的采样大小获取音频数据.从MIC保存数据到缓冲区,开启线程通过套接字发送数据,在接收端构建AudioTrack组件,设置音频解码缓冲区,将接收到的实时音频数据存入解码缓冲区,通过AudioTrack组件对缓冲区音频进行解码播放.具体的流程图如图4所示.

4.3 视频功能模块实现

本可视即时通信系统的实时视频传输数据基于TCP协议进行传输,采用的方案是利用Android的Camera组件进行画面拍摄,在屏幕上显示预览画面,同时获取预览图像数据,将获取到的YUV格式的视频帧数据压缩转换为JPEG图像,压缩后进行图像的传输,在接收端进行图像数据的绘制显示.Android手机的摄像头预览和捕获通过Surfaceview类来实现.视频显示部分包括两部分,一部分是本机的视频显示,另一部分是接收来自另一台Android设备的视频图像.本机的视频预览显示的方法是在Activity里继承PreviewCallback接口,继承之后会自动重载onPreviewFrame(byte[] data, Camera camera)函数,函数里的data就是实时预览帧视频.Android SDK2.2以后提供了YuvImage类,可以通过pressToJpeg方法将YUV数据格式压缩为JPEG格式,然后将得到的字节数组压缩成bitmap,转化为byte流通过Socket套接字发送,在接收到视频图片数据后通过Canvas的drawBitmap方法实时的绘制显示在屏幕上.具体的流程图如图5所示.