【问题标题】:Why doesn't MediaPlayer.seekTo(t) go to the exact specified instant "t"?为什么 MediaPlayer.seekTo(t) 不去确切的指定瞬间“t”?
【发布时间】:2014-09-06 01:53:21
【问题描述】:

我正在尝试让媒体播放器在本地存储的视频中播放特定范围。它似乎没有在我告诉它的指定时间开始。

示例:当我寻求 1000 时,它可以工作。但是当我寻求 1500 时,它会转到 2000。

我也尝试过暂停搜索,然后在搜索完成时开始,这没有任何区别。

这是代码:

mediaPlayer.start();
mediaPlayer.seekTo(time);

这正常吗?还是我用错了媒体播放器?

【问题讨论】:

  • seekTo(int msec) 应该以毫秒为单位。你用了毫秒吗?
  • 是的,我做到了。让我澄清一下,如果我寻求 1000,它工作正常。但是,如果我寻求 1500,它会转到 2000。
  • 你用的是哪个版本的安卓?
  • @AndrewT。好吧,我可以寻求很好但不是我想要的位置。

标签: java android android-mediaplayer


【解决方案1】:

这是一个编码问题。视频具有比其他帧存储更多信息的关键帧 (i-frames)。只有给定前一个关键帧,才能构建非关键帧。尝试显示非关键帧将显示绿点和像素化抖动屏幕。

现在,在某些 android 设备上没有为此实施解决方法,因此您会遇到这种奇怪的行为。例如,在 Nexus S 上,seekTo() 不一定会转到指定的帧。我尝试了其他具有相同 android 版本的设备,它们都很好。

【讨论】:

  • 关键帧同步是 Android MediaPlayer 实现的一个限制。例如,ExoPlayer 没有这个限制,并且能够准确地跳转到任意位置,尽管帧合成的潜在延迟更长。
猜你喜欢
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多