AAC ADTS解析

1.ADTS


ADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式。

一般的AAC解码器都需要把AAC的ES流打包成ADTS的格式,一般是在AAC ES流前添加7个字节的ADTS
header。也就是说你可以把ADTS这个头看作是AAC的frameheader。












ADTS AAC

ADTS_header AAC ES ADTS_header AAC ES

...

ADTS_header AAC ES

2.ADTS内容及结构


ADTS
头中相对有用的信息 采样率、声道数、帧长度。每一个带ADTS头信息的AAC流会清晰的告知解码器需要的这些信息。

一般情况下ADTS的头信息都是7个字节,分为2部分:

adts_fixed_header();

adts_variable_header();


 

syncword :同步头 总是0xFFF, all bits must be
1,代表着一个ADTS帧的开始

ID:MPEG Version: 0 for MPEG-4, 1 for MPEG-2

Layer:always: ‘00‘

profile:表示使用哪个级别的AAC,有些只支持AAC LC 。在MPEG-2 AAC中定义了3种:

sampling_frequency_index:表示使用的采样率下标,通过这个下标在 Sampling
Frequencies[ ]
数组中查找得知采样率的值。

There are 13 supported frequencies:

  • 0: 96000 Hz

  • 1: 88200 Hz

  • 2: 64000 Hz

  • 3: 48000 Hz

  • 4: 44100 Hz

  • 5: 32000 Hz

  • 6: 24000 Hz

  • 7: 22050 Hz

  • 8: 16000 Hz

  • 9: 12000 Hz

  • 10: 11025 Hz

  • 11: 8000 Hz

  • 12: 7350 Hz

  • 13: Reserved

  • 14: Reserved

  • 15: frequency is written explictly

channel_configuration: 表示声道数

  • 0: Defined in AOT Specifc Config

  • 1: 1 channel: front-center

  • 2: 2 channels: front-left, front-right

  • 3: 3 channels: front-center, front-left, front-right

  • 4: 4 channels: front-center, front-left, front-right, back-center

  • 5: 5 channels: front-center, front-left, front-right, back-left,
    back-right

  • 6: 6 channels: front-center, front-left, front-right, back-left,
    back-right, LFE-channel

  • 7: 8 channels: front-center, front-left, front-right, side-left,
    side-right, back-left, back-right, LFE-channel

  • 8-15: Reserved

frame_length : 一个ADTS帧的长度包括ADTS头和AAC原始流.

adts_buffer_fullness:0x7FF 说明是码率可变的码流

3.将AAC打包成ADTS格式

如果是通过嵌入式高清解码芯片做产品的话,一般情况的解码工作都是由硬件来完成的。所以大部分的工作是把AAC原始流打包成ADTS的格式,然后丢给硬件就行了。

通过对ADTS格式的了解,很容易就能把AAC打包成ADTS。我们只需得到封装格式里面关于音频采样率、声道数、元数据长度、aac格式类型等信息。然后在每个AAC原始流前面加上个ADTS头就OK了。

贴上ffmpeg中添加ADTS头的代码,就可以很清晰的了解ADTS头的结构:


 1  //写ADTS头代码
2
3 int ff_adts_write_frame_header(ADTSContext *ctx,
4 uint8_t *buf, int size, int pce_size)
5 {
6 PutBitContext pb;
7
8 init_put_bits(&pb, buf, ADTS_HEADER_SIZE);
9
10 /* adts_fixed_header */
11 put_bits(&pb, 12, 0xfff); /* syncword */
12 put_bits(&pb, 1, 0); /* ID */
13 put_bits(&pb, 2, 0); /* layer */
14 put_bits(&pb, 1, 1); /* protection_absent */
15 put_bits(&pb, 2, ctx->objecttype); /* profile_objecttype */
16 put_bits(&pb, 4, ctx->sample_rate_index);
17 put_bits(&pb, 1, 0); /* private_bit */
18 put_bits(&pb, 3, ctx->channel_conf); /* channel_configuration */
19 put_bits(&pb, 1, 0); /* original_copy */
20 put_bits(&pb, 1, 0); /* home */
21
22 /* adts_variable_header */
23 put_bits(&pb, 1, 0); /* copyright_identification_bit */
24 put_bits(&pb, 1, 0); /* copyright_identification_start */
25 put_bits(&pb, 13, ADTS_HEADER_SIZE + size + pce_size); /* aac_frame_length */
26 put_bits(&pb, 11, 0x7ff); /* adts_buffer_fullness */
27 put_bits(&pb, 2, 0); /* number_of_raw_data_blocks_in_frame */
28
29 flush_put_bits(&pb);
30
31 return 0;
32 }

AAC ADTS解析,布布扣,bubuko.com

时间: 2024-12-26 01:36:34

AAC ADTS解析的相关文章

转载:AAC文件解析及解码

转自:http://blog.csdn.net/wlsfling/article/details/5876016 http://www.cnblogs.com/gaozehua/archive/2012/05/03/2479960.html OUTLINE: * AAC概述 * AAC规格简述 * AAC特点 * AAC音频文件解析 --ADIF&ADTS格式 --ADIF&ADTS头信息 --ADIF&ADTS数据信息 --AAC文件处理流程 * AAC解码流程 --技术解析 *

AAC 文件解析及解码流程(音频术语aac he lc等及其功能性的描述)

OUTLINE: * AAC概述 * AAC规格简述 * AAC特点 * AAC音频文件解析 --ADIF&ADTS格式 --ADIF&ADTS头信息 --ADIF&ADTS数据信息 --AAC文件处理流程 * AAC解码流程 --技术解析 * 术语说明 一.AAC概述 AAC是高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术.由Fraunhofer IIS.Dolby Laboratories.AT&

(转)AAC ADTS格式分析

1,ADTS是个啥ADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式记得第一做demux的时候,把AAC音频的ES流从FLV封装格式中抽出来送给硬件解码器时,不能播,保存到本地用pc的播放器博时,我靠也不能播.但是崩溃了,后来通过查找资料才知道.一般的ACC解码器都需要把AAC的ES流打包成ADTS的格式,一般是在AAC ES流前添加7个字节的ADTS header.也就是说,你可以把ADTS这个头看作是AAC的frameheader. A

AAC ADTS流解析总结

这里列出Android里将aac编码器输出的音频帧加上ADTS头的代码: + int tmpFd; + tmpFd = ::open("/data/src.aac", O_WRONLY | O_APPEND ); + if ( tmpFd < 0 ) { +    LOGE("No dump decode file %s",strerror(errno)); + } + else + { +    unsigned char adts_hdr[7] = {0x

aac adts &amp; LATM封装码流分析

本文继续上一篇文章的内容,介绍一个音频码流处理程序.音频码流在视频播放器中的位置如下所示. 本文中的程序是一个AAC码流解析程序.该程序可以从AAC码流中分析得到它的基本单元ADTS frame,并且可以简单解析ADTS frame首部的字段.通过修改该程序可以实现不同的AAC码流处理功能. 原理 AAC原始码流(又称为"裸流")是由一个一个的ADTS frame组成的.他们的结构如下图所示. 其中每个ADTS frame之间通过syncword(同步字)进行分隔.同步字为0xFFF(

(转)【多媒体封装格式详解】--- AAC ADTS格式分析

 出自:http://blog.csdn.net/tx3344/article/details/7414543 http://www.it6655.com/2012/08/aac-adts-html 1.ADTS是个啥 ADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式. 记得第一次做demux的时候,把AAC音频的ES流从FLV封装格式中抽出来送给硬件解码器时,不能播;保存到本地用pc的播放器播时,我靠也不能播.当时崩溃了,后来通过查找资

AAC ADTS格式分析

http://blog.csdn.net/tx3344/article/details/7414543# 目录(?)[-] ADTS是个啥 ADTS内容及结构 将AAC打包成ADTS格式 1.ADTS是个啥 ADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式. 记得第一次做demux的时候,把AAC音频的ES流从FLV封装格式中抽出来送给硬件解码器时,不能播;保存到本地用pc的播放器播时,我靠也不能播. 当时崩溃了,后来通过查找资料才知道.

H.264 RTPpayload 格式------ H.264 视频 RTP 负载格式(包含AAC部分解析)

H.264 RTPpayload 格式------ H.264 视频 RTP 负载格式 1. 网络抽象层单元类型 (NALU) NALU 头由一个字节组成, 它的语法如下: +---------------+      |0|1|2|3|4|5|6|7|      +-+-+-+-+-+-+-+-+      |F|NRI|  Type   |      +---------------+ F: 1 个比特(禁止位).  forbidden_zero_bit. 在 H.264 规范中规定了这一位

【多媒体封装格式详解】--- AAC ADTS格式分析

1.ADTS是个啥 ADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式. 记得第一次做demux的时候,把AAC音频的ES流从FLV封装格式中抽出来送给硬件解码器时,不能播;保存到本地用pc的播放器播时,我靠也不能播.当时崩溃了,后来通过查找资料才知道.一般的AAC解码器都需要把AAC的ES流打包成ADTS的格式,一般是在AAC ES流前添加7个字节的ADTS header.也就是说你可以吧ADTS这个头看作是AAC的frameheader