一胁孙、前言
ExoPlayer是google開(kāi)源的應(yīng)用級(jí)媒體播放器項(xiàng)目鞋仍,目前已有1W+的start,并一直在維護(hù)雨饺。該開(kāi)源項(xiàng)目包含ExoPlayer庫(kù)和演示
demo对省,github地址:https://github.com/google/ExoPlayer。
二口渔、優(yōu)缺點(diǎn)比較
與Android內(nèi)置的MediaPlayer相比样屠,ExoPlayer具有許多優(yōu)點(diǎn):
*支持通過(guò)HTTP(DASH)和SmoothStreaming進(jìn)行動(dòng)態(tài)自適應(yīng)流,這兩種都不受MediaPlayer的支持缺脉。還支持許多其他格式
*能夠自定義和擴(kuò)展播放器痪欲,以適應(yīng)各種不同需求。 ExoPlayer專(zhuān)門(mén)設(shè)計(jì)了這一點(diǎn)攻礼,大部分組件都可以自己替換
*官網(wǎng)說(shuō)了很多业踢,其實(shí)說(shuō)到底最主要的就是各個(gè)組件可以自定義,還可以接入ffmpeg組件礁扮,基本能滿(mǎn)足99.9%的需求
與IJKPlayer和Vitamio相比知举,ExoPlayer具有的優(yōu)點(diǎn):
*導(dǎo)入項(xiàng)目之后APK體積增加小
缺點(diǎn):
*最低支持版本4.4
*實(shí)現(xiàn)比較復(fù)雜
三、概述
ExoPlayer庫(kù)的核心是Exoplayer接口太伊,Exoplayer公開(kāi)了傳統(tǒng)的高級(jí)媒體播放器功能负蠕,例如緩沖媒體、播放倦畅、
暫停和seek等功能遮糖,ExoPlayer通過(guò)組件實(shí)現(xiàn)替他高級(jí)功能。ExoPlayer公同的組件有:
*MediaSource:定義多媒體數(shù)據(jù)源叠赐,從Uri中讀取數(shù)據(jù)欲账,傳入ExoPlayer屡江。
*TrackSelector:軌道提取器,從MediaSource中提取各個(gè)軌道的二進(jìn)制數(shù)據(jù)赛不,交給Render渲染惩嘉。
*LoadControl:可以控制MediaSource,比如什么時(shí)候開(kāi)始緩沖踢故,緩沖多少之后暫停緩沖
四文黎、入門(mén)
1、添加依賴(lài)
項(xiàng)目根目錄中的build.gradle文件中包含jcenter倉(cāng)庫(kù):
repositories {
jcenter()
}
用app模塊的build.gradle文件中添加ExoPlayer庫(kù)的依賴(lài):
compile 'com.google.android.exoplayer:exoplayer:r2.X.X'
2殿较、創(chuàng)建播放器
// 創(chuàng)建帶寬
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
// 創(chuàng)建軌道選擇工廠(chǎng)
TrackSelection.Factory videoTrackSelectionFactory = new A
// 創(chuàng)建軌道選擇實(shí)例
TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
// 創(chuàng)建播放器實(shí)例
SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);
3耸峭、添加SimpleExoPlayerView,綁定SimpleExoPlayer
在XML文件中添加SimpleExoPlayerView控件淋纲,此控件實(shí)現(xiàn)了視頻播放的基本界面劳闹,內(nèi)部包含了PlaybackControlView,實(shí)現(xiàn)了對(duì)視頻播放的基本控制洽瞬。添加SimpleExoPlayerView之后綁定SimpleExoPlayer
simpleExoPlayerView.setPlayer(player);
4本涕、準(zhǔn)備并開(kāi)始播放器
// 創(chuàng)建加載數(shù)據(jù)的工廠(chǎng)
dataSourceFactory = new DefaultDataSourceFactory(this,Util.getUserAgent(this,"MyApplication"),null);
Uri uri = Uri.parse(url);
// 創(chuàng)建資源
ExtractorMediaSource mediaSource = new ExtractorMediaSource.Factory(dataSourceFactory).createMediaSource(uri);
// 準(zhǔn)備播放
player.prepare(mediaSource);
// 開(kāi)始播放
player.setPlayWhenReady(true);
5、退出時(shí)釋放播放器
@Override
protected void onDestroy() {
super.onDestroy();
if (player != null) {
player.release();
}
}
6伙窃、離開(kāi)界面時(shí)暫停播放
@Override
protected void onPause() {
super.onPause();
if (player != null) {
player.setPlayWhenReady(false);
}
}