1、- 0 -网络通信程序设计-课程设计报告题 目: IP 电话网络通信的设计实现专 业: 计算机科学与技术班 级: 0312404 姓 名: 孙慧华高志杰学 号: 031240420031240306指导老师: 贺刚2017 年 6 月 6 日- 1 -目 录第一章引言 31.1 课题背景及意义 31.2 课题研究现状 31.3 研究内容 41.4 论文组织方式 5第二章需求分析 62.1 功能需求 62.2 性能要求 7第三章概要设计 83.1 体系结构设计 83.2 数据结构设计 10第四章详细设计 114.1 系统功能模块设计 114.1.1 音频输入输出的实现 144.1.2 数据的压缩
2、与排序 164.1.3 传送和接收 174.2 用户界面设计 18第五章测试及实现结果分析 19总结及展望 20- 2 -第一章引言1.1 课题背景及意义IP(Internet Protocol)电话是一种数字电话,是技术创新的一种通信服务业务。它把语音、压缩编码、打包分组、分配路由、存储交换、解包解压等交换处理在IP网或互联网上实现语音通信。它促进了网络资源利用,降低语音业务成本。因此在全球范围内得到了迅速的发展, 。IP电话的产生Internet商业化以后,在全世界,特别是发达国家迅速发展起来。在一些国家(如美国)本地电话Internet接入采用包月制,不限时限量,因此Internet是近
3、乎免费的(Free)的,人们都希望能通过这近乎免费的网络进行传统的电话和传真服务。1995年2月以色列VocalTec公司研制出可以通过Internet网打长途电话的软件产品“Internet Phone“。 用户只要在多媒体PC机上安装该软件,就可以通过Internet网和任何地方安装同样软件的联机用户进行通话。这项技术上的突破引起全世界的瞩目,其背后的无限商机也使许多公司进行此项技术的研究,从而使IP电话技术得到迅速发展,人们把这种在Internet上实现电话业务称为Internet电话,应该说是IP电话的雏形。 经过五年的发展,IP电话成为信息技术进步带来的一项新型电话业务在全世界开展,
4、并对传统电话业务形成越来越大的威胁。IP电话从当初的PC到PC发展到今天的PC到PC、PC电话、电话到电话等多种业务形式,但不论是现在还是将来,IP电话可以说是当今世界上发展最快、普及最快的一门应用服务技术之一,也是计算机网络界关注的热点之一。1.2 课题研究现状H.323是IP电话所遵循的标准,而H.323标准首选语音编码器是ITU-T G.729.A。ITU-T G.729.A标准采用一种称为“共轭结构代数码本激励线性预测“(Conjugate Structure Algebraic-Code-Excited Linear-Prediction,CS-ACELP)算法来对语音信号进行编码。
5、- 3 -在开始编码之前,先要对输入的模拟信号进行电话带滤波,然后以8kHz频率对其进行采样,再将其转换为16位线性PCM码,作为编码器的输入。编码器处理语音的单位是帧,1帧为10毫秒语音,包括80个声音样本(采样频率为8kHz)。编码器对每一帧语音信号进行分析,抽取出其中的CPLD模型的参数(线性预测滤器参数),自适应和固定码本索引和增益),对这些参数进行编码和传送。但是该编码器算法复杂,一帧语音处理延迟较大,很大程度上影响了IP电话网关处理密度。1.3 研究内容20 世纪 90 年代以来,以 Internet 为代表的计算机网络技术发展突飞猛进,促进了计算机网络在社会各个领域的广泛应用,而
6、针对 G.729 的研究和优化一直从未停息。例如:为了提高 IP 电话网关的处理密度,在实现 ITU-T G.729.A 语音编解码器时,采用了目前性能最好的 DSP,即 TMS320C6201;针对 TMS320C6201 并行性和流水等特点,归纳出了一系列减少编解码器处理延迟的优化方法本文是基于 G.729.A 协议,采用 C+语言实现实时通信,并未针对 G.729.A协议进行有话改进,因为本人技术,只是领域达不到那么高的层次,在结果中会对本人基于 G.729.A 实现的实时通信和从网络上找到的基于 TMS1.4 论文组织方式首先,本论文从目前 IP 电话的产生开始,详细研究了本课题的背景
7、以及意义,由于目前我国的通信分别掌控的移动,联通,电信三大巨头手中,而通信费用一直是国人所普遍关注的话题,虽然目前位置,通信费用有所改善,但依旧是一个令人无奈的地方,所以本人想就这个现状,深入了解 IP 电话的实现原理,实现机制,能够在未来开发属于自己的网络电话,做到真正的零费用。其次,在对本论文的背景有所了解的情况下,对本课题所必须的 ITU-T G.729.A 编解码器实现的关键技术进行了介绍,主要是 G.729.A 协议编解码算法介绍, G.729.A 编解码器的实现。- 4 -最后,在对所必须得基础知识有所了解的情况下,按照各模块的功能,分别详细介绍了各个功能的实现过程。- 5 -第二
8、章需求分析2.1 功能需求随着个人计算机和互联网的普及,越来越多的人开始使用网络这个媒介来发送,接收信息,计算机网络给人们生产和生活带来了巨大的便利,网络语音通信 IP 电话应运而生,主要分为三种:电话到电话,PC 到电话,PC 到 PC,本功能选取 PC 到电话为实现方案,即:实现 PC 到电话的网络语音通信。系统用例图:能够实现公用交换电话网络(PSIN)中的普通电话相互通话(需要网络环境配合)或与其他的兼容 IP 电话或应用程序通信。2.2 性能要求(1)拨打电话:要求用话机拨打电话,用下列任意一种方式呼叫 提起话筒或按免提键,拨号盘上直接呼出- 6 - 按电话簿键选择号码呼出 按 Re
9、dial 键选择呼出最近一次已拨打号码呼出(2)接听电话 响铃,显示号码或者 IP 地址 提起话筒或者免提键接听 可以拒绝接听(3)静音或者保留 通话过程中按相应键- 7 -第三章概要设计3.1 体系结构设计一个成功 IP 电话的实现是个复杂的过程,我只针对 G.729 实现通信,其主要的体系结构如下图:其中用了一个 tcp 连接,表示双方连通没有,用 udp 发送语音数据,发送端表明了发送顺序,接收端重排了顺序。3.2 数据结构设计1. TCP包结构TCP协议是网络中应用最为广泛的协议,许多的应用层协议都是在建立在TCP协议之上的。TCP首部的各字段如图4.2所示 4。- 8 -图 4.2
10、TCP 数据在 IP 数据报中的封装TCP协议头部信息如下:(1)源端口:发送端TCP端口号;(2)目的端口:接收端TCP端口号;(3)序号:指出段中数据在发送端数据流中的位置;(4)确认号:指出本机希望下一个接收的字节的序号;(5)头标长度:以32bit为单位的段头标长度,是针对变长的“选项”域设计的;(6)码位:指出段的目的与内容,不同的各码位置位有不同的含义;(7)窗口:用于通告接收端接收缓冲区的大小;(8)校验和:这是可选域,置0表示未选,全1表示校验和为伍;(9)紧急指针:当码位的URG置位时,指出紧急指针的序号。2. UDP 包结构UDP协议是英文User Datagram Pro
11、tocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。UDP数据报各域的意义与TCP段中相应的域相同。只有校验和有些不同,除UDP数据报本身外,它还覆盖一个附加的“伪头标”。这个伪头标来自于IP报头,包括:源IP地址、信宿IP地址、协议类型、UDP长度及填充域。UDP首部的各字段图4.3所示。- 9 -图 4.3 UDP 首部UDP
12、协议头部信息如下:(1)源端口:发送端UDP端口号;(2)目的端口:接收端UDP端口号;(3)头标校验和:用于保证头标数据的完整性。- 10 -第四章详细设计4.1 系统功能模块设计通过前面的叙述可以知道,这款软件唯一的功能就是基于网络实现语音通信。本系统包括三个基本模块,音频的输入输出,接收与发送,数据压缩与排序而这三个模块整合起来就是网关。网关是通过 IP 网络提供 PC-to-Phone、Phone-to-PC、Phone-to-Phone 语音通信的关键设备,是 IP 网络和 PSTN/ISDN/PBX 网络之间的接口设备,应具有下列功能: a 具有 IP 网络接口和与 PSTN/IS
13、DN/PBX 交换机互联的接口; b 完成实时语音压缩,将 64kbit/s 的语音信号压缩成低码率语音信号; c 完成寻址和呼叫控制。下面我给出借口的部分代码:连接和启动的借口:- 11 -4.1.1 音频输入输出的实现下面给出其主要过程:音频的输入描述封装 wavein api只使用了 pcm 方式只使用 函数回调方式所有的设置属性的函数只应在录音前使用,否者会在下次录音时才生效应该重载 virtual void GetData(char *pBuffer,int iLen);注意对于 StartRecord 中的 PerPareBuffer() OpenRecord()是乎应该同时调用,
14、- 12 -要么就都不调用,其原因好象是 waveInAddBuffer 之后必须 使用saveInStart否则好象不能关闭设备SIZE_AUDIO_FRAME 是 160 倍数SIZE_AUDIO_PACKED 是 对应的输出 为 SIZE_AUDIO_FRAME / 160 * 10关闭的时候注意,在 closerecord 后有可能线程中还有数据到来,导致关闭不正确,所以关闭的时候 sleep(1000),详细原因我也不太清楚依赖性 Winmm.lib 主要代码中的方法:如线程创建音频的输出:描述- 13 -封装 waveout api只使用了 pcm 方式注意PLAY_DELAY 1
15、0/播放时候的延迟,大于它,说明有 PLAY_DELAY 个包没有播放完成,后面的包不应再播放依赖性 Winmm.lib 主要代码中的方法:如线程创建4.1.2 数据的压缩与排序依据流程图我们可知,在数据压缩之后会有发送,经过一系列转化后另一方接收,最后是排序。这里我把压缩和排序放在一起- 14 -音频压缩:部分代码排序数据:部分代码- 15 -4.1.3 传送和接收1音频的传送在压缩之后进入发送接收发送的客服端:部分代码- 16 - 17 -4.2 用户界面设计用户界面第一行为对方 IP 地址,发送按钮第二行连接按钮,断开按钮,接收按钮第三行为信息提示,如图所示:- 18 -第五章测试及实现
16、结果分析采用二种测试工具对 G.729.A 编解码器的处理延迟作了测试。第一种测试工具是 C6X Simulator(TMS320C6201 的仿真软件),测试条件是假设所有代码装在 TMS320C6201 片同的程序存储器中;因此,称之为 Non cache 测试模式。另外一种测试方式是采用 TI 公司的 C6X 的 EVM 卡(评估卡),测试条件是将TMS320C6201 片内 64KB RAM 作为 Cache 使用;因此称之为 cache 模式。二种测试模式的测试结果如下所示。测试项目C6 仿真器(非缓冲模式)C6 评估板(非缓冲模式)编码(每帧) 86720 cycles 91650
17、 cycles解码(每帧) 34120 cycles 37310 cycles从表可以看出,如果 TMS320C6201 工作在频率为 200MHz,即每 Cycles 的周期为 0.5 毫秒,可以算出 G.729.A 编码一帧(30 毫秒)的延迟时间是0.430.46 毫秒。因此说,单片 TMS320C6201 可以同时处理大约 20 路 G.729.A编码(当前国际最高水平是 22 路);而且,编解码的结果都严格地通过了G.729.A 提供的测试矢量的测试,实际播放音质也很好。ITU-T G.729.A 语音信号压缩编解码技术集成了众多低速率语音编解码的优点,大大提高了低速率编解码的语音质
18、量,但算法较复杂。而 TMS320C6201 DSP 是目前最快的定点数字信号处理器,如果在编写程序时,能充分利用上述关键技术,就可以充分发挥 TMS320C6201 的功能,大大减少 G.729.A 编解码的处理延迟,并能保持良好的语音品质。将该编解码应用在该 IP 电话网关中,在很大程度上提高了 IP 电话网关处理密度,改善了 IP 电话网关的性能。因此说,本文实现的 G.729.A 编解码器有很大的应用价值。- 19 -总结及展望IP 电话的实现最为重要的音频的发送和接收处理,这其中包括音频的编解码,音频质量优化等等,对于 G.729.A 协议的研究从未停止过,许多的人为了改进算法奋斗终生,但是 G.729.A 的算法本身就很复杂,优化改进的事情我无从下手,所以我还是基于在原本的 G.729.A 协议上进行实时通信的开发,但算法依然不是我设计的,算法的知识和代码都是参考网络。总之在这次编程的过程中,本人查阅了大量的书籍资料,也包括网络上的实例代码等。由于时间和技术等多方面因素,代码不是优化的但收获颇多。