摘 要: 为了实现基于Android手机平台的音频会话和图像上传,设计了一个基于Android手机的多媒体应用软件。首先介绍了Android端的多媒体发展趋势,然后介绍了如何设计并实现在手机端的VOIP以及利用FTP协议上传图像。测试结果表明,用户可以通过软件客户端与PC客户端进行音频会话,并有良好的通话体验,登录FTP服务器可以查看到通过软件上传的图像。
关键词: Android;多媒体应用;VOIP;FTP
0 引言
多媒体技术[1]是指包括对文字、图像、声音以及视频等媒体数据进行处理分析、传输以及应用的技术。市场上出现的多种多媒体应用不仅可以帮助人们进行日常沟通,还有多种功能,包括了视频监控、IP电话[2]以及即时消息等。Android[3]是一个开放自由的移动终端平台,以其开源、免费等特点吸引了大量开发研究人员和厂商,并获得了用户的喜欢,是目前市场上主流的移动设备。随着手机硬件性能的提高和移动数据网络的发展,Android应用程序将拥有强大的多媒体数据处理能力,手机上的多媒体应用将会成为手机用户的焦点,给人们带来极大的便利性[4]。
1 多媒体系统框架设计
多媒体交互系统主要包括Android手机客户端、服务器端和PC平台端。Android手机客户端需要实现音频的收发,发送端需要实现的功能包括音频的采集、编码压缩、RTP打包封装以及发送,而接收端需要实现接收RTP包并且通过解码来播放音频。手机客户端还需要向服务器发送SIP消息来邀请音频通话,并建立FTP连接来传送图片和录像。FTP服务器主要负责管理图片和录像;SIP消息作为整个系统的控制信令,SIP服务器负责管理登录以及转发SIP消息;媒体转发服务器负责转发手机客户端和PC平台端发送的音频数据。多媒体系统的框架如图1所示。
2 客户端软件设计
客户端功能主要包括语音通话模块、图像和本地录像上传功能模块。其中,语音通话模块实现邀请并建立语音通话实现实时通话。图像和本地录像上传功能模块实现FTP连接并将图像和本地录像上传到服务器上。
2.1 语音通话模块的设计
主叫用户需要进行语音聊天时,需要向SIP服务器发送INVITE的SIP消息,其中SIP消息的消息体为XML文本数据。XML消息体内容如下所示:
此消息体中包含了会话媒体格式、主叫用户的号码、被叫用户的号码等信息。SIP服务器接收到消息后,开始分配资源并且回复主叫用户Tring消息。接着服务器将添加了分配好的资源消息的邀请消息转发给被叫用户。被叫用户收到邀请消息后,如果同意进行语音通话,则回复200 OK给SIP服务器。最后主叫用户接收到SIP服务器转发的200 OK消息,此时双方就可以进行音频通话了。若此时Android手机客户端是主叫用户,则跳入主叫音频会话界面;若为被叫用户则跳转到被叫音频会话界面。当通话中的任意一方想要结束通话时,可以选择挂断,并向SIP服务器发送BYE SIP消息。SIP服务器收到挂断消息后,转发给另一方后开始释放资源。被挂断用户收到挂断消息后回复200 OK给服务器,由服务器转发此消息给主挂断用户。语音通话建立和结束的过程如图2所示。
在Android手机端上实现与平台语音通话,不仅包括发送端部分也包括接收端部分。发送端需要实现原始PCM音频数据采集、音频数据编码和打包发送。接收端需要实现音频数据包的接收以及解码和PCM音频数据的播放。音频会话框架图如图3所示。
从Android手机硬件麦克风获取原始的PCM音频数据,通过对其进行G711压缩编码,使得减少发送到网络上的码率,调用jlibrtp库用RTP格式数据包将压缩后的G711数据打包发送到网络上。RTP数据包的接收是通过新建一个RTPRecieve类实现jlibrtp中的RTPAppIntf回调接口实现的。接收的RTP数据包通过G711解码还原成原始PCM数据流,此时经过解码得到的PCM数据流并不直接拿去播放,而是先放在缓存中,再由播放线程来播放,数据接收解码和数据播放置于两个不同的线程中,不仅可以提高网络的容错能力,还可以增强系统的健壮性。音频会话流程图如图4所示。
软件中的音频采集和播放分别是根据Android平台下的AudioRecorder和AudioTrack集合框架类实现的。经过流程图步骤,基于Android的音频通话的实现基本完成。
2.2 图像和本地录像上传模块的设计
此模块的主要功能是将Android手机拍照下来的图像和录像使用FTP协议上传到服务器上。FTP会话主要包括获取配置信息、请求连接服务器、登录、数据上传以及断开连接释放资源,具体流程图如图5所示。
在上传文件之前,软件客户端需要向SIP服务器发送NOTIFY消息来获取FTP信息。NOTIFY消息的消息体内容如下。
SIP服务器接收到此NOTIFY消息后开始解析xml消息,当解析出ftpinfo_query节点后,回复200OK和FTP连接信息。200 OK的SIP消息体的内容如下。
当Android软件客户端接收到此SIP消息,并解析出ftpinfo_query_response节点时,将result值、server_ip、用户名以及密码解析出来并存到自定义的FtpInfo中。然后初始化FTP,并通过openConnect()函数来打开FTP服务。在openConnect()函数中,FTPClient为FTP连接,通过构造函数传进来的参数建立,首先通过ftpClient.connect()来连接服务器,再通过ftpClient.login()登录到服务器。FTP服务打开之后,就可以对图像文件或者录像文件进行上传操作。首先生成需要上传的文件:File file=new File(localpath),参数localpath为本地文件的名称,通过CreatFtpPath()函数生成远程FTP服务器的对应路径名称,最后通过ftp.uploading()函数上传文件,可通过返回值result来判断上传是否成功。在uploading()函数中,首先如果远程的服务器没有上传的目录则需创建,则需对当前FTP目录初始化,并设置二进制文件上传和设置流传输模式,在改变FTP目录后,需要判断本地文件为多个还是单个,如果是多个则调用上传函数uploadingMany()来实现上传,若是单个则调用uploadingSingle()来实现上传。在uploadingMany()中反复调用uploadingSingle()来实现多个文件的上传。在上传函数中,首先需要创建输入流inputStream,文件上传完毕后关闭文件流。上传结束后需要结束FTP服务来释放对应的资源。
3 效果演示
在实验室WIFI条件下,软件客户端在摩托罗拉XT910(Android 4.1.2)和HTC One V(Android 4.0.3)设备上测试通过,成功实现了音频通话以及图像的上传。如图6所示,其中图6(a)为手机客户端音频被呼叫界面,图6(b)为Android手机端语音通话界面,图6(c)为PC端音频会话界面,语音会话过程中通话流畅,延时较小。图6(d)为手机软件端图像上传界面,上传成功后可以登录FTP服务器看到上传的图像,如图6(e)所示。
4 结论
随着Android智能手机的普遍使用和移动互联网技术的迅速发展,在Android手机上开发越来越广泛。在Android手机上开发音频通话,不仅有较好的通话体验,并且不会产生通信费用,只是消耗一定的流量。通过Android手机拍照和录像的便利性,能够存储于手机中并且根据需求实现上传图像和录像。软件客户端能够满足人们对多媒体应用软件的需求。
参考文献
[1] 史元春,徐光祐,高原.中国多媒体技术研究:2011[J].中国图象图形学报,2012,17(7):741-747.
[2] 贺丹丹,施展.基于Android的VoIP系统的设计与实现[J].现代电子技术,2011,34(6):28-31.
[3] BURNETTE E. Hello, Android: introducing Google′s mobile development platform[M]. Pragmatic Bookshelf, 2009.
[4] 朱雷坚.基于Android的实时语音通信系统的设计与实现[D].杭州:浙江工业大学,2013.