我想开发一个 Android 应用程序,它将使用我的客户端的SIP 服务器。我的客户端正在从 SIP 服务器公开几个REST API以与应用程序通信。
我想知道哪个是这个应用程序的最佳编解码器类型?
基本上,我想创建一个SIP-Stack并将SIP 数据包发送到 Server。所以,应该有一个数据包的编码和解码系统。我的客户更喜欢 16 kb/sec,但我不确定应该使用哪个。
我想开发一个 Android 应用程序,它将使用我的客户端的SIP 服务器。我的客户端正在从 SIP 服务器公开几个REST API以与应用程序通信。
我想知道哪个是这个应用程序的最佳编解码器类型?
基本上,我想创建一个SIP-Stack并将SIP 数据包发送到 Server。所以,应该有一个数据包的编码和解码系统。我的客户更喜欢 16 kb/sec,但我不确定应该使用哪个。
正如其他人所说,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
您需要知道此 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 通过花园软管吸食死沙鼠。:-)
自己做听起来是个坏主意。开发 sip 客户端并不是一项简单的任务,因为您必须实现多个协议。与其他选择相比,选择编码并不是很重要的决定。
恕我直言,您应该使用可用的开源 sip 堆栈之一(如 pjsip)或在开源 sip 客户端(如 sipdroid)之上构建您的应用程序。
但既然你要求编解码器:使用 GSM 编解码器。节省的带宽和听起来不错。G.711 是 99% 的所有 sip 服务器支持的标准编解码器。
这里有两件事你需要考虑:
一旦你确定了上面两个问题的答案,你就可以选择了。对于移动设备,通常使用的语音编解码器是 AMR-NB 或 AMR-WB。对于 SIP,它通常是 G.729 或 G.722.x。您还可以选择 Speex、ISAC 和 SILK。在任何情况下,您可能都需要使用 G.711 才能与所有设备进行互操作 - 但带宽会更高。
这里没有简单的答案。如果您的客户可以选择或说明正在使用的其他设备 - 您将更容易选择。
任何?
SIP 不发送和处理任何数据包。SIP 是会话发起协议,它处理会话的协商。
之后的会话 - 在 auio 和视频的情况下 - 基于 RTP 并使用 RTSP 进行信令。因此,您的问题表明您真正缺乏对您需要做什么的了解 - 真正的问题是:您需要一个与 RTP 兼容的编解码器。
这是类似的无意义。RTP 只是一种载体协议。这就像问“什么是 HTTP 兼容的图像格式”。HTTP 不在乎。浏览器可以。
在 RTP 的情况下,这意味着 - RTP 不在乎。它可以传输任何数据。重要的是双方都知道相同的编解码器。因此,在您的情况下,这意味着: