作者:chenkaij_305 | 来源:互联网 | 2023-07-19 12:16
文章目录1.搭建编译环境1.1安装ubuntu14.04,安装完成后执行以下命令1.2下载ndk1.3下载FFmpegn4.3.12.编译FFmpeg1.修改configure2.
文章目录
- 1.搭建编译环境
- 1.1 安装ubuntu14.04,安装完成后执行以下命令
- 1.2 下载ndk
- 1.3 下载FFmpeg n4.3.1
- 2.编译FFmpeg
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):
刚编译好的!!!测试也是通过的