25

我正在尝试寻找 Android 视频中的特定位置,但由于其行为表现出的不一致,我完全被卡住了。这是我做过的事情的清单

  1. VideoView.Seekto 为一个视频进入 5:19,一个视频为 5:17,另一个视频为 5:32,相同毫秒(326000 毫秒)!
  2. 由于 VideoView 不支持 onSeekListener,所以我修改了源 VideoView 并添加了对它的支持。然而它并没有停下来从我想要的地方开始寻找——总是有一个滞后!onSeekListener 在我希望它停止之前大约 6 秒被立即调用。在许多情况下,即使我从 onSeekCompleteListener 调用 video.start,搜索栏也会显示正确的时间并突然跳回几秒钟

为什么这如此不一致?在视频视图中是否有明确的方法可以在几毫秒内找到您想去的地方?我知道我应该使用 MediaPLayer + Surface 但由于 VideoView 只是两者的包装,我在源代码处对其进行了修改但无济于事。

我知道这一点:http ://code.google.com/p/android/issues/detail?id=9135 但是有没有办法解决这个问题并有明确的方法

1.) 以毫秒为单位寻找确切的时间

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

4

3 回答 3

1

您必须等待搜索完成。

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
            } 
        }); 

    } 
}); 
于 2017-12-12T19:34:58.957 回答
-1

我知道这不是您问题的正确解决方案,但请查看通过 Google 的默认视频视图制作的这个库

https://github.com/brianwernick/ExoMedia

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

您可以使用此视频视图并emVideoView.seekTo(1000);在视频中跳转到 1000 毫秒。搜索完成时,您还必须setOnSeekCompletionListener执行处理。

于 2017-12-15T11:12:57.140 回答
-3

我这样解决了这个问题

seekTo() 函数在 VideoView 中不起作用

于 2013-03-30T15:31:39.673 回答