【问题标题】:Youtube android player api getCurrentTimeMillis only updates every 1 secondYoutube android player api getCurrentTimeMillis 仅每 1 秒更新一次
【发布时间】:2013-09-11 18:12:03
【问题描述】:

我正在使用 Youtube player android api(最新版本,取自 https://developers.google.com/youtube/android/player/)。在我的应用程序中,我添加了一个计时器,它每 200 毫秒调用一次玩家的 getCurrentTimeMillis 方法。问题是该方法每经过一秒都会返回相同的值。例如,我在运行应用程序后得到以下输出:

1877 1877年 1877年 1877年 1877年 2878 2878 2878 2878 2878 3879 3879 3879 3879 3879 4880 4880 4880 4880 4880 5881

如您所见,时间每 1 秒有效更新一次(5 个计时器滴答声)。 100 毫秒的定时器延迟(每 10 个滴答声)也会发生同样的情况。 当然,javascript api 或 AS3 api 不会发生这种情况。

有谁知道为什么会发生这种情况以及如何获得更高的分辨率?

我在 Nexus 7 和 Galaxy Nexus(都运行 android 4.3)上尝试了相同的应用程序并得到了相同的结果。

提前致谢! 罗伊

【问题讨论】:

  • 你能分享一些代码吗?
  • 函数getCurrentTimeMillis在视频完全加载后返回更准确的值。可能您正在对播放时仍在下载的视频进行测试。
  • 嘿,感谢重播...在我开始查询时间之前,我已确保视频已加载(发生了 VideoLoaded 状态更改)。我正在使用以下代码:`Timer t = new Timer(); TimerTask scanTask = new TimerTask() { @Override public void run() { timedFunction(); }}; t.schedule(scanTask, 0, 200);私人无效 timedFunction() { if (_player !=null && _player.isPlaying()) { newTime = _player.getCurrentTimeMillis(); Log.d("YoutubeTime",Integer.toString(newTime)); } ` @Emmanuel @asktomsk
  • 嗨,现在,我使用秒表解决了这个问题,该秒表跟踪时间和在播放状态更改时重置它的代码片段。它不是最佳的,但我从实时获得大约 50 毫秒的精度(=任何给定秒内的第一个 getCurrentTimeMillis 响应)。我仍然很想知道这个“错误”是否会在其他 android 版本/youtube 版本/设备上复制,以及它是否是 android youtube 播放器 API 的错误或只是正常行为(与 Iframe API 和 AS3 相比)。罗伊
  • 嘿,有人碰巧解决了这个问题吗?

标签: android youtube-api


【解决方案1】:

你好,我有同样的问题。我无法解决这个问题......

这是4年前的麻烦。仍然没有人回答。

所以,我编写了代码以按照我想要的方式处理它。

它仍然有 200 毫秒的时间错误。但比 1 秒要好

boolean first = true;
currentVideoTime = Yplayer.getCurrentTimeMillis();
while (!quitThread)
{
    Thread.sleep(100);
    if(Yplayer.isPlaying())
    {
        if(currentVideoTime == Yplayer.getCurrentTimeMillis())
        {
            if(first)
            {
                startTime = SystemClock.uptimeMillis();
                first = false;
            }
            timeInMilliseconds = SystemClock.uptimeMillis() - startTime;
            updateTime = currentVideoTime+timeInMilliseconds;
       }
       else
       {
           updateTime = currentVideoTime = Yplayer.getCurrentTimeMillis();
           first = true;
       }
}

以下是考试时间表


[getCurrentTimeMillis][updateTime]

[0][152]

[0][289]

[0][429]

[0][565]

[691][715]

[691][691]

[691][691]

[691][831]

[691][971]

[691][1111]

[691][1251]

[1671][1392]

[1671][1671]

[1671][1671]

[1671][1816]

[1671][1949]

[1671][2082]

[1671][2228]

[1671][2363]

[2516][2512]

[2516][2516]

[2516][2516]

[2516][2658]

[2516][2796]

[2516][2938]

[3502][3073]

[3502][3502]

[3502][3502]

[3502][3641]

[3502][3782]

[3502][3921]

[3502][4053]

[4510][4158]

[4510][4510]

[4510][4510]

[4510][4650]

[4510][4791]

[4510][4931]

[4510][5070]

[4510][5212]

[5528][5346]

[5528][5528]

[5528][5528]

[5528][5693]

[5528][5860]

[5528][6001]

[6479][6164]

[6479][6479]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 2016-01-23
    • 2016-11-07
    • 1970-01-01
    相关资源
    最近更新 更多