Exoplayer Recyclerview 第二次播放错误的视频
Posted
技术标签:
【中文标题】Exoplayer Recyclerview 第二次播放错误的视频【英文标题】:Exoplayer Recyclerview Playing Wrong Video Second Time 【发布时间】:2020-07-09 02:55:36 【问题描述】:我已经在回收站视图中实现了 Exoplayer。假设有两个视频,当我播放第一个视频时,它可以正常播放。
当我在暂停第一个视频后播放第二个视频时,它可以正常播放。但是第一个视频的时间栏开始了,如果我从第一个视频视图暂停视频,第二个视频就会暂停(能够从第一个视频控制器控制第二个视频)
现在,如果我暂停第二个视频并播放第一个视频,它只会播放第二个视频,并且能够从两个视频控制器控制此视频。
请看下面的回收站查看代码:
public class ChatsCursorAdapter extends RecyclerView.Adapter<ChatsCursorAdapter.ChatsHolder>
public SimpleExoPlayer exoPlayer;
private Cursor mCursor;
private Context mContext;
public ChatsCursorAdapter(Cursor mCursor,
Context mContext)
this.mCursor = mCursor;
this.mContext = mContext;
@NonNull
@Override
public ChatsHolder onCreateViewHolder(@NonNull ViewGroup viewGroup,
int i)
View V = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.list_chat_message,
viewGroup,
false);
// Build The Exoplayer
exoPlayer = new SimpleExoPlayer.Builder(mContext).build();
return new ChatsHolder(V);
@Override
public void onBindViewHolder(@NonNull final ChatsHolder chatsHolder,
final int i)
String url = mCursor.getString(mCursor.getColumnIndex("url"));
// Play Video When Play Button Clicked
chatsHolder.ivSharedImage.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
try
Uri videoUri = Uri.parse(url);
chatsHolder.sevSharedVideo.setPlayer(exoPlayer);
// Produces DataSource instances through which media data is loaded.
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(mContext,
Util.getUserAgent(mContext,
"Dackeree"));
// This is the MediaSource representing the media to be played.
MediaSource videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(videoUri);
// Prepare the player with the source.
exoPlayer.prepare(videoSource);
exoPlayer.setPlayWhenReady(true);
catch (Exception e)
Toast.makeText(mContext,
"Some Error Occurred...",
Toast.LENGTH_SHORT)
.show();
);
@Override
public int getItemCount()
return mCursor.getCount();
public class ChatsHolder extends RecyclerView.ViewHolder
final ImageView ivSharedImage;
final PlayerView sevSharedVideo;
ChatsHolder(View view)
super(view);
ivSharedImage = view.findViewById(R.id.l_chat_message_iv_shared_image);
sevSharedVideo = view.findViewById(R.id.l_chat_message_sev_shared_video);
SimpleExoplyer exoplyer 是公开的,因此它可以从其他活动 onStop、onPause 中停止/释放。这样视频在离开活动后就不会继续播放了。
请帮助我,让每个视频都能正常播放。
【问题讨论】:
youtube.com/watch?v=mqc0CR9UvIU recyclerview 中 exoplayer 的完整工作示例 【参考方案1】:我在 Kotlin 中创建了一个具有不同功能的 repo,其中一个是我从该视频中提取的视频中的 Recyclerview
:https://www.youtube.com/watch?v=z44CLCafepA
【讨论】:
以上是关于Exoplayer Recyclerview 第二次播放错误的视频的主要内容,如果未能解决你的问题,请参考以下文章
Recyclerview 中的 Exoplayer 错误,源错误没有可用的提取器
RecyclerView 和 Firebase Storage 快速滚动 ExoPlayer 异常
如何用recyclerview和viewpager2实现exoplayer?