跳到主要内容

4. Audio

  1. 音频

4.1 与编码无关的规则

由于抑制静音的能力是使用数据包传输语音的主要动机之一,RTP 头携带了序列号和时间戳,使接收方能够区分丢失的数据包与未传输数据的时段。不连续传输(静音抑制)MAY 与任何音频有效载荷格式一起使用。除非其他地方的信令对此作了限制,接收方 MUST 假定发送方可能抑制静音。(即使发送方不抑制静音,接收方也应准备好处理没有数据出现的时段,因为数据包可能丢失。)

某些有效载荷格式(见第 4.5.3 节和 4.5.6 节)定义了 “静音插入描述符(silence insertion descriptor)” 或 “舒适噪声(comfort noise)” 帧,用于指定在静音期间为近似源端背景噪声而可能生成的人工噪声的参数。对于其他有效载荷格式,RFC 3389 [9] 规定了一种通用的舒适噪声(CN)有效载荷格式。当 CN 有效载荷格式与另一有效载荷格式一起使用时,RTP 有效载荷类型字段中的不同取值用于区分舒适噪声数据包与所选有效载荷格式的数据包。

对于在静音期间不发送任何数据包或仅偶尔发送舒适噪声数据包的应用,一段语音突发(talkspurt,即一段静音期内未连续传输数据包之后的第一个数据包)的第一个数据包 SHOULD 通过将 RTP 数据头中的标记位置为 1 来标识。所有其他数据包中的标记位为 0。语音突发的开始 MAY 用于调整播放延迟,以反映变化的网络延迟。没有静音抑制功能的应用 MUST 将标记位设为 0。

用于生成 RTP 时间戳的 RTP 时钟速率与通道数和编码方式无关;它通常等于每秒的采样周期数。对于 N 通道编码,每个采样周期(例如 1/8,000 秒)生成 N 个样本。(这是标准术语,但有些令人困惑,因为每秒生成的样本总数是采样率乘以通道数。)

如果使用多个音频通道,通道从左至右编号,从 1 开始。在 RTP 音频数据包中,编号较低通道的信息位于编号较高通道的信息之前。

对于两个以上的通道,除非为特定编码或有效载荷格式规定了其他约定,否则 SHOULD 遵循 AIFF-C 音频交换格式 [3] 所用的约定,使用下列记法:

  l  left(左)
r right(右)
c center(中置)
S surround(环绕)
F front(前)
R rear(后)

channels description channel
1 2 3 4 5 6
_________________________________________________
2 stereo l r
3 l r c
4 l c r S
5 Fl Fr Fc Sl Sr
6 l lc c r rc S

注:RFC 1890 为四个音频通道的排序定义了两种约定。由于排序是由通道数量隐式指示的,这种做法存在歧义。在本修订版中,被描述为 “quadrophonic(四声道环绕)” 的排序已被删除,以消除歧义。此选择基于如下观察:四声道环绕的消费音频格式未能流行,而环绕声此后却流行起来。

属于同一采样时刻的所有通道的样本 MUST 位于同一个数据包内。不同通道样本的交错方式取决于编码方式。一般性指南见第 4.3 节和 4.4 节。

采样频率 SHOULD 取自如下集合:8,000、11,025、16,000、22,050、24,000、32,000、44,100 和 48,000 Hz。(较旧的 Apple Macintosh 计算机原生采样率为 22,254.54 Hz,可在 20 ms 帧中丢弃 4 个样本,以可接受的质量转换为 22,050 Hz。)然而,大多数音频编码是为更受限的采样频率集合定义的。接收方 SHOULD 准备好接受多通道音频,但 MAY 选择仅播放单个通道。

4.2 运行建议

下列建议为默认运行参数。应用 SHOULD 准备好处理其他取值。给出的范围旨在为应用编写者提供指导,使符合这些指南的一组应用能够在不作额外协商的情况下互操作。这些指南无意限制那些能够协商一组可互操作参数(例如通过会议控制协议)的应用的运行参数。

对于分组化音频,默认的分组化间隔 SHOULD 具有 20 ms 或一帧的时长,取两者中较长者,除非表 1(“ms/packet” 列)另有说明。分组化间隔决定了最小端到端延迟;较长的数据包带来较少的头开销但更高的延迟,并使丢包更明显。对于讲座等非交互式应用,或带宽严重受限的链路,MAY 使用更高的分组化延迟。接收方 SHOULD 接受表示 0 至 200 ms 音频数据的数据包。(对于基于帧的音频编码,接收方 SHOULD 接受包含帧数等于 200 ms 除以帧时长、向上取整的数据包。)此限制使接收方能够合理地为缓冲器定容。

4.3 基于采样的音频编码指南

在基于采样的编码中,每个音频样本由固定数量的位表示。在压缩音频数据内部,单个样本的代码 MAY 跨越八位组边界。一个 RTP 音频数据包 MAY 包含任意数量的音频样本,但须满足如下约束:每样本位数乘以每包样本数应为整数个八位组。分数编码每样本产生不到一个八位组。

音频数据包的时长由数据包中的样本数决定。

对于每样本产生一个或多个八位组的基于采样的编码,在同一采样时刻从不同的通道采得的样本 SHOULD 被打包进连续的八位组中。例如,对于双通道编码,八位组序列为(左通道,第一样本)、(右通道,第一样本)、(左通道,第二样本)、(右通道,第二样本),……。对于多八位组编码,八位组 SHOULD 以网络字节序(即最高有效八位组在前)传输。

产生每样本不到一个八位组的基于采样编码的打包方式为编码所特有。

RTP 时间戳反映数据包中第一个样本被采样到的时刻,即数据包中最旧的信息。

4.4 基于帧的音频编码指南

基于帧的编码将一个固定长度的音频块编码为另一块压缩数据,通常也为固定长度。对于基于帧的编码,发送方 MAY 选择将若干这样的帧合并到单个 RTP 数据包中。如果所有帧长度相同,接收方可以通过将 RTP 有效载荷长度除以作为编码一部分定义的音频帧大小,得知一个 RTP 数据包中包含的帧数。当承载不同大小的帧时,除非各帧大小互质,否则此方法无效。若非互质,帧 MUST 指出自身大小。

对于基于帧的编解码器,通道顺序针对整个块定义。也就是说,对于双通道音频,左、右样本 SHOULD 独立编码,左通道的编码帧位于右通道编码帧之前。

所有面向帧的音频编解码器 SHOULD 能够在单个数据包内编码和解码多个连续帧。由于面向帧的编解码器其帧大小是给定的,无需为相同编码使用不同的每包帧数而另行指定名称。

RTP 数据包 SHALL 包含整数个帧,帧按照其新旧程度插入数据包,使得最旧的帧(最先播放)紧接在 RTP 数据包头之后。RTP 时间戳反映第一个帧中第一个样本被采样到的时刻,即数据包中最旧的信息。

4.5 音频编码

name of sampling default encoding sample/frame bits/sample rate ms/frame ms/packet


DVI4 sample 4 var. 20 G722 sample 8 16,000 20 G723 frame N/A 8,000 30 30 G726-40 sample 5 8,000 20 G726-32 sample 4 8,000 20 G726-24 sample 3 8,000 20 G726-16 sample 2 8,000 20 G728 frame N/A 8,000 2.5 20 G729 frame N/A 8,000 10 20 G729D frame N/A 8,000 10 20 G729E frame N/A 8,000 10 20 GSM frame N/A 8,000 20 20 GSM-EFR frame N/A 8,000 20 20 L8 sample 8 var. 20 L16 sample 16 var. 20 LPC frame N/A 8,000 20 20 MPA frame N/A var. var. PCMA sample 8 var. 20 PCMU sample 8 var. 20 QCELP frame N/A 8,000 20 20 VDVI sample var. var. 20

Table 1: Properties of Audio Encodings (N/A: not applicable; var.: variable)

本文档所描述的音频编码特性如表 1 所示;它们按表 4 中的有效载荷类型顺序列出。虽然大多数音频编解码器仅针对固定采样率规定,但某些基于采样的算法(在表 1 的采样率列中以 “var.” 表示)MAY 与不同采样率配合使用,从而产生不同的编码比特率。当使用的采样率不同于定义静态有效载荷类型所用的采样率时,MUST 使用超出本备忘录取范围的非 RTP 手段来定义动态有效载荷类型,并且 MUST 指出所选的 RTP 时间戳时钟速率,该速率通常对于音频与采样率相同。

4.5.1 DVI4

DVI4 采用由交互式多媒体协会(IMA)规定为 “IMA ADPCM 波形类型(IMA ADPCM wave type)” 的自适应差分脉冲编码调制(ADPCM)编码方案。然而,此处定义为 DVI4 的编码在三个方面不同于 IMA 规范:

o RTP DVI4 头包含预测值,而非 IMA ADPCM 块头中所含的第一个样本值。

o IMA ADPCM 块包含奇数个样本,因为块的首个样本仅包含在头中(未压缩),其后为偶数个压缩样本。DVI4 仅有偶数个压缩样本,使用头中的 predict 字来解码第一个样本。

o 对于 DVI4,4 位样本以第一个样本位于四个最高有效位、第二个样本位于四个最低有效位的方式打包。在 IMA ADPCM 编解码器中,样本以相反顺序打包。

每个数据包包含一个单独的 DVI 块。本配置文件仅定义每样本 4 位版本,而 IMA 还规定了每样本 3 位编码。

每个通道的 “头” 字具有以下结构:

  int16  predict;  /* predicted value of first sample
from the previous block (L16 format) */
u_int8 index; /* current index into stepsize table */
u_int8 reserved; /* set to zero by sender, ignored by receiver */

头之后的每个八位组包含两个 4 位样本,因此每包样本数 MUST 为偶数,因为没有办法指示最后一个八位组未填满的部分。

多通道样本的打包留待进一步研究。

IMA ADPCM 算法在文档 IMA Recommended Practices for Enhancing Digital Audio Compatibility in Multimedia Systems(版本 3.0)中作了描述。然而,交互式多媒体协会于 1997 年停止运营。该文档的存档副本以及 RTP DVI4 编码的软件实现的获取方式列于第 13 节。

4.5.2 G722

G722 在 ITU-T 建议 G.722 “64 kbit/s 内的 7 kHz 音频编码” 中作了规定。G.722 编码器产生一个八位组流,每个八位组 SHALL 在 RTP 数据包中按八位组对齐。G.722 八位组中传输的第一位(即高频子带样本的最高有效位)SHALL 对应于 RTP 数据包中该八位组的最高有效位。

尽管 G.722 音频的实际采样率为 16,000 Hz,但 G722 有效载荷格式的 RTP 时钟速率为 8,000 Hz,因为该值在 RFC 1890 中被错误地指定,且必须保持不变以保持向后兼容性。八位组速率或样本对速率为 8,000 Hz。

4.5.3 G723

G723 在 ITU 建议 G.723.1 “以 5.3 和 6.3 kbit/s 传输的多媒体通信双速率语音编码器” 中作了规定。G.723.1 5.3/6.3 kbit/s 编解码器被 ITU-T 规定为 ITU-T H.324 GSTN 可视电话终端应用的强制性编解码器。该算法在 G.723.1 附件 B 中有浮点规范、在 G.723.1 附件 A 中有静音压缩算法,在 G.723.1 附件 C 中有用于无线应用的可伸缩信道编码方案。

本建议规定了一种可用于以极低比特率压缩多媒体服务中语音信号分量的编码表示。音频以 30 ms 帧编码,并因前向预测而额外产生 7.5 ms 延迟。一个 G.723.1 帧可以是三种大小之一:24 个八位组(6.3 kb/s 帧)、20 个八位组(5.3 kb/s 帧)或 4 个八位组。这 4 个八位组的帧称为 SID 帧(静音插入描述符),用于指定舒适噪声参数。对于 4、20 和 24 八位组帧如何混合没有限制。帧中第一个八位组的最低两位决定帧大小和编解码器类型:

     bits  content                      octets/frame
00 high-rate speech (6.3 kb/s) 24
01 low-rate speech (5.3 kb/s) 20
10 SID frame 4
11 reserved

可以在任意 30 ms 帧边界处在两种速率之间切换。两种速率(5.3 kb/s 和 6.3 kb/s)都是编码器和解码器的强制性组成部分。接收方 MUST 接受两种数据速率,并且 MUST 接受 SID 帧,除非已通过信令限制了这些能力。RFC 3555 [7] 中 G723 的 MIME 注册规定了 MAY 与 MIME 或 SDP 配合使用的参数,以限制为单一数据速率或限制 SID 帧的使用。该编码器经过优化,可在上述速率下以有限的复杂度表示接近长途质量的语音。

编码比特流打包进八位组的方式以及八位组的传输顺序在建议 G.723.1 中规定,与 G.723 C 代码参考实现所产生的相同。对于 6.3 kb/s 数据速率,其打包方式如下图所示,其中头(HDR)位始终为 “0 0”(如图 1 所示)以指示以 6.3 kb/s 运行,且 Z 位始终置零。图示以 “网络字节序”(也称大端序)显示位打包。每个 32 位字的位从 0 到 31 编号,最高有效位在左侧编号为 0。每个字的八位组(字节)最高有效八位组最先传输。每个数据字段的位按照编码的比特流表示顺序(最低有效位在前)编号。竖线表示字段片段之间的边界。

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LPC |HDR| LPC | LPC | ACL0 |LPC| | | | | | | | |0 0 0 0 0 0|0 0|1 1 1 1 0 0 0 0|2 2 1 1 1 1 1 1|0 0 0 0 0 0|2 2| |5 4 3 2 1 0| |3 2 1 0 9 8 7 6|1 0 9 8 7 6 5 4|5 4 3 2 1 0|3 2| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ACL2 |ACL|A| GAIN0 |ACL|ACL| GAIN0 | GAIN1 | | | 1 |C| | 3 | 2 | | | |0 0 0 0 0|0 0|0|0 0 0 0|0 0|0 0|1 1 0 0 0 0 0 0|0 0 0 0 0 0 0 0| |4 3 2 1 0|1 0|6|3 2 1 0|1 0|6 5|1 0 9 8 7 6 5 4|7 6 5 4 3 2 1 0| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | GAIN2 | GAIN1 | GAIN2 | GAIN3 | GRID | GAIN3 | | | | | | | | |0 0 0 0|1 1 0 0|1 1 0 0 0 0 0 0|0 0 0 0 0 0 0 0|0 0 0 0|1 1 0 0| |3 2 1 0|1 0 9 8|1 0 9 8 7 6 5 4|7 6 5 4 3 2 1 0|3 2 1 0|1 0 9 8| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | MSBPOS |Z|POS| MSBPOS | POS0 |POS| POS0 | | | | 0 | | | 1 | | |0 0 0 0 0 0 0|0|0 0|1 1 1 0 0 0|0 0 0 0 0 0 0 0|0 0|1 1 1 1 1 1| |6 5 4 3 2 1 0| |1 0|2 1 0 9 8 7|9 8 7 6 5 4 3 2|1 0|5 4 3 2 1 0| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | POS1 | POS2 | POS1 | POS2 | POS3 | POS2 | | | | | | | | |0 0 0 0 0 0 0 0|0 0 0 0|1 1 1 1|1 1 0 0 0 0 0 0|0 0 0 0|1 1 1 1| |9 8 7 6 5 4 3 2|3 2 1 0|3 2 1 0|1 0 9 8 7 6 5 4|3 2 1 0|5 4 3 2| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | POS3 | PSIG0 |POS|PSIG2| PSIG1 | PSIG3 |PSIG2| | | | 3 | | | | | |1 1 0 0 0 0 0 0|0 0 0 0 0 0|1 1|0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0| |1 0 9 8 7 6 5 4|5 4 3 2 1 0|3 2|2 1 0|4 3 2 1 0|4 3 2 1 0|5 4 3| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

              Figure 1: G.723 (6.3 kb/s) bit packing

对于 5.3 kb/s 数据速率,头(HDR)位始终为 “0 1”(如图 2 所示)以指示以 5.3 kb/s 运行。

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LPC |HDR| LPC | LPC | ACL0 |LPC| | | | | | | | |0 0 0 0 0 0|0 1|1 1 1 1 0 0 0 0|2 2 1 1 1 1 1 1|0 0 0 0 0 0|2 2| |5 4 3 2 1 0| |3 2 1 0 9 8 7 6|1 0 9 8 7 6 5 4|5 4 3 2 1 0|3 2| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ACL2 |ACL|A| GAIN0 |ACL|ACL| GAIN0 | GAIN1 | | | 1 |C| | 3 | 2 | | | |0 0 0 0 0|0 0|0|0 0 0 0|0 0|0 0|1 1 0 0 0 0 0 0|0 0 0 0 0 0 0 0| |4 3 2 1 0|1 0|6|3 2 1 0|1 0|6 5|1 0 9 8 7 6 5 4|7 6 5 4 3 2 1 0| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | GAIN2 | GAIN1 | GAIN2 | GAIN3 | GRID | GAIN3 | | | | | | | | |0 0 0 0|1 1 0 0|1 1 0 0 0 0 0 0|0 0 0 0 0 0 0 0|0 0 0 0|1 1 0 0| |3 2 1 0|1 0 9 8|1 0 9 8 7 6 5 4|7 6 5 4 3 2 1 0|4 3 2 1|1 0 9 8| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | POS0 | POS1 | POS0 | POS1 | POS2 | | | | | | | |0 0 0 0 0 0 0 0|0 0 0 0|1 1 0 0|1 1 0 0 0 0 0 0|0 0 0 0 0 0 0 0| |7 6 5 4 3 2 1 0|3 2 1 0|1 0 9 8|1 0 9 8 7 6 5 4|7 6 5 4 3 2 1 0| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | POS3 | POS2 | POS3 | PSIG1 | PSIG0 | PSIG3 | PSIG2 | | | | | | | | | |0 0 0 0|1 1 0 0|1 1 0 0 0 0 0 0|0 0 0 0|0 0 0 0|0 0 0 0|0 0 0 0| |3 2 1 0|1 0 9 8|1 0 9 8 7 6 5 4|3 2 1 0|3 2 1 0|3 2 1 0|3 2 1 0| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

              Figure 2: G.723 (5.3 kb/s) bit packing

G.723.1 SID(静音)帧(其头(HDR)位模式为 “1 0”)的打包方式如图 3 所示。

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LPC |HDR| LPC | LPC | GAIN |LPC| | | | | | | | |0 0 0 0 0 0|1 0|1 1 1 1 0 0 0 0|2 2 1 1 1 1 1 1|0 0 0 0 0 0|2 2| |5 4 3 2 1 0| |3 2 1 0 9 8 7 6|1 0 9 8 7 6 5 4|5 4 3 2 1 0|3 2| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

               Figure 3: G.723 SID mode bit packing

4.5.4 G726-40、G726-32、G726-24 和 G726-16

ITU-T 建议 G.726 规定了(其中)将单个 64 kbit/s 的 A 律或 μ 律 PCM 通道(以 8,000 样本/秒编码)转换为 40、32、24 或 16 kbit/s 通道、以及反向转换的推荐算法。该转换使用自适应差分脉冲编码调制(ADPCM)转码技术应用于 PCM 流。ADPCM 表示由一系列码字组成,这些码字与 PCM 流中的样本一一对应。G726 的 40、32、24 和 16 kbit/s 数据速率分别具有 5、4、3 和 2 位的码字。

16 和 24 kbit/s 编码不提供长途质量语音。它们设计用于过载的数字电路倍增设备(DCME)。ITU-T G.726 建议 16 和 24 kbit/s 编码应与较高数据速率编码交替使用,以提供介于每样本 3.5 至 3.7 位之间的平均样本大小。

这里的 G.726 编码记为 G726-40、G726-32、G726-24 和 G726-16。在 1990 年之前,G721 描述 32 kbit/s ADPCM 编码,G723 描述 40、32 和 16 kbit/s 编码。因此,G726-32 表示的算法与 RFC 1890 中的 G721 相同。

G726 码字流不包含有关正在使用的编码的信息,因此在打包码字序列内不允许在 G726 编码类型之间切换。应用 MUST 根据 RTP 有效载荷标识符确定打包码字的编码类型。

SHALL 不包含作为音频数据一部分的、特定于有效载荷的头信息。G726 码字流 MUST 按如下方式打包进八位组:第一个码字被放入第一个八位组,使码字的最低有效位与该八位组的最低有效位对齐,然后第二个码字被打包,使其最低有效位与八位组中最低有效未占用位重合。当一个完整码字无法放入一个八位组时,跨越八位组边界的位被放入下一个八位组的最低有效位中。打包 MUST 以一个完全填满的最后一个八位组结束。因此,对于 G726-40、G726-32、G726-24 和 G726-16,打包的码字数量将分别为 8、2、8 和 4 的倍数。下面给出 G726-32 码字的打包方案示例,其中位 7 是第一个八位组的最低有效位,位 A3 是第一个码字的最低有效位:

      0                   1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
|B B B B|A A A A|D D D D|C C C C| ...
|0 1 2 3|0 1 2 3|0 1 2 3|0 1 2 3|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

下面给出 G726-24 码字的打包方案示例,其中同样位 7 是第一个八位组的最低有效位,位 A2 是第一个码字的最低有效位:

      0                   1                   2
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
|C C|B B B|A A A|F|E E E|D D D|C|H H H|G G G|F F| ...
|1 2|0 1 2|0 1 2|2|0 1 2|0 1 2|0|0 1 2|0 1 2|0 1|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

注意,此处规定的 G726-16、-24、-32 和 -40 有效载荷格式中将样本打包进八位组的 “小端(little-endian)” 方向与 ITU-T 建议 X.420 一致,但与 ITU-T 建议 I.366.2 附件 E 中为 ATM AAL2 传输所规定的打包方式相反。第二组与 I.366.2 附件 E 打包方式相匹配、并由 MIME 子类型 AAL2-G726-16、-24、-32 和 -40 标识的 RTP 有效载荷格式将在单独的文档中规定。

4.5.5 G728

G728 在 ITU-T 建议 G.728 “使用低延迟码激励线性预测以 16 kbit/s 对语音编码” 中作了规定。

G.728 编码器将 5 个连续音频样本转换为一个 10 位码本索引,对于以每秒 8,000 样本采样的音频产生 16 kb/s 的比特率。这 5 个连续样本组成的组称为一个向量(vector)。4 个连续向量(标记为 V1 至 V4,其中 V1 由接收方最先播放)构成一个 G.728 帧。这 4 个向量(共 40 位)被打包进 5 个八位组,标记为 B1 至 B5。B1 SHALL 放在 RTP 数据包的最前面。

参考下图,位顺序的原则是 “保持位的显著性(maintenance of bit significance)”。来自较旧向量的位比来自较新向量的位更显著。帧的最高有效位(MSB)进入 B1 的 MSB,帧的最低有效位(LSB)进入 B5 的 LSB。

               1         2         3        3
0 0 0 0 9
++++++++++++++++++++++++++++++++++++++++
<---V1---><---V2---><---V3---><---V4---> vectors
<--B1--><--B2--><--B3--><--B4--><--B5--> octets
<------------- frame 1 ---------------->

具体而言,B1 包含 V1 的八个最高有效位,其中 V1 的 MSB 为 B1 的 MSB。B2 包含 V1 的两个最低有效位(其中较显著的一位在其 MSB)以及 V2 的六个最高有效位。B1 SHALL 放在 RTP 数据包最前,B5 最后。

4.5.6 G729

G729 在 ITU-T 建议 G.729 “使用共轭结构代数码激励线性预测(CS-ACELP)以 8 kbit/s 对语音编码” 中作了规定。该编解码器经过优化以表示高质量语音,其中 G.728 为低延迟、G.723.1 为低比特率。G.729 编码器以 10 ms 的语音帧(对应于 8000 样本/秒采样率下的 80 个样本)运作。生成的比特流比特率为 8 kbit/s。因此,每帧包含 80 位。

编码比特流打包进八位组的方式以及八位组的传输顺序在建议 G.729 中规定,与 G.729 C 代码参考实现所产生的相同。每个 80 位帧的位从 1 到 80 编号,最高有效位在左侧编号为 1。每个字的八位组(字节)最高有效八位组最先传输。每个数据字段的位按照编码的比特流表示顺序(最低有效位在前)编号。竖线表示字段片段之间的边界。

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |L0 | L1 | L2 | L3 | P1 | | | | | | | |0|0 0 0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0 0 0 0| | |6 5 4 3 2 1 0|4 3 2 1 0|4 3 2 1 0|7 6 5 4 3 2 1 0| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P1 | P2 | C1 | S1 | C2 | S2 | P1 | | | | | | | | | |0 0|0 0 0|0 0 0 0 0|0 0 0|0 0 0 0 0|0 0 0|0 0 0 0 0 0 0 0| |9 8|4 3 2 1 0|c c c c c|3 2 1 0|c c c c c|3 2 1 0|7 6 5 4 3 2 1 0| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | P2 | C3 | S3 | C4 | S4 | | | | | | | |0 0 0|0 0 0 0 0|0 0 0|0 0 0 0 0|0 0 0| |4 3 2 1 0|c c c c c|3 2 1 0|c c c c c|3 2 1 0| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

G.729 的附件 A 规定了 G.729 算法的低复杂度版本。附件 A 编码器产生的比特流与 G.729 编码器完全相同。

G.729 的附件 B 定义了一种静音压缩算法,与 G.729 或 G.729 附件 A 配合使用。检测到静音期时,编码器传输一个 2 八位组的 SID 帧(静音插入描述符),用于指定舒适噪声参数。对于 10 和 2 八位组帧如何混合没有限制。SID 帧部分由和码本索引、部分由静音压缩算法的参数组成。SID 帧的字段如下图所示。

0                   1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |L0 | L1 | L2 | L3 | GAIN | | | | | | | |0|0 0 0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0| | |6 5 4 3 2 1 0|4 3 2 1 0|4 3 2 1 0|4 3 2 1 0| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

对于 G.729 附件 B,信道编码的 VAD/DTX 生成包括传输 1/16 速率(800 bps)的帧,这些帧长度仅为 10 位(1.25 个八位组)。由于这些帧无法放入整数个八位组,此类帧的打包留待进一步研究。运行在本有效载荷格式下的接收方 MUST 接受 80 位语音帧和 16 位 SID 帧。接收方 MAY 丢弃(若有)10 位帧。

4.5.7 G729D 和 G729E

G.729 的附件 D 定义了该算法的较低比特率扩展(6.4 kb/s)。G.729 附件 D 编码器产生一个 64 位帧。

G.729 的附件 E 定义了该算法的较高比特率扩展(11.8 kb/s)。G.729 附件 E 编码器产生一个 118 位帧。

编码比特流打包进八位组的方式以及八位组的传输顺序在建议 G.729 中规定,与 G.729 C 代码参考实现所产生的相同。每个 64 位或 118 位帧的位从 1 到 n 编号,最高有效位在左侧编号为 1。每个字的八位组(字节)最高有效八位组最先传输。每个数据字段的位按照编码的比特流表示顺序(最低有效位在前)编号。

ITU-T 建议 G.729 附件 D 和 E 目前未规定如何处理语音活动检测(VAD)和不连续传输(DTX)。因此,它们 SHOULD NOT 用于本有效载荷格式。

4.5.8 GSM

GSM(Group Speciale Mobile)表示欧洲 GSM 06.10 全速率语音转码标准 ETS 300 961,它基于 13 kb/s 速率下的 RPE/LTP(残差脉冲激励/长时预测)编码 [11,12,13]。标准文本可从 ETSI(欧洲电信标准协会)网站 http://www.etsi.org 获取。

4.5.8.1 通用打包问题

GSM 标准规定了编解码器产生的比特流,但未规定这些位应如何打包传输。与本文档规定的其他音频编码有效载荷格式不同,GSM 有效载荷格式打包字节的方式不同于 GSM 06.10 C 参考实现所使用的标准表示。

标准 GSM 06.10 实现将一帧 GSM 的 260 位打包进 33 个八位组(在 16 位系统中为 16 个字),位占据每个字节/字的最低有效位。为了在 RTP 中传输这些位,260 位按 ETSI TS 101 318 [4] 定义为打包进 33 个八位组。后者实际上是 VoIP/VoFR/VoATM 的事实标准,并且与第 13 节引用的 GSM 实现所使用的 “Toast” 格式相同。

在 RTP 有效载荷格式中,一帧被打包进 33 个八位组(264 位),将最后一个八位组的 4 个空闲位用零填充。两帧被打包进 66 个八位组。字段映射如表 2 所示。

4.5.8.2 GSM 变量名与编号

GSM 音频编解码器的参数按照 GSM 06.10 标准以下列方式命名。

                         Table 2: GSM payload format

Field Field Name Bits Octet Bit


1 LARc[0] 6 1 0--5 2 LARc[1] 6 1, 2 6--7, 0--3 3 LARc[2] 5 2, 3 4--7, 0 4 LARc[3] 5 3 1--5 5 LARc[4] 4 3, 4 6--7, 0--1 6 LARc[5] 4 4 2--5 7 LARc[6] 3 4, 5 6--7, 0 8 LARc[7] 3 5 1--3 9 Nc[0] 7 5, 6 4--7, 0--2 10 bc[0] 2 6 3--4 11 Mc[0] 2 6 5--6 12 xmaxc[0] 6 6, 7 7, 0--4 13 xmc[0] 3 7 5--7 14 Nc[1] 7 8 0--6 15 bc[1] 2 8, 9 7, 0 16 Mc[1] 2 9 1--2 17 xmaxc[1] 6 9, 10 3--7, 0 18 xmc[1] 3 10 1--3 19 Nc[2] 7 10, 11 4--7, 0--2 20 bc[2] 2 11 3--4 21 Mc[2] 2 11 5--6 22 xmaxc[2] 6 11, 12 7, 0--4 23 xmc[2] 3 12 5--7 24 Nc[3] 7 13 0--6 25 bc[3] 2 13, 14 7, 0 26 Mc[3] 2 14 1--2 27 xmaxc[3] 6 14, 15 3--7, 0 28 xmc[3] 3 15 1--3

4.5.9 GSM-EFR

GSM-EFR 在 ETS 300 726(GSM 06.60)中作了规定。这是一种增强型全速率语音编解码器,具有与 GSM 编解码器相同的时钟速率(8000 Hz)和比特率(12.2 kb/s)。

4.5.10 L8

L8 表示线性音频数据样本,使用 8 位精度并带有 128 的偏移,即,最具负性的信号由值 0 表示,零信号由值 128 表示,最具正性的信号由值 255 表示。

4.5.11 L16

L16 表示(16 位)有符号线性音频数据样本。线性 L16 音频样本 SHOULD 以网络字节序(最高有效八位组在前)传输。

4.5.12 LPC

LPC 表示由 Xerox PARC 的 Ron Frederick 贡献的一种实验性线性预测编码,它基于 Steve Casner 在 ISI 最初编写的实现。编码器和解码器的源代码可按第 13 节所列方式获取。

4.5.13 MPA

MPA 表示使用 MPEG-1 或 MPEG-2 音频基本流。RTP 有效载荷格式如 RFC 2250 [14] 第 3 节所规定。

4.5.14 PCMA 和 PCMU

PCMA 和 PCMU 在 ITU-T 建议 G.711 中作了规定。音频数据在对数缩放后编码为每样本 8 位。PCMU 表示 μ 律缩放,PCMA 表示 A 律缩放。Jayant 和 Noll [15] 给出了详细描述。每个 G.711 八位组 SHALL 在 RTP 数据包中按八位组对齐。每个 G.711 八位组的符号位 SHALL 对应于 RTP 数据包中该八位组的最高有效位(即,假设 G.711 样本在主机上作为八位组处理,符号位应为主机机器格式所定义八位组的最高有效位)。G.711 的 56 kb/s 和 48 kb/s 模式不适用于 RTP,因为 PCMA 和 PCMU MUST 始终作为 8 位样本传输。

4.5.15 QCELP

Qualcomm 码激励线性预测(QCELP)音频编解码器在 TIA/EIA IS-733 “TR45:宽带扩频通信系统的高速率语音业务选项 17” 中作了规定。

QCELP 编解码器用于 TIA/EIA IS-95 CDMA 蜂窝电话系统标准。QCELP 编解码器可缩放到不同数据速率,可按帧选择。最大数据速率为 13 kbit/s。本有效载荷格式不定义单独的静音帧类型,但数据速率在静音期可降低至约 1 kbit/s。

RTP 有效载荷格式在 [16] 中作了规定。

4.5.16 RED

冗余音频有效载荷格式 “RED” 在 RFC 2198 [17] 中作了规定。它定义了一种在单个 RTP 流中传输音频数据包多个冗余副本的方法。

4.5.17 VDVI

VDVI 是 DVI4 的可变速率版本,可供动态分配使用。DVI4 样本被打包进八位组,但每样本位数可在数据包之间变化,并在数据包头中规定。对于 VDVI,RTP 头的负载类型字段是映射到 “VDVI” 的动态类型。

每个数据包包含一个单独的 DVI 块。每个通道的 “头” 字具有以下结构:

  int16  predict;  /* predicted value of first sample
from the previous block (L16 format) */
u_int8 index; /* current index into stepsize table */
u_int8 sample_size; /* number of bits per sample */

样本大小 MUST 为 3、4 或 5 之一。如果 sample_size 为 4,样本的打包方式与 DVI4 相同。如果 sample_size 为 3 或 5,样本被打包进数据包窗口当前八位组的下一个可用位,从 MSB 开始。当一个样本跨越八位组边界时,位被放入第一个八位组的 LSB 和第二个八位组的 MSB。下一个样本随后从第二个八位组的第一个可用 MSB 开始打包。此过程对整个数据包持续进行。