如何在android中构建和使用ffmpeg
Posted
技术标签:
【中文标题】如何在android中构建和使用ffmpeg【英文标题】:How to build and use ffmpeg within android 【发布时间】:2014-04-08 14:34:10 【问题描述】:我正在对一个相当简单的相机应用程序进行原型设计,以使用 MediaRecorder 创建一个自定义相机活动进行测试,我想将录制视频的纵横比设置为 1x1。通过大量研究,我发现这只能通过使用像 FFMPEG 这样的库将视频的每一帧裁剪到我想要的大小来实现。
我已经阅读了许多关于将 FFMPEG 构建到 android 中的不同方法的教程和文章,但其中大多数要么已经过时并且使用 Android NDK 和 FFMPEG 的旧版本,要么在遵循更新时无法正常工作。我尝试关注流行的http://www.roman10.net/how-to-build-ffmpeg-for-android/ 和其他一些类似的,这些都导致有关丢失 pkg-config 文件的错误,因为 FFMPEG 通常意味着安装在 linux 或其他操作系统上。我在http://software.intel.com/en-us/android/blogs/2013/12/06/building-ffmpeg-for-android-on-x86 处使用make-standalone-toolchain.sh 文件找到了一些关于在android 中构建FFMPEG 的信息,并且无法就如何使用这种方法做出正面或反面。
这引出了我的问题:目前在 android 应用程序中构建和使用 FFMPEG 的最佳/经过验证的方法是什么?如果独立的工具链方法是要走的路,有没有比列出的更容易理解的材料?我什至愿意接受一个可靠的模板应用程序,准备好 FFMPEG 库(如果可能的话);不过,我更想知道如何将其构建到 android 中以供将来使用。
提前感谢您对此问题的任何意见或建议。
【问题讨论】:
你可以用这个,很容易实现。 github.com/WritingMinds/ffmpeg-android-java 【参考方案1】:这是我最喜欢的指南:http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/
如果您需要更多选择,可以看看这些,它们同样不错:
https://github.com/guardianproject/android-ffmpeg https://github.com/halfninja/android-ffmpeg-x264 https://vec.io/posts/how-to-build-ffmpeg-with-android-ndk编辑:我用更新的文章更新了第一个链接(它使用NDK r9
)。
【讨论】:
您好,感谢您在这里的建议。我以前看过其中一些链接,但似乎我没有深入研究最后一个链接,因为这可能是我正在寻找的。我一定会在测试后回来并标记对我有用的东西。谢谢!【参考方案2】:我已经成功构建了 ffmpeg 库,使用
https://code.google.com/p/dolphin-player/
你必须在 Ubuntu 上才能构建它。
【讨论】:
感谢您的建议。我应该有时间尽快看看这个,我可能会尝试以此构建一个模板项目。如果我没有成功将 ffmpeg 手动构建到 ndk 中并且这个项目解决了我的问题,我一定会将此标记为答案。再次感谢! 嗨,Alex,我尝试在 mac 和 Ubuntu 操作系统上构建 dolphinPlayer 项目并收到相同的错误:E/AndroidRuntime(13450):FATAL EXCEPTION: main 03-14 22:07:42.563: E/AndroidRuntime(13450): java.lang.UnsatisfiedLinkError: Couldn't load ffmpeg: findLibrary returned null
我刚刚导入了项目名称 'p'从上面的链接到 ADT 的 zip 中,并尝试将其作为应用程序运行。我错过了什么吗?一旦我可以让这个应用程序自行运行,那么我应该能够使用包含的 ffmpeg 库来制作一个空的 android 项目是吗?
您是否构建了本机部分(导致 libffmpeg.so 或类似的东西)?我相信它在“p”目录中,您使用 NDK 构建它
抱歉,久违了。我运行了编译 ffmpeg 库的 compile.sh。所以现在我已经克服了这个错误,还有其他本机库,应用程序状态下一个缺少的是 sdl 库。 System.loadLibrary("ffmpeg"); System.loadLibrary("sdl"); System.loadLibrary("sdl_ttf"); System.loadLibrary("sdl_image"); System.loadLibrary("iconv"); System.loadLibrary("universalchardet"); System.loadLibrary("yuv2rgb"); System.loadLibrary("application");
。这些是它试图加载的所有库。是否也需要为此运行脚本?
我刚刚将 ffmpeg.so 从构建中带到我的项目中并开始使用它。海豚播放器,我相信,是的,也需要其他库。我不记得构建 dolphin player 有任何问题,但它构建得很顺利。以上是关于如何在android中构建和使用ffmpeg的主要内容,如果未能解决你的问题,请参考以下文章