Я реализовал 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);
}
}
}
* 1009 publi c, чтобы его можно было остановить / освободить от других действий onStop, onPause. Чтобы видео не воспроизводилось после выхода из занятия.
Пожалуйста, помогите мне, чтобы каждое видео воспроизводилось правильно.