AMR-WB音频在RTP协议和文件存储中的格式
1. 什么是AMR-WB
自适应多速率宽带(AMR-WB)是一项专利宽带语音音频编码标准,该标准基于自适应多速率编码而开发。 与AMR-NB(NarrowBand)相比,AMR-NB的音频带宽通常为300-3400Hz。但是AMR-WB的带宽达到了50-7000 Hz。从而提高了语音质量。 AMR-WB由诺基亚和VoiceAge开发。并且在 2000 年 12 月,3GPP选择自适应多速率宽带语音编码 AMR-WB算法作为第三代移动通信(3G)系统使用的语音编解码算法。
2. 什么是RTP
RTP全名是Real-time Transport Protocol(实时传输协议)。它是IETF提出的一个标准,对应的RFC文档为RFC3550(RFC1889为其过期版本)。RFC3550不仅定义了RTP,而且定义了配套的相关协议RTCP(Real-time Transport Control Protocol,即实时传输控制协议)。RTP用来为IP网上的语音、图像、传真等多种需要实时传输的多媒体数据提供端到端的实时传输服务。RTP为Internet上端到端的实时传输提供时间信息和流同步,但并不保证服务质量,服务质量由RTCP来提供。
3. AMR-WB音频如何在RTP中存储
AMR-WB共有两种模式,分别为节省带宽模式和字节对齐模式。两种模式的包结构有所不同。
3.1. 节省带宽模式
3.1.1. 单通道单帧场景
CMR(codec mode request)占4bits,模式请求字段。CMR=15代表接收方不需要对数据进行编码保留原样即可。
The table of contents (ToC)占6bits,内容信息表。具体格式如下:
F为1代表此帧不是包中的最后一帧,后面还有其他帧。F为0代表此帧为最后一帧,单通道单帧场景下只有一个TOC,TOC中的F必定为0。
FT代表帧类型,根据RTP类型的不同,帧类型所对应的表也有所不同。上面的FT=4代表AMR-NB的帧类型为4,根据对应表为7.4kbits/s 。如果此包为20ms,那么可以计算7.4 * 1000 / 50 = 148,正好为SpeechData的长度。
Q代表此帧是否为好帧,1为好帧,0为坏帧。有时需要根据具体场景,决定是否需要保留坏帧。
3.1.2. 单通道多帧场景
此包为AMR-WB的单通道多帧数据包。CMR为1,要求接收方的编码器需要将编码模式更改为AMR-WB 8.85 kbps。
此包一共包括4帧。其中第一帧的TOC-FT=0,代表此帧为AMR-WB 6.60kbit/s。第二帧的TOC-FT=9,代表此帧为AMR-WB SID。第三帧的TOC-FT=15,代表此帧为No Data。第四帧的TOC-FT=1,代表此帧为AMR-WB 8.85kbit/s。前三帧的TOC-F均为1,最后一帧的TOC-F为0,代表第四帧为包内的最后一帧。四帧的Q值均为0,证明没有坏帧。
此包的Speech Data共有四帧四组,其中一组没有长度:
1. 第一组长度为 6.60 * 1000 / 50 = 132 bit。
2. 第二组的长度根据 3GPP TS 26.201 文档得知SID长度为40 bit。
3. 第三帧因为FT = 15,代表No Data。故为0。
4. 第四组长度为 8.85 * 1000 / 50 = 177 bit。
3.1. 字节对齐模式
字节对齐模式的整体格式与节省带宽相同,需要注意的是CMR、TOC、Speech Data各段长度需要按照字节对齐即可。此处举一个单通道多帧的例子:
可以看到CMR,TOC和Speech Data之后都有按照字节对齐。