Android ExoPlayer播放器使用
转载请标明出处:http://blog.csdn.net/zhijunhong/article/details/51056302 谢谢!~
项目需要播放网络url视频,搜索后发现google官方有提供ExoPlayer播放器,实现后发现基本可满足需求(附源码)。现将代码分享如下:
- 播放器视图xml文件
- 资源文件初始化
- 初始化播放器设置
- 关闭并释放播放器资源
- 播放异常处理
播放器视图xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<com.google.android.exoplayer2.ui.SimpleExoPlayerView
android:id="@+id/simpleExoPlayerView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
资源文件初始化
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_exoplaye);
mSimpleExoPlayerView = (SimpleExoPlayerView) findViewById(R.id.simpleExoPlayerView);
mainHandler = new Handler();
mShouldAutoPlay = true;
clearResumePosition();
if (CookieHandler.getDefault() != DEFAULT_COOKIE_MANAGER) {
CookieHandler.setDefault(DEFAULT_COOKIE_MANAGER);
}
mSimpleExoPlayerView.requestFocus();
}
初始化播放器设置
/**
* 初始化播放器
*/
private void initializePlayer() {
boolean needNewPlayer = player == null;
if (needNewPlayer) {
TrackSelection.Factory adaptiveTrackSelectionFactory = new AdaptiveTrackSelection.Factory(BANDWIDTH_METER);
trackSelector = new DefaultTrackSelector(adaptiveTrackSelectionFactory);
player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);
player.addListener(this);
mSimpleExoPlayerView.setPlayer(player);
//设置自动播放
player.setPlayWhenReady(mShouldAutoPlay);
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this,
Util.getUserAgent(this, "Multimedia"));
ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
//TODO...更换*.mp4文件地址
MediaSource videoSource = new ExtractorMediaSource(Uri.parse("http://xxxxxx.xxxxxx.mp4"), dataSourceFactory, extractorsFactory, mainHandler,
new ExtractorMediaSource.EventListener() {
@Override
public void onLoadError(IOException error) {
Log.e(TAG, "onLoadError: " + error.getMessage());
}
});
boolean haveResumePosition = resumeWindow != C.INDEX_UNSET;
if (haveResumePosition) {
player.seekTo(resumeWindow, resumePosition);
}
player.prepare(videoSource);
}
}
关闭并释放播放器资源
/**
* 释放播放器
*/
private void releasePlayer() {
if (player != null) {
updateResumePosition();
player.release();
player = null;
trackSelector = null;
}
}
播放异常处理
实现 com.google.android.exoplayer2.Player.EventListener;接口,重写onPlayerError()方法。
Notice:github上的5.1.2版本才将Player.EventListener接口移到core模块,如果用的是2.4.x版本会遇到找不到Player类的错误。
@Override
public void onPlayerError(ExoPlaybackException error) {
if (error != null) {
Log.e(TAG, "onLoadError: " + error.getMessage());
showToast("播放异常");
}
mErrorState = true;
if (isBehindLiveWindow(error)) {
clearResumePosition();
initializePlayer();
} else {
updateResumePosition();
}
}
还原上次播放位置
/**
* 还原上次播放
*/
private void updateResumePosition() {
resumeWindow = player.getCurrentWindowIndex();
resumePosition = Math.max(0, player.getContentPosition());
Log.e(TAG, "resumeWindow: " + resumeWindow);
Log.e(TAG, "resumePosition: " + resumePosition);
}
重置上次播放
private void clearResumePosition() {
resumeWindow = C.INDEX_UNSET;
resumePosition = C.TIME_UNSET;
}
//end-以上就是google ExoPlayer播放器实现步骤。如果需要更多的定制内容,还请移步官方文档
https://google.github.io/ExoPlayer/guide.html