常见文件格式

AAC(Advanced Audio Coding)

高级音频编码,是一种非常常见音频编码格式,出现于1997年,基于 MPEG-2的音频编码技术。由Fraunhofer IIS、杜比实验室、AT&T、Sony(索尼)等公司共同开发,目的是取代MP3格式.2000年,MPEG-4标准出现后,AAC 重新集成了其特性,加入了SBR技术和PS技术,为了区别于传统的 MPEG-2 AAC 又称为 MPEG-4 AAC. 相关的规范标准分别是ISO/IEC 13818-7,ISO/IEC 14496-3作为一种高压缩比的音频压缩算法,AAC压缩比通常为18:1,也有数据说为20:1,远胜mp3;

在音质方面,由于采用多声道,和使用低复杂性的描述方式,使其比几乎所有的传统编码方式在同规格的情况下更胜一筹. AAC可以支持多达48个音轨,15个低频(LFE)音轨,5.1多声道支持,更高的采样率(最高可达96kHz,音频CD为44.1kHz)和更高的采样精度(支持8bit、16bit、24bit、32bit,音频CD为16bit)以及有多种语言的兼容能力,更高的解码效率,一般来说,AAC可以在对比MP3文件缩小30%的前提下提供更好的音质 AAC包含了如下9种规格

  1. MPEG-2 AAC LC 低复杂度规格(Low Complexity)

  2. MPEG-2 AAC Main 主规格

  3. MPEG-2 AAC SSR 可变采样率规格(Scaleable Sample Rate)

  4. MPEG-4 AAC LC 低复杂度规格(Low Complexity),现在的手机比较常见的 MP4 文件中的音频部份就包括了该规格音频文件

  5. MPEG-4 AAC Main 主规格

  6. MPEG-4 AAC SSR 可变采样率规格(Scaleable Sample Rate)

  7. MPEG-4 AAC LTP 长时期预测规格(Long Term Predicition)

  8. MPEG-4 AAC LD 低延迟规格(Low Delay)

  9. MPEG-4 AAC HE 高效率规格(High Efficiency)

AC-3(Digital Audio Compression Standard)、 Revision A (ATSC Doc. A/52A)

音频编码格式,传说中的杜比实验室的杰作,著名的有损数据压缩的多媒体储存格式。可以包括多达6个独立的声道。最知名的是5.1声道技术。在5.1声道技术中,5代表着5个基本声道,独立连接至五个不同的喇叭(20至20,000 Hz),分别是右前(RF),中(C),左前(LF),右后(RR),左后(LR);而1则代表1个低频声效,连接至低音辅助喇叭(20至120 Hz)每个AC-3 的音频帧都是以0x0B77为同步头。开源库 解码库 liba52。

ALAC(Apple Lossless Audio Codec)

苹果的无损音频压缩编码格式,ALAC与MP3的主要分别在于编码过程中,MP3会取消小部分高频及低频部分的音频数据,而ALAC则会如实记录,不会删除音频中任何细节数据。由于资 料无损,ALAC音频文件大小会比MP3大,通常每片音乐CD(约70至80分钟)经ALAC编码后,音频文件大小约300MB。

AMR(Adaptive Multi-Rate)自适应多速率音频压缩

音频编码格式 ,是一个使语音编码最优化的专利。AMR被标准语音编码 3GPP在1998年10月选用,现在广泛在GSM和UMTS中使用。它使用1-8个不同的位速编码。 之前的手机里有很多amr的音频文件,可分成:
1.AMR-NB
2.AMR-WB, Adaptive Multi-Rate - Wideband Speech Codec
3.AMR-WB+, Extended Adaptive Multi-Rate - Wideband Speech Codec

ATRAC(Adaptive Transform Acoustic Coding)

是Sony 公司开发的一种相对老的音频编码格式,又细分成ATRAC1、ATRAC2、ATRAC3、ATRAC3plus,这些都是独立的技术,后来Sony把这些技术统称为ATRAC。在rmvb的封装格式中也能看到这种音频编码格式。

APE

APE是Monkey's Audio提供的一种无损压缩格式,APE可以无损失高音质地压缩和还原。APE的压缩率相当高,并且音质保持得很好,获得了不少发烧用户的青睐.

DTS (Digital Theater Systems )

大名鼎鼎的DTS (数码影院系统)是由DTS公司开发,一种多通道的音频技术,低损,环绕立体声,被广泛的应用在DVD等高清片源上。同样也需要授权,与杜比公司是竞争对手。最常见的是DTS 5.1:保存5条音频通道的数据用于环绕立体声,分别是center, left-front, right-front, left-rear, and right-rear.除此之外DTS公司还开发了DTS 70 mm、DTS 70 ES、DTS NEO:6、DTS 96/24、DTS-HD Master Audio、DTS-HD High Resolution Audio、DTS Connect、DTS Surround Sensation等技术。由于版权比较严格,而且文档很难从网上找到。

FLAC (Free Lossless Audio Codec

是一款开源的无损压缩的音频编码格式,它不会破坏任何原有的音频资讯,所以可以还原音乐光碟音质。现在它已被很多软件及硬件音频产品所支持,FLAC计划首页http://flac.sourceforge.net/

MP3(MPEG-1 or MPEG-2 Audio Layer III)

MPEG-1 or MPEG-2 Audio Layer III经常被称作MP3,是目前最流行的音频编码格式,有损压缩,相关的规范标准在ISO/IEC 11172-3, ISO/IEC 13818-3它是在1991年,由位于德国埃尔朗根的研究组织Fraunhofer-Gesellschaft的一组工程师发明和标准化的,它设计用来大幅度地降低音频数据量,将音乐以1:10 甚至 1:12 的压缩率,压缩成容量较小的文件。
bit rates对MP3来说是可变的,原则是bit rates越高声音文件中包含的原始声音信息越多,这样回放时声音品质也越高。
bit rates来说MP3可以分为2种:
MP3-CBR:Constant Bit Rate 在MP3编码的早期,整个文件使用一个固定的位元率
MP3_VBR: Variable Bit Rate 可以让MP3文件的每一段甚至每一帧都可以有单独的bitrate,这样做的好处就是在保证音质的前提下最大程度的限制了文件的大小。这个方法类似于声音控制的磁带录音机不记录静止部分节省磁带消耗。

Ogg

Ogg是一个自由且开放标准的容器格式,由Xiph.Org 基金会所维护,“Ogg”意指一种文件格式,可以纳入各式各样自由和开放源代码的编解码器,包含音效、视频、文字(像字幕)与元数据的处理。
1.Ogg_Vorbis:这就是咱们常见的.ogg结尾的音频文件,Vorbis是一种有损音讯压缩格式,由Xiph.Org基金会所领导并开放源代码。Vorbis通常以Ogg作为容器格式,所以常合称为Ogg Vorbis。  

PCM (Pulse Code Modulated Audio)

目前计算机应用中,最高保真水平的音频编码格式。PCM约定俗成了无损编码,能做到最大程度的无限接近绝对保真。被广泛用于素材保存及音乐欣赏,CD、DVD以及我们常见的WAV文件中均有应用,优点是音质好,缺点是体积大。
做嵌入式音视频产品时,一般情况的音视频都是芯片负责解码。如果遇到版权问题,例如AC3 DTS,有些时候芯片厂商要求很严格,用户会采取软解的方法,软解也就是把AC3 DTS等音频解成PCM,然后在送给芯片。

RealAudio

网络中非常常见,在rmvb、rm封装格式中,或者是 .ra .ram音频文件,由RealNetworks发展的一种多媒体音频文件格式,目前已有很多版本:

  • lpcJ, 14_4: IS-54 VSELP (RealAudio 1)
  • 28_8: G.728 LD-CELP (RealAudio 2)
  • dnet: Dolby AC3 (RealAudio 3)
  • sipr: Sipro Lab Telecom ACELP-NET (RealAudio 4/5)
  • cook: G2/Cook Codec (RealAudio 6)
  • atrc: Sony ATRAC3 (RealAudio 8)
  • raac: MPEG-4 LC-AAC (RealAudio 9)
  • racp: MPEG-4 HE-AAC (RealAudio 10)
  • ralf: RealAudio Lossless Format (RealAudio 10)

WMA (Windows Media Audio)

是微软公司开发的一种数字音频压缩格式,WMA 7之后的WMA支持证书加密,未经许可(即未获得许可证书),即使是非法拷贝到本地,也是无法收听的。目前比较流行的是WMA 9:

  • WMA9, Windows Media 9 Audio Codec
  • WMA9_PRO, Windows Media 9 Professional Audio Codec
  • WMA9_LL, Windows Media 9 Lossless Audio Codec

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。

ADTS AAC
ADTS_headerAAC ESADTS_headerAAC ES
...
ADTS_headerAAC ES

2.ADTS内容及结构

ADTS 头中相对有用的信息 采样率、声道数、帧长度。想想也是,我要是解码器的话,你给我一堆得AAC音频ES流我也解不出来。每一个带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头的结构:

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


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值