【问题标题】:Which is the best SIP compatible codec type for Android哪一种是适用于 Android 的最佳 SIP 兼容编解码器类型
【发布时间】:2011-03-31 13:10:37
【问题描述】:

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

我想知道哪个是此应用的最佳编解码器类型

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

【问题讨论】:

  • 我是 VOIP 领域的新手。详细地说,我的客户有一个基于 REST 的 API。我的任务是创建一个应用程序,使用户能够使用我的客户端的 WiFi 或蜂窝网络和 SIP 服务器进行呼叫。所以,我的客户想知道我将使用的编解码器的类型(我不确定)。我还必须使用前面提到的 API 来获取用户数据。请建议我应该遵循的工作程序。

标签: android rest voip sip sip-server


【解决方案1】:

正如其他人所说,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 被认为是有损编解码器,而 FLAC 被认为是无损编解码器。如果你有兴趣,下面的维基百科文章会更详细地解释:http://en.wikipedia.org/wiki/Lossy_compression

【讨论】:

  • 对规格的很好解释。的编解码器,但我认为数据丢失是由于使用 RTP 造成的?
  • RTP 只是一种传输协议。数据丢失可能由多种因素造成,包括:由于噪声等引起的一般线路损耗;一些中间路由器的RED(随机早期丢弃);接收缓冲区溢出(即抖动缓冲区溢出);延迟不是恒定的(导致数据包饥饿然后缓冲区溢出),行为不端的路由器等。
  • 请将此添加到上述评论中:丢包隐藏 (PLC) 可以提供帮助。但是,即使不使用 RTP,您也可能在任何线路上出现丢包。顺便说一句,SIP 不需要 RTP,编解码器也不需要 RTP,尽管很少看到一个没有另一个。
【解决方案2】:

您需要知道此 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 通过花园软管吸食死沙鼠。 :-)

【讨论】:

    【解决方案3】:

    自己做听起来是个坏主意。开发 sip 客户端并非易事,因为您必须实现多个协议。与其他选择相比,选择编码并不是很重要的决定。

    恕我直言,您应该使用可用的开源 sip 堆栈之一(如 pjsip)或在开源 sip 客户端(如 sipdroid)之上构建您的应用程序。

    但既然您要求编解码器:请使用 GSM 编解码器。节省的带宽和听起来不错。 G.711 是 99% 的 sip 服务器支持的标准编解码器。

    【讨论】:

    • 您能否在“在开源 sip 客户端(如 sipdroid)之上构建您的应用程序”中添加任何有用的信息。我对此非常感兴趣。谢谢!
    • 以 sipdroid 为例,稍微改变一下 GUI 并将其称为您自己的应用程序。 (别忘了保留他们的版权信息)
    • 哦:听起来很简单,但可能不是:P!您对版权信息是正确的,根据他们的 wiki,他们在 2009 年遇到了问题。无论如何,谢谢!
    【解决方案4】:

    有吗?

    SIP 不发送和处理任何数据包。 SIP 是会话发起协议,它处理会话的协商。

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

    这类似毫无意义。 RTP 只是一种载体协议。这就像问“什么是 HTTP 兼容的图像格式”。 HTTP 不在乎。浏览器会。

    在 RTP 的情况下,这意味着 - RTP 不在乎。它可以传输任何数据。重要的是双方都知道相同的编解码器。因此,就您而言,这意味着:

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

    【讨论】:

      【解决方案5】:

      这里有两点需要考虑:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多