首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VideoView seekto()函数极不一致

VideoView seekto()函数极不一致
EN

Stack Overflow用户
提问于 2012-10-17 16:42:00
回答 4查看 11.7K关注 0票数 26

我试图在Android的视频中寻找一个特定的位置,但由于它的行为不一致,我被完全困住了。这是我做过的事情的清单

  1. 一个视频为5:19,一个视频为5:17,另一个视频为5:32 (326000毫秒)!
  2. 由于VideoView不支持onSeekListener,所以我修改了源代码VideoView并添加了对它的支持。但它不会停顿,并开始寻找从哪里,我希望它-总是有一个滞后!在我想要它停止之前,onSeekListener马上就被调用了。在许多情况下,搜索栏显示了正确的时间,并突然向后跳了几秒钟,即使我是从video.start从onSeekCompleteListener调用。

为什么这样不一致?是否有明确的方式来寻求你想去的地方,以毫秒为单位的视频视图?我知道我应该使用MediaPLayer + Surface,但是由于VideoView只是两者的包装器,所以我在源代码上对它进行了修改,但没有效果。

我知道这一点:http://code.google.com/p/android/issues/detail?id=9135,但是有什么办法可以绕过这件事,并且有一个明确的方法

1.)寻求准确的时间(毫秒) 2.)在确切的时间暂停和恢复?

EN

回答 4

Stack Overflow用户

发布于 2017-12-12 19:34:58

您必须等待寻求完成.

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

代码语言:javascript
运行
复制
videoView.setOnPreparedListener(new OnPreparedListener() { 
    @Override 
    public void onPrepared(MediaPlayer mp) {

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

    } 
}); 
票数 1
EN

Stack Overflow用户

发布于 2022-08-15 13:45:31

10年后,我遇到了同样的问题。

无论如何,对我来说,解决方案是使用inside VideoView (Android 8.0+):

解释:

videoView默认seekTo函数使用mediaPlayer默认seekTo函数(来源 )

mediaPlayer默认seekTo重载与SEEK_PREVIOUS_SYNC模式下的seekTo ( int)相同,只有当您想要查找具有时间戳早于或与给定的毫秒相同的同步帧时,才应使用SEEK_PREVIOUS_SYNC。

但是,SEEK_CLOSEST将寻找可能是或可能不是同步帧但最接近或与毫秒相同的帧。

票数 0
EN

Stack Overflow用户

发布于 2017-12-15 11:12:57

我知道这不是你问题的正确解决方案,但是看看这个在Google默认视频视图上创建的库

https://github.com/brianwernick/ExoMedia

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

您可以使用此视频视图和emVideoView.seekTo(1000);跳转到视频中的1000毫秒。您还可以让setOnSeekCompletionListener在寻求完成时进行处理。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12939159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档