FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库

简介: 该文介绍了如何在Linux服务器上交叉编译Android的FFmpeg库以支持HTTPS视频播放。首先,从GitHub下载openssl源码,解压后通过编译脚本`build_openssl.sh`生成64位静态库。接着,更新环境变量加载openssl,并编辑FFmpeg配置脚本`config_ffmpeg_openssl.sh`启用openssl支持。然后,编译安装FFmpeg。最后,将编译好的库文件导入App工程的相应目录,修改视频链接为HTTPS,App即可播放HTTPS在线视频。

?《FFmpeg开发实战:从零基础到短视频上线》一书的例程主要测试本地的音视频文件,当然为了安全起见,很多网络视频都采用了https地址。FFmpeg若要访问https视频,就必须集成第三方的openssl库,但编译FFmpeg时却默认关闭了openssl。为了让App能够播放采用https的在线视频,需要编译安装并启用openssl。

在Linux服务器交叉编译Android的so库之时,给FFmpeg集成openssl的详细步骤说明如下:

1、交叉编译openssl

openssl的源码托管地址为 https://github.com/openssl/openssl ,各版本openssl的下载页面是 https://github.com/openssl/openssl/releases/ 。比如2023年11月发布的openssl-3.2.0,可从下面链接下载该版本的openssl源码包:

https://github.com/openssl/openssl/releases/download/openssl-3.2.0/openssl-3.2.0.tar.gz

把openssl的源码包上传到Linux服务器,解压并进入源码目录,也就是执行下列命令。

tar zxvf openssl-3.2.0.tar.gz
cd openssl-3.2.0

确认ndk已经放到了服务器上,接着创建编译脚本build_openssl.sh,填入下面的脚本内容(注意android-arm64表示编译64位的so库,no-shared表示只编译静态库不编译动态库):

#!/bin/bash

NDK_HOME=/usr/local/src/android-ndk-r21e
SYSTEM=linux-x86_64
HOST=aarch64-linux-android
API=24

export PATH=$NDK_HOME/toolchains/llvm/prebuilt/$SYSTEM/bin:$NDK_HOME/toolchains/$HOST-4.9/prebuilt/$SYSTEM/bin:$PATH
export ANDROID_NDK_ROOT=$NDK_HOME

echo "config for openssl"
./Configure android-arm64 no-shared --prefix=/usr/local/app_openssl -D__ANDROID_API__=$API
echo "config for openssl completed"

make -j4
make install

保存并退出build_openssl.sh,执行以下命令编译和安装openssl。

chmod +x build_openssl.sh
./build_openssl.sh

2、加载openssl的环境变量

第一步把openssl安装在/usr/local/app_openssl,还要把openssl的pkgconfig路径加载到环境变量PKG_CONFIG_PATH中。
Linux系统的profile文件位于用户初始目录的.bash_profile。执行以下命令编辑当前用户的profile文件:

cd
vi .bash_profile

往.bash_profile的文件末尾添加下面一行:

export PKG_CONFIG_PATH=/usr/local/app_openssl/lib/pkgconfig:$PKG_CONFIG_PATH

保存并退出.bash_profile之后,执行以下命令加载环境变量:

source .bash_profile

然后执行下面的环境变量查看命令,确保openssl的环境变量已经成功加载。

env | grep PKG

3、重新编译FFmpeg启用openssl

打开《FFmpeg开发实战:从零基础到短视频上线》随书源码的chapter12/config_ffmpeg_full.sh,将该文件另存为config_ffmpeg_openssl.sh,并在文件内部这行

  --enable-libx264 \

的下面增加如下一行配置

  --enable-openssl \

接着把config_ffmpeg_openssl.sh上传到服务器的FFmpeg源码目录,执行下面命令赋予可执行权限。

chmod +x config_ffmpeg_openssl.sh

然后运行下列命令配置、编译和安装FFmpeg

./config_ffmpeg_openssl.sh
make clean
make -j4
make install

4、把so文件导入App工程

(1)把FFmpeg交叉编译好的include目录(位于/usr/local/app_ffmpeg/include)整个复制到App工程的src/main/cpp目录下。
(2)在src\main目录下创建jniLibs目录,并在jniLibs下面创建子目录arm64-v8a,把FFmpeg交叉编译好的8个so文件(位于/usr/local/app_ffmpeg/lib)全部复制到arm64-v8a目录下。
(3)config_ffmpeg_openssl.sh里面启用的几个第三方库的so文件也一块复制到arm64-v8a目录下,包括x264、x265、mp3lame、freetype等。
(4)打开App工程的cpp代码,把待播放的在线视频地址改为https链接,重新编译安装App,即可正常播放https视频了。

目录
相关文章
|
2天前
|
Java 测试技术 开发工具
Android 笔记:AndroidTrain , Lint , build(1),只需一篇文章吃透Android多线程技术
Android 笔记:AndroidTrain , Lint , build(1),只需一篇文章吃透Android多线程技术
|
2天前
|
设计模式 缓存 前端开发
真的强!借助阿里技术博主分享的Android面试笔记,我拿到了字节跳动的offer
真的强!借助阿里技术博主分享的Android面试笔记,我拿到了字节跳动的offer
|
2天前
|
监控 安全 API
orhanobut/logger - 强大的Android日志打印库
orhanobut/logger - 强大的Android日志打印库
8 1
|
4天前
|
Android开发 C++
Android S HAL库的编译
Android S HAL库的编译
12 0
|
4天前
|
安全 网络协议 Linux
linux必学的60个命令
Linux是一个功能强大的操作系统,提供了许多常用的命令行工具,用于管理文件、目录、进程、网络和系统配置等。以下是Linux必学的60个命令的概览,但请注意,这里可能无法列出所有命令的完整语法和选项,仅作为参考
197 2
|
2天前
|
存储 Linux Shell
YUM管理器的命令列表-Linux
YUM管理器的命令列表-Linux
8 0
|
4天前
|
Linux 程序员 计算机视觉
【linux 学习】在Linux中经常用到的cmake、make、make install等命令解析
【linux 学习】在Linux中经常用到的cmake、make、make install等命令解析
16 0
|
4天前
|
Linux
Linux的find命令使用
【5月更文挑战第11天】Linux的find命令使用
15 3
http://www.vxiaotou.com