公司近期上线了一个项目--是基于voip的网络电话的构建 体验地址 html
该项目使用真实的电话号码注册,没有好友观念,只要知道对方的电话号码就能够拨号过去,固然前提是对方也安装了该软件并注册了手机号。 前端
刚据说的时候感受逻辑还很简单,可是真正作的时候难题很多。首先就是我历来没有接触过sip和即时通信的架构,而后就是如何保证最大化的实现点对点通话减小服务器压力。 android
通过网上搜索,群里的问答,初步了解了能够作服务器端的有这么几个opensip、kamailio、freeswich、asterisk。固然还有一些,只不过我感受不能作生产使用,因此就放弃了。其中opensip和kamailio来自同一个openser开源项目,因此他们的代码和配置文件几乎同样,没有什么区别。freeswich和asterisk属于pbox范围好比呼叫中心了ivr了等方面的功能比较强,我分析了一下项目需求好像对这方面的需求不多,几乎没有,因此就没有使用它们,最后选择了kamailio。由于最开始搭建opensips的时候没有成功而搭建kamailio的时候成功了,因此就一直用kamailio了。 web
而后就是客户端的选择,因为我比较信赖谷歌的技术,因此开始找的是webrtc,由于webrtc能够跨平台,并且通话质量不错,后来找到了sipml5,是一个web前端的sip,可是没有成功。后来先兆android 发现可选的有 linphone、imdroid、csipsimple、sipdroid,他们的优缺点我在网上搜索了一下参看http://blog.csdn.net/banketree/article/details/21276101 最终选择了csipsimle。imsdroid我也是用过一段,可是因为及时性不是很好就没有在深刻的研究,我仍是比较偏好他的,由于他使用的是doubango框架. 服务器
固然,也是最重要的一点,nat穿透,我使用的是stun+网络服务器转发也能够看我之前的stun turn ice 博文介绍。网上搜索kamailio自身没有stun服务,可是我发现kamailio本身有一个stun模块,因为csipsimle可使用两个stun服务器,一个做为备用一个正常使用、并且时间关系就用来网上的一些免费的stun服务器。关于kamailio的stun服务若是有人知道能够指点我一下。 网络