ADTS结构

 

最近在使用ffmpeg进行AAC编码时,发现输出的aac数据写文件后不能播放,原因是因为每帧AAC没有添加7字节的adts,其数据结构如下:

序号结构名称字段名称位数说明
1adts_fixed_header
固定头信息
syncword12帧同步标识一个帧的开始,固定为0xFFF
2id1MPEG 标示符。0表示MPEG-4,1表示MPEG-2
3layer2固定为00
4protection_absent1标识是否进行误码校验。0表示有CRC校验,1表示没有CRC校验
5profile2标识使用哪个级别的AAC。0: Main 1:LC (Low Complexity) 2:SSR (Scalable Sample Rate) 3:Reserved
6sampling_frequency_index4采样率的下标
0: 96000 1: 88200  2: 64000  3: 48000  4: 44100  5: 32000  6: 24000  7: 22050  8: 16000  9: 12000  10: 11025  11: 8000 12: 7350  13: Reserved  14: Reserved  15: frequency is written explictly
7private_bit1固定为0
8channel_configuration3声道数
9original_copy1固定为0
10home1固定为0
11adts_variable_header
可变头信息
copyrighted_id_bit1固定为0
12copyrighted_id_start1固定为0
13aac_frame_length13ADTS帧长度包括ADTS长度和AAC声音数据长度的和
14adts_buffer_fullness11固定为0x7FF。表示是码率可变的码流
15number_of_raw_data_blocks_in_frame2表示当前帧有number_of_raw_data_blocks_in_frame + 1 个原始帧(一个AAC原始帧包含一段时间内1024个采样及相关数据)。
### 回答1: ADT(抽象数据类型)是一种计算机科学中用于描述数据类型的数学模型,它可以通过定义一组操作来描述数据类型,并且不涉及具体的实现细节。在 Python 中,我们可以使用类来实现 ADT。 以下是一个 Python 中实现 ADT 文件的示例代码: ```python class AbstractDataType: def __init__(self): pass def operation1(self): pass def operation2(self, param1, param2): pass def operation3(self): pass ``` 在这个示例代码中,我们定义了一个名为 AbstractDataType 的类,并在其中定义了一些方法。这些方法可以视为 ADT 中定义的操作。在这个示例中,我们定义了三个操作:operation1、operation2 和 operation3。每个操作都可以包含零个或多个参数,并且可以返回一个值或不返回任何值。 在实际使用中,我们可以根据需要定义更多的操作,并且可以根据需要在操作中实现具体的数据处理逻辑。 ### 回答2: 在Python中编写ADTs(抽象数据类型)的文件,通常是通过使用类来实现。以下是一个示例: ```python class ADT: def __init__(self): pass def insert(self, item): pass def remove(self, item): pass def search(self, item): pass def is_empty(self): pass def size(self): pass ``` 在上面的示例中,我们定义了一个ADT(抽象数据类型)的基本结构,其中包含了常见的操作方法。每个方法都定义了一个占位符或者抛出一个`NotImplementedError`异常,需要在实际使用中根据具体的需求进行实现。 - `__init__(self)`:构造方法,可以在其中初始化类的属性。 - `insert(self, item)`:向ADT中插入一个元素。 - `remove(self, item)`:从ADT中删除一个元素。 - `search(self, item)`:在ADT中搜索指定的元素。 - `is_empty(self)`:检查ADT是否为空。 - `size(self)`:返回ADT中元素的数量。 在实际使用中,我们可以根据ADT的具体需求,编写每个方法的具体实现。这些方法可以根据不同的数据结构和算法进行优化,以满足特定的性能要求。此外,我们还可以添加其他需要的方法来扩展ADT的功能。 编写ADT文件有助于提供一个规范的接口,以便其他开发人员能够理解和使用ADT。同时,它也有助于提高代码的可读性和可维护性,因为每个方法的用途和行为都得到了明确的定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值