Ubuntu14.04编译Android FFmpeg详细教程
来源:互联网 发布:蜂巢网络与无人机战争 编辑:程序博客网 时间:2024/05/29 16:22
配置信息:
FFmpeg版本:ffmpeg-3.0.1
ubuntu版本:ubuntu kylin 14.04
Android NDK版本:android-ndk-r10b
一、配置编译环境和下载源码
a、安装Ubuntu14.04操作系统
b、sudo passwd root 配置root权限
c、sudo apt-get update 升级apt-get
d、sudo apt-get install git –y 安装git版本工具
e、sudo apt-get install bison gcc-multilib g++-multilib -y 安装bison,gcc,g++编译工具
f、mkdir /home/AndroidNDK 新建一个NDK目录
在https://developer.android.com/ndk/downloads/index.html#download网站上NDK下载下来,复制到AndroidNDK目录下解压。
g、sudo apt-get install vim –y 安装vim文本编辑器
h、Vim /home/主机名/.profile 配置ndk环境变量,在文件末尾加入:
export NDK_HOME=NDK所在位置export PATH=$NDK_HOME:$PATH
保存退出
i、source /home/主机名/.profile 使修改文件生效
j、Echo $NDK_HOME 如果输出环境变量值,则表示配置成功。
注:在FFmpeg官网下载FFmpeg源代码,复制到ndk的source目录下也可以使用git命令获取:git clone git://source.ffmpeg.org/ffmpeg.git /home/hadoop/AndroidNDK/android-ndk-r10b/sources/FFmpeg
二、编译FFmpeg
A、第一种编译脚本
(1)、首先,我们需要进入FFmpeg源代码中对configure文件进行修改,目的是为了不生成版本号,因为android平台识别不了!
将:
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'
修改为:
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'SLIB_INSTALL_LINKS='$(SLIBNAME)'
(2)、然后在FFmpeg源码目录下新建一个build_ffmpeg.sh脚本文件,将下面代码的复制进去。
#清除上次编译的东西make clean#配置NDK路径export NDK=/home/hadoop/AndroidNDK/android-ndk-r10b#配置工具链export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt#配置平台export PLATFORM=$NDK/platforms/android-8/arch-arm#配置编译好了之后的文件输出目录,$(pwd)当前目录下export PREFIX=$(pwd)/android/build_one(){ ./configure --target-os=linux --prefix=$PREFIX \--enable-cross-compile \--enable-runtime-cpudetect \--disable-asm \--arch=arm \--cc=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-gcc \--cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \--disable-stripping \--nm=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-nm \--sysroot=$PLATFORM \--enable-gpl --enable-shared --disable-static --enable-nonfree --enable-version3 --enable-small \--enable-zlib --disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-ffserver --disable-debug \--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a" }build_one#4线程编译make -j4make install
之后打开命令行终端,输入以下命令:
chmod a+x build_ffmpeg.sh./build_ffmpeg.sh
执行完必之后就会在你的当前android/lib目录下生成下列文件:
红色标记出来的文件是连接文件,可以删除掉。
B、第二种编译脚本
#清除上次编译的东西make clean#配置NDK路径export NDK=/home/hadoop/AndroidNDK/android-ndk-r10b#配置工具链export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt#配置平台export PLATFORM=$NDK/platforms/android-8/arch-arm#配置编译好了之后的文件输出目录,$(pwd)当前目录下export PREFIX=$(pwd)/android/build_one(){ ./configure --target-os=linux --prefix=$PREFIX \--enable-cross-compile \--enable-runtime-cpudetect \--disable-asm \--arch=arm \--cc=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-gcc \--cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \--disable-stripping \--nm=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-nm \--sysroot=$PLATFORM \--enable-gpl --enable-static --disable-shared --enable-nonfree --enable-version3 --enable-small \--enable-zlib --disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-ffserver --disable-debug \--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a" }build_one#4线程编译make -j4make install$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -L$PREFIX/lib -soname libffmpeg.so -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavfilter/libavfilter.a libswresample/libswresample.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a libpostproc/libpostproc.a libavdevice/libavdevice.a -lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker $PREBUILT/linux-x86_64/lib/gcc/arm-linux-androideabi/4.8/libgcc.a
这种脚本是将第一种方法中的各类so文件打包成了一个文件。并且也不需要修改configure文件中的配置,当然你改了也无妨,这种生成的文件是xxx.a文件,如下图:
在build_one()方法中倒数第三行,配置了–enable-static –disable-shared 与第一种不同的是将两个值进行了对调。当然你也可以说对两个值的修饰符进行了对调。
最后编译会生成一个libffmpeg.so的文件。
自此 ,我们就能够编译FFmpeg了!
- Ubuntu14.04编译Android FFmpeg详细教程
- Ubuntu14.04安装编译ffmpeg
- Ubuntu14.04安装编译ffmpeg
- 【Android源码】Ubuntu14.04编译Android2.2.1详细过程
- FFmpeg Notes - 1.Ubuntu14.04下编译安装FFmpeg+FFplayer
- ffmpeg学习---8.ubuntu14.04源码编译ffmpeg-2.1
- Mac OS下为Android Studio编译FFmpeg解码库的详细教程
- Mac OS下为Android Studio编译FFmpeg解码库的详细教程
- Ubuntu14.04+CUDA8.0+Anaconda2+Python2.7下编译Caffe(详细教程)
- Ubuntu14.04安装Theano详细教程
- ubuntu14.04 安装scala详细教程
- Ubuntu14.04安装Theano详细教程
- Ubuntu14.04安装Theano详细教程
- ubuntu14.04安装cuda7.5 详细教程
- Android Ubuntu下FFmpeg的编译教程
- ubuntu14.4下编译FFMPEG
- Ubuntu14.0下编译FFMpeg
- 基于Ubuntu交叉编译X264, FFmpeg Windows SDK详细教程
- c++实验3作业
- Ehcache(08)——可阻塞的Cache——BlockingCache
- C++虚析构函数的作用
- frameset
- 使用九宫格来调整图片
- Ubuntu14.04编译Android FFmpeg详细教程
- 面试题81:有序数组中绝对值最小的元素
- Ehcache(09)——缓存Web页面
- hdu5412 CRB and Queries (整体二分)
- c,c++语言中 i++ 与 ++i
- Android AsyncHttpClient 的简单用法
- Spring使用Cache、整合Ehcache
- STM32系列第31篇--MPU6050六轴传感器
- Qt 消息基础相关_03