VideoView无法从所需位置播放视频

Hem*_*ria 13 android

我正在使用VideoView和搜索栏,但当我通过seekBar搜索所需位置时,它从开始播放视频.

我尝试这段代码:

 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {

           mVideoView.seekTo(progress);
}

Mat*_*sne 25

VideoView没有,OnSeekCompleteListener()但你可以MediaPlayer从onPrepared方法中访问VideoView然后设置OnSeekCompleteListener,如下所示:

mVideoView.setOnPreparedListener(new OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {

        mp.setOnSeekCompleteListener(new OnSeekCompleteListener() {
            @Override
            public void onSeekComplete(MediaPlayer mp) {
                //TODO: Your code here
            }
        });

    }
});
Run Code Online (Sandbox Code Playgroud)

  • 我认为这应该是首选的解决方案.与维护自己的VideoView分支相比,它更不脏,也更不麻烦 (2认同)

Pet*_*ran 5

的呼叫VideoView.seekTo()是对的包装MediaPlayer.seekTo()。即使仍在执行实际搜索,该函数几乎立即返回。因此,您要等待通过寻求完成MediaPlayer.OnSeekCompleteListener。

但是,正如Reno所说,该标准VideoView不支持OnSeekCompleteListener。

但是您可以复制并在本地自定义VideoView类,以自己添加此支持。

首先,从VideoView.java的副本开始。或者,您可以克隆整个框架/基础存储库,但警告它下载的数据超过1 gig。

将VideoView.java复制到您的Eclipse Android项目中,它将开始构建但失败。这是我进行编译的方法:

  1. 更新package语句以匹配您的项目。
  2. 注释掉对的引用MetaData。解决方法在我的待办事项清单上。这些需要替换为对的调用MediaMetadataRetriever。
  3. 替换mContext为对getBaseContext()

现在您可以为添加代码了OnSeekCompleteListener。该实现类似于其他侦听器,即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;
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,更新您自己的代码:

  1. 更新引用以android.widget.VideoView使用您的自定义VideoView。
  2. 实现一个侦听器并通过调用进行设置setOnSeekCompleteListener()。

现在,当搜寻真正完成时,您的代码会收到通知,然后可以执行后续搜寻。


Ren*_*eno 4

你必须等待寻找完成,不幸的VideoView是没有OnSeekCompleteListener()(为什么谷歌?-_-)