Android      Win下编译FFmpeg及AS中的编译使用   
文章目录  [隐藏]


www.cuiweiyou.com
www.gaohaiyan.com

本文参考:
http://www.roman10.net/2013/08/18/how-to-build-ffmpeg-with-ndk-r9/
http://blog.csdn.net/hejjunlin/article/details/52661331
http://blog.csdn.net/finewind/article/details/42214343
https://my.oschina.net/SunnyTime/blog/612612

一.安装MinGW

在windows下编译FFmpeg有MinGW、VS。这里用MinGW。
下载,https://sourceforge.net/projects/mingw/files/latest/download?source=files ,
安装到 D:\ProgramFiles\MinGW,
将Basic的项目全部右键 Mark,然后 Apply Changes 。

二.配置ffmpeg源码

下载源码,https://ffmpeg.org/download.html

使用winrar将这个bz2文件解压到本地,F:\space_android\sapce_ard\ffmpeg-3.3.1

1.修改configure文件

主要为了生成的so文件名符合习惯。

2.新建build_android.sh文件

注意第一行NDK路径,第二行平台选择,第三行工具集路径。
“--arch”和“cpu”的目标平台选择。

3.在mingw中编译

运行D:\ProgramFiles\MinGW\msys\1.0\msys.bat,启动一个类linux控制台,切换路径,注意和win的不同。

继续,输入 ./build_android.sh 回车执行

这个过程比较长,完成后在目录下生成一个“android”文件夹

三.AndroidStudio中的编译

以上得到的还只是ffmpeg自己定义的方法的封装,为了简便一般还需进一步封装为自己容易使用的方法。以下即将自己的方法封装到新的so包中。

1.资源引入与自定义方法声明

AS创建项目,为了简单示例,直接在Aty里配置jni。使用“native”关键字声明调用ffmpeg功能的方法,在静态代码块引入用到的so包,注意so文件带有“lib”前缀,而引入时不带。

最后一行的“my-ffmpeg-test”是我们自定义的一个so文件名,即native声明的方法封装到的目标包。以下的努力都是为了生成这个包。

2.生成h文件

在Terminal面板,进入main目录,执行:


-encoding UTF-8 防止编码错误
java\ 使用当前命令(javah)执行目录main下的java下的com.cuiweiyou.ffmpegtest.MainActivity作为生成h文件的源。

还是在main下,会生成一个jni目录,里面的h文件,文件名即java源文件点路径的规则改变。
app/src/main/jni/com_cuiweiyou_ffmpegtest_MainActivity.h
此时可以将之前生成的 F:\space_android\sapce_ard\ffmpeg-3.3.1\android\arm\ lib目录下的so文件放入,以及 include目录下的h文件。这里直接将include下的全部目录拷入。

3.实现c代码

使用h文件的文件名,创建一个c文件,并实现声明的方法。这里参考网络代码:

4.ndk配置

在gradle.properties文件下加入,防止ndk版本低错误(可选):

在local.properties配置ndk路径,可使用sdk默认内置的ndk(可选):

在app主module的build.gradle文件下加入:

5.生成Android.mk文件

菜单栏,Build,Rebuild Project。
从app/build/intermediates/ndk/debug/Android.mk,拷贝到app/src/main/jni/下,需要修改

此时的jni目录

6.ndk编译

如果将NDK配置在了环境变量,可以直接调用ndk-build.cmd,否则就使用全路径

在main里生成libs和obj两个目录,libs里就是我们需要的so文件了。

四.使用

到这里可以将新生成的app/src/main/libs/armeabi目录放入到app/libs里,系统默认加载使用;或者配置app/build.gradle文件

然后进行潇洒即可

-end

承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设