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

文章目录

        • 1.搭建编译环境
          • 1.1 安装ubuntu14.04,安装完成后执行以下命令
          • 1.2 下载ndk
          • 1.3 下载FFmpeg n4.3.1
        • 2.编译FFmpeg
          • 1.修改configure
          • 2.配置编译脚本

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
编译FFmpeg4.3.1 并移植到Android app中使用(最详细的FFmpeg-Android编译教程)_第1张图片
编译FFmpeg4.3.1 并移植到Android app中使用(最详细的FFmpeg-Android编译教程)_第2张图片

如果一切顺利就可以在源码更目录下的android/armv7-a/lib/下找到我们需要的.so文件了
编译FFmpeg4.3.1 并移植到Android app中使用(最详细的FFmpeg-Android编译教程)_第3张图片
然后通过编译好的so可以去编译对应的QtAV,QtVLC, Opencv, 都可以,Qt-AV的编译请看我这篇博客
最新 QtAV Window or Android 环境编译以及运行

下面是我刚编译好的截图(Qt-AV):
编译FFmpeg4.3.1 并移植到Android app中使用(最详细的FFmpeg-Android编译教程)_第4张图片
刚编译好的!!!测试也是通过的

你可能感兴趣的:(FFmpeg)