通俗易懂介绍sip协议和媒体库

1. 信令和媒体
   和7号信令或ISDN PRI信令一样,SIP只是控制会话的信令协议。

   让我们先看看传统的电话信令,电话和信令在E1电路上传输。每个E1有32个时隙(0-31),每个时隙的带宽是64KBPS,整个E1的总带宽就是64k×32 = 2048K,也就是2M,所以E1也通常称为2M电路。

   7号信令(比如ISUP协议)通常在某个E1的16时隙传送,因为有64k的带宽,可以控制1到几十个E1话路。

   每个E1的全部32时隙,其中第0时隙用来进行帧同步,第16时隙要么跑信令要么空着啥也不干,因此一个E1除去2个时隙,只有30个时隙可以来传送话路,这个话路就是跑的每秒8000个字节采样率、A率编码的语音数据,我们称之为媒体或媒体流。

2. SIP和对应的媒体
   SIP是基于IP的,媒体数据也是基于IP,也就是所谓的分组交换。
   可见基于sip,信令和媒体也是分开的。信令的协议是SIP协议,类似于http协议,属于应用层协议。媒体则通过rtp协议来打包传输。
   SIP协议可以TCP也可以UDP,习惯上还是用UDP,周知端口号是5060,也可以设置为其他的端口号如5080。
   rtp将声音视频等数据打包,侦听到端口号可以自行配置,一般在SIP消息里面进行协商,协商的部分称之为SDP。
   注意,因为rtp一般会和rtcp(实时传输控制协议)配合使用,因此一个rtp需要占用两个端口。

   我们做防火墙配置的时候,如果要放开UDP端口,那么sip要放开一个端口,rtp要放开n×2个端口,n就是线路数,如前所述每个通道占用2个。

3. SIP消息的简单回合
   SIP消息就像http的消息,也有头部和正文部分(正文一般携带SDP数据,就是媒体协商数据)。
   要了解sip消息的细节,可以看记录的消息日志。

   一个正常的呼叫是这样的:
   Invite  -> 发起呼叫这个消息会携带sdp
           <- 100 临时响应
           <- 18x 回铃,可能是180或183,一般也会携带sdp,双方可以建立媒体连接,让呼叫方听到彩铃
           <- 200 OK 被叫摘机,携带sdp
             (如果呼叫失败,会返回300以上的消息)
   ACK     -> 确认
   进入通话
   Bye     -> 挂机
           <- 200 OK
   结束通话,注意,bye消息任何一方都可以发起。

   除了上面的几个消息,我们还会用到Register及注册消息。这里就不介绍了。
   蓝星际协议栈会自动处理这些消息,而且支持多线程并发。


4. 媒体库实现
   我们考虑一个sip分机,他需要两个rtp方向,一个方向是收对方的数据,相当于听;另外一个方向是发,相当于说。
   媒体的处理,当然不仅仅是rtp传输,还有可能放音,录音甚至传入到语音卡通道或从语音卡通道接收等。

   蓝星际的媒体库,设计了多种媒体处理的节点,其实本质上就是两种类型:接收器和发送器。
   对于发送器,需要绑定1-n个源,源就是产生数据的接收器。
   语音平台在一般情况下进行媒体处理是很简单的,比如座席和外线之间的通话(即两个通道之间的背靠背通话),座席的发送器绑定到外线的接收器(即收到外线的数据转发给座席),外线的发送器绑定到座席的接收器(即收到座席的数据转发给外线)。
   这样进行转发,既不放大声音也不缩小声音,只要时钟周期正确,那么就是对声音数据进行完整地搬运。
   如果接收和发送到数据格式即声音编码格式不一样,那么需要进行转换。


   对于座席和外线通话的录音,情况稍微复杂些。
   录音节点相当于一个发送器(发送到文件),它需要绑定两个源,即将外线和座席接收到的声音同时存到文件,当然需要进行混音。
   混音的过程分两步,先将2个源各自收到的原始数据转换成线性pcm编码,然后进行相加,再转换回A率编码存入文件。

   文件放音相当于接收器,即定时从文件中读取语音。

 

5. 为什么定时器很重要?
   一般voip每20ms发送一个数据(也有10ms或30ms的),对于G.711A(就是前面介绍过的8000采样率A率编码的语音)来说,20ms的数据是160字节。
   如果不精确,比如每25ms发送一个数据,会出现什么情况呢?
   接收器收到的数据一般放在环形的缓冲区,供发送器读取,假设缓冲区存放10个包即200ms的数据,每次5ms的误差,逐渐累积后,声音的延时越来越大, 而且累积到40次后就会丢失整个缓冲区,即丢失整整200ms的声音,效果自然很差。

   系统必须保证每20ms就发出数据,但windows和Linux都不是实时操作系统,服务器上还要求多路并发,就更需要精确的定时机制,而且必须简单实现以 免消耗太多资源,设计这类多路的定时机制,有难度。是系统的核心技术,有些公司甚至为此申请专利。
   我们实现的定时器非常精确,消耗资源也很少,结果可以从多媒体库记录的日志进行分析。

以上原理性的讨论是通用的,从另外一方面有助于您了解蓝星际语音平台(for SIP版本)的工作过程,出现问题的时候可以更容易定位原因。

       2011.10.14 朱东宁 于Hongkong旺角

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值