​《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开发笔记(十六)Linux交叉编译Android的OpenSSL库的更多相关文章

  1. FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台

    FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待   前言   将ffmpeg移植到海思H ...

  2. OpenCV开发笔记(六十四):红胖子8分钟带你深入了解SURF特征点(图文并茂+浅显易懂+程序源码)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  3. OpenCV开发笔记(六十五):红胖子8分钟带你深入了解ORB特征点(图文并茂+浅显易懂+程序源码)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  4. OpenCV开发笔记(六十九):红胖子8分钟带你使用传统方法识别已知物体(图文并茂+浅显易懂+程序源码)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  5. 二十六个月Android学习工作总结【转】

    原文:二十六个月Android学习工作总结 1.客户端的功能逻辑不难,UI界面也不难,但写UI花的时间是写功能逻辑的两倍.     2.写代码前的思考过程非常重要,即使在简单的功能,也需要在本子上把该 ...

  6. FFmpeg开发笔记(三):ffmpeg介绍、windows编译以及开发环境搭建

    前言   本篇章是对之前windows环境的补充,之前windows的是无需进行编译的,此篇使用源码进行编译,版本就使用3.4.8.   FFmpeg简介   FFmpeg是领先的多媒体框架,能够解码 ...

  7. FFmpeg开发笔记(四):ffmpeg解码的基本流程详解

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  8. FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  9. FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放

    前言   ffmpeg播放rtsp网络流和摄像头流.   Demo   使用ffmpeg播放局域网rtsp1080p海康摄像头:延迟0.2s,存在马赛克     使用ffmpeg播放网络rtsp文件流 ...

  10. S3C2416裸机开发系列十六_sd卡驱动实现

    S3C2416裸机开发系列十六 sd卡驱动实现 象棋小子    1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.传输数据快.可插拔.安全性好等长 ...

随机推荐

  1. 可穿戴智能手环解决方案之BLE的ADV广播协议解读

    一 概念 直接上英文原文,怕自己的翻译误导大家. When a BLE device is advertising, it periodically transmits packets, which ...

  2. Web安全前端基础

    Web安全前端基础 1.Web前端介绍 2.前端代码语言简单学习 一.Web前端介绍 web前端就是前端网络编程,也被认为是用户端编程,是为了网页或者网页应用,而编写HTML,CSS以及JS代码,所以 ...

  3. 【2012 Asia ChangChun Regional Contes】 [Math Magic] 动态规划

    题目链接: https://acm.hdu.edu.cn/showproblem.php?pid=4427 解法: 题目m范围较小$m\leq 1000$,n 范围也较小 $n\leq 1000$, ...

  4. 【leetcode 春季比赛3题 二叉搜索树染色】广度搜索

    暴力: import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import ja ...

  5. C#开发计算器类库

    C#开发计算器类库:开发中所涉及到有虚方法,继承,简单工厂等基础知识(编程借鉴'小菜变成成长记'https://www.jb51.net/article/2851.htm) 1.创建父类:计算(Ope ...

  6. JS(DOM事件高级)

    一 注册事件(绑定事件) 1.1 注册事件概述 给元素添加事件,称为注册事件或者绑定事件.注册事件有两种方式:传统方式和方法监听注册方式 1.2 addEventListener 事件监听方式 eve ...

  7. 没有Python基础,如何学习用Python写机器学习

    前言 我是一个完全没用过python的人,所以,想写机器学习,就得从语法入手. 首先上W3cSchool去学习基础语法. 基础语法都差不多,重点看一下函数,模块,面向对象. 函数的写法稍有不同,格式上 ...

  8. docker下载mongodb镜像并启动容器

    1.查找mongodb相关镜像 docker search mongo 找到相关的镜像进行拉取,如果不指定版本,默认下载最新的mongoDB.建议自己先查找需要那个版本后在进行拉取,因为mongoDB ...

  9. KingbaseES V8R3 集群运维系列之 -- network_rewind.sh磁盘检测功能详解

    ​ 案例说明: 在KingbaseES V8R3集群,network_rewind.sh用于当节点数据库服务down时,实现数据库服务的自动恢复功能.在network_rewind.sh执行时,会对数 ...

  10. Python爬取腾讯视频电影名称和链接(一)

    1 import requests 2 import json 3 from bs4 import BeautifulSoup #网页解析获取数据 4 import sys 5 import re 6 ...