这是适用于Android的最佳SIP兼容编解码器类型

时间:2011-03-31 13:10:38

标签: android rest voip sip sip-server

我想开发一个Android应用程序,它将使用我的客户端的 SIP服务器。我的客户端从SIP服务器公开了几个 REST API ,以便与应用程序进行通信。

我想知道这款应用的哪种最佳编解码器类型

基本上,我想创建 SIP-Stack 并将 SIP数据包发送到服务器。因此,应该有数据包的编码和解码系统。我的客户喜欢16 kb /秒,但我不确定应该使用哪个。

5 个答案:

答案 0 :(得分:10)

正如其他人所说,SIP不会传输音频或视频。虽然从理论上讲,您可以通过任何传输方式发送数据,包括ATM,模拟线路,DS0等,但在现实世界中,RTP是最常见的。 RTP(实时协议)和RTCP(实时控制协议)或SRTP(安全RTP)通常承载音频和视频。

就编解码器而言,您将受到服务器支持的限制。以下是一些常见的编解码器以及每种编解码器的优缺点。

G.711 - 收费质量(即好的模拟电话线,甚至更好一点)。 “通用”几乎每个设备都支持G.711。占用大量带宽,它并不真正压缩数据(G.711是“压缩扩展器”)。基线G.711非常简单(它实际上是几个查找表)。附录I增加了数据包丢失隐藏(PLC),附录II增加了静音抑制和舒适噪声的产生。

GSM - 用于手机,听起来不错,PLC好,压缩性好

G.729A - 广泛使用,接近收费质量,良好压缩(8Kbps)

G.723.1 - 广泛使用,几乎与G.729一样好,压缩效果更好(4-5Kbps)

G.722 - 听起来比G.711好,宽带(G.711或模拟呼叫的音频带宽的两倍),与G.711相同的带宽

GIPS - 存在各种实现,一个是免费的。 IIRC,在线上使用大约13.5Kbps,声音不如G.723.1(但这是一个感知度量,YMMV)占用了大量的处理器。

所有编解码器都使用一些处理器和其他系统资源,根据经验,编解码器越激进(带宽越小)处理器使用的越多。此外,所有这些特定的编解码器都是有损编解码器 - 它们会丢失一些数据。这意味着存在压缩,而不是由于路由不良和线路质量差而导致部分音频丢失。很像MP3被认为是LOSSY编解码器,而FLAC被认为是无损。如果您对以下维基百科文章感兴趣,请进一步详细说明:http://en.wikipedia.org/wiki/Lossy_compression

答案 1 :(得分:4)

您需要知道此SIP服务器将支持哪些编解码器和协议。如果您控制两端并希望坚持16Kbps,您将需要iLBC(无版税)或G.729(版税适用)。 G.711和(现在)G.722也没有版税,但两者都使用~64Kbps。

之前给出的清单很好,有一些问题。:

  

GIPS - 存在各种实现,一个是免费的。 IIRC,在线上使用大约13.5Kbps,声音不如G.723.1(但这是一个感知度量,YMMV)占用了大量的处理器。

GIPS不是编解码器 - iLBC和iSAC是由GIPS设计的编解码器。 iLBC是免费和标准化的。 iLBC是高质量,13或15Kbps,与G.729甚至G.711相比,对数据包丢失非常有弹性。您可以使用iLBC获得30%甚至50%的损失,但仍然可以理解。与G.729相比,我不确定它会使用大量的CPU。

  

所有编解码器都使用一些处理器和其他系统资源,根据经验,编解码器越激进(带宽越小)处理器使用的越多。此外,所有编解码器都是有损编解码器 - 它们会丢失一些数据。

嗯,G.711本身并不是真的有损(理论上是的,但它几乎是量化级别的损失)。 64K G.722也不是很有损耗。 G.723通过花园软管吸死沙鼠。 : - )

答案 2 :(得分:1)

自己做这件事听起来不错。开发一个sip客户端并不是一项简单的任务,因为你必须实现几个协议。与其他人相比,选择编码并不是非常重要的决定。

你应该使用一个开源的sip堆栈(比如pjsip),或者在一个开源sip客户端(比如sipdroid)上构建你的应用程序。

但是因为你要求编解码器:使用GSM编解码器。节省带宽和声音确定。 G.711是99%的sip服务器支持的标准编解码器。

答案 3 :(得分:0)

不限?

SIP不发送和处理任何数据包。 SIP是会话启动协议,它处理会话的谈判。

然后会话arae - 在auio和视频的情况下 - 基于RTP并使用RTSP进行信令。所以,你的问题表明你真正缺乏对你需要做什么的了解 - 真正的问题是:你需要一个兼容RTP的编解码器。

这类似无知。 RTP是一种载波协议。这就像问“什么是HTTP兼容图像格式”。 HTTP并不关心。浏览器确实。

对于RTP,这意味着 - RTP无关紧要。它可以传输任何数据。重要的是,两个SIDES都知道相同的编解码器。所以,在你的情况下,它意味着:

  • 如果您对双方进行编程,那么这是您的选择。
  • 如果您只编程一个sidwe(如SIP电话系统),则问题是“正常”程序处理。

答案 4 :(得分:0)

这里有两件事需要考虑:

  • 正在部署或计划部署处理媒体的其他设备/服务器
  • 您的客户是否正在寻找窄带或宽带解决方案 - 这将极大地影响通话的语音质量

一旦确定了上述两个问题的答案,您就可以选择。 对于移动设备,通常使用的语音编解码器是AMR-NB或AMR-WB。对于SIP,它通常是G.729或G.722.x. 您还可以选择Speex,ISAC和SILK。 在任何情况下,你可能都需要做G.711只是为了与所有东西互操作 - 但带宽会更高。

这里不容易回答。如果您的客户可以选择或说明正在使用的其他设备 - 您将更容易选择。