Phonegap Media getCurrentPosition不准确且速度慢

时间:2012-09-28 04:48:10

标签: audio cordova

我非常失望地发现,现在我已经准备好将我的html5应用程序迁移到使用phonegap的手机上,播放音频的能力就像永久动作。它几乎就在那里,但并不完全。

Androids(至少是冰淇淋三明治)的答案是Phonegap媒体api。据大家介绍。

问题在于我真正关心播放音频时的当前时间。在运行Chrome的Mac上,我计算了需要多长时间:

POS = audio.currentTime

它不到一毫秒。

使用Phonegap media api,我必须调用一个异步函数,等待它回调,然后我得到当前的媒体位置。这需要5到150毫秒以上。它不一致,而且速度很慢。

这也引出了一个问题:现在几点了?如果需要150ms才能得到时间,我是否在150ms或者结束时获得了时间?我真的不能确定我得到的时间真的接近当前时间。

我还在编写潜艇导航软件是一件好事,因为有了这么可怕的时间,我永远无法确定我的位置。

我现在正在使用系统时钟来跟踪时间,并使用getCurrentPosition()不时重新同步。但是,我仍然可以超过一百毫秒。

我的问题:任何人都有更好的方法吗?

编辑:

查看Cordova的代码:

   /**
 * Get current position of playback.
 *
 * @return                  position in msec or -1 if not playing
 */
public long getCurrentPosition() {
    if ((this.state == STATE.MEDIA_RUNNING) || (this.state == STATE.MEDIA_PAUSED)) {
        int curPos = this.player.getCurrentPosition();
        this.handler.webView.sendJavascript("cordova.require('cordova/plugin/Media').onStatus('" + this.id + "', " + MEDIA_POSITION + ", " + curPos / 1000.0f + ");");
        return curPos;
    }
    else {
        return -1;
    }
}

在我看来,这应该执行得非常快......除了调用sendJavascript()之外。我想知道这是神秘延迟的起源吗?

出于我的目的,我不需要onStatus事件:我需要尽可能快地获取当前位置。所以我想知道我是否可以删除那行代码...我想这需要改变Cordova源本身。 :(

0 个答案:

没有答案
相关问题