目前的软电话到处都是,传统的电话优势越来越小了,从单独的电话功能软件到,语音功能嵌入到一些社交软件中,软电话可以说 是到处开花结果。
开源界也是强大的,有不少优秀的voip的实现。比较有名的是imsdroid,csipsimple,sipdroid.前两个有支持视频,后一个源码里只看到支持者语音的,但从作者录制的视频来看,它也支持视频通话。但网络差的话,延迟比较久,而且是用rtsp方式来处理的,不像前面两个是用图片播放的方式。
imsdroid的视频效果一般,最近试了下csipsimple,虽然它只是发送视频,没有包含接收视频的模块,总体来说,视频效果不错的。流畅度很好,超过imsdroid.
http://code.google.com/p/csipsimple/ 这是项目主页,其中wiki包含了如何编译等详细的文档,这个东西在cygwin编译似乎不行,至少我是没有通过,可以在linux下编译,ubuntu12.04下通过。编译过程需要网络的支持,因为需要下载一些包如ffmpeg,x264等。最好要快一些。
有一个问题就是android_ndk已经是在path里面了,但是还无法识别,还提示错误,所以按照里面说的一步一步就可以了。过程也较简单。
项目中主要有几个包:
api包下主要是一些静态的常量,关于sip的管理。
db包当然是数据库了,它也使用了标准的ContentProvider,其中一些建表的语句还是用api包中的类。
pjsip就是这个库相关的类了,具体没有研究。在编译jni 前,这部分是有问题的,因为它需要jni的调用,工程也会报错。编译后生成一些jni对应的调用文件就正常了,生成的文件在org.pjsip下。
utils包就是一些帮助类,比如配置管理,音频自动聚焦。联系人,剪切版。
widgets包是一些自定义的控件。
wizards包是辅助用户的引导用的。
plugins包是插件,没看出有什么用处。
service包也是这里的重点:
MediaManager音频管理的,控制不同的音频流,来电时的音频,蓝牙,静音等。
OutgoingCall是呼出接收器,先通过这个拦截,可以拦截到系统电话的呼叫,与程序内的呼叫。然后自定义了选择器。
Downloader处理下载的,更新的时候就是用这个下载的。默认使用的是cacheDir目录。
SipNotifications是一个通知类,主要管理了通知。
SipService这里的主要服务。
ui包下就是关于界面的一些类了,account是添加帐户的。filters是关于帐户的过滤的,还使用了拖动排序的ListView。
calllog就是通话日志了。日志有选择保存在系统的通话中还是软件中。
incall就是来电的,与通话界面了。
dialpad是拨号面板
还有一个包是org.webrtc.videoengine,这里是视频通话时用到的,一看名字就知道了camera。
暂时没有找到视频的插件的源码在哪里下载。但有编译好的apk。使用x264编码。
这是这个工程的主要结构。自动换了lib后,ui变得好看多了,而且使用了Fragment,不使用TabActivity,在不同的tab间切换,资源的占用也有改善了。
编译后产生so文件:这里只需要arm的,其它的可以删除。
/home/dev/csipsimple/CSipSimple/libs/armeabi/libpj_opensl_dev.so
/home/dev/csipsimple/CSipSimple/libs/armeabi/libpj_silk_codec.so
/home/dev/csipsimple/CSipSimple/libs/armeabi/libpjsipjni.so
/home/dev/csipsimple/CSipSimple/libs/armeabi/libstlport_shared.so
项目生成so后的工程:
http://pan.baidu.com/share/link?shareid=64548&uk=1191240612 可以到这里下载。去除了jni部分,生成jni的调用部分。编译日期2012.9.19,trunk下载的