2011-10-10 90 views
5

我目前正在开发一款适用于android的视频播放器。我创建了一个显示当前字幕的简单文本视图。Android原生视频播放器,带字幕

问题是: MediaPlayer getCurrentPosition()方法只给我时间以秒为单位。我需要毫秒数值才能正确同步字幕和电影。

getCurrentPosition应该给我以毫秒为单位的时间,但它给出了以秒为单位的时间* 1000(每个数字以“000”结尾)。

  1. 你知道更好的方法吗?
  2. 如何获得毫秒级的时间?
  3. 准确地在秒(000ms)时间内生成事件也可以。

有什么建议吗?

+0

从其中u已经学会在video.Can添加字幕你分享我的链接? – 2014-11-22 16:25:57

回答

3

如果有人需要,我做了我的解决方案。

我开发了字幕模块。为了得到准确的毫秒数,我为系统和玩家定时器做了一个同步器。

视频播放的每20秒我做这个程序:

  1. 索取当前秒的媒体播放器(得到的s秒)
  2. 索取当前秒的媒体播放器,直到结果为s + 1(S0)
  3. 获取系统时间(毫秒)时间(M0)

现在,如果我想在当前电影毫秒:

  1. 获取当前系统时间(millisecons)(M1)
  2. 电影实时为:S0 +(M1-M0)

容易,并且产生了同步字幕)

+2

是否有可能共享代码。我正在研究类似的要求。任何帮助,将不胜感激 – maxwells

+0

不幸的是,该代码是受版权保护的。我不拥有它:/ – inversus

+0

但是你可以分享它的一部分...... – user1767754

0

1)解析字幕文件
2)使用CounterTimer类将其设置为player.getDuration(),然后在tick方法中设置一个您选择的时间间隔(在每个时间间隔的tick上调用)获取玩家的当前位置使用player.getCurrentPosition(); (记住这会以毫秒为单位返回你的时间)。还请记住存储并保持毫秒左右。
3)将其转换为您所需的格式,并将其与您拍摄的时间散列图或阵列进行匹配。
4)用合适的文本更新你的TextView,它覆盖在播放器上。
5)取消定时器持续时间然后(你可以实现一个新的定时器持续时间)。
6)onFinish时间计时器完成后(),您可以开始将旧定时器millisecondLeft时间你在步骤2,保存

完蛋了;)

+0

Tnks的答复。我的player.getCurrentPosition()以秒为单位返回值:53000ms,54000ms。用它来获得真实的ms是不可能的。 – inversus