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

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

时间:2024-10-23 13:21:11浏览次数:7  
标签:NDK FFmpeg ijkplayer 编译 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开发实战:从零基础到短视频上线》一书。

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

相关文章

  • C#关于WebSocket的使用
    因为主要做CS开发,所以之前没怎么涉及WebSocket的使用。前面有个项目,想着前端能不能直接跟我这边交互,所以研究了一下.NET的WebSocket的使用。客户端连接客户端的连接相对比较简单,可以直接使用ClientWebSocket即可。示例代码:usingSystem.Net.WebSockets;usingSystem.Threadin......
  • 计算机毕业设计Python+大模型知识图谱中华古诗词可视化 古诗词智能问答系统 古诗词数
    温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!开发技术:前端:vue.jsechartsD3.js后端:Flask/Django机器学习/深度学习:LSTM情感分析模型、PyTorch、T......
  • python中的字典排序--sorted()
    字典的排序:在学习python的时候,了解到相比于列表,字典是一个无序的数据结构,一般都不对其进行排序的。但是要想对字典进行排序,是可以通过sorted()函数进行操作的!关于字典的排序,下面从键key和值value进行代码的运行和分析:【先看代码和执行结果,后面会进行详细的解析】#先定义一......
  • 如何优雅的创建iso文件
    闲言这件事可以非常简单进入这个链接FreeISOCreator下载最新软件即可https://www.freeisocreator.com/为防止无法访问,我放到百度网盘里了FreeISOCreatorpassword:llll安装正常安装软件即可,可不必看安装流程但我要写点击打开-next选择位置(需提......
  • 麒麟系统通过CrossOver软件安装Windows软件(.exe)的详细过程
    1、安装CrossOver要先更新一下软件集:sudoaptupdate再安装KWRE版的微信。sudoaptinstallkylin-kwre-wechat安装成功后打开CrossOver程序:2、添加windows容器介绍:容器有Windows98、windows2000、windowsXP、windowsVista、windows7、windows8、windows1......
  • SD6502 Programming Person
    SD6502ProgrammingII1LabWorkcontinuedfromlastlab(week5)Task1:InheritanceLet’saddafewmoreclassestothePolytechLibrarywhichyoucreatedinlastlabsession.(a)AddaclassandnameitTeacher.cs(b)Addattributes(fields)suchasFirstN......
  • SOLIDWORS许可证错误问题分析
    当大家在安装SOLIDWORKS可能遇到无法获得下列许可,该文章主要介绍常见几种情况与解决办法。1.当在下载的过程中遇到该问题我们首先因该检测电脑名称是为中文字符,如果为中文字符请将中文字符更改为字母字符,在下图中的重命名中更改。然后在重新破解。2.如果在安装后出现该情况......
  • 使用 `com.google.gson` 库将 Java 对象转换为 JSON 字符串,并且确保 `data` 字段是 `M
    要使用com.google.gson库将Java对象转换为JSON字符串,并且确保data字段是Map<String,Object>类型的,你可以按照以下步骤编写一个示例代码。这个示例代码将创建一个包含data字段的Java对象,并将data字段初始化为一个Map<String,Object>,然后动态地向其中添加......
  • FFmpeg 视频转 GIF
    Filtergraph在ffmpeg命令中,可以使用-filter、-vf、-af或-filter_complex选项指定filtergraphFiltergraph由filterchain组成,语法如下:filterchain_1;filterchain_2;...filterchain由filter连接而成,上一个filter的输出成为下一个filter的输入,语法如下:filte......
  • tensorboard可视化,FashionMNIST数据集上搭建网络、训练、预测
    注意numpy版本不要使用2.x,否则提醒 AttributeError:`np.string_`wasremovedintheNumPy2.0release.Use`np.bytes_`instead.安装1.x版本,查看版本condasearchnumpy安装1.24.3condainstallnumpy=1.24.3 写入tensorboard,可视化图像、模型网络#图像可视化......