按照https://en.wikipedia.org/wiki/G.729:
- 它的采样频率为 8kHz,因此每秒需要 8000 个样本:
采样频率 8 kHz/16 位(10 毫秒帧 80 个样本)
- 对于 10ms 帧,其固定帧大小为 80 位 => 每 ms / 每个样本 8 位
固定帧大小(10 毫秒帧为 10 字节(80 位))
但它只以 8kbps 的速度运行
固定比特率(8 kbit/s 10 ms 帧)
也许我的英语不太好,但每秒 8000 个样本,每个样本使用 8 位,怎么可能不是 8000*8 = 64000 位/秒 = 64kbps,而是 8kbps?我肯定错过了什么,我知道 G729 会大量压缩音频,但我不明白它是在哪一步做到这一点的。
我只能假设它以某种方式每秒有 8000 个样本的“输入”,但它以某种方式每 8 个样本“平均”这些样本,导致每秒只有 1000 个样本?还是它只是跳过了 8 个样本中的 7 个?如果是这样,为什么每秒要取 8000 个样本,而不是直接取 1000 个?这个“压缩”步骤究竟是如何工作的?
答案1
您的文章将压缩视为其长度是有保证的,我觉得这非常奇怪。我认为没有任何压缩算法可以保证压缩数据的长度(除非可以删除数据)。
文章 VoIP 编解码器 + 带宽 = 您的通话质量 确实有这样的文字:
G.729 将 64Kbps 压缩为仅 8Kbs,压缩率为 8:1,但在实践中您可以节省大约 3 到 4 倍的带宽。G.729 编解码器使用大约 24-30Kbps。
这确实似乎表明过长的压缩数据被限制在允许的大小范围内。
如果你想了解所使用的算法,你可以在文章中找到一些信息
G.729 系列低比特率编解码器 (VoIP)。
我不会在这里复制技术解释,因为它包含太多我不明白的术语。
我在这里仅复制了编码器的模式(至少这一部分我可以理解):