VoIP模拟手机系统的常用功能网络电话设计(4)
时间:2017-06-17 14:12 来源:毕业论文 作者:毕业论文 点击:次
4 系统设计4.1系统结构图 图 4.1 手机系统结构图 4.2 状态切换图来电提示 图 4.2 手机系统状态切换图 4.3 数据库设计 本系统分为客户端和服务器端,其中客户端有四张表,分别为短信,闹钟,通话,通讯录。 短信表记录短信内容,发件人号码,发件时间,短信类型(收件,发件,草稿) 图 4.3 手机系统数据库短信表结构 闹钟表记录设定闹钟时间 图 4.4 手机系统数据库闹钟表结构 通话表记录对方号码,通话起始时间,通话的类型(来电,去电,未接来电) 图 4.5 手机系统数据库通话表结构 通讯录表记录联系人姓名,联系人号码 图 4.6 手机系统数据库通讯录表结构 服务器端有一张表,记录用户地址,以及用户状态(开机,关机,通话中) 图 4.3 手机系统服务器数据库用户表结构 5 关键技术 5.1 VoIP的实现 5.1.1 音频压缩及音频压缩管理控件 我们基于Delphi平台,利用pscal语言编程实现语音数据的编码解码。Codes是音频压缩解码编码器,它提供对媒体格式的进行转换的功能,windows带有其相应的动态库,其相应的调用功能接口函数库ACM(Audio Compression Manager)提供了给用户对媒体格式进行转换的快捷工具,在Delphi7开发音频压缩程序中,其相应的API声明单元为MSASM.pas。语音压缩程序中,音频压缩管理器控件组包括TACMWaveIn,TACMDialog,TACMWaveOut这三个控件。程序员可以从相应的技术网站上获得这些控件。TACMDialog该控件可以用来指定音频数据的输入输出格式,用户既可在设计过程中设定音频数据的输入输出格式,也可在程序运行时由对话框调整这些参数。TACMWaveIn控件用于从麦克风接受音频数据,TACMWaveOut控件用于声音的回放,这个控件的音频数据缓冲区大小属性Numbuffers用于指定播放前使用缓冲区数,这对流量不稳定的网络音频传输显得非常重要,它可以缓冲连接的波动数据而输出稳定不间断的声音。 5.1.2 用户数据报文控件NMUDP实现语音数据的传输 用户数据报文协议(UDP)于TCP不用,它作为一个无连接的协议,只是简单的将数据放在端口中,不在发送和接受方建立一个连接。这种数据传输方式的安全性较差一些,但程序运行过程的鲁棒性要强许多,这里使用的NMUDP控件来传输音频数据或文字信息,发送报文任务由sendbuffer方法或者sendstream完成,它负责完成由TACMWaveIn控件获得的并经控件转换的压缩音频数据的发送。而它在接受到一个报文时,将触发DataReceive事件,在此事件函数中,调用Readbuffer或者ReadStream来读取报文的数据,并将这些数据经解压后由TACMWaveOut控件加以播放。 TACMWaveIn控件的ondata事件,是当数据满了就会发生这个事件。在这个事件里调用NMUDP控件的Sendstream方法把数据发送出去。NMUDP控件的 DataReceive事件,是当数据到达时就会发生。在这个事件里调用TACMWaveOut.play(buf,size)播放语音流。 5.2 控件大小的动态调整 为了使控件的大小和布局随着窗体的缩放而做出动态的调整,整个界面设置控件的各种属性。由于单行文本框,下拉表的高度是固定的,上述设定不能对它们进行纵向拉伸,需要在窗口大小变化时提供额外的逻辑来修正这些控件的间距。 5.3 控件大小的动态生成 因为客户端很多功能共用一个窗体,模拟手机的各个动作控件同时呈现在窗体上是不现实的。程序运行时会根据当前的系统状态对无效的控件进行替换,动态设置其外观并绑定合适的事件处理程序,保证界面不会被一大堆控件弄的拥挤不堪。 (责任编辑:qin) |