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中采用的是什么协议? 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实现的。
private class MainHandler里:
这里就是把缓冲的视频封装成RTP流。
RtpPacket.java 用于把数据按照RTP协议的结构进行封装。 |
|