最近做项目需要集成ffmpeg,然后下载了源码,我之前下载的是6.1.1版本,找到大部分资料都是4或者是3版本的,踩了一些坑,最后也不是完全编译;在此做记录,希望有经验的可以给个教程
概要
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。
整体流程
1.首先就是下载源码官网
2.之后下载进行解压,然后先执行一下
./configure
不然之后的脚本命令会报错
3.在文件夹下面建立脚本文件,这些配置是可以根据需要进行更改的可以参考命令解析
#!/bin/bash
NDK=/Users/XXX/Library/Android/sdk/ndk/25.1.8937393
TOOLCHAIN_ROOT_DIR=darwin-x86_64
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$TOOLCHAIN_ROOT_DIR
API=21
#要编译的ffmpeg内容方法
# --disable-decoder=h264_mediacodec \
function build_android {
echo "Compiling FFmpeg for $CPU"
./configure \
--prefix=$PREFIX \
--disable-hwaccels \
--disable-asm \
--disable-gpl \
--disable-postproc \
--disable-programs \
--disable-mediacodec \
--disable-static \
--disable-vulkan \
--disable-doc \
--enable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-doc \
--disable-symver \
--disable-x86asm \
--disable-filters \
--enable-cross-compile \
--enable-jni \
--enable-shared \
--enable-avcodec \
--enable-avformat \
--enable-avutil \
--enable-swresample \
--enable-swscale \
--enable-avfilter \
--enable-network \
--enable-bsfs \
--enable-neon \
--enable-libva \
--enable-asm \
--enable-pthread \
--disable-libmp3lame \
--disable-libx264 \
--enable-getenv-utf8 \
--disable-postproc \
--enable-filters \
--cross-prefix=$CROSS_PREFIX \
--nm=$NM \
--strip=$STRIP \
--pkgconfigdir=$PKG_CONFIG_DIR \
--pkg-config=$PKG_CONFIG \
--target-os=android \
--arch=$ARCH \
--cpu=$CPU \
--cc=$CC \
--cxx=$CXX \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j10
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}
#接下来是根据需要来决定
#armv7-a
ARCH=arm
CPU=armv7-a
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
LLVM_TOOLCHAIN=$TOOLCHAIN/bin
PKG_CONFIG_DIR=/opt/homebrew/Cellar/pkg-config/0.29.2_3
PKG_CONFIG=$PKG_CONFIG_DIR/bin/pkg-config
NM=$LLVM_TOOLCHAIN/llvm-nm
STRIP=$LLVM_TOOLCHAIN/llvm-strip
SYSROOT=$TOOLCHAIN/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/armv7a-linux-androideabi-
PREFIX=$(pwd)/android/$CPU //当前目录输出路径
OPTIMIZE_CFLAGS="-march=$CPU"
build_android
4.一般这时候就编译出so文件了,同时也会生成相关的头文件
ps:我的本意是调用ffmpeg命令,但其中的一部分头文件未编译出来,不知道啥原因
5.编译so,导入项目 参考引入Android
ps:如果ndk未下载或者是其他问题,可以在这里下载NDK下载
6.可以直接使用大佬的开源库FFmpeg