首先说明一下相关概念,voip 和Sip ,voip的意思是网络电话,会话发起协议(SIP)是建立VOIP连接的IETF标准。SIP是一种应用层协议,用于和一个或多个参与者创建、修改和终止会话。SIP的结构与HTTP(客户-服务器协议)相似。客户机发出请求,并发送给服务器,服务器处理这些请求后给客户机发送一个响应)。
简单点就是voip是网络电话,而sip则是网络电话使用的协议。别的信息就请各位读者自己百度了。至于Android voip程序也就是写一个程序用于实现网络电话功能。
注意:在本篇博客中voip和 sip是一致的,笔者是不分的(原因是在android 2.3以后提供的api中是用sip表示voip相关接口的)
其实关于这个程序还得说明这里的Android 的版本。因为Android版本不同,开发方式也可能不同。voip程序,如果是运行在Android 2.3 以上系统,使用的属于Android 基本变成(简单调用编程api就可以),但是如果用户群体还包括Android 2.3 以前的系统。那就得换方案了,原因如下,因为Android 系统是在2.3以后才支持sip网络电话的,2.3以前就意味着没有对应的编程接口。只能自己实现了。
既然要自己实现,就必须先知道要实现哪些东西(或者说2.3以后和2,3之前到底在sip方面究竟是增加了哪些东西),进过笔者分析2.3和2.2代码的知2.3主要做的是在框架层实现了sip协议还有与sip相关的呼叫管理服务,简单点就是说2.3以后的系统提供了一个支持会话发起协议(SIP)的API,通过它就可以让应用轻松无需管理会话和传输层的沟通就可设置传出和传入的语音通话,或直接音频记录或播放。如果自己实现相关借口还得实现音频编解码。
现在总结一下,在android 2.3 以后的系统上开发voip程序要做的只是调用sip相关api就可以了。但是在Android 2.3 以前的系统上开发voip程序至少得完成如下几件事:
一.实现sip协议栈(在程序中把sip数据包封装好,发到网络上),或者实现别的完成同样功能的协议。
二.实现一个呼叫管理服务功能(例如 来电界面,拨号界面响铃界面等等,试具体功能需求而定)。
三.实现音频编解码(由于Android 的多媒体api中没有提供音频编解码的api,所以得自己实现,但是音频编解码是一个很庞大的事,并且现在有很多开源的音视频编解码库,常见的(笔者接触过的)有BroadVoice (音频编码的),ffmpeg(音视频编解码的),但是这些编解码库大多是以c语言写的。而Android 应用程序开发主要是java。所以在实现编解码音频时就得使用ndk开发(或者jni技术))。相信大家都知道了,开发voip程序在不同版本android上是不同的。而本篇博客主要是在2.3以后版本系统上开发voip 应用至于在2.3以前的开发的情况会在以后的博客中专门说明。
Android2.3 以后开发程序大致步骤如下
1.获取SipManager对象。
2.创建SipProfile对象(但是要先得到SipProfile.Builder 对象 ,并且在获取 Builder 对象时要传入sip账户信息),还得绑定监听器确定是否成功绑定;
3.有了前两个以后就可以拨号了(注意:另一个号也要是sip账号)。
4.使用广播接受器响应Sip呼叫广播(具体是响铃,唤醒屏幕)及设置过滤器。
既然要开发2.3以后的voip程序那就必须知道android系统提供的api相关类有哪些。具体如下:
SipAudioCall |
通过SIP处理网络音频电话 |
SipAudioCall.Listener |
关于SIP电话的事件监听器,比如接受到一个电话(on ringing)或者呼出一个电话(on calling)的时候 |
SipErrorCode |
定义在SIP活动中返回的错误代码 |
SipManager |
为SIP任务提供APIs,比如初始化一个SIP连接。提供相关SIP服务的访问。 |
SipProfile |
定义了SIP的相关属性,包含SIP账户、域名和服务器信息 |
SipProfile.Builder |
创建SipProfile的帮助类 |
SipSession |
代表一个SIP会话,跟SIP对话框或者一个没有对话框的独立事务相关联 |
SipSession.Listener |
关于SIP会话的事件监听器,比如注册一个会话(on registering)或者呼出一个电话(on calling)的时候 |
SipSession.State |
定义SIP会话的声明,比如“注册”、“呼出电话”、“打入电话” |
SipRegistrationListener |
一个关于SIP注册事件监听器的接口 |
至于 更详细的api相关信息 可以打开这个网页(android sdk api 开发文档英文版) http://docs.huihoo