Android FFmpeg(一)、Windows编译So

Windows环境编译FFmpeg

Windows10下编译FFmpeg。

MinGW下载

MinGW下载地址,我这里安装D盘。并添加到系统环境变量中
在这里插入图片描述
打开MinGW\bin\mingw-get.exe。打开后,点击Basic Setup下载下图的插件。
在这里插入图片描述

NDK下载

NDK下载地址,这里下载android-ndk-r15c-windows-x86_64,不建议下载高的版本,最后的编译可能出错。下载到相关目录,解压即可。

FFmpeg下载

FFmpeg官网下载,这里我下载的是FFmpeg 3.3.9版本。解压到相关目录下。

开始编译

  1. 修改E:\ffmpeg-3.3.9下载configure文件,搜索到下面的代码并修改。

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.E:\ffmpeg-3.3.9目录下新建build_andorid.sh,输入以下内容,注意修改相关的目录

#!/bin/bash
export TMPDIR=E:/ffmpeg-3.3.9/tmpdir #新建的临时目录
NDK=E:/Android/android-ndk-r15c   #Ndk目录 
SYSROOT=$NDK/platforms/android-14/arch-arm #选择编译版本
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
CPU=arm
PREFIX=E:/ffmpeg-3.3.9/output/$CPU  #so输出的目录


ADDI_CFLAGS="-Os -fpic -marm"


function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--enable-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
read -p "Press any key to continue."

3.打开D:\MinGW\msys\1.0\msys.bat进入到ffmpeg3.3.9目录下
在这里插入图片描述
大约10几分钟后,编译完成
在这里插入图片描述
大约有7个so

编译成一个ffmpeg.so

编译成7个so,在配置时比较麻烦。我们修改build_android.sh文件,

#!/bin/bash
export TMPDIR=E:/ffmpeg-3.3.9/tmpdir
NDK=E:/Android/android-ndk-r15c
SYSROOT=$NDK/platforms/android-14/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
CPU=arm
PREFIX=E:/ffmpeg-3.3.9/build_output
ADDI_CFLAGS="-marm"
ADDI_LDFLAGS=""
function build_arm
{
./configure \
    --prefix=$PREFIX \
    --enable-static \
    --disable-shared \
    --disable-doc \
    --disable-programs \
    --disable-symver \
    --disable-encoders \
    --enable-encoder=aac \
    --enable-encoder=mjpeg \
    --enable-encoder=png \
    --disable-decoders \
    --enable-decoder=aac \
    --enable-decoder=aac_latm \
    --enable-decoder=h264 \
    --enable-decoder=hevc \
    --enable-decoder=mpeg4 \
    --enable-decoder=mjpeg \
    --enable-decoder=png \
    --disable-demuxers \
    --enable-demuxer=image2 \
    --enable-demuxer=h264 \
    --enable-demuxer=hevc \
    --enable-demuxer=aac \
    --enable-demuxer=avi \
    --enable-demuxer=mpc \
    --enable-demuxer=mov \
    --disable-parsers \
    --enable-parser=aac \
    --enable-parser=ac3 \
    --enable-parser=h264 \
    --enable-parser=hevc \
    --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 -j8
make install
 
$TOOLCHAIN/bin/arm-linux-androideabi-ld \
-rpath-link=$SYSROOT/usr/lib \
-L$SYSROOT/usr/lib \
-L$PREFIX/lib \
-soname libffmpeg.so -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o \
$PREFIX/libffmpeg.so \
$PREFIX/lib/libavcodec.a \
$PREFIX/lib/libavfilter.a \
$PREFIX/lib/libswresample.a \
$PREFIX/lib/libavformat.a \
$PREFIX/lib/libavutil.a \
$PREFIX/lib/libswscale.a \
$PREFIX/lib/libavdevice.a \
-lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker \
$TOOLCHAIN/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a
}
 
build_arm

运行./build_android.sh
编译成功如下:
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值