【问题标题】:videoview oncompletionlistener not called in android?在android中没有调用videoview oncompletionlistener?
【发布时间】:2014-10-29 14:40:10
【问题描述】:

我在 imageview 和 videoview 中显示图像和视频,但问题是视频何时显示 播放 onpreparedlistener 调用但当视频完成时 oncompletion 监听器未调用 当 videoview 完成时,我为下一个视频或图像增加 i

它也给我这样的 logcat 错误,但视频正在播放

10-29 20:12:47.770: E/MediaPlayer(3975): 错误 (1, -2147483648)

private void nextVideo(String path){

        mImageview.setVisibility(View.GONE);


    if(mVideoview.getVisibility()==View.GONE){
        mVideoview.setVisibility(View.VISIBLE);

    }

    controller = new MediaController(HomeActivityNewViewPager.this);
    mVideoview.setVideoURI(Uri.parse(path));
    mVideoview.setMediaController(null);
    controller.setMediaPlayer(mVideoview);

    mVideoview.setOnPreparedListener(new OnPreparedListener() {

       public void onPrepared(MediaPlayer mp) {

                    mVideoview.start();
                    long duration = mVideoview.getDuration();
                    second=duration;
                    //handler.removeCallbacks(runnable);
                    //handler.postDelayed(runnable,second);

       }
   });


    mVideoview.setOnCompletionListener(new OnCompletionListener() {

        @Override
        public void onCompletion(MediaPlayer mp) {

               Log.v("video view completed","---"+i);

               mp.reset();

               if(automode){

                   if(i==myplaylistlocal.size() || i>myplaylistlocal.size())
                   {

                       String checkcount=spreferences.getString("roundcount", "");
                       Log.v("roundcount==Before Integer.parseInt","---->"+roundcount);
                       if(roundcount>=Integer.parseInt(checkcount))
                       {   
                           roundcount=0;
                           Log.v("roundcount==After Integer.parseInt","---->"+roundcount);
                           updateplaylist();
                       }

                       i=0;                                                
                       indexplus();
                       imagesautomode();
                       i++;

                   }
                   else if(i==myplaylistlocal.size()-1)
                   {
                       imagesautomode();
                       i++;
                   }
                   else{
                       imagesautomode();
                   }

               }
               else{
                   i++;
                   images();
               }



        }
    });

    mVideoview.setOnErrorListener(new OnErrorListener() {

        @Override
        public boolean onError(MediaPlayer mp, int what, int extra) {

            Log.v("Error in video playing","----->"+i);

            return true;
        }

    }); 

}

【问题讨论】:

  • 您是否从视频播放器返回任何错误?有些代码可能格式不正确等。我注意到有些视频编码不正确,并且在视频播放器感知到它们完成之前就结束了。
  • 10-29 20:12:47.770: E/MediaPlayer(3975): error (1, -2147483648) 这是在 logcat 中显示,但仍然没有调用 onerrorlistner

标签: android android-videoview


【解决方案1】:

无论哪种方式,上面提到的错误都是 MEDIA_ERROR_UNKNOWN。如果这个视频是为这个应用程序制作的,我会确保它是为 Android 正确编码的。还要确保它明确定义了它的端点。

http://developer.android.com/reference/android/media/MediaPlayer.html#MEDIA_ERROR_UNKNOWN

这是一种解决方法,但可能适用于您的情况:

@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
    if(what == MediaPlayer.MEDIA_ERROR_UNKNOWN) 
        //ERROR UNKNOWN - COULD BE IMPROPERLY FORMATTED VIDEO {
        //MOVE ON TO NEXT VIDEO
        //DO LOGGING
    }
}

【讨论】:

  • 对,我遇到过自定义视频的结束标签不正确,媒体播放器不知道如何完成它们的情况。您尝试的视频是否使用自定义视频?
猜你喜欢
  • 2012-02-17
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多