AAC及其封装格式

走远了吗. 提交于 2020-01-13 02:27:31

背景

最近在媒体库中需要加AAC,要求能与华为的一个IP语音电话型号,通过AAC对通。

这个需求的功能并不复杂,而难在对于AAC的封装格式标准及对于AAC编解码库的使用,需要有一个系统性的认识。AAC标准光编码规格就有好几种,并且针对不同的场景衍生出的封装格式也有好几种。应用到流媒体,rfc也有几个。所以是细节特别多。很容易走错方向。这里做个总结,这将是一系列文章,先介绍AAC封装标准,RTP封包标准,再讲解libfdk-aac的用法,及在RTP流媒体中应用时所需注意的细节。

AAC

AAC是在MPEG-2和MPEG-4中定义的,是一系列编码规格的统称。

  1. AAC标准包括一系列编码规格,这里只列出常用的几种AAC-LC,AAC-LD,AAC-ELD,HE-AAC。你可以将它们之间的关系理解成H264中base,main,high profile的关系。AAC-LC定义在MPEG-2中。AAC-LD,AAC-ELD,HE-AAC定义在MPEG-4中

  2. 既然是一种音频编码格式,它有两大基本应用场景:媒体文件(storage),流媒体(stream)。比如经常见的h264+aac的map4文件,rtp 携带aac媒体流。WAV格式是封装的PCM 音频码流(封装格式是记录码流中的信息,比如采样率,声道数等),那么对于的AAC也有封装格式,并且对不同的场景有不同的封装格式。封装格式有:ADIF(用于文件存储),ADTS(流媒体或文件存储),LOAS(流媒体),LATM(流媒体)。ADIF和ADTS定义MPEG-2中,LOAS和LATM定义中MPEG-4中。

  3. 针对流媒体应用场景,有三个rfc文档: rfc3640,rfc3016,rfc6416(为rfc3016的升级版)定义了rtp封包方式

封装格式

其实针对流媒体的应用场景,不必关心具体的编码数据,主要是要了解封装格式。下面这张表将AAC的几种封装格式及应用场景罗列的比较清楚
在这里插入图片描述

封装格式中的几个基本字段(结构)的意义

  1. AOT

AAC标准定义了一系列规格,也定义一个标识它们的方式,就是AOT值(Audio Object Types),如下表:
在这里插入图片描述

上面列出了最见的AOT值,一定要注意这个值至关重要,它直接标识是哪一种AAC编码规格。就直接影响到封装格式的结构,因为不同的规格需要的参数不同。

  1. AudioSpecificConfig结构

对音频数据而言,通常是需要知道音频的一些信息,如采用率,声道,采样点的位数,一帧音频数据的长度。这些信息需要以一种方式记录,AudioSpecificConfig结构就是用作此。

AudioSpecificConfig是在MPEG-4中定义的。MPEG-2并没有用定义。所以ADIF和ADTS中没有。

下面列一个AudioSpecificConfig结构图

在这里插入图片描述

ADIF,ADTS,LATM/LOAS

  1. ADIF

音频数据交换格式,这种格式一般应用在媒体文件中,不能进行随机访问,不允许在文件中间开始进行解码。只有拿到整个文件时才能开始进行渲染播放。

  1. ADTS

音频数据传输流,应用在流媒体场景,允许解码端从任意地方解码。

以上两种格式是最常见的封装格式, 这篇文件介绍的很详细

  1. LATM和LOAS格式

即MPEG-4 Audio transport,LATM,LOAS分属这个机制的两层封装格式定义。一个叫复用层(LATM),一个叫同步层(LOAS)。

1.LATM
The multiplex layer (Low-overhead MPEG-4 Audio Transport Multiplex: LATM) manages multiplexing of
several MPEG-4 Audio payloads and their AudioSpecificConfig() elements

2.LOAS
The synchronization layer specifies a
self-synchronized syntax of the MPEG-4 Audio transport stream which is called Low Overhead Audio Stream
(LOAS).

两个分层封装的使用场景

The interface format to a transmission layer depends on the conditions of the underlying transmission
layer as follows:
• LOAS shall be used for the transmission over channels where no frame synchronization is available.
• LOAS may be used for the transmission over channels with fixed frame synchronization.
• A multiplexed element (AudioMuxElement() / EPMuxElement()) without synchronization shall be used only for
transmission channels where

如上段话的意思,LOAS可带可不带,取决于下层的transmission层。

下图所示清晰的描述了两者的关系

在这里插入图片描述

下图所示,LATM/LOAS的结构

在这里插入图片描述

LATM/LOAS更适宜于流媒体传输场景,既然LATM叫复用层,那么它是可以携带多个audio frame。相比ADTS的方式更加简洁。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!