通讯
简介
VoIP(Voice over Internet Protocol)就是将模拟声音讯号(Voice)数字化,以数据封包(Data Packet)的型式在 IP 数据网络 (IP Network)上做实时传递,最简单的说法,就是通过网络来模拟我们平时的电话通话。
特点
VoIP最大的优势是能广泛地采用Internet和全球IP互连的环境,提供比传统业务更多、更好的服务。 VoIP可以在IP网络上便宜的传送语音、传真、视频、和数据等业务,如统一消息、虚拟电话、虚拟语音/传真邮箱、查号业务、Internet呼叫中心、Internet呼叫管理、电视会议、电子商务、传真存储转发和各种信息的存储转发等。
对于网络客户端之间的通话,我们只需要能上网就可以了,因此VoIP相对便宜,尤其是国际长途,而如果是从网络客户端与传统电话、手机之间的通话,则需要向固话网络运营商以及无线通讯运营商支付通话费用。
1
VoIP 控制协议
VoIP是基于网络的一种应用,它通过TCP/IP协议来建立通讯、传输语音信号,因此,VoIP从本质上来说和电子邮件、Http网页访问、Ftp下载这些网络应用是相同的,与之相应地,VoIP也势必要有一套自己的控制协议,VoIP目前常用的协议如H.323、SIP、MEGACO和MGCP。其中,SIP协议的发展前景较好。
VoIP与程序员
对于程序员,搭建一个完整的开源VoIP系统可能包括以下几个方面的工作。
协议的选用,这个决定整个VoIP系统的架构。一般选取SIP协议,系统就必须包括这个协议中定义的一些实体:代理服务器(主服务器)、注册服务器、网关、用户代理(终端)等。
服务器的选择和部署,如果采用开源的实现,可以使用Asterisk系列或者是freeswitch等开源的服务器端。
客户端的选择和部署,这方面的资源丰富,有X-lite、Skyup等闭源实现,也有Jisti、QuteCom等开源实现。
多媒体编解码器方面,用以改善通话质量。
Asterisk,freeswitch,opal,pjsip等优秀的开源项目,对于开发先进的VOIP电话系统提供了便捷和廉价的途径。
sun基于VOIP项目实践的经验,从技术上对VOIP电话系统的开发思路进行一个分析。
以下是设计思路:
利用Asterisk(freeswitch)作为VOIP电话的服务器,pjsip作为客户端,UI端通过socket(java,C,vc,etc)和pjsip进行通讯。架构图如下
服务端 客户端
Asterisk(freeswitch)<=====>pjsip<=socket(java/C)=>UI
| | | |mysql pjsua(1.x or later) WSASocket(Win) Java(SWING)
电话配置 更改pjsua_app.c等 Socket(Linux) JAVA<->Flex
电话计费 Softphone
呼叫中心 Call center(frontdesk)
1,Asterisk(freeswitch
1.1) 需要把账号的配置信息存入数据库,可以通过Web 界面进行方便的管理和配置。或简单配置一下配置文件(不用数据库)。
1.2) 产生通话记录历史(cdr),为计费和通话统计服务
1.3) 适当的情况下,可以扩展到多Asterisk服务器来支持扩充
2,pjsip
2.1) pjsip是客户端和服务端通讯的核心,实际上,这个设计。pjsip这一端可以和UI整合为一个软电话,也可以分离,作为比较复杂应用的核心,对接好几个UI如IM,WEB应用等。
2.2) 需要适当修改pjsip的源代码,支持Socket通讯(Server Socket/ Client Socket). pjsip担当Server Socket的角色,监听来自UI端的请求;同时把来自UI端的请求发往电话服务器(Asterisk).
3,Socket
Socket 可以用使Java,C等来实现。它作为UI和pjsip之间的桥接。
4,UI
4.1) UI客户端是客户真正看到的东西。比如Skype界面就是UI的一种展现。
我们可以根据实际情况,用不同的程序语言来实现UI端的开发。