我是靠谱客的博主 英勇奇迹,最近开发中收集的这篇文章主要介绍音视频系列六 Linux 编译ffmpeg链接openssl编译openssl编译ffmpeg,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
编译openssl
去官网(或者github)下载openssl,解压。
进入解压后的openssl根目录,创建一个build_android_openssl.sh文件,粘贴以下代码
#!/bin/bash
export ANDROID_NDK_HOME=/PublicData/LinuxAndroidSdk/ndk/21.3.6528147 # 修改自己本地的ndk路径
build() {
API=29
CPU=$1
PLATFORM=$2
make clean
rm -rf $(pwd)/android/$CPU
PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$ANDROID_NDK_HOME/toolchains/$PLATFORM-4.9/prebuilt/linux-x86_64/bin:$PATH
./Configure android-$CPU -D__ANDROID_API__=$API no-shared no-ssl2 no-ssl3 no-comp no-hw no-engine --prefix=$(pwd)/android/$CPU --openssldir=$(pwd)/android/$CPU
make
make install
}
# build armv7
build arm arm-linux-androideabi
# build armv8
build arm64 aarch64-linux-android
根据自己需求,参考openssl根目录下的NOTES.ANDROID文件进行微调。给执行权限然后运行。等待编译完成。需要注意的是ndk版本和API一定要跟编译ffmpeg的相同。不然后面很大概率会出现openssl not found.
编译ffmpeg
在原先的编译基础上增加下面两个配置打开openssl开关
--enable-openssl
--enable-nonfree
同时在extra-cflags和extra-cflags中指定上面编译好后的openssl的头文件位置和库位置,如下
--extra-cflags="-I/PublicData/openssl/openssl_1_1_1l/android/$ARCH/include -fPIE -pie -Os -fpic $OPTIMIZE_CFLAGS"
--extra-ldflags="-L/PublicData/openssl/openssl_1_1_1l/android/$ARCH/lib $ADDI_LDFLAGS"
完整的编译脚本示例如下
#!/bin/bash
NDK=/PublicData/LinuxAndroidSdk/ndk/21.3.6528147
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
SYSROOT="$TOOLCHAIN/sysroot"
API=29
function build_android
{
echo "Compiling FFmpeg for $CPU"
CC="$TOOL_PREFIX$API-clang"
CXX="$TOOL_PREFIX$API-clang++"
PREFIX="${PWD}/android/$OUTPUT_FOLDER"
rm -rf $PREFIX
make clean
./configure
--prefix=$PREFIX
--libdir=$LIB_DIR
--enable-shared
--enable-jni
--enable-gpl
--enable-openssl
--enable-nonfree
--disable-doc
--disable-static
--disable-ffmpeg
--disable-ffplay
--disable-ffprobe
--disable-symver
--disable-programs
--target-os=android
--arch=$ARCH
--cpu=$CPU
--cc=$CC
--cxx=$CXX
--enable-cross-compile
--cross-prefix=$CROSS_PREFIX
--sysroot=$SYSROOT
--disable-asm
--disable-x86asm
--extra-cflags="-I/PublicData/openssl/openssl_1_1_1l/android/$ARCH/include -fPIE -pie -Os -fpic $OPTIMIZE_CFLAGS"
--extra-ldflags="-L/PublicData/openssl/openssl_1_1_1l/android/$ARCH/lib $ADDI_LDFLAGS"
$ADDITIONAL_CONFIGURE_FLAG
make -j10
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}
# armv8-a
OUTPUT_FOLDER="arm64-v8a"
ARCH=arm64
CPU="armv8-a"
TOOL_PREFIX="$TOOLCHAIN/bin/aarch64-linux-android"
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
LIB_DIR="${PWD}/android/libs/$OUTPUT_FOLDER"
OPTIMIZE_CFLAGS="-march=$CPU"
build_android
# # armv7-a
OUTPUT_FOLDER="armeabi-v7a"
ARCH=arm
CPU="armv7-a"
TOOL_PREFIX="$TOOLCHAIN/bin/armv7a-linux-androideabi"
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
LIB_DIR="${PWD}/android/libs/$OUTPUT_FOLDER"
OPTIMIZE_CFLAGS="-march=$CPU"
build_android
可以先注释掉make和make install,只运行configure看看配置有没有什么问题。
如果出现openssl not found,然后确认前面的配置没有问题,那就打开ffmpeg根目录下的configure文件,搜索下openssl not found,然后参考下最新版本的ffmpeg,看看两者有什么不同,看情况修改。我的配置如下
...
enabled openssl
&& { check_pkg_config openssl openssl openssl/ssl.h OPENSSL_init_ssl ||
check_pkg_config openssl openssl openssl/ssl.h SSL_library_init ||
check_lib openssl openssl/ssl.h OPENSSL_init_ssl -lssl -lcrypto ||
check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto ||
check_lib openssl openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
die "ERROR: openssl not found"; }
...
我是在原先的配置上多加了
check_lib openssl openssl/ssl.h OPENSSL_init_ssl -lssl -lcrypto ||
这一行,是新版本的openssl改变导致的。
其他问题自行百度,以此类推。
最后
以上就是英勇奇迹为你收集整理的音视频系列六 Linux 编译ffmpeg链接openssl编译openssl编译ffmpeg的全部内容,希望文章能够帮你解决音视频系列六 Linux 编译ffmpeg链接openssl编译openssl编译ffmpeg所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复