Android 开发 voip/sip 程序

本文介绍了在Android 2.3及以上版本中开发VoIP程序的方法,涉及SIP协议、Android系统对SIP的支持、开发步骤以及所需的权限和配置。内容包括获取SipManager对象、创建SipProfile、拨号流程和处理来电。此外,还提到了AndroidManifest.xml的配置,以及如何处理SIP呼叫广播。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       首先说明一下相关概念,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.com/android/2.3/reference/android/net/sip/package-summary.html 

 

熟悉了api以后。就可以开始写程序了。首先呢是创建android 工程。如果不知道具体方法,可以百度。

创建好工程后开始配置买manifest文件

为了使用SIP,需要添加以下权限到你的manifest文件:

§     android.permission.USE_SIP

§     android.permission.INTERNET

为了确保你的应用程序能够安装到支持SIP的设备上,你需要添加以下内容到你应用程序的manifest文件里:

§     <uses-sdkandroid:minSdkVersion="9"/>.这个设置表明你的应用程序需要Android2.3</

AndroidVoIP客户端App源代码,用以实现经典的语音及视频通话功能,开发环境的配置下载下来SipDroid源代码后,不能直接导入到eclipse中,否则是无法使用和编译的。   首先需要通过command line参照工程目录下的BUILT.txt文件对工程进行update。   如:android update project -p . -t 2(这里 -p指的是 --path -t指的是 --target)   由于是开源软件,需要版本控制的服务器,可以安装Subclipse(可以参见官网)   这样就可以将工程import到eclipse中了。   整理一些Android视频通话技术开发的资料:   SipDroid是一款开源的SIP/Voip客户端软件,针对Android手机开发平台。它是通过SIP provider来提供电话通信服务的,在它的最新的版本1.5.5beta中也提供了视频通话的服务。   它运行在标准的SIP协议之上,由于Android内核本身没有提供SIP协议栈,所以SipDroid软件中通过JNI直接实现了SIP协议栈。它能够在如下一些网络中提供VoiP服务:WLAN、3G、EDGE网络。甚至能够和Skype、Google Talk, MSN, Yahoo, AIM, and ICQ等用户进行通话。但前提必须到一些SIP provider注册账号(有免费的,也有收费的),SipDroid强烈建议使用PBXes这个sip provider来得到服务。   对于SipDroid实现视频通话的原理,目前的理解是:发送方是将是将视频数据传输到视频流媒体服务器,然后再传输给接收方的。具体细节目前不是很清楚,因为涉及到许多通信协议。   本项目共250 个目标文件,还有jni文件下c 文件需要编译。 感兴趣的同学必须得好好研究研究。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值