1

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

Androids(至少在冰淇淋三明治之前)的答案是 Phonegap 媒体 API。据大家说。

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

pos=audio.currentTime

它不到一毫秒。

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

它也引出了一个问题:现在几点了?如果获取时间需要 150 毫秒,我是在这 150 毫秒的开始还是结束时获得时间?我真的无法确定我得到的时间是否真的接近当前时间。

我还没有编写潜艇导航软件,这是一件好事,因为时间如此可怕,我永远无法确定自己在哪里。

我现在使用系统时钟来跟踪时间,并使用 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 源代码本身进行更改。:(

4

0 回答 0