google / google/ExoPlayer

Player gone black with error MediaCodecRenderer$DecoderInitializationException after some scrolling ups and down

Open
#7,482 3 comments 0 reactions 1 assignee Assigned to @microkatz View on GitHub
question
Dominant language
Java
Stars
21.9k
Forks
6k
PR merge metrics
No merged PRs in 30d

Description

I have recyclerview with Exoplayer instance.The recyclerview has been set up as 1 video per page (Full screen) with scrolling.

when I scroll 10 to 12 videos It goes black with error MediaCodecRenderer$DecoderInitializationException

Here is my recyclerview code.

```

@Override
public void onBindViewHolder(final Home_Adapter.CustomViewHolder holder, final int i) {
final Home_Get_Set item = dataList.get(i);
holder.setIsRecyclable(false);

try {

//to avoid refreshing player when notifyDataStateChanged() called
if(holder.playerview.getPlayer() != null)
{
return;
}

int MIN_BUFFER_DURATION = 2000;

int MAX_BUFFER_DURATION = 5000;

int MIN_PLAYBACK_START_BUFFER = 1500;

int MIN_PLAYBACK_RESUME_BUFFER = 2000;

LoadControl loadControl = new DefaultLoadControl.Builder()
.setAllocator(new DefaultAllocator(true, 16))
.setBufferDurationsMs(MIN_BUFFER_DURATION,
MAX_BUFFER_DURATION,
MIN_PLAYBACK_START_BUFFER,
MIN_PLAYBACK_RESUME_BUFFER)
.setTargetBufferBytes(-1)
.setPrioritizeTimeOverSizeThresholds(true).createDefaultLoadControl();

final SimpleExoPlayer player = new SimpleExoPlayer.Builder(context).setLoadControl(loadControl).build();

DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context,
Util.getUserAgent(context, "myapp"));

MediaSource videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(Uri.parse(item.video_url));

Log.d("resp", item.video_url);

player.prepare(videoSource);

player.setPlayWhenReady(false);
player.setRepeatMode(Player.REPEAT_MODE_ALL);

holder.playerview.setPlayer(player);

} catch (Exception e) {

}
}

@Override
public void onViewRecycled(@NonNull CustomViewHolder holder) {
int position = holder.getAdapterPosition();
if (holder.playerview.getPlayer() != null) {
holder.playerview.getPlayer().release();
}
super.onViewRecycled(holder);
}

@Override
public void onViewAttachedToWindow(@NonNull CustomViewHolder holder) {
super.onViewAttachedToWindow(holder);
try {
holder.playerview.getPlayer().setPlayWhenReady(true);
} catch (Exception e) {

}
}

@Override
public void onViewDetachedFromWindow(@NonNull CustomViewHolder holder) {
super.onViewDetachedFromWindow(holder);
try {
holder.playerview.getPlayer().setPlayWhenReady(false);
holder.playerview.getPlayer().release();
holder.playerview.setPlayer(null);
} catch (Exception e) {

}

}
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.