【多媒体基础】封装协议之AMR

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012188065/article/details/86751634

AMR (Adaptive Multi-Rate) 是一种用于语音、演讲的音频压缩编码规范,同时也是一种封装amr帧的封装规范。
我们主要介绍其封装协议。

AMR主要分为两种, AMR-WB (宽带AMR, AMR Wideband) 和 AMR-NB(窄带 AMR, AMR Narrowband)。
二者主要的区分在于采样率不同,AMR-WB的采样率是 16kHz, AMR-NB的采样率是8kHz,
二者的通道数均为1,即单通道,

AMR封装协议很简单主要由 AMR文件头 + AMR数据帧组成。即
在这里插入图片描述

AMR-WB的文件头为 “#!AMR-WB\n”, 之后跟一帧帧的有效AMR帧数据。
AMR-NB的文件头为 “#!AMR\n”, 之后跟一帧帧的有效AMR帧数据。

文件头是区分AMR-WB和 AMR-NB的唯一标示,
当我们解析AMR文件时,
如果开头是 “#!AMR-WB\n”,表示此文件是宽带AMR,采样率 16kHz, 通道数为1,即
在这里插入图片描述

如果开头是 “#!AMR\n”,表示此文件是窄带AMR,采样率 8kHz, 通道数为1,即在这里插入图片描述
查看某一AMR-NB, 结果如下
在这里插入图片描述
在这里插入图片描述

综上,amr的封装协议很简单,即 头 + 内容
如果我们解码amr文件,可以根据文件头来区分窄带还是宽带,并将采样率(16k 或 8k)和通道数(1)配置给解码器,并对数据稍作处理,一帧帧传递给解码器,不需要创建AMRExtractor即可。

如果我们编码amr文件, 直接根据窄带还是宽带,将文件头写入文件,之后再一帧帧写入编码器传过来的帧数据即可,不需要创建AMRWriter即可。

即对比如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u012188065/article/details/86751634