Android 使用ExoPlayer視頻播放 (一)

一、前言

ExoPlayer是google開源的應用級媒體播放器項目,目前已有1W+的start,并一直在維護。該開源項目包含ExoPlayer庫和演示
demo,github地址:https://github.com/google/ExoPlayer。

二、優(yōu)缺點比較

與Android內(nèi)置的MediaPlayer相比,ExoPlayer具有許多優(yōu)點:
*支持通過HTTP(DASH)和SmoothStreaming進行動態(tài)自適應流,這兩種都不受MediaPlayer的支持。還支持許多其他格式
*能夠自定義和擴展播放器,以適應各種不同需求。 ExoPlayer專門設計了這一點,大部分組件都可以自己替換
*官網(wǎng)說了很多,其實說到底最主要的就是各個組件可以自定義,還可以接入ffmpeg組件,基本能滿足99.9%的需求
與IJKPlayer和Vitamio相比,ExoPlayer具有的優(yōu)點:
*導入項目之后APK體積增加小
缺點:
*最低支持版本4.4
*實現(xiàn)比較復雜

三、概述

ExoPlayer庫的核心是Exoplayer接口,Exoplayer公開了傳統(tǒng)的高級媒體播放器功能,例如緩沖媒體、播放、
暫停和seek等功能,ExoPlayer通過組件實現(xiàn)替他高級功能。ExoPlayer公同的組件有:
*MediaSource:定義多媒體數(shù)據(jù)源,從Uri中讀取數(shù)據(jù),傳入ExoPlayer。
*TrackSelector:軌道提取器,從MediaSource中提取各個軌道的二進制數(shù)據(jù),交給Render渲染。
*LoadControl:可以控制MediaSource,比如什么時候開始緩沖,緩沖多少之后暫停緩沖

四、入門

1、添加依賴

項目根目錄中的build.gradle文件中包含jcenter倉庫:

repositories {
    jcenter()
}

用app模塊的build.gradle文件中添加ExoPlayer庫的依賴:

compile 'com.google.android.exoplayer:exoplayer:r2.X.X'

2、創(chuàng)建播放器

// 創(chuàng)建帶寬
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
// 創(chuàng)建軌道選擇工廠
TrackSelection.Factory videoTrackSelectionFactory = new A
// 創(chuàng)建軌道選擇實例
TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
// 創(chuàng)建播放器實例
SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);

3、添加SimpleExoPlayerView,綁定SimpleExoPlayer

在XML文件中添加SimpleExoPlayerView控件,此控件實現(xiàn)了視頻播放的基本界面,內(nèi)部包含了PlaybackControlView,實現(xiàn)了對視頻播放的基本控制。添加SimpleExoPlayerView之后綁定SimpleExoPlayer

 simpleExoPlayerView.setPlayer(player);

4、準備并開始播放器

// 創(chuàng)建加載數(shù)據(jù)的工廠
dataSourceFactory = new DefaultDataSourceFactory(this,Util.getUserAgent(this,"MyApplication"),null);
Uri uri = Uri.parse(url);
// 創(chuàng)建資源
ExtractorMediaSource mediaSource = new ExtractorMediaSource.Factory(dataSourceFactory).createMediaSource(uri);
// 準備播放
player.prepare(mediaSource);
// 開始播放
player.setPlayWhenReady(true);

5、退出時釋放播放器

 @Override
    protected void onDestroy() {
        super.onDestroy();
        if (player != null) {
            player.release();
        }
    }

6、離開界面時暫停播放

@Override
    protected void onPause() {
        super.onPause();
        if (player != null) {
            player.setPlayWhenReady(false);
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容