我正在开发一个应用程序,其中视频以3个不同的间隔暂停。第二次暂停后,如果单击了一个按钮,则它应从上一个位置重新开始。

例如。如果当前在1:30暂停,则单击一个按钮,它将转到上一个书签,即00:45。

我认为使用MediaPlayer.seekTo()将帮助我实现这一目标。但是,seekTo()根本不寻找位置。即使在调用seekTo()之后,currentPosition仍保持不变;

这是我的代码。

mediaPlayer.setOnSeekCompleteListener(new OnSeekCompleteListener() {
    @Override
    public void onSeekComplete(MediaPlayer mp) {
        Log.d("VID_PLAYER","Seek Complete. Current Position: " + mp.getCurrentPosition());
        mp.start();
    }
});

在下面的某个地方,我有这个...
mediaPlayer.seekTo(45000);
问题是什么?为什么不是seekTo();在职的?
任何帮助,将不胜感激。

我目前正在Android v4.0.3(ICS)上对其进行测试

最佳答案

Android无法执行seekTo的原因之一是由于视频的编码异常。例如,可以以MP4格式在文件的开头和结尾指定所谓的“搜索点”(即搜索索引)。如果在文件开头指定了它们,则seekTo将正确运行。但是,如果在文件末尾指定了它们,那么seekTo将不执行任何操作,并且视频将从seekTo之后的开头开始。

这已在Android 4.4.2中得到确认是错误还是功能。

P.S. 在YouTube上,所有视频均在文件开头以“搜索点”进行编码。因此,如果您在应用程序中遇到seekTo的问题,请首先使用YouTube中的一些视频文件检查您的应用程序。也许您需要重新编码视频...

10-08 14:37