使用:
- 添加依赖(依赖的是整个ExoPlayer库):
implementation 'com.google.android.exoplayer:exoplayer:2.11.1'
1.2 也可以依赖用到的库(例如:如果只播放DASH类型的媒体资源,可以只依赖 Core, DASH, UI这三个库):
implementation 'com.google.android.exoplayer:exoplayer-core:2.11.1'
implementation 'com.google.android.exoplayer:exoplayer-dash:2.11.1'
implementation 'com.google.android.exoplayer:exoplayer-ui:2.11.1'
1.3 整个ExoPlayer库包括5个子库,依赖了整个ExoPlayer库和依赖5个子库是一样的
-
exoplayer-core
:核心功能 (必要) -
exoplayer-dash
:支持DASH内容 -
exoplayer-hls
:支持HLS内容 -
exoplayer-smoothstreaming
:支持SmoothStreaming内容 -
exoplayer-ui
:用于ExoPlayer的UI组件和相关的资源。
- 布局文件:
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
private PlayerView playerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
[...]
playerView = findViewById(R.id.video_view);
}
- 创建一个SimpleExoPlayer实例,SimpleExoPlayer是ExoPlayer接口的一个默认的通用实现。
private ExoPlayer player;
private boolean playWhenReady;
private int currentWindow;
private long playbackPosition;
private void initializePlayer() {
player = ExoPlayerFactory.newSimpleInstance(
new DefaultRenderersFactory(this),
new DefaultTrackSelector(), new DefaultLoadControl());
playerView.setPlayer(player);
player.setPlayWhenReady(playWhenReady);
player.seekTo(currentWindow, playbackPosition);
}
传入了默认的渲染工厂(DefaultRenderersFactory),默认的轨道选择器(DefaultTrackSelector)和默认的加载控制器(DefaultLoadControl),然后把返回的播放器实例赋值给成员变量player。
- 创建一个MediaSource。
private void initializePlayer() {
[...]
//创建一个mp4媒体文件
Uri uri = Uri.parse(getString(R.string.media_url_mp4));
MediaSource mediaSource = buildMediaSource(uri);
player.prepare(mediaSource, true, false);
}
private MediaSource buildMediaSource(Uri uri) {
return new ExtractorMediaSource.Factory(
new DefaultHttpDataSourceFactory("exoplayer-codelab")).
createMediaSource(uri);
}