随笔 - 100  文章 - 0  评论 - 6  阅读 - 86598

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

posted on   林西索  阅读(337)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示