![关于AAC开源解码库的调研_第1页](http://file3.renrendoc.com/fileroot_temp3/2021-12/20/03292dde-a6ae-4237-b059-a78447cab2b3/03292dde-a6ae-4237-b059-a78447cab2b31.gif)
![关于AAC开源解码库的调研_第2页](http://file3.renrendoc.com/fileroot_temp3/2021-12/20/03292dde-a6ae-4237-b059-a78447cab2b3/03292dde-a6ae-4237-b059-a78447cab2b32.gif)
![关于AAC开源解码库的调研_第3页](http://file3.renrendoc.com/fileroot_temp3/2021-12/20/03292dde-a6ae-4237-b059-a78447cab2b3/03292dde-a6ae-4237-b059-a78447cab2b33.gif)
![关于AAC开源解码库的调研_第4页](http://file3.renrendoc.com/fileroot_temp3/2021-12/20/03292dde-a6ae-4237-b059-a78447cab2b3/03292dde-a6ae-4237-b059-a78447cab2b34.gif)
![关于AAC开源解码库的调研_第5页](http://file3.renrendoc.com/fileroot_temp3/2021-12/20/03292dde-a6ae-4237-b059-a78447cab2b3/03292dde-a6ae-4237-b059-a78447cab2b35.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、具体需求1. AAC的开源解码库有哪些?2. 各有什么优缺点?3. 如何应用集成到android播放器中?调研结论一. AAC概述在得出结论之前,先介绍结论中涉及到的关键点,如下:1 什么是AAC?AAC是高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术。2000年,MPEG-4标准出台,AAC重新集成了其它技术(PS,SBR),为区别于传统的MPEG-2 AAC,故含有SBR或PS特性的AAC又称为MPEG-4 AAC。作为一种高压缩比的音频压缩算法,AAC压缩比通常为18:1,也有数据说为20:1,远胜mp3;在音质方
2、面,由于采用多声道,和使用低复杂性的描述方式,使其比几乎所有的传统编码方式在同规格的情况下更胜一筹。AAC可以支持多达48个音轨,15个低频(LFE)音轨,5.1多声道支持,更高的采样率(最高可达96kHz,音频CD为44.1kHz)和更高的采样精度(支持8bit、16bit、24bit、32bit,音频CD为16bit)以及有多种语言的兼容能力,更高的解码效率,一般来说,AAC可以在对比MP3文件缩小30%的前提下提供更好的音质。2AAC规格简述AAC共有9种规格,以适应不同的场合的需要,如下列出:1) MPEG-2 AAC LC :低复杂度规格(Low Complexity)-比
3、较简单,没有增益控制,但提高了编码效率,在中等码率的编码效率以及音质方面,都能找到平衡点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 :可变采样率规格(Scaleabl
4、e Sample Rate)7) MPEG-4 AAC LTP :长时期预测规格(Long Term Predicition)8) MPEG-4 AAC LD :低延迟规格(Low Delay)9) MPEG-4 AAC HE :高效率规格(High Efficiency)-这种规格适合用于低码率编码,有Nero ACC 编码器支持。 AAC是新一代的音频有损压缩技术,它通过一些附加的编码技术(比如PS,SBR等),衍生出了LC-AAC,HE-AAC,HE-AACv2三种主要的编码,LC-AAC就是比较传统的AAC,相对而言,主要用于中高码率(
5、>=80Kbps),HE-AAC(相当于AAC+SBR)主要用于中低码(<=80Kbps),而新近推出的HE-AACv2(相当于AAC+SBR+PS)主要用于低码率(<=48Kbps),事实上大部分编码器设成<=48Kbps自动启用PS技术,而>48Kbps就不加PS,就相当于普通的HE-AAC。目前使用最多的是LC和HE(适合低码率)。流行的Nero AAC编码程序只支持LC,HE,HEv2这三种规格,编码后的AAC音频,规格显示都是LC。HE其实就是AAC(LC)+SBR技术,HEv2就是AAC(LC)+SBR+PS技术,可以用下图简单表示:图 1 AAC三种
6、主要规格 HE:“High Efficiency”(高效性)。HE-AAC v1(又称AACPlusV1,SBR),用容器的方法实现了AAC(LC)+SBR技术。SBR其实代表的是Spectral Band Replication(频段复制)。简要叙述一下,音乐的主要频谱集中在低频段,高频段幅度很小,但很重要,决定了音质。如果对整个频段编码,若是为了保护高频就会造成低频段编码过细以致文件巨大;若
7、是保存了低频的主要成分而失去高频成分就会丧失音质。SBR把频谱切割开来,低频单独编码保存主要成分,高频单独放大编码保存音质,“统筹兼顾”了,在减少文件大小的情况下还保存了音质,完美的化解这一矛盾。 HEv2:用容器的方法包含了HE-AAC v1和PS技术。PS指“parametric stereo”(参数立体声)。原来的立体声文件文件大小是一个声道的两倍。但是两个声道的声音存在某种相似性,根据香农信息熵编码定理,相关性应该被去掉才能减小文件大小。所以PS技术存储了一个声道的全部信息,然后,花很少的字节用参数描述另一个声道和它
8、不同的地方。3.编码器一览由于AAC格式家族比较庞大,要了解他,首先要清楚其各有不同的编码器,目前包括了商业的、免费的AAC格式音频编码器,其中几个主要的编码器如下:§ FhG:Fraunhofer IIS 研发的权威编码器,拥有很好的音质,可惜现在不对外开放了。§ Nero AAC:可能是目前比较流行的 AAC 编码器了,同时支持 LC-AAC / HE-AAC 规格,由Nero公司免费发布的 Nero AAC 编码器提供了品质最好的VBR LC-AAC格式,同时亦对HE-AAC规格保证了在低比特率下也有良好的表现。§ QuickTime /
9、 iTunes:Apple 公司的两款软件都提供了 AAC 编码功能,其编码技术来自"Dolby Laboratories"(简写为 Dolby Labs,杜比实验室)是目前音质最好的中比特率编码器,它编码的48kbps立体声音质比其他AAC编码器好20-25%,甚至64kbps的Dolby AAC音效可媲美128kbps的MP3。§ FAAC (Freeware Advanced Audio Coder):也是一种很好的命令行编码器,支持 LC/Main/LTP 规格,但音质相当不错,与一般商业用的编码器水平接近,而这个软件是免费的。
10、0;FAAC是属于自由软件。§ DivX AAC:2009年DivX开发出来的新AAC编码器,支持LC/HE/HEv2规格,拥有不错的音质。目前正在测试中。另外还有Psytel(已停止开发),Coding Technologies(已被杜比实验室收购),HHI/z,Plane(Compaact),Dolby AAC等AAC编码器,而其他如 Panasonic,Nokia,AT&T,NEC等公司也都有独家开发的编码器,在大家弄清楚这些AAC格式音频规格和编码器之后,我们就不难知道为什么同一款手机会支持看起来都是AAC格式音频的诸多文件格式了,比如Nokia 6230i就是既支持
11、AAC格式也支持M4A格式和MP4格式的机型,而这些音频文件格式其实都是属于AAC家族成员。二. AAC的开源解码库有哪些?AAC的开源解码库有很多,下面介绍几种比较比较通用的:1. FAAD2 decoderFAAC和FAAD2(仅LC)就是开源的AAC编解码器。CoreAAC Directshow filter,winamp插件和许多AAC解码器其实都是源于FAAD2,都具有解码HE-AAC和LC的能力。FAAC(Freeware Advanced Audio Coder)是一种包括AAC编码器FAAC和解码器FAAD2的软件项目,是一个开源的MPEG-4 和MPEG-2 AAC 编/解码
12、器,可以免费得用于各种平台。FAAD2是自由软件,FAAC内的一些代码作为“自由软件”并发表,但作为一个整体,只有拥有许可证才能发布它。FAAC/FAAD功能强大,直接支持到了EAAC+(AAC+或AAC+V2),没有任何与平台相关的库文件,默认平台是x86,在ARM,MIPS平台上编译只需很少的改动。1. FAAD( Freeware Advanced Audio)FAAD2( Freeware Advanced Audio)是包括SBR编码的免费解码器。可以解码mpeg - 4 和mpeg 2,支持mpeg - 4音频对象类型(LC, Main, LTP, LD, ER
13、, SBR , PS),也可以组合使用用以编码HE-AAC(AAC LC+SBR)和 HE-AACv2(AAC LC+SBR+PS)。 FAAD第一次发行于2000年,但是它不支持SBR、PS音频对象类型。FAAD2于2003-7-25发行,支持HE-AAC解码。有很多解码器都是基于FAAD开发的,如Fmod aac(基于faad2的Fmod的编/解码器插件)、LiveLink(用libfaad2解码AAC,C+为开发语言)、zfaad(faad的定点版本)、DirectShow-AAC-DecoderWrapper(微软公司提供的用FAAD1解码AAC)、AAC/MP4 DeliPlayer
14、 plugin、FFmpeg AMPE Plugin(基于faad的FFmpeg编/解码插件)等。4各有什么优缺点?FAAC:优点-是高频还原比NERO好,文件压缩出来比NERO小 缺点-压缩不是很稳定,有时候表现反而不如NERO,不过这两个相差不大,在低码率下,FAAC一般没有NERO好。NERO:优点-稳定,估计和固定码率的压缩方式有关系,压缩速度也快 缺点-高频会有掉头现象,不过耳朵听的话不明显,与FAAC差别就在这里最明显,低频的还原比FAAC好。综上所述这两天的研究结果就是:NERO压缩和FAAC压缩在音质上差别不大,至少用精密的算
15、法+多频谱分析出来结果两者在相差上也不过0.2% 个人建议:由于NERO是支持CBR的,FAAC只支持VBR动态压缩,相对而言VBR解压后体积较小但是音质相比CBR解压会差一点,如果机器空间2G左右的可以用NERO压缩,但是如果空间小了,就用FAAC吧。因为FAAC的VBR编码后压缩出来的体积是NERO的2/3,音质上也不会有损失。三. 如何应用集成到android播放器中?由于AAC的开源解码库主要有C和C+语言,而android播放器是由java语言开发的,那么如何在我们的Android应用程序中通过java语言调用这个开源解码库呢?Android发布初期,Google就表明其虚拟机Dal
16、vik支持JNI编程方式,也就是第三方应用且安全可以通过JNI调用字的C动态库。在2009年6月26日,Google Android 发布了NDK(Native Development kit),它支持开发者使用C/C+语言开发Android程序。虽然有了NDK,但还是不能只通过NDK来开发Android应用,因为NDK并没有提供各种系统时间的处理支持,也没有提供应用程序的周期维护。所以我们要开发应用程序还需要使用java,通过JNI来调用所实现的C动态库。JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Inter
17、face(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C+而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。JNI的作用如下图所示:图 2 JNI作用调用C/C+流程(即调用AAC开源解码库流程):1. 编写带有native声明的方法的java类 2. 使用javac命令编译所编写的java类 3. 使用javah ?jni java类名生成扩展名为h的头文件 4. 使用C/C+实现本地方法 5. 将C/C+编写的文件生成动态连接库 下图为实现流程图:图 3 JNI实现流程下图为android
18、中应用“faad”解码库的流程:图 4 android运用“faad”解码库流程下面的代码描述了如何使用封装AAC解码库:/ JavaVM去载入”faad”c语言函数库System.loadLibrary("faad");/ 检查解码库是否有需要的功能函数native long cap = NeAACDecGetCapabilities();/ 打开解码库native handler hAac = NeAACDecOpen();/ 得到配置文件native Configuration conf = NeAACDecGetCurrentConfiguration(hAac);
19、/如果需要修改一些配置文件信息,设置新的配置文件native NeAACDecSetConfiguration(hAac, conf);/初始化解码库char err = NeAACDecInit2(hAac, asc, asc_size, &samplerate, &channels);if (err != 0)/ 初始化失败,处理错误/ 循环知道解码完成do /将下一帧放在缓冲区/ 解码解码库中得帧samplebuffer = NeAACDecDecode(hAac, &hInfo, buffer,buffer_size);if (hInfo.error = 0)
20、&& (hInfo.samples > 0)/ 解码成功后动作/ else if (hInfo.error != 0) / 解码失败,处理错误/ while (循环条件);/ 关闭解码库NeAACDecClose(hAac);package cn.kuwo.cm.decoder;import android.content.res.Configuration;import android.os.Handler;public class AACDecoder implements Decoderprivate int handle = -1;private Configur
21、ation config;private char setConfig = ' 'private char initresult;/ JavaVM去载入”faad”c语言函数库static System.loadLibrary("faad2");/ 打开解码库private native int open(String file);Overridepublic int load(String file) / TODO Auto-generated method stubhandle = open(file);return handle;/ 得到配置文件NEA
22、ACAPI NeAACDecGetCurrentConfiguration(NeAACDecHandle hDecoder);private native Configuration getCurrentConfiguration(int handle);Overridepublic Configuration getCurrentConfiguration() / TODO Auto-generated method stubconfig = getCurrentConfiguration(handle);return config;/如果需要修改一些配置文件信息,设置新的配置文件priva
23、te native char setConfiguration(int handle, Configuration config);Overridepublic char setConfiguration(Configuration conf) / TODO Auto-generated method stubsetConfig = setConfiguration(handle, conf);return setConfig;/初始化解码库private native char init2(int handle, char buffer, long sizeOfDecoderSpecific
24、Info, long samplerate, char channels);Overridepublic char init2(char buffer, long sizeOfDecoderSpecificInfo,long samplerate, char channels) / TODO Auto-generated method stubinitresult = init2(handle, buffer, sizeOfDecoderSpecificInfo, samplerate, channels);return initresult;/ 关闭解码库private native void close(int handle);Overridepublic void release() / TODO Auto-generated method stubif (handle != -1) close(handle);handle = -1;/得到解码后出的帧private native
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电力用户培训合同(2篇)
- 电费合作协议书(2篇)
- 2024年高中物理第七章机械能守恒定律第四节重力势能训练含解析新人教版必修2
- 2024-2025学年五年级语文上册第二单元7金蝉脱壳教案设计苏教版
- 2024年高中政治第二单元第四课第二框认识运动把握规律演练含解析新人教版必修4
- 八年级地理上册 第三章 第三节 水资源说课稿 新人教版
- 精神科工作计划范本
- 神经内科护理工作计划
- 人教版九年级数学上册第二十一章一元二次方程《21.2解一元二次方程》第2课时听评课记录
- 幼儿园春季工作总结
- 《ISO 55013-2024 资产管理-数据资产管理指南》专业解读和应用指导材料(雷泽佳编制-2024B0)-121-240
- 血透机常见报警原因及处理课件
- 房地产行业房地产销售业绩考核方案
- 小儿腹泻课件
- 北京市通州区市级名校2025届高一数学第一学期期末考试试题含解析
- Unit2 Travelling Around Project北京之游学生作业教学设计 -2023-2024学年高中英语人教版必修第一册
- 工业机器人仿真软件:Epson RC+ Simulator:机器人基本操作:EpsonRC+Simulator界面介绍
- 项目三任务1:认识超声波雷达(课件)
- 起重机械生产单位质量安全总监-特种设备考试题库
- DZ∕T 0080-2010 煤炭地球物理测井规范(正式版)
- 小学生心理健康教育学情分析
评论
0/150
提交评论