在videoView android中获得错误后循环缓冲视频



我想在VideoView获得错误后重复缓冲视频

我用下面的代码播放我的视频:

  public void playVideo() {

        if (!isAdded()) {
            return;
        }
        try {
            // Get the URL from String VideoURL
            Uri video = Uri.parse("http://www.sample-videos.com/video/mp4/480/big_buck_bunny_480p_20mb.mp4");
            videoView.setMediaController(new MediaController(
                    getActivity()));
            videoView.setVideoURI(video);

        } catch (Exception e) {
            ApplicationClass.gLogger.out("Error Happened in initializing ");
            e.printStackTrace();
        }

        videoView.requestFocus();
        videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            // Close the progress bar and play the video
            public void onPrepared(MediaPlayer mp) {
                videoView.start();
                mp.setLooping(true);
            }
        });
        videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer mediaPlayer, int i, int i1) {
                //playVideo again;
                if (i == MediaPlayer.MEDIA_ERROR_SERVER_DIED || i == MediaPlayer.MEDIA_ERROR_IO || i == MediaPlayer.MEDIA_ERROR_UNKNOWN) {
                    mediaPlayer.reset();
                }
                return true;
            }
        });
    }

一切都很好,但是当我失去连接时,我的视频不循环了。

使用MediaPlayer.MEDIA_ERROR_IO调用错误侦听器时

。我想循环我的缓冲视频。

我在onError侦听器中尝试了什么?

再次调用playVideo()方法

使用mediaPlayer.seekTo()mediaPlayer.start()

使用videoView.seekTo() .

我在SO中搜索了很多,看到许多链接,但不适合我。

因为我们不能从VideoView中获取缓冲区数据,所以我不能将缓冲区数据保存到文件中并从中读取。

thanks in advance

<<p> //更新/strong>

seek在videoView中不起作用,因为正如videoView的源代码中提到的,当我们调用seek方法时,下面的方法被调用:

private boolean isInPlaybackState() {
        return (mMediaPlayer != null &&
                mCurrentState != STATE_ERROR &&
                mCurrentState != STATE_IDLE &&
                mCurrentState != STATE_PREPARING);
    }

作为mCurrentStateSTATE_ERROR寻求不再工作,但我还不知道如何解决我的问题。

也许会有帮助:

    textureView.setOnErrorListener(new MediaPlayer.OnErrorListener() {
        @Override
        public boolean onError(MediaPlayer mp, int what, int extra) {
            //it,s be called without isInPlaybackState()
            mp.seekTo(second);
            return false;
        }
    });

这只是建议如何绕过调用isInPlaybackState()

最新更新