• AAC的ADTS头解析


    1. ADTS(Audio Data Transport Stream)头之于AAC

    AAC音频文件的每一帧都由一个ADTS头和AAC ES(AAC音频数据)组成。

     
    AAC数据帧

    2. ADTS头分析

    ADTS头包含了AAC文件的采样率、通道数、帧数据长度等信息。ADTS头分为固定头信息和可变头信息两个部分,固定头信息在每个帧中的是一样的,可变头信息在各个帧中并不是固定值。ADTS头一般是7个字节((28+28)/ 8)长度,如果需要对数据进行CRC校验,则会有2个Byte的校验码,所以ADTS头的实际长度是7个字节或9个字节。

    2.1 固定头信息:adts_fixed_header()

    ADTS头的固定头信息在每个帧中都是一样的。

     
    adts_fixed_header
    • syncword:帧同步标识一个帧的开始,固定为0xFFF
    • ID:MPEG 标示符。0表示MPEG-4,1表示MPEG-2
    • layer:固定为'00'
    • protection_absent:标识是否进行误码校验。0表示有CRC校验,1表示没有CRC校验
    • profile:标识使用哪个级别的AAC。1: AAC Main 2:AAC LC (Low Complexity) 3:AAC SSR (Scalable Sample Rate) 4:AAC LTP (Long Term Prediction)
    • sampling_frequency_index:标识使用的采样率的下标
    • private_bit:私有位,编码时设置为0,解码时忽略
    • channel_configuration:标识声道数
    • original_copy:编码时设置为0,解码时忽略
    • home:编码时设置为0,解码时忽略
     
    sampling_frequency_index
     
    channel_configuration

    2.2 可变头信息:adts_variable_header()

     
    adts_variable_header.png
    • copyrighted_id_bit:编码时设置为0,解码时忽略
    • copyrighted_id_start:编码时设置为0,解码时忽略
    • aac_frame_length:ADTS帧长度包括ADTS长度和AAC声音数据长度的和。即 aac_frame_length = (protection_absent == 0 ? 9 : 7) + audio_data_length
    • adts_buffer_fullness:固定为0x7FF。表示是码率可变的码流
    • number_of_raw_data_blocks_in_frame:表示当前帧有number_of_raw_data_blocks_in_frame + 1 个原始帧(一个AAC原始帧包含一段时间内1024个采样及相关数据)。



    原文链接:https://www.jianshu.com/p/b5ca697535bd

  • 相关阅读:
    python 协程
    python 进程池的使用
    python 多进程数据交互及共享
    python 多进程
    技术博客与技术日记
    理解闭包
    jWriter一个基于jQuery的阅读写作网站的效果库
    ubuntu下phpmyadmin配置问题解决
    避免明文保存用户密码
    如何用css实现类似简书的纵向导航/竖排导航
  • 原文地址:https://www.cnblogs.com/yanwei-wang/p/12758570.html
Copyright © 2020-2023  润新知