您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
交叉编译ffmpeg4.3.2(api28、安卓9、ubuntu-18.04.5-desktop-amd64)
发布时间:2021-06-16 11:26:04编辑:雪饮阅读()
前面曾经写过编译ffmpeg3.4在api21即安卓5.0在ubuntu16.04.3中编译armv7-a以及armv8-a等。
这次要实现ffmpeg4.3.2编译用于api28即安卓9,并且在ubuntu18.04.5中的编译脚本编写。
首先在ffmpeg4.3.2中configure已经没有了--disable-ffserver编译选项,所以要在之前的脚本中移除这个选项。这个选项好像是为了支持直播流等的。如果撤销了这个选项,那么意思就是说强制必须要支持的意思。
这里选项ffmpeg4.3.2是因为在当下这个版本是稳定版本,stable。
系统则选择ubuntu18.04.5桌面版64位。
对于ndk的版本,因为之前版本选择的是r14b,就是觉得那个有点老了,这次本来选择r20b,但是从r17c之后就没有了platforms目录,所以就用r17c了,至少r17c也比上次的r14b要高了。
如果借用之前编译脚本还可能会出现:
ERROR: jni not found
查看日志ffmpeg-4.3.2\ffbuild\config.log有很多错误,第一个错误出现的是:
fatal error: ctype.h: No such file or directory
这需要如下配置
--extra-cflags="-Os -isysroot $NDK/sysroot -fpic -I$NDK/sysroot/usr/include -I$NDK/sysroot/usr/include/aarch64-linux-android" \
主要就是--extra-cflags中的头文件的指定。
以前这个extra-cflags中还有包含-marm选项,但是:
目前无法在开启 cgo 编译模式的情况下进行交叉编译,这是因为 cgo 涉及到的相关函数直接依赖于构建程序所在的操作系统。而且由于各个平台默认的 C 编译器不尽相同,所编译出的程序可能无法兼容。
在 Go 1.1 中使用交叉编译时,CGO_ENBALED 会被设置为默认值 0(关闭)。
所以要撤销这个marm选项。
最后完整的脚本如:
build_android_64_ffmpeg_4.3.2.sh:
#!/bin/bash
echo "进入编译ffmpeg脚本"
NDK=/home/xy/ffmpeg/android-ndk-r17c
PLATFORM=$NDK/platforms/android-28/arch-arm64
CPU=armv8-a
#输出路径
PREFIX=./android/$CPU
#清理之前編譯的
make clean
function buildFF
{
echo "开始编译ffmpeg"
./configure \
--prefix=$PREFIX \
--target-os=android \
--cross-prefix=/home/xy/ffmpeg/android-ndk-r17c/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android- \
--arch=aarch64 \
--cpu=$CPU \
--sysroot=$PLATFORM \
--extra-cflags="-Os -isysroot $NDK/sysroot -fpic -I$NDK/sysroot/usr/include -I$NDK/sysroot/usr/include/aarch64-linux-android" \
--extra-libs=-lgcc \
--enable-cross-compile \
--cc=/home/xy/ffmpeg/android-ndk-r17c/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-gcc \
--nm=/home/xy/ffmpeg/android-ndk-r17c/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-nm \
--enable-shared \
--enable-runtime-cpudetect \
--enable-gpl \
--enable-small \
--disable-debug \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-postproc \
--disable-avdevice \
--disable-symver \
--disable-stripping \
$ADD
make -j4
make install
echo "编译结束!"
}
###########################################################
echo "编译支持neon和硬解码"
CPU=armv8-a
#PREFIX输出目录自定义
PREFIX=./android/arm64-neon-hard
ADD="--enable-asm \
--enable-neon \
--enable-jni \
--enable-mediacodec \
--enable-decoder=h264_mediacodec \
--enable-hwaccel=h264_mediacodec "
buildFF
编译成功
最后上传下完整的脚本
关键字词:ffmpeg4.3.2,api28,安卓9,ubuntu-18.04.5-desktop-amd64
相关文章
-
无相关信息