首先認(rèn)識下IJKPlayer
<p>
IJKPlayer 是一個(gè)基于 ffplay 的輕量級 Android/iOS 視頻播放器。API 易于集成县踢;編譯配置可裁剪邻悬,方便控制安裝包大小润梯;支持 硬件加速解碼,更加省電甥厦。而DanmakuFlameMaster 架構(gòu)清晰纺铭,簡單易用,支持多種高效率繪制方式選擇刀疙,支持多種自定義功能設(shè)置舶赔。
實(shí)現(xiàn)的特性有:
- 移除 FFmpeg 中不常用的特性以減小體積。
- 對一些在線視頻播放的 BUG 修復(fù)
- 支持安卓 API 9-22 和 iOS 5.1.1-8.3.X
- 使用各種平臺原生的渲染方式進(jìn)行優(yōu)化
IJKPlayer 由Bilibili開發(fā)并開源谦秧,這里是github的地址
接下來說下為什么要學(xué)習(xí)IJKPlayer
<p>
近幾年比較熱門的有直播竟纳,VR之類的,特別是移動(dòng)端直播發(fā)展的十分火熱疚鲤,所以對于一個(gè)移動(dòng)端的開發(fā)者來說掌握幾款開源播放器是很有必要的锥累,這樣我們可以根據(jù)自己的需求來對播放器進(jìn)行定制等等,所以廢話就不多說了集歇,
IJKPlayer的編譯
<p>
如果緊緊是使用而已的話桶略,其實(shí)可以選擇不對IJKPlayer進(jìn)行編譯,直接添加官方依賴:
# 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'
然后使用就可以了,當(dāng)然我們這里選擇對IJKPlayer际歼,這樣可以對整個(gè)流程進(jìn)行了解惶翻,因?yàn)榭赡芤院髸?huì)對IJKPlayer進(jìn)行定制
首先我們得確定是否配置了NDK與SDK環(huán)境
<p>
NDK和SDK的下載就不貼上來,確定本機(jī)有這兩者之后
配置環(huán)境變量
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
保存并關(guān)閉更新剛配置的環(huán)境變量
source .bash_profile
接下來驗(yàn)證是否配置成功
輸入
ndk-build
adb
echo ANDROID_NDK
echo ANDROID_SDK
只要這些都有反應(yīng)鹅心,說明配置已經(jīng)成功了
接下來就可以對IJKPlayer進(jìn)行編譯了
<p>
首先需要下載IJKPlayer源碼了
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
接下來進(jìn)行編譯
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文件夾
這個(gè)是可以直接導(dǎo)入AS的,導(dǎo)入后運(yùn)行即可
選擇視頻就可以播放了
IJKPlayer的精簡優(yōu)化
<p>
進(jìn)行到這里旭愧,我們會(huì)發(fā)現(xiàn)上面的ijkplayer里面的東西太多了颅筋,很多我們是用不到的,所以榕茧,我們把不需要的東西剔除掉垃沦,留下我們需要的東西,暫時(shí)精簡一下
首先新建一個(gè)Android工程
接下來把ijkplayer-armv7a/src/main/libs下的文件拷貝到新的工程的libs下用押。
然后把ijkplayer-java/build/outputs/aar/ijkplayer-java-release.aar復(fù)制到新工程的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的精簡工作就完成了
接下來我們來寫個(gè)簡單的例子驗(yàn)證下
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();
}
});
運(yùn)行如下
到這里IJKPlayer的編譯和簡單使用就基本結(jié)束了池充,后面會(huì)對IJKPlayer會(huì)有更加深入的介紹與認(rèn)識收夸,peace~~