VideoView not playing Video from desired position

后端 未结 4 618
别那么骄傲
别那么骄傲 2020-12-01 18:31

i am using VideoView and seek bar but when i seekTo(..) on desired position through seekBar it play video from starting.

i trying this code:

 public void          


        
相关标签:
4条回答
  • 2020-12-01 19:03

    You should use

    mVideoView.seekTo(progress, SEEK_CLOSEST)

    0 讨论(0)
  • 2020-12-01 19:06

    VideoView does not have a OnSeekCompleteListener() but you can access the MediaPlayer from the onPrepared method of the VideoView and then set the OnSeekCompleteListener, like this :

    mVideoView.setOnPreparedListener(new OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
    
            mp.setOnSeekCompleteListener(new OnSeekCompleteListener() {
                @Override
                public void onSeekComplete(MediaPlayer mp) {
                    //TODO: Your code here
                }
            });
    
        }
    });
    
    0 讨论(0)
  • 2020-12-01 19:13

    You have to wait for the seeking to complete, unfortunately VideoView does not have a OnSeekCompleteListener() (why Google? -_-)

    0 讨论(0)
  • 2020-12-01 19:25

    The call to VideoView.seekTo() is a wrapper around MediaPlayer.seekTo(). This function returns almost immediately even though the actual seeking is still being performed. Therefore you want to wait for seeking to complete via MediaPlayer.OnSeekCompleteListener.

    However, as Reno mentioned, the standard VideoView does not support OnSeekCompleteListener.

    But you can copy and locally customize the VideoView class to add this support yourself.

    First, start with a copy of VideoView.java. Or you can clone the entire frameworks/base repo but warning it is over 1 gig of data to download.

    Copy VideoView.java into your Eclipse Android project and it will start building but fail. Here's what I did to get it to compile:

    1. Update the package statement to match your project.
    2. Comment out the references to MetaData. The fix for this is on my todo list. These need to be replaced with calls to MediaMetadataRetriever.
    3. Replace mContext with calls to getBaseContext()

    Now you are ready to add the code for OnSeekCompleteListener. The implementation is similar to the other listeners, i.e OnCompletionListener.

    public class VideoView extends SurfaceView
            implements MediaPlayerControl {
    
        // The client's listener which is the notification callback.
        private OnSeekCompleteListener mOnSeekCompleteListener;
    
        // Set up MediaPlayer to forward notifications to client.
        private MediaPlayer.OnSeekCompleteListener mSeekCompleteListener =
            new MediaPlayer.OnSeekCompleteListener() {
            public void onSeekComplete(MediaPlayer mp) {
                if (mOnCompletionListener != null) {
                    mOnCompletionListener.onCompletion(mMediaPlayer);
                }
            }
        };
    
        // API for client to set their listener.
        public void setOnSeekCompleteListener(OnSeekCompleteListener l)
        {
            mOnSeekCompleteListener = l;
        }
    }
    

    Finally, update your own code:

    1. Update references to android.widget.VideoView to use your customized VideoView.
    2. Implement a listener and set it via by calling setOnSeekCompleteListener().

    Your code now receives notifications when the seek has really completed and it can then perform subsequent seeks.

    0 讨论(0)
提交回复
热议问题