ExoPlayer学习记录

https://github.com/google/ExoPlayer

一、ExoPlayer介绍

ExoPlayer是安卓应用级的媒体播放器,不仅支持播放本地音、视频文件,而且还能够在线播放。它提供了许多Android本身并未支持的API,在此基础上还允许开发者进行各种个性化自定义和功能扩展。

二、使用方法

ExoPlayer的使用可以主要包括以下几个步骤:

  1. 项目中添加ExoPlayer依赖;
  2. 创建ExoPlayer实例;
  3. 将视图与ExoPlayer绑定;
  4. 将媒体文件添加到ExoPlayer中播放;
  5. 释放ExoPlayer对象。

接着将在项目中根据这五个步骤创建一个简单的ExoPlayer播放器来播放媒体文件。

(1)项目中添加ExoPlayer依赖

(a)在app/build.gradle中添加ExoPlayer依赖,点此获取版本号。

dependencies {
    ...
    implementation 'com.google.android.exoplayer:exoplayer:2.10.6'
}

(b)如果没有开启Java 8,那么还需要在app/build.gradle中添加以下代码

android {
    ...
    compileOptions {
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

(2)创建ExoPlayer实例

我们可以使用ExoPlayerFactory来创建ExoPlayer的实例,通过它能够创建多种具备不同定制化程度的ExoPlayer实例。但对于大多数场景,我们只需使用ExoPlayerFactory.newSimpleInstance类来创建ExoPlayer实例,它继承自ExoPlayer,并且拥有更多高级别的API。

SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(context);

需要注意的是,必须从单个应用程序线程访问ExoPlayer实例。对于绝大多数情况,这应该是应用程序的主线程(UI thread)。使用ExoPlayer的UI组件或IMA扩展时,需要使用应用程序的主线程。必须访问ExoPlayer实例的线程可以在创建播放器时通过传递Looper显式指定。如果未指定Looper,则使用创建播放器的线程的Looper,或者如果该线程没有Looper,则使用应用程序主线程的Looper。在所有情况下,都可以使用Player.getApplicationLooper查询必须从中访问播放器的线程的Looper。

(3)将视图与ExoPlayer绑定

ExoPlayer库已经为我们提供了PlayerView,它封装了PlayerControlView(播放器控制视图)、Subtitle View(字幕视图)和Surface(渲染视图)。在activity_main.xml文件中定义视图,使用以下方式将实图与播放器绑定:

playerView.setPlayer(player);




    

    


//MainActivity.java
public class MainActivity extends AppCompatActivity {

    private SimpleExoPlayer player;
    private PlayerView playerView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        playerView = findViewById(R.id.playerView);

        player = ExoPlayerFactory.newSimpleInstance(this);
        playerView.setPlayer(player);
    }
}

(4)将媒体文件添加到ExoPlayer中播放

ExoPlayer中,每个媒体都由一个MediaSource表示。要播放媒体文件,必须首先创建相应的MediaSource,然后将此对象传递给ExoPlayer.Prepare。以下代码显示如何使用适合播放MP4文件的MediaSource准备播放器。

final Uri mp4VideoUri = Uri.parse("file:///android_asset/example.mp4");
Factory dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, "com.example.exoplayerdemo"));
MediaSource videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(mp4VideoUri);
player.prepare(videoSource);
player.setPlayWhenReady(true); //参数为`true`时播放,为`false`时停止播放

(5)控制播放器

一旦播放器准备好,就可以通过调用播放器上的方法来控制播放。例如·setPlayWhenReady启动并暂停播放,各种seekTo方法在媒体内查找,setRepeatMode控制是否以及如何循环媒体,setShuffleModeEnabled控制播放列表洗牌,setPlaybackParameters调整播放速度和音调。如果播放器绑定到PlayerViewPlayerControlView,则与这些组件的用户交互将导致调用播放器上的相应方法。

example.png

(6)释放播放器

播放器不再使用时一定要记得释放资源!!!

player.release();

你可能感兴趣的:(ExoPlayer学习记录)