Skip to content

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

@parthbhatti

Description

@parthbhatti

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) {

        }

    }

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions