首先认识下IJKPlayer
<p>
IJKPlayer 是一个基于 ffplay 的轻量级 Android/iOS 视频播放器。API 易于集成;编译配置可裁剪,方便控制安装包大小;支持 硬件加速解码,更加省电。而DanmakuFlameMaster 架构清晰,简单易用,支持多种高效率绘制方式选择,支持多种自定义功能设置。
实现的特性有:
- 移除 FFmpeg 中不常用的特性以减小体积。
- 对一些在线视频播放的 BUG 修复
- 支持安卓 API 9-22 和 iOS 5.1.1-8.3.X
- 使用各种平台原生的渲染方式进行优化
IJKPlayer 由Bilibili开发并开源,这里是github的地址
接下来说下为什么要学习IJKPlayer
<p>
近几年比较热门的有直播,VR之类的,特别是移动端直播发展的十分火热,所以对于一个移动端的开发者来说掌握几款开源播放器是很有必要的,这样我们可以根据自己的需求来对播放器进行定制等等,所以废话就不多说了,
IJKPlayer的编译
<p>
如果紧紧是使用而已的话,其实可以选择不对IJKPlayer进行编译,直接添加官方依赖:
# required, enough for most devices.
compile 'tv.danmaku.ijk.media:ijkplayer-java:0.6.3'
compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.6.3'
# Other ABIs: optional
compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.6.3'
compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.6.3'
compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.6.3'
compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.6.3'
# ExoPlayer as IMediaPlayer: optional, experimental
compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.6.3'
然后使用就可以了,当然我们这里选择对IJKPlayer,这样可以对整个流程进行了解,因为可能以后会对IJKPlayer进行定制
首先我们得确定是否配置了NDK与SDK环境
<p>
NDK和SDK的下载就不贴上来,确定本机有这两者之后
配置环境变量
open -e .bash_profile
在文件后加入
export ANDROID_DIR=/Users/admin/Documents
export ANDROID_SDK=$ANDROID_DIR/sdk
export ANDROID_NDK=$ANDROID_DIR/android-ndk-r12b
export PATH=$PATH:$ANDROID_NDK:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools
保存并关闭更新刚配置的环境变量
source .bash_profile
接下来验证是否配置成功
输入
ndk-build
adb
echo ANDROID_NDK
echo ANDROID_SDK
只要这些都有反应,说明配置已经成功了
接下来就可以对IJKPlayer进行编译了
<p>
首先需要下载IJKPlayer源码了
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
接下来进行编译
cd ijkplayer-android
./init-android.sh
cd config
rm module.sh
ln -s module-default.sh module.sh
cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
cd ..
./compile-ijk.sh all
编译好后,我们可以找到ijkplayer文件夹
这个是可以直接导入AS的,导入后运行即可
选择视频就可以播放了
IJKPlayer的精简优化
<p>
进行到这里,我们会发现上面的ijkplayer里面的东西太多了,很多我们是用不到的,所以,我们把不需要的东西剔除掉,留下我们需要的东西,暂时精简一下
首先新建一个Android工程
接下来把ijkplayer-armv7a/src/main/libs下的文件拷贝到新的工程的libs下。
然后把ijkplayer-java/build/outputs/aar/ijkplayer-java-release.aar复制到新工程的libs下
再后面就是把ijkplayer-example/src/main/java/tv中的部门代码拷过来
最后就是修改build.gradle,把so和aar文件依赖添加上去
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.0"
defaultConfig {
applicationId "com.example.ijkplayerdemo"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
repositories {
mavenCentral()
flatDir {
dirs 'libs' //this way we can find the .aar file in libs folder
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.0.0'
compile 'com.android.support:design:24.0.0'
compile(name: 'ijkplayer-java-release', ext: 'aar')
}
到这里ijkplayer的精简工作就完成了
接下来我们来写个简单的例子验证下
videoView.setAspectRatio(IRenderView.AR_ASPECT_FIT_PARENT);
videoView.setVideoURI(Uri.parse("http://zv.3gv.ifeng.com/live/zhongwen800k.m3u8"));
videoView.setOnPreparedListener(new IMediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(IMediaPlayer mp) {
videoView.start();
}
});
运行如下
到这里IJKPlayer的编译和简单使用就基本结束了,后面会对IJKPlayer会有更加深入的介绍与认识,peace~~