Android VideoView seekto()函数极不一致

Android VideoView seekto()函数极不一致,android,android-videoview,seek,Android,Android Videoview,Seek,我试图在Android的视频中寻找一个特定的位置,但我完全被卡住了,因为它在行为上表现出了不一致性。这是我做过的事情的清单 VideoView.Seekto在相同的毫秒(326000毫秒)内,一个视频转到5:19,一个视频转到5:17,另一个视频转到5:32 由于VideoView不支持onSeekListener,因此我修改了 源VideoView并添加了对它的支持。然而,它并没有停下来休息 从我想要的地方开始寻找——总有一个滞后!这个 onSeekListener会在我想要它的位置前6秒立即

我试图在Android的视频中寻找一个特定的位置,但我完全被卡住了,因为它在行为上表现出了不一致性。这是我做过的事情的清单

  • VideoView.Seekto在相同的毫秒(326000毫秒)内,一个视频转到5:19,一个视频转到5:17,另一个视频转到5:32
  • 由于VideoView不支持onSeekListener,因此我修改了 源VideoView并添加了对它的支持。然而,它并没有停下来休息 从我想要的地方开始寻找——总有一个滞后!这个 onSeekListener会在我想要它的位置前6秒立即调用 停止。在许多情况下,搜索栏显示正确的时间,并突然跳回到几秒钟,即使我正在调用video.start 从onSeekCompleteListener
  • 这为什么如此不一致?在videoview中,是否有一种确定的方法可以在毫秒内找到您想要去的地方?我知道我应该使用MediaPLayer+Surface,但由于VideoView只是这两者的包装,所以我正在从源代码处对其进行修改,但并没有用

    我知道这一点: 但是有没有办法绕过这个问题,并有一个明确的解决办法

    1.)查找以毫秒为单位的精确时间

    2.)在准确的时间暂停和恢复


    我这样解决了这个问题


    您必须等待搜索完成。

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

    videoView.setOnPreparedListener(new OnPreparedListener() { 
        @Override 
        public void onPrepared(MediaPlayer mp) {
    
            mp.setOnSeekCompleteListener(new OnSeekCompleteListener() {
                @Override 
                public void onSeekComplete(MediaPlayer mp) {
                    //Seek completed. Move seekbar
                } 
            }); 
    
        } 
    }); 
    

    我知道这不是你问题的正确解决方案,但看看这个库,它是通过谷歌的默认视频视图制作的

    它具有默认视频视图支持的所有功能和更多功能


    您可以使用此视频视图和
    emVideoView.seekTo(1000)
    在视频中跳到1000毫秒。你也可以让
    setOnSeekCompletionListener
    在seek完成时进行处理。

    我对这篇文章感兴趣。你对此有什么答案或解释吗?基本上这就是问题所在-如果你需要详细信息,请告诉我。我相信媒体文件本身存在不准确之处。Hi@Sufian是的,我的问题更多的是关于视频观看时间搜索的不一致性,而不是另一个答案似乎暗示的搜索工作/不工作。虽然我不记得我做了什么,但我认为我们当时接受了较小的delta seek错误。所以对我来说,我不确定其他答案是否提供了一种方法,即给定一个时间X,精确地寻找到那一点。虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-抱歉,编辑答案是为了更好地理解,而不是仅仅粘贴URL。