经过大量的研究,现在这是我发现的最新的Android编译库:
https://github.com/bravobit/FFmpeg-Android
FFmpeg release n4.0-39-gda39990
灵感来自其他许多关于Android实现的FFmpeg(主要是 guadianproject ),我找到了一个解决方案(也支持Lame)。
(跛脚和FFmpeg: https://github.com/intervigilium/liblame 和 http://bambuser.com/opensource )
打电话给FFmpeg:
new Thread(new Runnable() { @Override public void run() { Looper.prepare(); FfmpegController ffmpeg = null; try { ffmpeg = new FfmpegController(context); } catch (IOException ioe) { Log.e(DEBUG_TAG, "Error loading ffmpeg. " + ioe.getMessage()); } ShellDummy shell = new ShellDummy(); String mp3BitRate = "192"; try { ffmpeg.extractAudio(in, out, audio, mp3BitRate, shell); } catch (IOException e) { Log.e(DEBUG_TAG, "IOException running ffmpeg" + e.getMessage()); } catch (InterruptedException e) { Log.e(DEBUG_TAG, "InterruptedException running ffmpeg" + e.getMessage()); } Looper.loop(); } }).start();
并处理控制台输出:
private class ShellDummy implements ShellCallback { @Override public void shellOut(String shellLine) { if (someCondition) { doSomething(shellLine); } Utils.logger("d", shellLine, DEBUG_TAG); } @Override public void processComplete(int exitValue) { if (exitValue == 0) { // Audio job OK, do your stuff: // i.e. // write id3 tags, // calls the media scanner, // etc. } } @Override public void processNotStartedCheck(boolean started) { if (!started) { // Audio job error, as above. } } }
我做了一个小项目来使用Android NDK配置和构建X264和FFMPEG。缺少的主要是一个体面的JNI接口,使其可以通过Java访问,但这是容易的部分(相对)。当我开始使JNI接口适合我自己的用途时,我会推动它。
olvaffe的构建系统的好处是它不需要Android.mk文件来构建库,它只使用常规的makefile和工具链。这使得从FFMPEG或X264中获取新更改时停止工作的可能性大大降低。
https://github.com/halfninja/android-ffmpeg-x264
以下是我在使用ffmpeg在Android上工作时所采取的步骤:
make
使用Android创建包含ffmpeg功能的动态库 NDK 。关于如何使用NDK,有很多文档。基本上你需要编写一些C / C ++代码来将你需要的功能从ffmpeg导出到一个库中,java可以通过JNI进行交互。 NDK允许您轻松链接到您在步骤1中生成的静态库,只需向Android.mk添加与此类似的行: LOCAL_STATIC_LIBRARIES := libavcodec libavformat libavutil libc libz
LOCAL_STATIC_LIBRARIES := libavcodec libavformat libavutil libc libz
使用java源中的ffmpeg-wrapping动态库。关于JNI的文档很多,你应该没问题。
关于使用ffmpeg进行回放,有很多例子(ffmpeg二进制本身就是一个很好的例子), 这里 这是一个基础教程。最好的文档可以在标题中找到。
祝好运 :)
我发现最容易构建,易于使用的实现是由guardianproject团队制作的: https://github.com/guardianproject/android-ffmpeg
奇怪的是这个项目没有被提及: 来自Appunite的AndroidFFmpeg
它有非常详细的逐步说明,可以复制/粘贴到命令行,对于像我这样的懒人))
我有同样的问题,我发现这里的大部分答案都是过时的。 我最终在FFMPEG上编写了一个包装器,用一行代码从Android访问。
https://github.com/madhavanmalolan/ffmpegandroidlibrary
为了制作我的FFMPEG应用程序,我使用了这个项目( https://github.com/hiteshsondhi88/ffmpeg-android-java )所以,我没有编译任何东西。我认为这是在我们的Android应用程序中使用FFMPEG的简单方法。
更多信息 http://hiteshsondhi88.github.io/ffmpeg-android-java/