ExoMedia icon indicating copy to clipboard operation
ExoMedia copied to clipboard

Player- once complete video again not play

Open VadivelChinnasamy opened this issue 8 years ago • 17 comments

I use this lib to integrate and load video first time it played and restart is not available and if once complete video then no option to play again and if play again it not play a video(not more then onetime play a video)

VadivelChinnasamy avatar Jan 11 '17 10:01 VadivelChinnasamy

Maybe you can check this issues/291.

rayworks avatar Jan 11 '17 11:01 rayworks

Are you calling restart() and seeing this issue?

brianwernick avatar Jan 11 '17 19:01 brianwernick

I'm seeing this issue too, these are my setup details:

  • ExoMedia version: 3.1.1
  • Device OS version: 4.4
  • Devide Manufacturer: Zidoo
  • Device Name: X9

My code is really simple:

@Override
public void onCompletion() {
    Log.d("onCompletion", "player restart:" + Boolean.toString(player.restart()));
}

Logcat:

D/onCompletion: player restart:true
I/OMXClient: Using client-side OMX mux.
E/BufferQueue: [unnamed-30723-0] connect: already connected (cur=1, req=3)
E/MediaCodec: native_window_api_connect returned an error: Invalid argument (-22)
E/dalvikvm: Could not find class 'android.media.MediaCodec$CodecException', referenced from method com.google.android.exoplayer.MediaCodecTrackRenderer$DecoderInitializationException.getDiagnosticInfoV21
W/dalvikvm: VFY: unable to resolve instanceof 166 (Landroid/media/MediaCodec$CodecException;) in Lcom/google/android/exoplayer/MediaCodecTrackRenderer$DecoderInitializationException;
D/dalvikvm: VFY: replacing opcode 0x20 at 0x0000
E/ExoPlayerImplInternal: Internal track renderer error.
   com.google.android.exoplayer.ExoPlaybackException: com.google.android.exoplayer.MediaCodecTrackRenderer$DecoderInitializationException: Decoder init failed: OMX.MS.AVC.Decoder, MediaFormat(1, video/avc, -1, 109288, 1920, 1080, 0, 1.0, -1, -1, null, 60000000, false, -1, -1, -1, -1, -1)
      at com.google.android.exoplayer.MediaCodecTrackRenderer.notifyAndThrowDecoderInitError(MediaCodecTrackRenderer.java:427)
      at com.google.android.exoplayer.MediaCodecTrackRenderer.maybeInitCodec(MediaCodecTrackRenderer.java:413)
      at com.google.android.exoplayer.MediaCodecTrackRenderer.onInputFormatChanged(MediaCodecTrackRenderer.java:800)
      at com.google.android.exoplayer.MediaCodecVideoTrackRenderer.onInputFormatChanged(MediaCodecVideoTrackRenderer.java:333)
      at com.google.android.exoplayer.MediaCodecTrackRenderer.readFormat(MediaCodecTrackRenderer.java:540)
      at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:523)
      at com.google.android.exoplayer.SampleSourceTrackRenderer.doSomeWork(SampleSourceTrackRenderer.java:128)
      at com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:432)
      at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:211)
      at android.os.Handler.dispatchMessage(Handler.java:98)
      at android.os.Looper.loop(Looper.java:136)
      at android.os.HandlerThread.run(HandlerThread.java:61)
      at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
   Caused by: com.google.android.exoplayer.MediaCodecTrackRenderer$DecoderInitializationException: Decoder init failed: OMX.MS.AVC.Decoder, MediaFormat(1, video/avc, -1, 109288, 1920, 1080, 0, 1.0, -1, -1, null, 60000000, false, -1, -1, -1, -1, -1)
      at com.google.android.exoplayer.MediaCodecTrackRenderer.maybeInitCodec(MediaCodecTrackRenderer.java:413) 
      at com.google.android.exoplayer.MediaCodecTrackRenderer.onInputFormatChanged(MediaCodecTrackRenderer.java:800) 
      at com.google.android.exoplayer.MediaCodecVideoTrackRenderer.onInputFormatChanged(MediaCodecVideoTrackRenderer.java:333) 
      at com.google.android.exoplayer.MediaCodecTrackRenderer.readFormat(MediaCodecTrackRenderer.java:540) 
      at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:523) 
      at com.google.android.exoplayer.SampleSourceTrackRenderer.doSomeWork(SampleSourceTrackRenderer.java:128) 
      at com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:432) 
      at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:211) 
      at android.os.Handler.dispatchMessage(Handler.java:98) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.os.HandlerThread.run(HandlerThread.java:61) 
      at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40) 
   Caused by: java.lang.IllegalStateException
      at android.media.MediaCodec.native_configure(Native Method)
      at android.media.MediaCodec.configure(MediaCodec.java:262)
      at com.google.android.exoplayer.MediaCodecVideoTrackRenderer.configureCodec(MediaCodecVideoTrackRenderer.java:328)
      at com.google.android.exoplayer.MediaCodecTrackRenderer.maybeInitCodec(MediaCodecTrackRenderer.java:402)
      at com.google.android.exoplayer.MediaCodecTrackRenderer.onInputFormatChanged(MediaCodecTrackRenderer.java:800) 
      at com.google.android.exoplayer.MediaCodecVideoTrackRenderer.onInputFormatChanged(MediaCodecVideoTrackRenderer.java:333) 
      at com.google.android.exoplayer.MediaCodecTrackRenderer.readFormat(MediaCodecTrackRenderer.java:540) 
      at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:523) 
      at com.google.android.exoplayer.SampleSourceTrackRenderer.doSomeWork(SampleSourceTrackRenderer.java:128) 
      at com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:432) 
      at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:211) 
      at android.os.Handler.dispatchMessage(Handler.java:98) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.os.HandlerThread.run(HandlerThread.java:61) 
      at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)

This is the video I'm trying to restart, it's a 1920x1080 mp4.

Arlem avatar Jan 24 '17 10:01 Arlem

OK, I'll look in to this when I have some time (soon)

brianwernick avatar Jan 24 '17 16:01 brianwernick

It does work sometimes; I would exclude network connection problems, since the files are served from a local webserver.

I will test with more device at the same moment tomorrow.

Arlem avatar Jan 24 '17 16:01 Arlem

Yeah, It looks like something is not getting cleaned up correctly and therefore entering a bad state.

brianwernick avatar Jan 24 '17 18:01 brianwernick

I ran some tests with 5 devices contemporaneously. The number rappresents the number of restart executed before the exception was raised; e.g. 4 means that the video played 4 times (as the first video in onPreparedListener + 3 restart) and the fourth restart API was Fatal; after the Exception, the application was stopped and re-run via Android Studio:

Zidoo X9 1 4.4.4: 4, 4, 1 Zidoo X9 2 4.4.4: 6, 5, 7 Sony Xperia Z3 Tablet Compact 5.1.1, Sony Xperia Z2 Tablet 5.0.2, LG G Flex 2 6.0.1: 80 and counting

Sadly I don't have other KitKat devices to test this issue, could also be device specific.

Arlem avatar Jan 25 '17 08:01 Arlem

I have a Nexus 4 with 4.4.4 on it, so I'll verify if that is or isn't the issue.

brianwernick avatar Jan 26 '17 22:01 brianwernick

I'm not seeing this on the 4.0 branch with my Nexus 4 (4.4.4), would you mind checking with the listed devices?

brianwernick avatar Feb 21 '17 01:02 brianwernick

Hi @brianwernick , still crashing with a very similar error:

E/MediaCodec: native_window_api_connect returned an error: Invalid argument (-22)
E/dalvikvm: Could not find class 'android.media.MediaCodec$CodecException', referenced from method com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException.getDiagnosticInfoV21
W/dalvikvm: VFY: unable to resolve instanceof 168 (Landroid/media/MediaCodec$CodecException;) in Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
D/dalvikvm: VFY: replacing opcode 0x20 at 0x0000
E/ExoPlayerImplInternal: Renderer error.
  com.google.android.exoplayer2.ExoPlaybackException
      at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.throwDecoderInitError(MediaCodecRenderer.java:376)
      at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:363)
      at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:770)
      at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:341)
      at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readFormat(MediaCodecRenderer.java:501)
      at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:484)
      at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:464)
      at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:300)
      at android.os.Handler.dispatchMessage(Handler.java:98)
      at android.os.Looper.loop(Looper.java:136)
      at android.os.HandlerThread.run(HandlerThread.java:61)
      at com.google.android.exoplayer2.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
   Caused by: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.MS.AVC.Decoder, Format(1, null, video/avc, -1, null, [1920, 1080, -1.0], [-1, -1])
      at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:363) 
      at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:770) 
      at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:341) 
      at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readFormat(MediaCodecRenderer.java:501) 
      at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:484) 
      at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:464) 
      at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:300) 
      at android.os.Handler.dispatchMessage(Handler.java:98) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.os.HandlerThread.run(HandlerThread.java:61) 
      at com.google.android.exoplayer2.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40) 
   Caused by: java.lang.IllegalStateException
      at android.media.MediaCodec.native_configure(Native Method)
      at android.media.MediaCodec.configure(MediaCodec.java:262)
      at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.configureCodec(MediaCodecVideoRenderer.java:327)
      at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:352)
      at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:770) 
      at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:341) 
      at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readFormat(MediaCodecRenderer.java:501) 
      at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:484) 
      at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:464) 
      at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:300) 
      at android.os.Handler.dispatchMessage(Handler.java:98) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.os.HandlerThread.run(HandlerThread.java:61) 
      at com.google.android.exoplayer2.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)

Arlem avatar Feb 21 '17 11:02 Arlem

Any updates on this? This bug comes up even in the most simplistic setup (as in the README)

I'm using a temporary workaround:

player.setOnCompletionListener(() -> player.restart());

Aditya94A avatar May 24 '17 18:05 Aditya94A

Also finding this, just setup purely from the example. Can watch a video half way, then drag it back to the beginning and everything works fine, however if it hits the end, it can no longer be re-played

broakenmedia avatar Jun 07 '17 20:06 broakenmedia

Any updates on this? Is there any workaround in case I don't want the video to start immediately after finish (so restart() is not suitable)?

electrolobzik avatar Jul 05 '17 10:07 electrolobzik

In my case, I added a button with replay icon and I made GONE by default, once the video finishes, I show it and inside its onClick I restat the video!

 videoView.setOnCompletionListener(new OnCompletionListener() {
          @Override
          public void onCompletion() {
            videoView.pause();
            videoView.getVideoControls().hide();
            videoView.seekTo(0);
            replay.setVisibility(View.VISIBLE);
             replay.setOnClickListener(new OnClickListener() {
              @Override
              public void onClick(View v) {
                replay.setVisibility(View.GONE);
                videoView.restart();
              }
            });

AlaaZarifa avatar Jul 06 '17 10:07 AlaaZarifa

On a Pixel with Oreo. Not seeing anything in the logs, but when a video finishes the progress bar shows and I cannot start playing it again.

The only way I can get it to work is to call reset and setVideoURI in the completion listener (not very ideal or intuitive).

eygraber avatar Sep 07 '17 20:09 eygraber

@brianwernick video keeps on playing in loop what we need is once played on completion it should stop and onclick of play button it should play again.

ravirajjak avatar Apr 26 '18 12:04 ravirajjak

This is still happening, including in 5.0. Once the video runs to the end, seeking to the middle results in an infinite loading spinner.

zsmb13 avatar May 05 '21 15:05 zsmb13