首页 > 系统相关 >FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库

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

时间:2024-04-21 12:00:27浏览次数:59  
标签:FFmpeg openssl OpenSSL 编译 sh https Linux ffmpeg

​《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视频了。

标签:FFmpeg,openssl,OpenSSL,编译,sh,https,Linux,ffmpeg
From: https://www.cnblogs.com/aqi00/p/18132687

相关文章

  • 如何在linux中创建特定的脚本注释信息
    如何在linux中创建特定的脚本注释信息当然,以下是详细步骤在CentOS7系统中创建一个新的shell脚本模板并在Vim编辑器中配置自动加载模板的完整过程:步骤1:创建shell脚本模板首先,打开终端并创建一个模板文件,我们将其命名为.bash_script_template并放置在用户的家目录下:e......
  • Linux共享库、静态库、动态库详解
    1.介绍       使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。 ......
  • ffmpeg命令分类查询
    ffmpeg命令分类查询命令参数内容命令参数内容-version显示版本-bsfs显示可用比特流filter-buildconf显示编译配置-protocols显示可用的协议-formats显示可用格式(muxers+demuxers)-filters显示可用的过滤器-muxers显示可用复用器-pix_fmts显示可......
  • FFmpeg如何查询命令帮助文档
    FFmpeg如何查询命令帮助文档ffmpeg/ffplay/ffprobe区别ffmpeg:​ HyperfastAudioandVideoencoder​ 超快音视频编码器(类似爱剪辑)ffplay:​ Simplemediaplayer简单媒体播放器ffprobe:​ Simplemultimediastreamsanalyzer​ 简单多媒体流分析器ffmpeg命令查看......
  • WIN11安装FFmpeg
    WIN11安装FFmpeg官网:https://ffmpeg.org/download.html#build-windows找WindowsbuildsbyBtbN,跳转到:https://github.com/BtbN/FFmpeg-Builds/releases选择合适的版本下载。我这里下载的是ffmpeg-master-latest-win64-gpl-shared下载完后,进行解压,然后把解压有的路径......
  • 性能测试——性能测试-linux监控工具-Centos7.x安装Grafana
    2个参考:小菠萝:https://www.cnblogs.com/poloyy/p/12219145.html  Centos7安装GrafanaGrafana官网下载路径:https://grafana.com/grafana/download1、直接执行以下命令进行安装:wgethttps://dl.grafana.com/oss/release/grafana-6.5.2-1.x86_64.rpmsudoyumlocalinstall......
  • linux passwd文件
    passwd结构体structpasswd{char*pw_name;/*用户名*/char*pw_passwd;/*加密后的密码*/uid_tpw_uid;/*用户ID*/gid_tpw_gid;/*组ID*/char*pw_gecos;/*用户全名或注释字段*/......
  • Linux概述
    1.初始Linux1.linux操作系统支持多用户、多任务、多线程以及多CPU2.Liunx的起源和发展Debian:Debian项目是一个独立、分散的组织,由来自全世界各地自愿者组成,利用互联网进行协作开发。Ubuntu:是一个以桌面为主的Liunx发行版本,基于Debian发展而来,其目的是让Linux系统和非专业人员......
  • 在Linux中,如何实现虚拟机和容器之间的互操作性?
    在Linux中,实现虚拟机和容器之间的互操作性是一个涉及多个步骤的过程。以下是一些关键的步骤和考虑因素:选择适合的虚拟化技术和容器技术:虚拟化技术:常见的虚拟化技术有VMware、VirtualBox等。它们允许你在一个物理机上创建和运行多个虚拟机,每个虚拟机都有自己的操作系统和应用程......
  • 在Linux中,如何优化虚拟机和容器的性能和资源使用?
    在Linux中优化虚拟机(VM)和容器的性能和资源使用涉及多个层面,以下是一些关键的优化策略:1.虚拟机性能优化:合理配置CPU资源:根据虚拟机的实际需求分配合适的vCPU数量,避免过度分配导致资源争抢。启用CPU亲和性设置,保证虚拟机在物理CPU核心上的稳定调度。使用NUMA(Non-UniformMe......