网站搭建论文,注册安全工程师管理系统,什么是百度权重,网页版qq登录入口是什么环境
我这里使用windows里的wsl2的ubuntu#xff0c;使用物理机或者vmware#xff0c;vbox之类的安装的ubuntu理论上也可以. gcc编译使用的环境如下: Ndk使用17 FFmpeg使用4.0.2.
clang编译使用的环境如下: Ndk使用21.4 FFmpeg使用6.1
FFmpeg下载地址:https://ffmpeg.org/…环境
我这里使用windows里的wsl2的ubuntu使用物理机或者vmwarevbox之类的安装的ubuntu理论上也可以. gcc编译使用的环境如下: Ndk使用17 FFmpeg使用4.0.2.
clang编译使用的环境如下: Ndk使用21.4 FFmpeg使用6.1
FFmpeg下载地址:https://ffmpeg.org/releases/ Ndk下载地址在Android官网
准备
把下载到的FFmpegndk解压注意ndk下载的是linux版本的因为接下来会在ubuntu下编译
编写编译脚本
由于Ndk在17或以下的版本默认使用Gcc编译而17以上的版本使用Clang所以这里介绍两种编译方式。
Gcc编译
编写sh脚本
由于编译的命令并非一两条命令可以完成的所以我们需要使用.sh脚本保存起来编写完成之后执行该脚本 在ffmpeg源码根目录新建一个.sh后缀的文件我这里的命名为ffbuild.sh。以下为该文件的内容
# NDK目录
NDK_ROOT/mnt/c/Users/Administrator/ubuntu_dev/ndk/android-ndk-r17c/android-ndk-r17c
# ndk对应平台编译器所在目录
TOOLCHAIN$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64PREFIX./android/ffmpeg./configure \
--prefix$PREFIX \
--disable-x86asm \
--enable-small \
--disable-programs \
--disable-avdevice \
--enable-cross-compile \
--cross-prefix$TOOLCHAIN/bin/arm-linux-androideabi- \
--sysroot$NDK_ROOT/platforms/android-23/arch-arm \
--extra-cflags-isysroot $NDK_ROOT/sysroot -isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__23 -U_FILE_OFFSET_BITS -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -marcharmv7-a -mfloat-abisoftfp -mfpuvfpv3-d16 -mthumb -Wa,--noexecstack -Wformat -Werrorformat-security -O0 -fPIC \
--archarm \
--target-osandroid make clean
make -j20 install以上命令的一些解释: PREFIX:你编译好的库输出的目录 –PREFIX./android/ffmpeg 指定输出路径
–enable-small 优化大小
–disable-programs 不编译ffmpeg程序命令行工具
----disable-avdevice 关闭avdevice模块 在安卓中无用
–disable-encoders 关闭所有编码器
–disable-filter 关闭所有滤镜
–enable-cross-compile 开启交叉编译
–cross-prefix 查找ndk的gcc(编译器)
–sysroot 寻找ndk所有的库文件
–disable-shared 关闭动态库输出
–extra-cflags 传给编译器的参数
–archarm 如果编译的是64位库则写成arm64
–target-osandroid 目标系统
make clean 每次编译前都清理上一次运行产生的文件
make -j20 install -j20的意思是并行20个线程推荐写成你的cpu核心数
编译64位略有不同:
# NDK目录
NDK_ROOT/mnt/c/Users/Administrator/ubuntu_dev/ndk/android-ndk-r17c/android-ndk-r17c
# ndk对应平台编译器所在目录
TOOLCHAIN$NDK_ROOT/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64PREFIX./android/ffmpeg64./configure \
--prefix$PREFIX \
--disable-x86asm \
--enable-small \
--disable-programs \
--disable-avdevice \
--enable-cross-compile \
--cross-prefix$TOOLCHAIN/bin/aarch64-linux-android- \
--sysroot$NDK_ROOT/platforms/android-23/arch-arm64 \
--extra-cflags-isysroot $NDK_ROOT/sysroot -isystem $NDK_ROOT/sysroot/usr/include/aarch64-linux-android -D__ANDROID_API__23 -U_FILE_OFFSET_BITS -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -marcharmv8-a -Wa,--noexecstack -Wformat -Werrorformat-security -O0 -fPIC \
--archaarch64 \
--target-osandroid \
--enable-sharedmake clean
make -j20 install执行命令
sudo sh xxx.sh编译结果
很多时候会报错一般报错之后都是编译失败了。可以停止编译查看输出的信息去修改对应的命令。 如果控制台输出的信息判断不了是什么问题可以查看编译日志(以我这里为例):./ffbuild/config.log。 很多时候就是因为编译的命令路径问题或者版本问题导致的有时候也因为linux发行版依赖的一些库缺失。
Clang编译
Clang编译与gcc编译基本一致这里我们使用Ndk21.4和当下最新的FFmpeg6.1为例
编写sh脚本
与上面一致编写shell:
# NDK目录
NDK_ROOT/mnt/c/Users/Administrator/ubuntu_dev/ndk/android-ndk-r21e
# ndk对应平台编译器所在目录
TOOLCHAIN$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64
# 需要编译出的平台这里是 arm64-v8a
ARCHaarch64# 支持的最低 Android API
API23PREFIX./android/ffmpeg64./configure \--target-osandroid \--prefix$PREFIX \--arch$ARCH \--sysroot$TOOLCHAIN/sysroot \--disable-static \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-debug \--disable-doc \--disable-avdevice \--enable-shared \--enable-cross-compile \--cross-prefix$TOOLCHAIN/bin/aarch64-linux-android- \--cc$TOOLCHAIN/bin/aarch64-linux-android$API-clang \--cxx$TOOLCHAIN/bin/aarch64-linux-android$API-clang \--extra-cflags-fpicmake clean all
make -j20 install可见这里的脚本与上面差不多只是编写更加规范常修改的值都提取出来作为变量方便日后修改编译
现成的FFmpeg库
这里提供作者自己编译好的FFmpeg供大家直接使用
https://download.csdn.net/download/javy_codercoder/88661461