前提
文章耽搁了两星期了,可能不少老铁已经忘了,上一篇文章的内容了,不妨回顾一下,之前的文章里面就简单的提及了FFmpeg的一些简单命令的用法,官方下载不同平台的静态库,可以直接执行binary 文件来编辑一些音视频文件。我上次只是说了视频画面合成的用法,通过vstack和hstack,来进行合成。这次呢 我将教大家,如何在自己的Android手机上进行视频画面拼接的方法 以及如何通过官方库编译出Android平台的so库及静态库。这次内容可能会很多,也涉及到了很多shell脚本语言的的东西。希望老铁们耐心看看,绝对会有帮助。
这个是之前的系列
这里教大家一些骚操作,
- 根本不需要通过JNI的方式来执行FFmpeg的方法,直接java语言就可以来玩FFmpeg,但是有些功能是有局限性的。(静态库)
- 把编译出的所有so库打包成一个so来玩,省事。(动态库)
准备
这边主要是为了大家下载版本号相同,根据脚本可以编译成功,不然每个版本里面可能要修改一些参数 我这里就按照我的环境和大家说一下把
- ubuntu ( Ubuntu 18.10 )
- FFmpeg 官方库(4.0.2) x264 官方库(最新就行)
- 这边已经上传到了github(编译脚本及编译库,脚本通用,但是不同平台库可能不同)
预热
我会把编译好的FFmpeg静态库传到github,大家可以直接拿来用。 github下载地址
App执行静态库脚本
在我们的app中如果说想执行二进制文件,必须放在我们的私有目录下,sdcard只是Android文件系统linker出来的一个文件夹,是没有权限执行二进制文件的,而我们App的私有目录是可以的。下面我会给出一下代码 仅供大家参考。
二进制的FFmpeg已经上传到了github ,如果有兴趣的同学可以下载下来,自己的App中跑起来,我们可以把这个文件放在assets文件夹下,然后App运行的时候把这个文件copy到App的私有目录下
boolean isFileCopied = FileUtils.copyBinaryFromAssetsToData(App.getInstance(),
cpuArchNameFromAssets + File.separator + FileUtils.ffmpegFileName,
FileUtils.ffmpegFileName);
// make file executable
if (isFileCopied) {
if (!ffmpegFile.canExecute()) {