首页 > 系统相关 >FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库LD

FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库LD

时间:2024-10-23 14:04:16浏览次数:1  
标签:LD FFmpeg ijkplayer NDK 编译 so android Android

ijkplayer是一款由B站研发的移动端国产播放器,它基于FFmpeg3.4版本,同时兼容Android和iOS两大移动操作系统。ijkplayer的源码托管地址为https://github.com/bilibili/ijkplayer,截止2024年9月15日,ijkplayer获得3.24万星标数,以及0.81万个分支数,而这还是ijkplayer停止更新6年之后的数据,可想而知当年的ijkplayer是多么火爆。
不过正因为ijkplayer多年未更新,按照导包方式仅能在较老的平台上编译运行,比如ijkplayer支持的Android平台仅限于API 9~23,支持的iOS平台仅限于iOS 7.0~10.2.x。为了让ijkplayer能够在更新的开发环境上正常运行,需要先在Linux系统上交叉编译ijkplayer在Android平台上的so文件,才能在App工程中导入并调用so库。下面介绍如何在Linux编译ijkplayer的so库。

一、准备Linux编译环境

首先在Linux系统执行下面命令安装编译工具。

yum install git make yasm

接着执行下面命令临时调整tmp分区大小,确保系统的临时空间充足,避免解压大文件失败。

mount -o remount,size=2G /tmp

二、安装Android的SDK和NDK

依次执行下列命令下载并安装Android的SDK,注意不要用太高版本的SDK,因为ijkplayer没有适配高版本的SDK。

mkdir -p /usr/local/src_ijkplayer
cd /usr/local/src_ijkplayer
curl -O https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
unzip sdk-tools-linux-4333796.zip
mkdir sdk
mv tools sdk/cmd_tools
cd sdk/cmd_tools/bin
./sdkmanager "build-tools;28.0.3" "platforms;android-28"

依次执行下列命令下载并安装Android的NDK,注意不要用太高版本的NDK,因为ijkplayer没有适配高版本的NDK,官方推荐采用r10e版本的NDK即可。

cd /usr/local/src_ijkplayer
curl -O https://dl.google.com/android/repository/android-ndk-r10e-linux-x86_64.zip
unzip android-ndk-r10e-linux-x86_64.zip

执行下面的环境变量设置命令,分别设置SDK的环境变量ANDROID_SDK,以及NDK的环境变量ANDROID_NDK。

export ANDROID_SDK=/usr/local/src_ijkplayer/sdk
export ANDROID_NDK=/usr/local/src_ijkplayer/android-ndk-r10e

三、下载并编译ijkplayer

先执行以下命令下载ijkplayer的源码包。

cd /usr/local/src_ijkplayer
git clone https://github.com/Bilibili/ijkplayer.git

再执行以下命令检查并初始化ijkplayer的Android编译环境。

cd ijkplayer
./init-android-openssl.sh
./init-android.sh

然后依次执行下列命令,分别编译ijkplayer需要的openssl库和ffmpeg库,以及ijkplayer的so库。之所以在三个脚本后面添加“ arm64”,是为了只编译适配arm64指令的so文件。

cd android/contrib
./compile-openssl.sh arm64
./compile-ffmpeg.sh arm64
cd ../
./compile-ijk.sh arm64

一切顺利的话,即可在ijkplayer/android/ijkplayer/ijkplayer-arm64/src/main/libs/arm64-v8a目录下看到编译好的三个so库:libijkffmpeg.so、libijkplayer.so、libijksdl.so。把包含三个so文件在内的整个libs目录复制到App工程的libs目录,即可完整ijkplayer的so库导入工作。

更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

本博客参考wgetCloud机场。转载请注明出处!

标签:LD,FFmpeg,ijkplayer,NDK,编译,so,android,Android
From: https://www.cnblogs.com/westworldss/p/18496219

相关文章

  • 使用electron-builder打包 vue3 项目 exe
    1:配置代理 1)命令行执行  npmconfigedit 2)在打开的记事本添加如下代理:     electron_mirror=https://npmmirror.com/mirrors/electron/   registry=https://registry.npmmirror.com   注意 electron_mirror的路径不是这个https://registry.npmmir......
  • FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
    ijkplayer是一款由B站研发的移动端国产播放器,它基于FFmpeg3.4版本,同时兼容Android和iOS两大移动操作系统。ijkplayer的源码托管地址为https://github.com/bilibili/ijkplayer,截止2024年9月15日,ijkplayer获得3.24万星标数,以及0.81万个分支数,而这还是ijkplayer停止更新6年之后的数据......
  • Nuxt.js 应用中的 builder:generateApp 事件钩子详解
    title:Nuxt.js应用中的builder:generateApp事件钩子详解date:2024/10/23updated:2024/10/23author:cmdragonexcerpt:builder:generateApp是Nuxt.js的一个生命周期钩子,它在生成应用程序之前被调用。这个钩子为开发者提供了一个机会,可以在生成过程开始之前修改或配置......
  • 写代码被大语言模型坑之使用LocalDateTime比较两个时间差了几天
    自从去年ChatGPT3.5发布后使用了几次,现在写代码基本上离不开它和它的衍生产品们了。一方面查资料很方便,快速提炼要点总结;另一方面想写什么样的代码一问就能生成出来,功能大差不差,稍微改改就能用,大大减少使用搜索引擎的时间,是新时代高阶版的Ctrl+C/V。不过大语言模型归根揭底是靠训......
  • SpatialDB:让空间转录组数据可视化
    SpatialDB:让空间转录组数据可视化原创修改于 2021-08-3115:30:101.3K0举报文章被收录于专栏:国家基因库生命大数据平台2019年11月,来自中国科学院生物物理研究所高通量测序中心的研究人员发布第一个单细胞空间转录组数据库及数据在线可视化平台:Spatial......
  • 饥荒联机版mod制作[资料篇][TheWorld.Map方法汇总]
    注:以下方法的调用方式为“TheWorld.Map:”方法列表及参数说明Map:SetTile(x,y,tile,...)参数:x:瓦片的x坐标。y:瓦片的y坐标。tile:要设置的瓦片类型。...:其他可选参数(如传递特定的上下文)。功能:设置指定坐标的瓦片,并触发事件以通知瓦片变化。Map:RegisterDeployE......
  • 【Azure Developer】System.Net.WebException: The request was aborted: Could not c
    问题描述在Azure中,使用操作系统为WinServer2019和WinServer2012的虚拟机,同样代码可以链接同一个AzureServiceBus。Win2019成功运行,但是在Win2012上报错:CouldnotcreateSSL/TLSsecurechannel. 问题解答WinServer2012默认不支持TLS1.2,可以通过安装 Update3140245 ......
  • 【Azure Developer】System.Net.WebException: The request was aborted: Could not c
    问题描述在Azure中,使用操作系统为WinServer2019和WinServer2012的虚拟机,同样代码可以链接同一个AzureServiceBus。Win2019成功运行,但是在Win2012上报错:CouldnotcreateSSL/TLSsecurechannel. 问题解答WinServer2012默认不支持TLS1.2,可以通过安装 Update314......
  • FFmpeg 视频转 GIF
    Filtergraph在ffmpeg命令中,可以使用-filter、-vf、-af或-filter_complex选项指定filtergraphFiltergraph由filterchain组成,语法如下:filterchain_1;filterchain_2;...filterchain由filter连接而成,上一个filter的输出成为下一个filter的输入,语法如下:filte......
  • Nuxt.js 应用中的 build:manifest 事件钩子详解
    title:Nuxt.js应用中的build:manifest事件钩子详解date:2024/10/22updated:2024/10/22author:cmdragonexcerpt:build:manifest是Nuxt.js中的一个生命周期钩子,它在Vite和Webpack构建清单期间被调用。利用这个钩子,开发者可以自定义Nitro渲染在最终HTM......