VOIP电话软件的设计与实现.doc
文本预览下载声明
VOIP电话软件的设计与实现
摘要:介绍了网络语音通信的原理、关键技术和实现方法,详细叙述了基于Java的VOIP电话软件的设计要素和系统流程,经测试在语音和时延上都满足实际通话的需要。
关键词:VOIP;多线程;JAVA
中图分类号:TP391文献标识码:A文章编号:1009-3044(2009)24-6723-02
The Design and Realization of VOIP Telephone Software
LI Feng-qin, LU Jing, LIU Hong-feng
(Shanghai University of Electric Power, Shanghai 200090, China)
Abstract: The principle,the key technologies and the implement method of voice communication based on network are introduced. The design elements and system flow of VOIP telephone software based on JAVA is recited in detail. The tested software reaches the need of actual communication in timbre and time-delay.
Key words: VOIP; thread; JAVA
随着网络技术的迅速发展,特别是网络带宽的增加和语音压缩技术的进步, 使得模拟语音信号以“数据封包”的形式在Internet传输成为可能。因其通话质量可与传统的PSTN电话相媲美,但其费用却远远低于固定话费,使得VOIP(Voice Over Internet Protocol)有着广大的应用市场。本文基于Java用eclipse开发了运行于JRE环境的VOIP系统软件,实现了互联网上的PC-PC的通话,经测试,效果完全可达到人们的通话需求。
1 关键技术
VOIP的基本原理就是先对模拟语音信号进行模数转换,经过编码压缩后,按一定的打包规则转换成IP数据包,再通过网络传输到接收方,最后经过数据解压、数模转换复原成语音信号,从而达到由互联网传输语音的目的。实现VOIP系统的关键就是如何采集和播放语音以及如何实现数据的网络传输。
1.1 语音采集、播放的实现
Java具有众多的网络API,例如支持数字音频和MIDI数据的记录/回放的JavaSound。
在当前JavaSound的默认配置中,输入声音来自本地声卡的麦克风,输出声音到本地声卡的扬声器。取样得到的音频数据格式选项由AudioFormat类封装,主要选项包括编码方式、通道数量、取样率、帧速率等。音频数据可以WAV、AIFF和AU等多种格式保存,音频文件的格式由AudioFileFormat类指定。
实现这部分功能的主要程序有:
AudioFormat fmt= newAudioFormat (8000,16,2,true,true);
程序实现了一个PCM编解码格式的对象,指明了数据流的码速是8000Hz、分组长度是16bit、声道数是2、以及是否采用双向编码方式(ture表示双向编码)和网路传送方式(ture表示方式为bigEndian)。
然后进行语音的捕获,本软件做了一下封装:
Capture cap=new Capture(fmt);
cap.read(buffer,0,1024);
其中,fmt为AudioFormat的对象。捕获的音频所生成的数据是存放在buffer这个字节数组里的。
播放音频时,本软件也封装了一下:
PlayBack play=new PlayBack(fmt);
Play.write(buffer,0,1024);
这样就把buffer中的数据获取成音频了。
1.2 数据网络传输的实现
网络中的两台机器可以通过Socket通信,在J2SDK-1.3中,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket用于客户端。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话:
ServerSocket listen=new ServerSocket(5000); 这是在5000端口建立监听对象。
Socket sock1=listen.accept( ); 这是接
显示全部