ijkplayer 详尽编译过程

摘要

对于比较热门新颖的技术,我还是比较喜欢的。尤其是短视频、直播应用的兴起,直接拉起 ffmpeg 和 ijkplayer 在技术开发界的声望。个人觉得学习一门技术,很多方面是要循序渐进,慢慢积累知识。通过前段时间对这方面进行了恶补,简单的了解一些,因此后来就对这块尝试了一下编译。不过你的“尝试”并不会很顺利,只有在不断尝试、学习、查阅、纠正和再尝试的过程中,才能有新的知识沉淀和突破。因此,这里我所有的一个博客记录,不是要展示什么,而是为了记录一下我的一个学习过程。并分享到更多的朋友,让朋友们在顺利编译的过程中,能够认识到和学习到更多,并了解自己应该在这方面怎么进行改进。

内容摘要

准备linux系统 ubuntu14.04
安装 git
安装 vim(vimcdoc-1.5.0.tar.gz)
安装 jdk(jdk-8u151-linux-x64.tar.gz)
安装 ndk(android-ndk-r10e-linux-x86_64.bin)
配置jdk、sdk和ndk环境
ijkplayer 编译
遇到的问题处理
将已编译源码导入 android studio

Ubuntu14.04配置

开启root用户并设置密码

系统刚安装之后,打开终端Ctrl + Alt + t 输入命令 ztman@ubuntu:~$ sudo passwd 然后输入密码就能成功设置了!

os的简体中文环境支持

通过这样的操作步骤 System Setting -> Language Support -> Language -> install/remove language -> Chinese(Simplified)

这里写图片描述

这个 [汉语(中国)] 是从底部位置拖动到这里,然后重启系统实现了系统语言的更改!

使用Windouws上的软件 WinSCP 连接 Ubuntu

首先通过命令 sudo apt-get update 当然,也可以在终端使用命令 sudo -s 这样之后,在当前的终端页面可以不再使用 sudo 作为命令的前缀。

这里写图片描述

然后通过命令sudo apt-get install openssh-server安装ssh, 然后启动ta命令sudo service ssh start

这里写图片描述
之后,使用 WinSCP 进行连接。(注:以防在使用连接的时候你搞不清怎么写,自己安装的系统关于什么用户名什么的都填写一致的名称更好)结果是这样的,这样后我们就能在windows在linux之间进行数据交互!

这里写图片描述

安装 git

使用安装命令sudo apt-get install git进行git进行安装,

这里写图片描述
安装之后,使用命令进行最初的设置,然后进行配置信息的查看:
git config --global user.name "your name" git config --global user.email "youre mail" git config --list

安装vim

通过命令安装vim sudo apt-get install vim

这里写图片描述

安装 jdk

通过以下步骤进行顺序执行

创建目录、加压、重定制指向
root@ubuntu:/usr/lib/jvm# mkdir -p /usr/lib/jvm root@ubuntu:/usr/lib/jvm# sudo mvjdk-8u151-linux-x64.tar.gz /usr/lib/jvm root@ubuntu:/usr/lib/jvm# cd /usr/lib/jvm root@ubuntu:/usr/lib/jvm# sudo tar jdk-8u151-linux-x64.tar.gz.tar.gz root@ubuntu:/usr/lib/jvm# sudo ln -sjdk1.8.0_151 java-8

配置jdk的环境变量
root@ubuntu:~#vim ~/.bashrc

环境设置代码
这里写图片描述
export JAVA_HOME=/usr/lib/jvm/java-8 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
执行立即生效
root@ubuntu:~#source ~/.bashrc

安装 ndk

首先对ndk的包进行权限的更改,然后进行解压。
sudo chmod 777 android-ndk-r10e-linux-x86_64.bin
./android-ndk-r10e-linux-x86_64.bin
这里写图片描述
现在已经看到执行成功!

配置ndk的环境变量

环境设置代码
这里写图片描述
export ANDROID_NDK=/home/ztman/opt/android-ndk-r10e export PATH=$ANDROID_NDK:$PATH

执行立即生效
root@ubuntu:~#source ~/.bashrc

命令查看ndk配置是否成功

这里写图片描述
这样的提示状态说明已经成功!

安装sdk并配置环境

这里写图片描述

这里写图片描述
使用命令wget http://dl.google.com/android/android-sdk_r24.2-linux.tgz 进行 sdk 的下载。
然后使用命令tar -xvf android-sdk_r24.2-linux.tgz进行解压。
敲入命令cd android-sdk-linux/tools进入到该目录,
使用命令./android update sdk --no-ui安装sdk的包。
这里写图片描述
最后使用代码

export PATH=${PATH}:$HOME/sdk/android-sdk-linux/platform-tools:$HOME/sdk/android-sdk-linux/tools:$HOME/sdk/android-sdk-linux/build-tools/22.0.1/

,配置sdk环境,打开方式依然使用vim。共同看一下结果:
这里写图片描述

ijkplayer 编译

克隆ijkplayer

这里写图片描述
使用命令git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android 拷贝ijkplayer到当前目录。
切换到工程的最新分支目录,执行命令
这里写图片描述
执行命令
cd ijkplayer-android git checkout -B latest k0.8.4
初始化需要进行编译的代码,使用命令./init-android.sh。 内容较多,我贴多一些初始化的过程图片:
这里写图片描述
这里写图片描述

进入ijkplayer编译阶段

执行以下命令
cd android/contrib ./compile-ffmepg.sh clean ./compile-ffmpeg.sh all
这里写图片描述
这里写图片描述
这里写图片描述

根据成功编译后的提示,继续编译ijkplayer的so文件

执行以下命令
cd .. ./compile-ijk.sh
这里写图片描述
这里写图片描述
到此就全部编译成功了。对于图片的截取,是对部分编译过程的一个快照,这样可以对自己的编译信息做一个对比。
##遇到的问题处理
然后在编译过程中容易遇到的问题:
1,就是sdk和ndk的环境配置问题;
2,就是yasm版本过旧,需要更新然后再次接着终端时候的命令重新编译;

sdk和ndk的环境配置问题

这个就不多说了,因为上面已经聊的很清楚。

yasm版本过旧

这个问题的出现会导致什么问题呢?请看:

这里写图片描述

因此我们需要对其进行处理:在我的操作中,我首先把目录切换到/home/ztman/opt/下,然后进行操作。
在此目录下依次执行命令:
curl http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz >yasm.tar.gz tar zxvf yasm-1.3.0.tar.gz cd yasm-1.3.0/ ./configure --prefix=/usr/local/yasm make make install
然后,在~/.bashrc 文件中添加环境变量:export PATH=$PATH:/usr/local/yasm/bin 保存之后执行命令:source ~/.bashrc

这里写图片描述

到此就解决了编译过程出现的那个问题,然后就可以继续中断的编译。

将已编译源码导入 android studio

首先表明一下我的实践结果,对于编译的源代码来讲,导入android studio的方式很普通,跟我们平时导入一个 existing project 是一样的。只需把 ./ijkplayer-android/android 目录下的 project ijkplayer导入就ok。
然后主要是怎么进行精简项目代码?!像这样。。。

这里写图片描述
减去那些 module 形如 ijkplayer-armXX、ijkplayer-x86XX。怎么使用他们的.so文件替代这些module?!

例如,为实现这种精简效果,这个时候把 module ijkplayer-armv7a下的armabi-v7a文件夹下的so文件导入到 module ijkplayer-java中;
这里写图片描述

在 module ijkplayer-java 的 src目录下新建一个 jniLibs 文件夹,并把armeabi-v7a导入。

这里写图片描述

关键的地方是在 module ijkplayer-javabuilder.gradle 文件中添加这几行代码,能够让其找到并引用 jniLibs 下的so文件。
这里写图片描述
这样之后,就能干掉那些不用的moudle了

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值