ijkplayer编译 android版本

server/2024/9/25 15:21:34/

ijkplayer源码下载地址如下:https://github.com/bilibili/ijkplayer

下载代码,直接执行如下命令即可:

$cd /data/project/ijkplayer/
$git clone https://github.com/bilibili/ijkplayer.git
$git checkout -B latest k0.8.8

1 环境安装

这里使用docker18.04进行构建(因为目前主流主要是用20.04 和 22.04版本的居多,而且因为编译再重装系统不值得,因此最便捷的方式就是使用docker来编译,效率最高),docker的环境构建如下所示:

#下载ubuntu 18.04的docker镜像
$docker pull ubuntu:18.04
$docker images
REPOSITORY   TAG         IMAGE ID       CREATED         SIZE
ubuntu       18.04       5a214d77f5d7   2 years ago     63.1MB#运行docker,设置共享目录,均为/data/project/ijkplayer
#使用image构建container,同时直接进入到docker中
$docker run -it -v /data/project/ijkplayer:/data/project/ijkplayer --name ijkplayer_container 5a214d77f5d7 /bin/bash#退出后再次进入docker时需执行
$docker start [container id]
$docker exec -it [container id] /bin/bash

之后docker的环境构建完成,接下来进入docker中编译,在docker中安装各种软件以及配置环境变量,具体如下:

#安装基础软件
$apt update
$apt install vim openssh-server git curl wget tar unzip vim tree
$apt install sudo build-essential openjdk-8-jdk yasm python#下载sdk和ndk
$wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip
$wget https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip#将sdk和ndk放置到正确位置
$mkdir /root/android-sdk/
$unzip ~/sdk-tools-linux-3859397.zip -d ~/android-sdk/
$unzip android-ndk-r14b-linux-x86_64.zip -d ~/android-sdk#更新sdkmanager
$cd /root/android-sdk/tools/bin
$./sdkmanager --update#编辑.bashrc
$vim ~/.bashrc
#添加环境变量至文件尾部
export ANDROID_HOME=$HOME/android-sdk
export ANDROID_SDK=$HOME/android-sdk
export ANDROID_NDK=$ANDROID_SDK/android-ndk-r14b#之后执行命令,使得环境变量生效
$source ~/.bashrc

环境安装和配置完成后,开始编译ijkplayer项目。

2 编译ijkplayer项目

首先编译项目依赖的ffmpeg项目,编译流程具体如下:

#从bash切换为dash
$sudo dpkg-reconfigure dash#重新配置module.sh链接,按照自己需要调整即可
$cd ijkplayer源码根路径
$cd config
$rm module.sh
$ln -s module-default.sh module.sh 
$cd -#开始编译ffmpeg相关库
$cd android/contrib
$./compile-ffmpeg.sh clean
$./compile-ffmpeg.sh all#解决各种错误,使用官方ubuntu18.04配置如下即可避免编译错误
$vim config/module.sh 
#注释掉相关配置避免报错
#export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-ffserver"
#export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-vda"
#添加新配置避免报错
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"

至此,就可以成功编译出来依赖的ffmpeg库。编译成功后,开始编译ijkplayer,具体流程如下:

$cd android
$./compile-ijk.sh all

至此,就可以成功编译出来ijkplayer工程。注意:这里编译出来的不仅仅是so库,本身就是一个Android Studio可以直接打开的工程。

3 生成文件处理

按需生成aar(这里以ijkplayer-java模块为例输出aar,直接制定gradlew 生成模块相关命令即可),找到so文件(方便拷贝),具体流程如下所示:

#编译ijkplayer-java模块并生成aar
$cd android/ijkplayer
$./gradlew :ijkplayer-java:assembleRelease#对应的64位和32位库文件位置
$ls -l android/ijkplayer/ijkplayer-java/build/outputs/aar/ijkplayer-java-release.aar
$ls -l android/ijkplayer/ijkplayer-arm64/src/main/libs/arm64-v8a/
total 11076
-rwxr-xr-x 1 root root 10433400 Jun 13 05:30 libijkffmpeg.so
-rwxr-xr-x 1 root root   418392 Jun 13 05:30 libijkplayer.so
-rwxr-xr-x 1 root root   481352 Jun 13 05:30 libijksdl.so
$ls -l android/ijkplayer/ijkplayer-armv7a/src/main/libs/armeabi-v7a
total 8712
-rwxr-xr-x 1 root root 8397448 Jun 13 05:29 libijkffmpeg.so
-rwxr-xr-x 1 root root  297936 Jun 13 05:30 libijkplayer.so
-rwxr-xr-x 1 root root  218836 Jun 13 05:30 libijksdl.so


http://www.ppmy.cn/server/49348.html

相关文章

Comingsoon-phtml

刚开始没有IP 单用户修改密码也需要输入用户密码,不能改 /boot/grub/grub.cfg配置文件下 ### BEGIN /etc/grub.d/00_header ### set superusers"root" password_pbkdf2 root grub.pbkdf2.sha512.10000.ACE3E31954E3E55AB9AB407CA8B6BC9D336B7376733F6B38…

idea 新建一个 JSP(JavaServer Pages)项目

环境设置: 确保你的开发环境中已经安装了 Java 开发工具包(JDK)和一个 Java Web 开发的集成开发环境(IDE),比如 Eclipse、IntelliJ IDEA 或者 NetBeans。你还需要一个 Web 服务器,比如 Apache T…

docker命令记录

基本命令和参数 docker run: 运行一个新的容器实例。-itd: 组合参数,含义如下: -i: 以交互模式运行容器,保持标准输入打开。-t: 分配一个伪终端。-d: 后台运行容器,即使容器启动后依然返回控制台。 设备映射 --device/dev/dri…

【代码随想录——动态规划——第二周】

1. 0-1背包理论基础(一) 题目网址&#xff1a;https://kamacoder.com/problempage.php?pid1046 package mainimport "fmt"func main() {var n, bagSize intfmt.Scanln(&n, &bagSize)weights : make([]int, n)values : make([]int, n)for i : 0; i < n; …

【保姆级讲解下QT6.3】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

C++中的模板方法模式

目录 模板方法模式&#xff08;Template Method Pattern&#xff09; 实际应用 数据处理流程 在线教育系统的课程模板 软件开发生命周期 总结 模板方法模式&#xff08;Template Method Pattern&#xff09; 模板方法模式是一种行为设计模式&#xff0c;它定义了一个操作…

Spring Boot集成Timefold Solver实现课程表编排

1. 什么是Timefold Solver&#xff1f; 每个组织都面临规划问题&#xff1a;使用一组有限的资源&#xff08;员工、资产、时间和金钱&#xff09;提供产品或服务。Timefold Solver 优化了此类规划&#xff0c;以更少的资源开展更多业务。这被称为约束满足编程&#xff08;属于…

力扣911.在线选举

力扣911.在线选举 类似1818. 将每个时刻的候选人存储 在时间段上做二分 class TopVotedCandidate {vector<int> time,person;public:TopVotedCandidate(vector<int>& persons, vector<int>& times) {int n persons.size();unordered_map<int,…