我在使用基于 Asterisk 的 ToIP 基础设施时遇到了问题。有时我的手机会收到“空”RTP(有效载荷完全由 5d 填充)。
我浏览了 RFC(3551、3389),但找不到/无法理解相关答案。
我发现两个网页存在与我相同的问题:
https://www.wireshark.org/lists/ethereal-users/200402/msg00142.html
http://www.giacomovacca.com/2013/05/the-sound-of-silence-encoded-with-g711.html
所以:
- 有人知道官方答案在哪里吗?
- 谁决定填充 0x55 或 0xd5 不会发出声音?
- 另外,谁可以向我解释为什么 0x55 或 0xd5 等于 0?
谢谢!
答案1
这来自 G.711 音频编解码器 PCM 程序。
G.711 定义了两种用于 PCM(脉冲编码调制)音频数据的对数编解码器:a-law 和 u-law。编解码器算法基于人耳的感知特性 - 弱信号被强信号掩盖。
压缩(从 u-law 中的 14 位样本和 a-law 中的 13 位样本)到 8 位后,除符号位外的最后 7 位被反转。未反转的位称为符号位位反转可增加传输系统中的位密度,有助于接收器中的定时和时钟恢复电路。
理想信道噪声使位在 u-law 中在 01111111 (0x7F) 和 11111111 (0xFF) 之间切换,在 a-law 中在 01010101 (0x55) 和 11010101 (0xD5) 之间切换。我们通常使用精确的 a-law 编码。
在编解码器规范中,负声音样本是 1 的补码,以对齐正数和负数的动态范围。同等大小的压缩负值和正值通过符号位区分。
您可以阅读带有 PCM 示例的更详细描述那里
您还可以阅读规格。