我有一个带有VideoView的应用程序,我设置了一个视频在VideoView中播放。在视频播放的某个时刻,它将暂停。然后在暂停一段时间后,它将再次开始播放视频,但是如果视频没有暂停,则向前搜索视频的位置。所以例如
视频开始播放
视频暂停6秒
视频暂停10秒
视频再次开始播放< ---此时我想让视频以16秒的标记开始播放。
为了达到这个效果,我设置了时间戳以完成所需的数学运算,因此我知道视频暂停了多长时间,然后当我再次启动时,我会调用mVideoView.seekTo(timePlayed + timePaused);
这一切都适用于Toshiba Thrive和Motorola Xoom。但是在Acer Iconia A200上似乎从我调用seekTo()向前看,当我调用getCurrentPosition()
时,VideoView将始终返回相同的时间。为了说明这一点,我设置了一个runnable,大约每1000ms触发一次,记录当前位置。以下是一些输出:
/****************
* These are from before it is paused/resumed
* you can see that the current time is functioning
* as expected.
******************/
Current Position = 0
Current Position = 734
Current Position = 1735
Current Position = 2703
Current Position = 3737
Current Position = 4738
Current Position = 5739
Current Position = 6740
Current Position = 7741
Current Position = 8742
Current Position = 9743
/**********************************
* These are from the exact same runnable
* after the video has been paused, and
* started again after seekTo().
* The position is no longer increasing.
* Note that the video is playing correctly on the screen
* while these logs happen.
**********************************/
Current Position = 23410
Current Position = 23410
Current Position = 23410
Current Position = 23410
23410是我传递给seekTo()的确切时间,所以似乎在我进行此调用之后,VideoView将始终返回我传入的任何内容,无论它是否实际上仍在播放和位置正在推进。
之前是否有其他人遇到此VideoView / MediaPlayer错误?我在已知问题组中看到了一些关于MediaPlayer为getCurrentPosition()返回错误值的内容,但没有找到任何会停止增加的地方。我见过的大多数人也试图播放音频而不是视频。
答案 0 :(得分:1)
这可能与设备的可用内存量有关。如果ram很低,背景活动可能会与您的计数器一起重新启动。
答案 1 :(得分:1)
在活动的暂停方法中释放并重置视频播放器,并在活动的onstart mtd中重新设置。搜索你必须使用精密计时器来包含用户videoview的设置时间。寻找到计时器时间的时间。
答案 2 :(得分:1)
可能是重载主UI线程的问题。由于视频是高数据元素而宏碁iconia不是一个很好的设备,它可能会导致一些数据短缺,异常甚至崩溃。尝试使用AsyncTask添加视频。