语音通话-sip电话(一)

来源:互联网 发布:开淘宝找货源 编辑:程序博客网 时间:2024/04/29 12:26

语音通话-sip电话(一)——概述

最近有接到一个需求,需要做个语音通话系统,因为本人之前是完全没有相关经验的,内心各种抗拒,可是也只能硬着头皮接了下来,于是开始各种搜索,得到的结果:1.某某公司语音通话的SDK 2.voip电话。继续从voip延伸,我搜到了sip电话。

对于sip,我是完全不知道是啥,搜到的时候我也是第一次听到,经历好长一段时间的学习,看代码,现在算是有了一定的了解,所以在这里稍微总结一下。希望对自己和别人有所帮助,如果有任何问题,欢迎给我指点。

现在国内做软电话的公司应该不多,大多模式是以下几种:1.网络电话app,按时间计费。2.提供SDK,让其他开发者嵌入,也是按时间或者流量收费。3.在IM app里面加入语音聊天模块。可能因为相关利益问题,这些技术是没有开源的,相关资料甚少。

我在这里先给出我了解到的资料。
相关技术:

1.sip
2.nat穿越
3.语音编解码
4.语音传输(rtp)

以上四个技术点其实就是sip电话里面的四个模块,sip负责会话创建、维护、中断等;nat穿越就是传说中的p2p打洞,需要stun服务器配合。将语音数据按照某种格式编码,交给传输层传输,传输通常是基于udp的rtp流。

相关协议:

1.sip
2.sdp
3.stun、turn、ice
4.rtp

sip,Session Initiation Protocol,会话初始协议是一个协议栈,集合了注册,呼叫,接听,挂断等相关协议;sdp是会话描述协议,我的理解TA是让两个通讯方指定通讯规则,比如用何种协议传输,音频是何种格式等等,stun、turn、ice是nat穿越使用的,stun采用p2p打洞,turn采用的是转发,ice只是考虑当前环境适合何种方案,然后选择相应解决办法。rtp是实时传输协议,TA其实包括rtp和rtcp两个协议,负责将语音数据的传输。

相关库:

1.linphone
2.pjsip
3.webrtc
4.osip、exosip
5.ortp
6.mediastreamer2

linphone和pjsip都是国外很有名的sip开源库,pjsip的代码很优雅,很美,它里面那一套内存管理跟oc里面的autoreleasePool好像。但我最终使用的是linphone,原因是linphone还提供服务器给我们用,可用于测试。
linphone的官网:http://www.linphone.org,也可从appstore下载linphone先使用;pjsip的比较完整的demo是SIPHON,可以下载一个miniSIPServer搭建服务器尝试使用。
osip是实现sip协议的一个开源库,exosip是osip的一个扩展。
ortp是实现rtp的一个开源库。
mediastreamer2是负责音视频编解码的一个库。

>
>
via:大黄

0 0