FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
《FFmpeg开发实战:从零基础到短视频上线》一书中,示例程序主要针对本地音视频文件进行测试。源码鉴于安全性考虑,资源众多网络视频都采用了/openssl/open...,下载各版本openssl的随书随书下载页面是github.com/openssl/open...。以年月发布的源码dbclick源码openssl-3.2.0为例,可以从以下链接下载该版本的资源openssl源码包:
github.com/openssl/open...
将openssl的源码包上传到Linux服务器,解压并进入源码目录,下载执行以下命令:
tar zxvf openssl-3.2.0.tar.gz cd openssl-3.2.0
确认ndk已放置在服务器上,随书随书创建编译脚本build_openssl.sh,源码填入以下脚本内容(注意android-arm表示编译位的资源so库,no-shared表示只编译静态库不编译动态库):
#!/bin/bash NDK_HOME=/usr/local/src/android-ndk-re SYSTEM=linux-x_ HOST=aarch-linux-android API= 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-arm 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开发实战:从零基础到短视频上线》随书源码的chapter/config_ffmpeg_full.sh,将该文件另存为config_ffmpeg_openssl.sh,并在文件内部这行--enable-libx \的下面增加如下一行配置:
--enable-openssl \
将config_ffmpeg_openssl.sh上传到服务器的FFmpeg源码目录,执行以下命令赋予可执行权限:
chmod +x config_ffmpeg_openssl.sh
然后运行以下命令配置、团队成员HTml源码编译和安装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下面创建子目录arm-v8a,将FFmpeg交叉编译好的8个so文件(位于/usr/local/app_ffmpeg/lib)全部复制到arm-v8a目录下。
(3)将config_ffmpeg_openssl.sh里面启用的几个第三方库的so文件也一起复制到arm-v8a目录下,包括x、x、mp3lame、freetype等。
(4)打开App工程的电商JAVA源码cpp代码,将待播放的在线视频地址改为https链接,重新编译安装App,即可正常播放https视频。
什么叫源码
源程序是指未编译的文本代码。
验证码主要是为防止暴利破解,所以需要防止识别。所以验证码一般情况下为书写不正规,且有随机的背景杂点,或杂线
源代码(也称源程序),是指一系列人类可读的计算机语言指令。
在现代程序语言中,软件产权和源码源代码可以是以书籍或者磁带的形式出现,但最为常用的格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,通过编译器完成。
作用
源代码主要功用有如下2种作用:
生成目标代码,即计算机可以识别的代码。
对软件进行说明,即对软件的编写进行说明。为数不少的初学者,甚至少数有经验的程序员都忽视软件说明的编写,因为这部分虽然不会在生成的程序中直接显示,也不参与编译。但是说明对软件的学习、分享、维护和软件复用都有巨大的好处。因此,书写软件说明在业界被认为是能创造优秀程序的良好习惯,一些公司也硬性规定必须书写。
需要指出的是,源代码的修改不能改变已经生成的目标代码。如果需要目标代码做出相应的修改,必须重新编译。
代码组合
源代码作为软件的特殊部分,可能被包含在一个或多个文件中。一个程序不必用同一种格式的源代码书写。例如,一个程序如果有C语言库的支持,那么就可以用C语言;而另一部分为了达到比较高的运行效率,则可以用汇编语言编写。
较为复杂的软件,一般需要数十种甚至上百种的源代码的参与。为了降低种复杂度,必须引入一种可以描述各个源代码之间联系,并且如何正确编译的系统。在这样的背景下,修订控制系统(RCS)诞生了,并成为研发者对代码修订的必备工具之一。
还有另外一种组合:源代码的编写和编译分别在不同的平台上实现,专业术语叫做软件移植。
版权
如果按照源代码类型区分软件,通常被分为两类:自由软件和非自由软件。自由软件一般是不仅可以免费得到,而且公开源代码;相对应地,非自由软件则是不公开源代码。所有一切通过非正常手段获得非自由软件源代码的行为都将被视为非法。
质量
对于计算机而言,并不存在真正意义上的“好”的源代码;然而作为一个人,好的书写习惯将决定源代码的好坏。源代码是否具有可读性,成为好坏的重要标准。软件文档则是表明可读性的关键。
效率
虽然我们可以通过不同的语言来实现计算机的同一功能,但在执行效率上则存在不同。普遍规律是:越高级的语言,其执行效率越低。这也是为什么汇编语言生成的文件比用VB语言生成文件普遍要小的原因。
2024-11-23 06:02
2024-11-23 05:58
2024-11-23 05:25
2024-11-23 04:50
2024-11-23 04:35