AAC及其封装格式

背景

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

这个需求的功能并不复杂,而难在对AAC的封装格式标准及编解码库的使用,需要有一个系统性的认识。

AAC标准光编码规格就有好几种,并且针对不同的场景衍生出的封装格式也有好几种。应用到流媒体,rfc也有几个。所以是细节特别多。很容易走错方向。

这里做个总结,这将是一系列文章,先介绍AAC封装标准,RTP封包标准,再讲解libfdk-aac的用法,及在RTP流媒体中应用时所需注意的细节。

简介

  1. AAC
    AAC是在MPEG-2和MPEG-4中定义的,是一系列编码规格的统称。
    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),如常见的h264+aac的mp4文件。
  • 流媒体(stream),如rtp 携带aac媒体流。
  1. 封装格式:

WAV格式是封装的PCM 音频码流(封装格式是记录码流中的信息,比如采样率,声道数等),那么对于的AAC也有封装格式,并且对不同的场景有不同的封装格式。包括:

  • ADIF(用于文件存储)
  • ADTS(流媒体或文件存储)
  • LOAS(流媒体)
  • LATM(流媒体)

ADIF和ADTS定义MPEG-2中,LOAS和LATM定义中MPEG-4中。

  1. RTP封包方式

针对流媒体应用场景,有三个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层。

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

在这里插入图片描述
LOAS封装的格式 = 同步信息+LATM

下图所示,LATM/LOAS的结构

在这里插入图片描述

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

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mo4776

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值