我是靠谱客的博主 英勇奇迹,最近开发中收集的这篇文章主要介绍音视频系列六 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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部