Sipdroid是一个运行于Android手机平台上的SIP/网络电话客户端,与QQ、MSN等IMS软件不同的是,Sipdroid不仅仅是支持电脑对电脑,同时也支持电脑对手机和固话,SIP设备对手机和固话,因为有了它,你只要支付很少的RMB,甚至于免费,就可以打电话到国内甚至国际手机或固话。它是基于标准的SIP协议,所以只要是支持这些协议的通讯工具都可以互通。
因为没有两部手机用来测试,所以里面的有些功能可能理解有误,如果对大家造成误导,i'm sorry。
另外Sipdroid是开源的一款SIP协议网络电话。开源意思是该程序的源代码是开放的,因为源码是开放的,所以软件不可能作恶。从这个项目中,我们可以学到音视频编码解码,使用Jni,流媒体传输,包括网络,SIP,RTP等协议的封装使用等。据说视频通话功能需要服务端提供支持,网上有开源的SIP服务器,大家可以自己搭建了测试。
Sipdroid的源码及apk文件下载:
http://download.csdn.net/detail/comkingfly/4214306
SIP和RTP是相互独立的两个功能块,SIP消息和服务器通信,告诉服务器双边通信的状态,当双边都进入通话和视频的过程中,那么就完全的走RTP了,RTP采用数据报包的方法,两台手机同时connect(ip,port);只要一个send,一个receiver就行了,数据就完成传输了。
SIP协议栈是Java实现的,JNI 实现的是 audio codec。
Sipdroid中采用的是什么协议?
这点非常的重要,因为Sipdroid采用的是RFC3261协议,大家看了RFC3261协议后,你就会明白,Sipdroid中对于Message的封装是如何完成,那么Message的封装和生成这块所涉及到得设计模式和代码,你基本就可以弄明白。
Sip协议相关文档下载(中英文及精解):
http://download.csdn.net/detail/comkingfly/4220745
Sipdroid的工作示范图:
VideoCamera.java这个类主要用于拍摄视频,封装成RTP流。
方案一: 通过Android Camera拍摄预览中设置setPreviewCallback实现onPreviewFrame接口,实时截取每一帧视频流数据
方案二: 通过Android的MediaRecorder,在SetoutputFile函数中绑定LocalSocket实现
方案三: 流媒体服务器方式,利用ffmpeg或GetStreamer等获取Camera视频
Sipdroid采用的是第2种。
MediaRecorder的生命周期介绍:
Android的MediaRecorder包含了Audio和video的记录功能,在Android的界面上,Music和Video两个应用程序都是调用MediaRecorder实现的。
MediaRecorder在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaRecorder程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。
private class MainHandler里:
RtpPacket.java 用于把数据按照RTP协议的结构进行封装。
联系客服