EasyDarwin开源音频解码项目EasyAudioDecoder:基于ffmpeg的安卓音频(AAC、G726)解码库(第一部分,ffmpeg-android的编译)
来源:互联网 发布:四川话发音软件 编辑:程序博客网 时间:2024/06/05 23:35
ffmpeg是一套开源的,完整的流媒体解决方案。基于它可以很轻松构建一些强大的应用程序。对于流媒体这个行业,ffmpeg就像圣经一样的存在。为了表达敬意,在这里把ffmpeg官网的一段简介搬过来,ffmpeg是:
A complete, cross-platform solution to record, convert and stream audio and video.
[ https://ffmpeg.org/ ]
我们这里要讲的是基于FFMPEG开发的一款易用的音频解码库,目前支持aac、g711u/a、g726三种格式,后续可以按需求支持更多的格式。该库的代码将在EasyDarwin平台上开源。
首先,安卓平台使用ffmpeg,需要交叉编译出安卓平台上的ffmpeg库,这个编译过程网上已经有许多前辈们贡献出来了,并且不少都得到了ffmpeg的引荐(https://trac.ffmpeg.org/wiki/CompilationGuide/Android),我便是从这里找到了编译方法。需要注意的是,有些编译是基于老版本的ffmpeg,不建议大家使用。我用的是第一个链接,Github上WritingMinds的项目:https://github.com/WritingMinds/ffmpeg-android,这个链接会直接从Github上获取ffmpeg最新的源码。
我们这里其实与WritingMinds的项目有所不同,我们需要的是音频解码,项目里的x264, libass, fontconfig等库我们都不需要(很遗憾的是用git clone的时候,会把这些子项目也获取下来。我觉得也可以不用git clone,手动下载作者的项目+ffmpeg就行。但是我没试^_^)。于是我们先要对原项目做一些修改:
- init_update_libs.sh:
将以“wget”打头的几行,注释掉,在每一行开头加上#即可注释。这样就不会下载这些第三方库了。文件内容最终更改为:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- ffmpeg_build.sh:
内容更改为:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
其中–disable-everything表示不使能一切不需要的组件,–enable-decder=aac和enable-decoder=adpcm_g726分别表示使能aac和g726解码库。关于使能和不使能的相关选项,可参考:http://stackoverflow.com/questions/24849129/compile-ffmpeg-without-most-codecs,将不需要的组件禁用了,可使我们编译过程加快,同时编译出来的库文件体积更小。经测试,加上–disable-everything后,libavcodec.a仅仅800多k,而不带这个选项,会达到14M。
- settings.sh:
可修改SUPPORTED_ARCHITECTURES,来指定支持的CPU架构。比如我为了方便,仅支持了armeabi-v7a的架构。
可修改ANDROID_API_VERSION来指定NDK的版本,这个在这里就不用改了。
可修改NDK_TOOLCHAIN_ABI_VERSION来更改toolchain的版本。现在最新的ndk-r10e已经是4.9了,因此更改为4.9。
该文件最终更改为:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
修改文笔,可以开始编译了,执行./android_build.sh。如果顺利的话,会生产build/armeabi-v7a目录,其中包含
- bin 可执行文件目录,我们这里用不到
- include 头文件路径,我们需要包含这里的.h来封装解码接口
- lib 静态库路径,我们需要链接这些静态库,来生产可调用的动态库
- share 该目录不知道有啥用,我们这里用不到
OK,ffmpeg Android编译成功!我们需要的文件已经生成了,下一节我们会讲述如何封装解码器接口。
- EasyDarwin开源音频解码项目EasyAudioDecoder:基于ffmpeg的安卓音频(AAC、G726)解码库(第一部分,ffmpeg-android的编译)
- EasyDarwin开源音频解码项目EasyAudioDecoder:EasyPlayer Android音频解码库(第二部分,封装解码器接口)
- EasyPlayer Android音频解码库(第一部分,ffmpeg-android的编译)
- ffmpeg的音频解码部分
- ffmpeg库解码海思G726库编码音频数据
- ffmpeg 解码音频的方法
- ffmpeg 解码音频的方法
- ffmpeg进行音频解码,QAudioOutput播放解码后的音频
- android AAC的音频硬解码
- FFmpeg 视频、音频编解码的例子
- ffmpeg--音频的解码和编码
- FFmpeg支持的音频编解码格式
- ffmpeg库音频解码示例
- ffmpeg库音频解码示例
- ffmpeg库音频解码示例
- ffmpeg库音频解码示例
- ffmpeg库音频解码示例
- ffmpeg库音频解码示例
- ASPOSE.WORD操作
- 算法:Same Tree
- Android开发-实现onItemClick失效的解决方案-AndroidStudio
- Xutils,根据网络图片URL,实现图片长按保存功能
- linux shell脚本的debug
- EasyDarwin开源音频解码项目EasyAudioDecoder:基于ffmpeg的安卓音频(AAC、G726)解码库(第一部分,ffmpeg-android的编译)
- UITableView中奇怪的问题真不少!
- web安全 应用程序错误威胁
- Intent中携带对象和List
- JAVA中堆和栈的区别
- ssh ssl tls set
- 断点续传
- 使用注解反射实现BaseDao(代替XML配置)
- tjut 1530