在Ubuntu下编译IjkPlayer-android

前端时间项目中用到了视频播放的功能,没办法又不想使用系统自带的播放器,没有为什么就是不想用,我也希望谷歌爸爸能出一款最基础的播放器控件,然后可以灵活的自己定制UI,唉!经过一番寻找终于找到了IjkPlayer,这是Bilibili的一款基于ffmpeg视频编解码库的播放器控件,看起来挺不错的。此外还发现了一篇二次封装的UI效果 基于ijkplayer的视频播放器,仿Bilibili客户端,集成沉浸式全屏、弹幕、触屏控制、视频源切换等功能 封装的不错。于是采用这个来做自己的播放器控件了。但实践的过程中还是有不少坑要踩的,比如视频的解码格式的支持,安卓各CPU平台的兼容,以及https的支持这些都是我遇到的问题,网上的很多库都是对这些支持都是不全的,怎么办呢?还是自己动手丰衣足食,重新去编译一遍Ijkplayer的源码。找到 ijpliayer github 地址看到它的Readme中有编译过程的描述,嗯!大致就酱紫, 不过还是有些需要注意的。下面带大家一起一步一步的重新编译。

  • 准备工作

这里我使用在ubuntu下去编译它,没有为什么就是方便。
1.下载virtualbox虚拟机官网地址
2.下载unbutu17.04镜像文件
3.下载winSCP百度搜一下就有,用来方便在win和unbutu之间传输文件用

  • 开始安装工作

当系统安装完成以后,我们进入桌面,开始编译ijkplayer。

1.首先先去下载androidNDK 以及SDK

android NDK选择Linux的
android SDK选择一个高一点的Linux版本就好。
下载完成之后打开终端
Ctrl+Alt+T
我们在home\Downloads目录下会看到我们下载的ndk和sdk压缩包我们把它们解压出来,一个是.zip的另一个是.tgz的。
cd ~/Downloads
unzip xxx.zip
tar zxvf xxx.taz
将两个压缩文件解压到当前目录即可。

2.下载openjdk

sudo apt-get install openjdk-8-jre-headless
之后会自动安装好。

3.配置SDK和NDK环境变量

新下载好的linux版本的sdk缺少一点东西,需要我们自己去下,好在官方readme中已经说明了打开和windows中的sdkmanager一样的东西,在Linux中不叫这个名字,叫做android.sh 在tools目录下。说明如下
To start the SDK Manager,please execute the program "android".
启动android sdk manager
sh ~/Downloads/android-sdk-linux/tools/android
之后就是和windows一样了。
我们下载最新的Android SDK Tools和Android SDK Platform-tools以及Android SDK Build-tools,在下载一个最新的Android SDK Platform即可。
配置环境变量
sudo gedit /etc/profile
/etc/profile 的文件是让所有用户都可用。
在配置文件末尾加入如下部分并保存:

export PATH=~/Downloads/android-sdk-linux/platform-tools:$PATH
export PATH=~/Downloads/android-sdk-linux/tools:$PATH
export ANDROID_NDK=~/Downloads/android-ndk-r14b
export PATH=~/Downloads/android-ndk-r14b:$PATH

让环境变量立即生效
source /etc/profile
你可以用简单的命令来测试一下是否生效了如
adb -version

3.安装一些软件

sudo apt-get update
sudo apt-get install git
sudo apt-get install yasm

4.下载ijkplayer-android

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android

  • 5.开始编译

cd ijkplayer-android
先做初始化
./init-android.sh
初始化从网上提取ffmpeg库,有段时间,可以先去泡杯茶。
如果视频播放需要支持Https协议的还需要执行一遍如下初始化脚本。
./init-android-openssl.sh

1.编译各个平台的openssl

cd android/contrib
./compile-openssl.sh clean
之后最好一个一个的对应CPU平台去编译openssl,也能一次全部编译,但是我之前出过问题,后来单独编译就好了。可以更具自己的需求分别选择执行下面步骤,过程也是挺漫长的。

./compile-openssl.sh armv7a
./compile-openssl.sh armv5a
./compile-openssl.sh arm64
./compile-openssl.sh x86
./compile-openssl.sh x86_64
2.编译各个平台的ffmpeg

根据官方的说法,如果我们需要更多的编解码格式,得先执行下面的命令


在Ubuntu下编译IjkPlayer-android_第1张图片
ijkplayer

回到ijkplayer-android目录并链接module文件

cd ../..
cd config/
rm module.sh
ln -s module-default.sh module.sh
cd ..
cd android/contrib/
./compile-ffmpeg.sh clean

其实打开module.sh里面是各个编解码的格式,可以在里面开启或禁用
如果需要启用/停用某个解码器或功能只需要修改 enable/disable即可。
之后最好一个一个的对应CPU平台去编译ffmpeg,也能一次全部编译,但是我之前出过问题,后来单独编译就好了。可以更具自己的需求分别选择执行下面步骤,过程也是挺漫长的。

./compile-ffmpeg.sh armv7a
./compile-ffmpeg.sh armv5a
./compile-ffmpeg.sh arm64
./compile-ffmpeg.sh x86
./compile-ffmpeg.sh x86_64
3.编译ijkplayer native代码

做法也是一个一个平台去编译它。不要图省事一起编译。

cd ..
./compile-ijkplayer.sh armv7a
./compile-ijkplayer.sh armv5a
./compile-ijkplayer.sh arm64
./compile-ijkplayer.sh x86
./compile-ijkplayer.sh x86_64

编译好后就能在android/ijkplayer目录中对于的文件夹里找到了这里截取一段x86文件夹的图

在Ubuntu下编译IjkPlayer-android_第2张图片
ijkplayer-x86

新版的编译后新增了一个libijksound.so文件,之前是没有的,通常libijkffmpeg.so 有我图中这么大就差不多了,不同的平台大小都不一样。其他两个文件相对来是就几百k。
到这里一切都ok了。我们可以使用winSCP工具把编译好的ijkplayer传送到win上然后使用。

欢迎共同探讨更多安卓,java,c/c++相关技术QQ群:392154157

你可能感兴趣的