ffmpeg不同平台的一些编译脚本
ffmpeg6.1交叉编译时configure的配置
编译环境:ubuntu18.04下编译,并安装需要编译的目标平台的工具链。
在下面的几个脚本中,预先安装了gcc全家桶,Android NDK21以及aarch64-toolchain(工具链)
1.x86_64架构,gcc编译
build-x86-64.sh:
#!/bin/sh # 编译后输出目录,在 ffmpeg 源码目录下的 /android/arm64-v8a OUTPUT=$(pwd)/x86_64-linux/x64 build() { ./configure \ --disable-x86asm \ --prefix=$OUTPUT \ --disable-static \ --disable-debug \ --disable-doc \ --enable-shared \ --enable-cross-compile \ --extra-cflags="-fpic" \ --enable-hwaccels \ --enable-libx264 \ --enable-gpl \ # make clean all make -j12 # make install } build
2.arm64架构,NDK编译
build-android64.sh:
#!/bin/sh # NDK 所在的路径 export NDK=/home/a/ndk/android-ndk-r21e TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64 # 需要编译出的平台,这里是 arm64-v8a ARCH=aarch64 # 支持的最低 Android API API=21 # 编译后安装目录,在 ffmpeg 源码目录下的 ./android/arm64-v8a OUTPUT=$(pwd)/android/arm64-v8a build() { ./configure \ --target-os=android \ --prefix=$OUTPUT \ --arch=$ARCH \ --sysroot=$TOOLCHAIN/sysroot \ --disable-static \ --disable-ffprobe \ --disable-debug \ --disable-doc \ --enable-shared \ --enable-cross-compile \ --cross-prefix=$TOOLCHAIN/bin/llvm- \ --cc=$TOOLCHAIN/bin/aarch64-linux-android$API-clang \ --cxx=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++ \ --extra-cflags="-fpic" \ --enable-hwaccels \ --enable-jni \ --enable-mediacodec \ --enable-encoder=h264_mediacodec \ --enable-encoder=hevc_mediacodec \ --enable-encoder=mpeg4_mediacodec \ --enable-decoder=h264_mediacodec \ --enable-decoder=hevc_mediacodec \ --enable-decoder=mpeg4_mediacodec \ --enable-hwaccel=h264_mediacodec \ # make clean all make -j12 # make install } build
3.arm32架构,NDK编译
build-android32.sh:
#!/bin/sh # NDK 所在的路径 export NDK=/home/a/ndk/android-ndk-r21e TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64 # 需要编译出的平台,这里是 arm64-v8a ARCH=armv7a # 支持的最低 Android API API=21 # 编译后输出目录,在 ffmpeg 源码目录下的 /android/arm64-v8a OUTPUT=$(pwd)/android/arm64-v7a build() { ./configure \ --target-os=android \ --prefix=$OUTPUT \ --arch=$ARCH \ --sysroot=$TOOLCHAIN/sysroot \ --disable-static \ --disable-ffprobe \ --disable-debug \ --disable-doc \ --enable-shared \ --enable-cross-compile \ --cross-prefix=$TOOLCHAIN/bin/llvm- \ --cc=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang \ --cxx=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++ \ --extra-cflags="-fpic" \ --enable-hwaccels \ --enable-jni \ --enable-mediacodec \ --enable-encoder=h264_mediacodec \ --enable-encoder=hevc_mediacodec \ --enable-encoder=mpeg4_mediacodec \ --enable-decoder=h264_mediacodec \ --enable-decoder=hevc_mediacodec \ --enable-decoder=mpeg4_mediacodec \ --enable-hwaccel=h264_mediacodec \ # make clean all make -j12 # make install } build
4.arm平台(厂商提供的工具链)
build-aarch-linux.sh:
#!/bin/sh # 工具链所在的路径 export TOOLCHAIN=/home/a/linux-aarch64-toolchain # 需要编译出的平台,这里是 aarch64 ARCH=aarch64 # 编译后输出目录 OUTPUT=$(pwd)/aarch-linux build() { ./configure \ --prefix=$OUTPUT \ --arch=$ARCH \ --sysroot=$TOOLCHAIN/sysroots/aarch64-sdrv-linux \ --disable-static \ --disable-ffprobe \ --disable-debug \ --disable-doc \ --enable-shared \ --enable-cross-compile \ --cc=$TOOLCHAIN/sysroots/x86_64-sdrvsdk-linux/usr/bin/aarch64-sdrv-linux/aarch64-sdrv-linux-gcc \ --cxx=$TOOLCHAIN/sysroots/x86_64-sdrvsdk-linux/usr/bin/aarch64-sdrv-linux/aarch64-sdrv-linux-g++ \ --strip=$TOOLCHAIN/sysroots/x86_64-sdrvsdk-linux/usr/bin/aarch64-sdrv-linux/aarch64-sdrv-linux-strip \ --extra-cflags="-fpic" \ --enable-hwaccels \ # make clean all make -j12 # make install } build
4.1.arm平台(厂商提供的工具链)
编译带OpenMax硬件支持的ffmpeg:
build-aarch-linux-omx.sh:
#!/bin/sh # NDK 所在的路径 export TOOLCHAIN=/home/a/linux-aarch64-toolchain # 需要编译出的平台,这里是 arm64-v8a ARCH=aarch64 # 编译后输出目录,在 ffmpeg 源码目录下的 /android/arm64-v8a OUTPUT=$(pwd)/aarch-linux #--extra-cflags="-I./omx/include" 三方库头文件查找路径 build() { ./configure \ --prefix=$OUTPUT \ --arch=$ARCH \ --sysroot=$TOOLCHAIN/sysroots/aarch64-sdrv-linux \ --disable-static \ --disable-ffprobe \ --disable-debug \ --disable-doc \--enable-shared \ --enable-cross-compile \ --enable-omx \ --cc=$TOOLCHAIN/sysroots/x86_64-sdrvsdk-linux/usr/bin/aarch64-sdrv-linux/aarch64-sdrv-linux-gcc \ --cxx=$TOOLCHAIN/sysroots/x86_64-sdrvsdk-linux/usr/bin/aarch64-sdrv-linux/aarch64-sdrv-linux-g++ \ --strip=$TOOLCHAIN/sysroots/x86_64-sdrvsdk-linux/usr/bin/aarch64-sdrv-linux/aarch64-sdrv-linux-strip \ --extra-cflags="-fpic -I./omx/include" \ --enable-hwaccels \ # make clean all make -j12 # make install } build
说明:
1.ffmpeg用configure配置文件管理项目,通过这些指令:--enable-shared,完成对项目的配置,执行后,生成makefile,然后根据makefile完成对整个项目的编译。
这几个参数控制了交叉编译的配置:--arch:目标平台的架构; --sysroot:工具链中的库和头文件等编译所需文件路径; --enable-cross-compile:开启交叉编译;--cc:c编译器;--cxx:c++编译器。其它的参数则根据自己的需要开关
2.configure的支持的编译选项,可以直接通过 ./configure --help查看。对应的中文说明参考:https://blog.csdn.net/Mr_Tony/article/details/131052939
分类:
音视频编解码
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库