2. FFmpeg 编译 for Android
2017-05-10 14:45
417 查看
白话:
由于自己工作中一直从事Android方面的开发,因此此文只介绍FFmpeg在Android平台的编译方法。Android开发从开发语言角度分,主要涉及到Java开发和C/C++开发。C/C++开发就是俗称的Android Native开发,通常Native开发的是一些so后缀名的lib库。Java上层开发的功能单元通过JNI与C/C++开发的Native层的lib库进行通信。由于FFmpeg主要是C语言开发,所以我们需要将FFmpeg源码编译成so的lib库,供JAVA层通过JNI调用Native层的这些so库中的方法/函数。
2.1 Android Native开发
Android开发分为Java层的开发和C/C++层的开发。如果仅仅是Java层的开发,我们仅需要Android的SDK来支撑JAVA层的开发就可以了。如果需要Native层开发,那么我们就需要Android的NDK来支撑我们C/C++层的开发。
NDK的下载:
Android NDK官网:https://developer.android.com/ndk/downloads/index.html(需要翻墙,但是可以通过一些网盘分享获取,请google或baidu)。
针对自己的开发平台选择不同的版本下载。本文以Ubuntu12.04 64位作为开发平台介绍如何编译。
目前可以下载的最新版本为:android-ndk-r14b-linux-x86_64.zip
解压后得到的目录为:android-ndk-r14b,目录结构为:
![](https://img-blog.csdn.net/20170510145138445?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcnVhbmtlNzc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2.2 使用NDK编译FFmpeg准备工作
下载android ndk,解压,我解压后的目录为:android-ndk-r14b。
将FFmpeg源码目录放入android-ndk-r14b目录中的sources目录下。
进入sources下的FFmpeg目录,新建android/arm和android/arm/tmp目录,android/arm/tmp主要存放编译过程的中间生成文件。当编译成功后,android/arm目录下会生成include目录和lib目录,分别存放头文件和生成的so库。
2.3 使用编译脚本编译
在FFmpeg目录下创建编译脚本build_android.sh:
运行脚本
由于自己工作中一直从事Android方面的开发,因此此文只介绍FFmpeg在Android平台的编译方法。Android开发从开发语言角度分,主要涉及到Java开发和C/C++开发。C/C++开发就是俗称的Android Native开发,通常Native开发的是一些so后缀名的lib库。Java上层开发的功能单元通过JNI与C/C++开发的Native层的lib库进行通信。由于FFmpeg主要是C语言开发,所以我们需要将FFmpeg源码编译成so的lib库,供JAVA层通过JNI调用Native层的这些so库中的方法/函数。
2.1 Android Native开发
Android开发分为Java层的开发和C/C++层的开发。如果仅仅是Java层的开发,我们仅需要Android的SDK来支撑JAVA层的开发就可以了。如果需要Native层开发,那么我们就需要Android的NDK来支撑我们C/C++层的开发。
NDK的下载:
Android NDK官网:https://developer.android.com/ndk/downloads/index.html(需要翻墙,但是可以通过一些网盘分享获取,请google或baidu)。
针对自己的开发平台选择不同的版本下载。本文以Ubuntu12.04 64位作为开发平台介绍如何编译。
目前可以下载的最新版本为:android-ndk-r14b-linux-x86_64.zip
解压后得到的目录为:android-ndk-r14b,目录结构为:
2.2 使用NDK编译FFmpeg准备工作
下载android ndk,解压,我解压后的目录为:android-ndk-r14b。
将FFmpeg源码目录放入android-ndk-r14b目录中的sources目录下。
进入sources下的FFmpeg目录,新建android/arm和android/arm/tmp目录,android/arm/tmp主要存放编译过程的中间生成文件。当编译成功后,android/arm目录下会生成include目录和lib目录,分别存放头文件和生成的so库。
2.3 使用编译脚本编译
在FFmpeg目录下创建编译脚本build_android.sh:
#!/bin/bash #配置编译中间文件的存储目录,此目录在2.2已经创建过 export TMPDIR=$(pwd)/android/arm/tmp #配置android ndk的目录路径。 NDK=$HOME/Android/android-ndk-r14b #sysroot 选项设定 gcc 在编译源码的时候,寻找头文件和库文件的根目录。 #配置sysroot目录路径,在platforms目录下选择自己需要的android版本, #我自己现在使用的是android 7对应的是API level 24因此选择android-24。 #因为我需要so运行在cpu的架构为arm因此选择arch-arm,此目录下主要包括 #编译时需要使用的标准库,比如libc库等。 SYSROOT=$NDK/platforms/android-24/arch-arm #配置交叉编译工具目录,此目录主要包括各种编译平台的编译工具,因为我使用的so库是在arm上 #运行,因此我选择了toolchains目录下最高版本的rm-linux-androideabi-4.9。 #交叉编译为在一个平台上去编译另一个平台上可以执行的本地代码,而我是在64位ubuntu12.04 #上编译可以跑在arm上的目标库。 TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 CPU=arm #配置编译完毕后,so库文件安装目录,此目录上几步中已配置。 PREFIX=$(pwd)/android/$CPU ADDI_CFLAGS="-marm" function build_one { ./configure \ --prefix=$PREFIX \ --enable-shared \ --disable-static \ --disable-doc \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-ffserver \ --disable-avdevice \ --disable-doc \ --disable-symver \ --enable-small \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --target-os=linux \ --arch=arm \ --enable-cross-compile \ --sysroot=$SYSROOT \ --extra-cflags="-Os -fpic $ADDI_CFLAGS" \ --extra-ldflags="$ADDI_LDFLAGS" \ $ADDITIONAL_CONFIGURE_FLAG make clean make make install } build_one
运行脚本
./build_android.sh
相关文章推荐
- FFmpeg 1.2 for Android 编译动态库
- FFmpeg for Android 编译方法 (Linux环境)
- Compile FFmpeg for Android(编译用于android的FFmpeg库)
- FFmpeg 1.2 for Android 编译动态库
- 在CentOS中编译FFmpeg for Android静态库(含fdk aac,x264)
- windows10下编译ffmpeg for android----编译成功
- FFmpeg3.2最新版编译Mediacodec For Android脚本
- 站在巨人的肩膀上--傻瓜式编译ffmpeg for android
- ffmpeg for Android编译出现的常见问题
- ffmpeg的编译大全(包括 ffmpeg for android)
- ffmpeg for android 独立ndk以及android项目下编译 --ubuntu
- 站在巨人的肩膀上--傻瓜式编译ffmpeg for android
- qt for android从编译ffmpeg x264 aac 到在qtcreator上使用
- FFmpeg之一编译ForAndroid
- Ubuntu环境编译FFmpeg3.2.2-for-android
- windows10下编译ffmpeg for android
- Linux 下编译 FFmpeg for Android
- ffmpeg 编译好的库文件和可执行程序----for android
- 站在巨人的肩膀上--傻瓜式编译ffmpeg for android
- ffmpeg for android stagefirght 硬件加速的编译方法