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后是这个样子
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/2120d600756e273cb1da567ac81270cd)
接着下载 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的版本
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/b4a08272393e865ac2f76889355cfb98)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/53079234285bdbcc0090720b57b687b4)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/8c077e45b7a5982e35a67de1c187e79f)
接着下载NDK:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/59e1b6e073f8abf51647c8c824e5f6b0)
这就是我们刚刚下载的文件:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/8fbea89008d7cf2e1e8754c9d9c9d3e3)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/ae42de60a58a83f51644bfc81fe99ec0)
接着我们把这2个文件复制(拖拽)到Ubuntu,
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/ec183fe24d3edf1c2d92ad75191e9f3c)
接着双击打开,接着点击鼠标右键,再点击Extract... 进行解压
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/4bbd31f25dd1bba371797cd950644fc8)
而我是解压到如下2个目录
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/f997eb5a0da33c5666cc3d10bf18d3ca)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/7f97b6ba0bbfdf96fd49ee4d7e63b1a5)
重点来了!
此时开始用命令行了
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/73c0905a02b124b6d6e3d054e55a0cd9)
然后cd到解压后的ffmpeg的目录。
因为编译会生成许多文件,所以我们这里给ffmpeg-3.0.10设置777权限:
chmod -R 777 ffmpeg-3.0.10
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/2d79e8aceabeba8917b00515d3ce8be2)
接着cd到ffmpeg-3.0.10目录
由于我们是要编译为单库版,所以不需要修改Configure文件的内容。
此时我们先修改Configure文件的权限为777权限:chmod
777 configure
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/36544fa5dee7dde39dae0ef9b5cec3e5)
然后我们执行Configure文件,生成编译所需要的文件 :./configure
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/1bda46cb83bf2f59d1ae27267a197576)
此时系统提示我们要用屏蔽yasm才能执行,直接我们修改命令为:./configure --disable-yasm
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/313931c1f7fd080c3c13adf422110f2e)
执行完成后
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/bb2a408c3a65be73c2680d9e3196010f)
接下来我们就编写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
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/b243f53e950632f69389d459e76c3b62)
编写完脚本后,我们把这个脚本复制(拖拽)到ffmpeg-3.0.10目录下
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/7784edd35aa9ebb69db199ecc0022906)
接下来我们修改build_android.sh的权限为777权限:chmod
777 build_android.sh
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/1996796c085139e4e2fcb84be77ac56c)
最后,我们执行build_android.sh脚本开始编译:./build_android.sh
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/e1c8ea838d38918e6e8e047e3d37f1da)
此时,已经开始编译了
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/a5d011500f349a20dafadacb7feafc10)
接下来就是漫长的等待了,当然,如果你给虚拟机的配置够高的话,编译是很快的,如果配置太低,编译时间就不好说了。
此时,已经编译成功了
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/a8c0f9e7c0b4abbc6202f622b32c2210)
接着我们返回当前目录的上一级,就可以看到多了一个ffmpeg3.0.10-onelib的文件夹,此时我们进去这个文件夹,就可以看到编译好的libffmpeg.so文件了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/30961155f29b6322c046e5448e6dc7f6)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/0c0bc471c94eb62cccc57960c5cd2ea3)
至此ffmpeg编译为Android平台下的so文件就完成了。
这是我编译好的so库:http://download.csdn.net/download/jamingx666/10210315
在网上也有很多编译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
相关文章推荐
- Android开发学习之路--Android Studio cmake编译ffmpeg
- Android平台下的FFmpeg的学习之路------(二)环境搭建
- Android平台下的FFmpeg的学习之路------(三)视频解码+NDK绘制
- Android开发学习之路--Android Studio cmake编译ffmpeg
- Android开发学习之路--Android Studio cmake编译ffmpeg
- Android开发学习之路--Android Studio cmake编译ffmpeg
- Android开发学习之路--Android Studio cmake编译ffmpeg
- Android开发学习之路--Android Studio cmake编译ffmpeg
- cygwin编译ffmpeg移植到android平台问题集锦
- 用NDKr9编译最新ffmpeg2.0.1(ffmpeg2.0.2)到android平台
- 【Android平台】 Alljoyn学习笔记二 编译自带的demo的步骤
- Ubuntu 下用NDK编译移植 FFmpeg 2.0 (配置最新版x264) 到Android平台
- Ubuntu 下用NDK编译移植 ffmpeg 2.0 (配置最新版x264) 到android平台
- 深入了解android平台的jni---编译ffmpeg源码
- FFMPEG研究: FFmpeg的Android平台移植编译
- Linux下编译Android平台的ffmpeg库
- ffmpeg 2.2 Android 平台编译
- 用NDKr9编译最新ffmpeg2.0.1到android平台
- 用NDKr9编译最新ffmpeg2.0.1(ffmpeg2.0.2)到android平台
- 用NDKr9编译最新ffmpeg2.0.1(ffmpeg2.0.2)到android平台