使用NDK(r20)编译FFmpeg

前两天在论坛上看到一个问题,大意是怎么在UBUNTU下使用NDK-r20编译FFmpeg。我第一反应是不该用r20,因为我在很早前用过没有gcc版本的NDK,发现有很多问题不能编译,就立马回复了个使用r12b来编译。回到家我细想了一下,如果我就是想要用r20的NDK编译最新的FFmpeg呢?不如我们花点时间来折腾下。

NDK不知道从什么版本彻底改革,使用了clang来编译,这还不是最关键的,在新的NDK里sysroot也改变了(关键是google在NDK根目录里建了一个sysroot–错误的sysroot),这就导致FFmpeg过不了cc检测。常见的报错都是没有crtbegin_so.o或者找不到系统库连接。

所以sysroot其实是罪魁祸首,如果我们使用正确的sysroot一切就好办了。我用了个取巧的方式来查看sysroot,在AS里建一个c++项目,故意写错一段代码就能看到grade的log里面明确标出了使用的sysroot($NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot)这才是我们需要的。

学会看log

很多同学遇到编译问题就只截图终端,其实真正的log在ffbuild/conf.log,这里面详细说明了错在什么地方。

正确的配置

12345678910111213141516171819202122232425262728293031323334353637
export NDK=/home/fgodt/Android/Sdk/ndk-bundleexport API=22export ARCH=aarch64export PLATFORM=aarch64export TARGET=$PLATFORM-linux-androidexport TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin#正确的sysrootexport SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysrootexport CPU=aarch64export PREFIX=/home/fgodt/FFmpeg/android/$CPUexport CFLAG="-D__ANDROID_API__=$API -Os -fPIC -DANDROID "\#######################################################aarch64 不需要 --cpu , 如果是其他cpu请添加下面这句#--cpu=$PLATFORM \######################################################./configure \--prefix=$PREFIX \--cc=$TOOLCHAIN/$TARGET$API-clang \--cxx=$TOOLCHAIN/$TARGET$API-clang++ \--ld=$TOOLCHAIN/$TARGET$API-clang \--target-os=android  \--arch=$ARCH \--cross-prefix=$TOOLCHAIN/$ARCH-linux-android- \--disable-asm \--enable-cross-compile \--disable-shared \--disable-doc \--enable-runtime-cpudetect \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-decoders \--disable-encoders \--disable-devices \--sysroot=$SYSROOT \--extra-cflags="$CFLAG" \--extra-ldflags=""

注意

这里的配置只是简单的验证了是否通过编译,你应该根据自己的需要裁减FFmpeg,如果需要硬件加速等功能也需要添加JNI配置和开启MediaCodec。

至于根目录下的sysroot有什么用我还没有细研究,总不能凭白无故多一个sysroot吧。

最后希望对还没编译过的同学有用

原文地址:https://www.cnblogs.com/fgodt/p/ffmpegforndk.html

时间: 2024-10-29 16:16:38

使用NDK(r20)编译FFmpeg的相关文章

ubuntu12.10+NDK r9 编译 ffmpeg 的一些参考资料

首先入门级的 编译宝典: https://trac.ffmpeg.org/wiki/CompilationGuide/Android http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/ 二进制文件+so库: https://github.com/cine-io/android-ffmpeg-with-rtmp 一个利用二进制可执行文件的例子: https://github.com/vanevery/Android-MJPEG-Video

[原]如何用Android NDK编译FFmpeg

\我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装.那么如何使用Android的NDK编译出来可以在Android下面可以使用的FFmpeg动态链接库呢?写下这篇文章就是学习如何裁剪并且编译出来可以使用的动态库. 一.获取FFmpeg源码: 首先在编译之前,得获取一份FFmpeg的源码,如果你没有git并且也不打算使用,你可以去FFmpeg官网http://ffmpeg.org/

一个小玩具:NDK编译FFmpeg的例子

FFmpeg NDK编译 和最简单的APK 准备 硬件: 一台电脑,实验在Lenovo T430上 一个Android设备,实验在 三星S3/A7 编译环境: Ubuntu 14.04 (ant\java等命令必须支持) 工具包: NDK: https://dl.google.com/android/ndk/android-ndk32-r10b-linux-x86_64.tar.bz2 SDK:https://dl.google.com/android/adt/adt-bundle-linux-

anroid ndk编译ffmpeg 引用librtmp libx264

Ffmpeg 无处不在,自然android系统少不了它,折腾了不少时间完成 ndk编译ffmpeg,生成so库中引用了外部库librtmp,libx264.条条大路通罗马, 也许还有别的更好的方法去完成它,我没有仔细研究.我使用的方法完全可以达到我的预期目的. 一.选择编译环境 可以选择windows下cygwin,也可以选择linux系统,我建议选择后者.花了很多时间在cygwin下编译,configure时总是提示链接需要的so文件找不到.无奈 之下转到linux环境下编译.我用的版本是ub

Android/NDK环境下FFmpeg及AAC,MP3,X264的编译

本篇介绍在Android/Ndk环境下FFmpeg的编译及使用, FFmpeg自带了H264.AAC.MP3的解码器,但却没有(或没有好的)相应的编码器.相应的编码器需要使用第三方库.推荐使用的第三方库为x264(H264编码) .FDK_AAC(AAC编码),lame(MP3编码). 在顺序上,应该先编译好第三方库,最后再编译FFmpeg库. [本书说明:本文作者:邵发,本文选自<FFmpeg视音频编程指南>.有关本书的详细信息请访问官网:http://www.afanihao.cn ] [

NDK编译FFMpeg[Linux]

最近在研究视频直播相关的技术,了解到了FFmpeg,就在网上查看如何将FFmpeg移植到Android中,查了几天,看的东西不少,就是没有一个可以完全移植成功的,最后通过产看各种资料,结合网上的资料,终于把FFmpeg给搞定了.在此记录一下. 整体构思: 在Centos7.5下搭建NDk编译环境,编译FFmpeg库,生成Android所需要的库文件,然后在Android中使用 准备工作: 1.在虚拟机中安装Centos系统 2.下载NDK linux 32 bithttp://dl.google

Linux下NDK编译FFMPEG包含neon参数

FFMPEG编译成Android库已经有很多案例了,编译优化neon的也很多,以下是我通过实践成功的案例,这里主要讲编译的配置文件,其他设置可结合Linux下使用NDK编译FFMPEG(libstagefright)进行配置. config_android.sh NDK=/opt/android/android-ndk-r9 PLATFORM=$NDK/platforms/android-14/arch-arm/ PREBUILT=$NDK/toolchains/arm-linux-androi

64位 CentOS NDK 编译 FFMPEG

Android NDK 是运行于Android 平台上的Native Development Kit 的缩写.Android 应用开发者可以通过NDK 调用C 或C++ 本地代码. NDK的作用: 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的. 便于移植,用C/C++写得库可以方便在其他的嵌入式平台上再次使用. 下面是NDK的安装配置过程. 环境:Ubuntu10.10(NDK只

Windows环境下使用cygwin ndk_r9c编译FFmpeg

 一.废话 最近学习,第一步就是编译.我们需要编译FFmpag,x264,fdk_aac,一步步来.先来讲一下FFmpeg,网上说的很多都是几百年前的,我亲测完美可用 联系我可以直接评论,也可以加我QQ:11635423  二.干货  我能力有限,但是我希望我写的东西能够让更多的人能够接受.我也是刚刚接触.做一个记录,也希望能够对其他人有好处. 几个概念理解一下:不理解也没关系.用了之后再说慢慢就理解了.主要是因为我们是windows 先是cygwin下的一些概念:        unix st