我想在我的RecyclerView项目中播放视频,有点像Instagram。一次只展开一个项目,因此不必同时播放视频。
我目前正在使用ExoPlayer。我在我的项目中有一个用于RecyclerView的PlayerView。
问题是,在播放器中我的表现不好,在滚动和扩展时非常糟糕。 Performany已经很糟糕了,只是在没有加载和播放视频的情况下将播放器放入项目中,但加载它时会更糟糕。
我也尝试过VideoView,但它似乎没有太大的区别。
为了获得更好的表现,我已经做了:
recyclerView.setHasFixedSize(true);
recyclerView.setItemViewCacheSize(10);
recyclerView.setDrawingCacheEnabled(true);
recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
adapter.hasStableIds();
这有点帮助,但它无法解决性能问题。
任何想法可能是什么问题?我很感激和想法。
编辑:
这是我设置ExoPlayer的方法:
public void showTutuorItems(Context context, Boolean show, String resource) {
if (show) {
seperator.setVisibility(View.VISIBLE);
lytTutor.setVisibility(View.VISIBLE);
playerView = itemView.findViewById(R.id.exoPlayer);
playerView.setUseController(false);
playerView = itemView.findViewById(R.id.exoPlayer);
playerView.setUseController(false);
SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(
new DefaultRenderersFactory(context),
new DefaultTrackSelector(), new DefaultLoadControl());
playerView.setPlayer(player);
player.setPlayWhenReady(true);
player.seekTo(0, 0);
player.setRepeatMode(Player.REPEAT_MODE_ALL);
player.setVolume(0);
Uri uri = Uri.parse(resource);
MediaSource mediaSource = buildMediaSource(uri);
player.prepare(mediaSource, true, false);
player.addListener(new Player.EventListener() {
//...
}
} else {
seperator.setVisibility(View.GONE);
lytTutor.setVisibility(View.GONE);
}
}
private MediaSource buildMediaSource(Uri uri) {
return new ExtractorMediaSource.Factory(
new DefaultHttpDataSourceFactory("exoplayer-codelab")).
createMediaSource(uri);
}
这是在我的OnCreateViewHolder中调用此方法:
if (workout.getCurrentExercsise().getTutor() != null) {
holder.showTutuorItems(activity, true, workout.getCurrentExercsise().getTutor().getItems().get(0).getResource());
} else {
holder.showTutuorItems(activity, false, null);
}
在我的OnBindViewHolder中有一些UI东西并处理展开/折叠功能。这不应该导致问题,因为没有ExoPlayer它可以正常工作。