您的位置:首页 > 移动开发 > Android开发

Android平台下的FFmpeg的学习之路------(一)编译

2018-01-17 16:28 555 查看
此系列文章将记录我学习FFmpeg的过程。

在网上也有很多编译FFmpeg(Android平台)的教程,但是,有些教程也说的不是很详细,让我刚入门FFmpeg的时候走了很多弯路。所以,我决定写这篇文章,让初学者能够少走一些弯路。

PS:我是在Windows下安装虚拟机进行编译,编译为单库版,也就是只有一个libffmpeg.so一个文件。

这里用到的环境是:VMware + Ubuntu kylin 16.04 LTS + android-ndk-r14b-linux-x86_64

首先安装VMware虚拟机,并且创建一台虚拟机,然后安装Ubuntu系统,这里我不多说,请自觉百度。

安装完Ubuntu后是这个样子



接着下载 FFmpeg源代码 和 android-ndk-r14b-linux-x86_64工具。

FFmpeg : http://ffmpeg.org/

NDK : https://developer.android.google.cn/ndk/downloads/index.html
首先下载FFmpeg:

FFmpeg 当前最新是 3.4.1的版本,我们还是选择旧一点的版本 3.0.10的版本







接着下载NDK:



这就是我们刚刚下载的文件:





接着我们把这2个文件复制(拖拽)到Ubuntu,



接着双击打开,接着点击鼠标右键,再点击Extract... 进行解压



而我是解压到如下2个目录





重点来了!

此时开始用命令行了



然后cd到解压后的ffmpeg的目录。

因为编译会生成许多文件,所以我们这里给ffmpeg-3.0.10设置777权限:

chmod -R 777 ffmpeg-3.0.10



接着cd到ffmpeg-3.0.10目录

由于我们是要编译为单库版,所以不需要修改Configure文件的内容。

此时我们先修改Configure文件的权限为777权限:chmod
777 configure



然后我们执行Configure文件,生成编译所需要的文件 :./configure



此时系统提示我们要用屏蔽yasm才能执行,直接我们修改命令为:./configure --disable-yasm



执行完成后



接下来我们就编写build_android.sh脚本进行编译,脚本如下:

make
clean

  

export NDK=/home/ubuntu64/API/android-ndk-r14b

export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt

export PLATFORM=$NDK/platforms/android-9/arch-arm

export PREFIX=../ffmpeg3.0.10-onelib
b720

build_one(){

  ./configure --target-os=android --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

  

make  

make 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.9.x/libgcc.a
 



编写完脚本后,我们把这个脚本复制(拖拽)到ffmpeg-3.0.10目录下



接下来我们修改build_android.sh的权限为777权限:chmod
777 build_android.sh



最后,我们执行build_android.sh脚本开始编译:./build_android.sh



此时,已经开始编译了



接下来就是漫长的等待了,当然,如果你给虚拟机的配置够高的话,编译是很快的,如果配置太低,编译时间就不好说了。

此时,已经编译成功了



接着我们返回当前目录的上一级,就可以看到多了一个ffmpeg3.0.10-onelib的文件夹,此时我们进去这个文件夹,就可以看到编译好的libffmpeg.so文件了。





至此ffmpeg编译为Android平台下的so文件就完成了。

这是我编译好的so库:http://download.csdn.net/download/jamingx666/10210315
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  FFmpeg Android 编译