Browsed by
Category: 通信技术

通信,让生活更美好!

iLBC相关说明

iLBC相关说明

在两篇RFC文档中对iLBC有比较全面的介绍:

1、RFC3591 Internet Low Bit Rate Codec (iLBC) 这篇主要是讲解iLBC的基本原理,非语音处理领域的专业人士很难看得明白。

2、RFC3952 Real-time Transport Protocol (RTP) Payload Format for internet Low Bit Rate Codec (iLBC) Speech 进行RTP传输是必须遵守的规范,VOIP领域人士基本能看明白。

简单点说:iLBC采用8KHZ,16bit采样,但是分成两种模式:30ms(毫秒)模式以及20ms(毫秒)模式。最初只定义了30ms模式,后来考虑到窄带网络丢包的情况,增加了20ms模式。目前大部分设备多采用的是30ms模式。

30ms模式是指每30ms发送一帧,则每帧数据是400bits (50bytes),如果是20ms一帧,则每帧数据是304bits(38bytes)。

在SDP描述中,必须明确指明codec名字是iLBC。

如果是20ms模式,必须在SDP中明确指明,否则会认为是30ms模式。在RFC文档中有如下描述:

If 20 ms frame size mode is used, remote iLBC encoder SHALL receive “mode” parameter in the SDP “a=fmtp” attribute by copying them directly from the MIME media type string as a semicolon separated with parameter=value, where parameter is “mode”, and values can be 0 and 20 (where 0 is reserved and 20 stands for preferred 20 ms frame size).  An example of the media representation in SDP for describing iLBC when 20 ms frame size mode is used might be:

m=audio 49120 RTP/AVP 97
a=rtpmap:97 iLBC/8000
a=fmtp:97 mode=20 <– 30ms模式中,多数厂家的设备不会携带这个attribute。

需要注意的是SDP协商与一般的codec协商有不同,其中比较关键的就是ptime不能应用到iLBC的协商中。iLBC总是采用最低速率模式,例如,只要一方要求30ms模式,双方都必须使用30ms模式:

That is, an offer of “mode=20” receiving an answer of “mode=30” will result in “mode=30” being used by both participants.  Similarly, an offer of “mode=30” and an answer of “mode=20” will result in “mode=30” being used by both participants.

注解:我想可能就是这个原因(当然,也有历史遗留的可能),大家都不约而同地采用30ms模式,避免对媒体资源的重新调配。

不能使用ptime的原因在于一个RTP包中,可能会封装若干个iLBC包,这种情况下ptime无法表述究竟是哪种模式:

Parameter ptime can not be used for the purpose of specifying iLBC operating mode, due to fact that for the certain values it will be impossible to distinguish which mode is about to be used (e.g., when ptime=60, it would be impossible to distinguish if packet is carrying 2 frames of 30 ms or 3 frames of 20 ms, etc.).

注解:在一个RTP包中封装多个iLBC包的方法,实在让人感觉多此一举。即没有减少流量,也不能降低丢包对语音质量的影响,反而增加了网络设备的复杂性。从实际应用来看,也没有什么人会采用这种方式。

Google开放实时通信框架WebRTC

Google开放实时通信框架WebRTC

据说WebRTC是Web方式进行语音、视频实时通信的框架。项目地址如下:

http://sites.google.com/site/webrtc/ (需翻墙浏览?)

暂时还不太清楚这个技术的细节,不过如果像Google宣传的那样,就可以实现高质量的web通信方式。传统的SIP软终端就面临很大的挑战,从另一方面来说,可能也是一次打破现有格局的机遇。

在ubuntu环境中运行SIPp

在ubuntu环境中运行SIPp

SIPp是一个非常好的SIP性能测试工具,我们一直用它,:-) 不过一直是在windows环境中使用这个软件。

而最近忙于将已有系统迁移到Linux环境,因此就有必要研究一下linux环境下的SIPp,我们以ubuntu环境为主。在ubuntu环境中安装、运行SIPp基本是非常简单的,因为ubuntu的软件源中已经加入了SIPp,不过运行时有些地方需要注意。

下面我们逐一进行介绍:

step 1: 安装SIPp

sudo apt-get install sip-tester

step 2: 运行SIPp

命令与windows环境的SIPp一样,需要注意的是Ubuntu/Kubuntu的网络环境中,缺省会安装一个循环网卡,如果运行SIPp时不指定本地地址,SIPp很可能会以该Loopback的地址填写SIP消息中的各项参数,导致大量呼损。因此我们只需注意以-i指定本地地址,以-p指定本地端口即可。下面是两个示例:

运行SIPp接收端程序:sipp -sn uas -i 192.168.1.10 -p 5060

运行SIPp发起端程序:sipp 192.168.1.20:5060 -sn uac -i 192.168.1.10 -p 5061 -r 3 -rp 1000 -m 30000

SIPp错误: Error opening terminal: cygwin

SIPp错误: Error opening terminal: cygwin

在运行SIPp进行测试时,经常有人会问到:“为什么我运行sipp会出现下面这个错误提示呢?”

Error opening terminal: cygwin

这个错误是说SIPp无法找到运行时必要的terminal信息,这有可能是由以下几方面的因素导致的:

(1)计算机上没有安装cygwin。cygwin是必须要有的。

(2)直接在command命令行窗口运行sipp。这个是最常见的错误。大家可能觉得把cygwin的bin目录以及sipp的目录加入到path路径就可以直接运行sipp了。直接运行时,还是没有指定cygwin的terminal信息,同样会出错。

那么该如何运行SIPp呢?

请注意SIPp安装后,在“start”程序组中建立了快捷方式“start sipp”,我们应点击这个快捷方式来运行SIPp。这个快捷方式,实际上是指向SIPp安装目录下的批处理文件:startterm.bat。打开这个批处理文件,我们可以很清楚地看到,首先进行了terminal信息的设置,然后进行了必要的mount操作,最后才能正常运行SIPp。

Voice over LTE

Voice over LTE

从cnBeta网站看到一条信息(http://www.cnbeta.com/articles/116220.htm),大致的意思是:

让HSPA网络也可以承载语音数据,并且还可以在无SIM卡的情况下实现紧急呼叫。这意味着只要有HSPA数据连接,用户就可以直接通过数据网络拨打电话而不是走传统的蜂窝网。新的标准还优化了语音路由,并加入了一系列LTE手机的服务端API。

我比较感兴趣的是:

  • 这个VoLTE和VoIP有什么区别?
  • LTE手机的服务端API是指什么?
  • 是否所有电话都可以通过LTE手机的数据网络完成?
SIPp简单使用手册

SIPp简单使用手册

Windows下应用SIPp非常简单, 直接下载SIPp的安装文件安装即可。

需要注意的是,不要直接从cmd窗口启动SIPp,而是 点击SIPp的快捷方式“start sipp”,这样,它会将SIPp的安装目录加入路径中。或者,可以将sipp的安装目录加入系统的PATH路径,然后也可以直接在cmd窗口启动 SIPp。

sipp 192.168.1.100:5060 -sf caller_basic.xml -p 5062 -m 1 -r 1 -rp 2000 -d 2000

-sf     加载外部的xml定义文件
-inf    从外部csv文件导入数据信息
-p      指定本地端口。 如果不指定的话,系统使用一个随机的空闲端口;
-m  呼叫次数
-d  每个呼叫的保持时间(毫秒)

其他常用配置参数:

-r -rp Specify the rate period for the call rate.
Example: -r 7 -rp 2000 ==> 7 calls every 2 seconds.

实际上SIPp内置了缺省的UAS和UAC,因此,我们可以不需要定制xml脚本,直接用下面的命令进行测试:

启动SIPp做呼出:sipp 192.168.1.100:5060 -sn uac -p 5062 -r 1 -rp 2000 -d 2000

启动SIPp接受呼叫:sipp 192.168.1.100:5060 -sn uas -p 5063

应用在Fedora系统
下载sipp的源代码在Fedora 9下编译时,会有编译错误“INT_MAX未定义”。 解决方法:
修改sipp.hpp文件,增加以下宏定义即可:

#ifndef INT_MAX
#define INT_MAX 0xFFFFFFFF
#endif

直接使用命令make即可进行编译,在当前目录下产生sipp可执行文件。