编译FFmpeg4.3.1 并移植到Android app中使用(最详细的FFmpeg-Android编译教程)

1.搭建编译环境
1.1 安装ubuntu14.04,安装完成后执行以下命令

提示一下,我是在win10上面安装的子系统ubuntu,如何安装查看我这篇博客Windows10内置Linux子系统,可以直接方便的和win系统的文件直接打交道,爽!!!

安装ubuntu后,执行下面命令

apt-get update
apt-get install yasm
apt-get install pkg-config
1.2 下载ndk

这里用最新稳定版 (r21b):下载ndk-r21b
将ndk下载到 /home/ndk/目录下,下载完成后执行unzip android-ndk-r21b-linux-x86_64.zip解压

1.3 下载FFmpeg n4.3.1

下载FFmpeg n4.3.1
也可以自己选择最新版,查看最新版

下载完成后解压进入根目录,执行 ./configure --list-hwaccels,可以看到支持的硬件加速:
在这里插入图片描述
如果需要支持硬件解码,推荐看这篇文章 FFmpeg一键编译Android armv7-a arm64

2.编译FFmpeg
1.修改configure

进入源码根目录,用vim打开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.配置编译脚本

在源码根目录新建build.sh,内容如下:
#号标记是我注释了的,不然会报错,因为FFmepg不包含x264解码器,需要单独编译,我没单独编译

#!/bin/bash
NDK=/home/ndk/android-ndk-r21b
ADDI_LDFLAGS="-fPIE -pie"
ADDI_CFLAGS="-fPIE -pie -march=armv7-a -mfloat-abi=softfp -mfpu=neon"
CPU=armv7-a
ARCH=arm
HOST=arm-linux
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin
PREFIX=$(pwd)/android/$CPU
#x264=$(pwd)/x264/android/$CPU
#export PATH=$x264/bin:$PATH
#export PATH=$x264/include:$PATH
#export PATH=$x264/lib:$PATH
#export PKG_CONFIG_PATH=$x264/lib/pkgconfig:$PKG_CONFIG_PATH
configure()
{
    ./configure \
    --prefix=$PREFIX \
	--toolchain=clang-usan \
    --enable-cross-compile \
    --target-os=android \
    --arch=$ARCH \
    --sysroot=$SYSROOT \
	--cc=$TOOLCHAIN/armv7a-linux-androideabi21-clang \
	--cxx=$TOOLCHAIN/armv7a-linux-androideabi21-clang++ \
    --strip=$TOOLCHAIN/arm-linux-androideabi-strip \
    --extra-cflags="$ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    --disable-encoders \
    --disable-decoders \
    --disable-avdevice \
    --disable-static \
    --disable-doc \
    --disable-ffplay \
    --disable-network \
    --disable-doc \
    --disable-symver \
	--disable-ffprobe \
	--enable-neon \
    --enable-shared \
    #--enable-libx264 \
    --enable-gpl \
    --enable-pic \
    --enable-jni \
    --enable-pthreads \
    --enable-mediacodec \
    --enable-encoder=aac \
    --enable-encoder=gif \
    --enable-encoder=libopenjpeg \
    --enable-encoder=libmp3lame \
    --enable-encoder=libwavpack \
    #--enable-encoder=libx264 \
    --enable-encoder=mpeg4 \
    --enable-encoder=pcm_s16le \
    --enable-encoder=png \
    --enable-encoder=mjpeg \
    --enable-encoder=srt \
    --enable-encoder=subrip \
    --enable-encoder=yuv4 \
    --enable-encoder=text \
    --enable-decoder=aac \
    --enable-decoder=aac_latm \
    --enable-decoder=libopenjpeg \
    --enable-decoder=mp3 \
    --enable-decoder=mpeg4_mediacodec \
    --enable-decoder=pcm_s16le \
    --enable-decoder=flac \
    --enable-decoder=flv \
    --enable-decoder=gif \
    --enable-decoder=png \
    --enable-decoder=srt \
    --enable-decoder=xsub \
    --enable-decoder=yuv4 \
    --enable-decoder=vp8_mediacodec \
    #--enable-decoder=h264_mediacodec \
    --enable-decoder=hevc_mediacodec \
    --enable-bsf=aac_adtstoasc \
    #--enable-bsf=h264_mp4toannexb \
    --enable-bsf=hevc_mp4toannexb \
    --enable-bsf=mpeg4_unpack_bframes

}

build()
{
    configure
    make clean
    make -j4
    make install
}

build

*注意 x264需要自己编译引入,ffmpeg并不包含x264
我在上面注释掉了

可以根据自己的需求对模块进行裁剪,

查看所有编译配置选项:./configure --help
查看支持的解码器:./configure --list-decoders
查看支持的编码器:./configure --list-encoders
查看支持的硬件加速:./configure --list-hwaccels

赋予脚本执行权限:chmod +x build.sh
执行脚本开始编译:./build.sh
在这里插入图片描述
在这里插入图片描述

如果一切顺利就可以在源码更目录下的android/armv7-a/lib/下找到我们需要的.so文件了
在这里插入图片描述
然后通过编译好的so可以去编译对应的QtAV,QtVLC, Opencv, 都可以,Qt-AV的编译请看我这篇博客
最新 QtAV Window or Android 环境编译以及运行

下面是我刚编译好的截图(Qt-AV):
在这里插入图片描述
刚编译好的!!!测试也是通过的

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fu_Lin_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值