最近折腾许久,由于领导提到了一个视频压缩的功能,然后看了在网上了解了大部分的视频压缩方法,最后还是决定去弄这个ffmpeg这个c开源库,毕竟人人都说好,那就是真好了。
1、首先我们要成功编译该开源库,直接去官网下载最新的开源库(附上地址:http://ffmpeg.org/)。下载之后解压。
然后由于电脑性能问题,我装了虚拟机然后做了个ubantu的系统之后,发现跑起来太慢了,还是决定在windows下直接编译。
1、下载MinGw(附上地址:https://sourceforge.net/projects/mingw-w64/)
该软件的作用:提供了一套简单方便的Windows下的基于GCC 程序开发环境.在该环境下我们可以编译我们的ffmpeg源码获得我们想要so库.
2、ffmpeg编写脚本文件
#!/bin/bash
export TMPDIR=D:/FFmpeg-n4.0.1/FFmpeg-n4.0.1/ffmpegtemp
NDK=D:/ndk_bundle/android-ndk-r14b-windows-x86_64/android-ndk-r14b
SYSROOT=$NDK/platforms/android-14/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
CPU=arm
PREFIX=D:/FFmpeg-n4.0.1/FFmpeg-n4.0.1/ffmpegtemp/output/$CPU
ADDI_CFLAGS="-Os -fpic -marm"
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--enable-asm \
--enable-neon \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--enable-pthreads \
--enable-small \
--enable-jni \
--enable-mediacodec \
--enable-runtime-cpudetect \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="$ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
build_one
3、进入到MinGw安装目录下面
我的是:C:\MinGW\msys\1.0
运行msys.bat批处理脚本文件,通过命令行进入到ffmpeg源码目录
然后运行 chmod +x build.sh 赋予脚本权限
./build.sh 运行脚本
然后就等着吧,我等了很久,可能是电脑性能的原因。
另外:在编译的过程中遇到了一个问题在此记录一下
利用msys.bat 编译的时候一直给报jni not found的错误,在百度中搜索 说是ndk-bundle 下载目录中Android\Sdk\ndk-bundle\platforms\android-xx\arch-arm\usr该文件夹下面没有include的目录,之后 我也单独去下载了最新的ndk-bundle版本,遗憾的是在其中也没有找到include文件夹,之后选择下载了ndk-14版本,解压后发现该版本是存在include目录的。
最后说一句:在编译过程中会遇到很多问题,各种错误,但是请你相信,既然有那么多人都编译成功了,那么这种方法肯定是可以编译成功的,不要怀疑方法的正确性。我在编译过程中,总是会遇到各样的问题,让我产生对这种方法能否编译成功so库的疑惑,但是自己又不知道其他的方法,所以就坚持下来,最后编译成功的。
这也是对我平时意志不坚定的一次反省。