1

phonegap を使用して html5 アプリを携帯電話に移行する準備ができたので、オーディオを再生する機能が永久的な動きのようであることに非常に失望しています。それはほとんどありますが、完全ではありません。

Android (少なくともアイスクリーム サンドイッチの前) の答えは、Phonegap メディア API です。みんなによると。

問題は、自分のオーディオを再生している間、現在の時刻を本当に気にかけていることです。Chrome を実行している Mac で、実行にかかる時間を計りました。

pos=audio.currentTime

ミリ秒未満です。

Phonegap メディア API では、非同期関数を呼び出し、コールバックされるまで待機し、現在のメディア位置を取得する必要があります。これには、5 ミリ秒から 150 ミリ秒以上かかります。一貫性がなく、悲惨なほど遅いです。

また、「今何時ですか」という質問も出てきます。時間を取得するのに 150 ミリ秒かかる場合、その 150 ミリ秒の最初または最後に時間を取得しましたか? 私が得た時間が本当に現在の時間に近いかどうかは本当にわかりません。

私がまだ潜水艦航法ソフトウェアを書いていないのは良いことです。なぜなら、そのような恐ろしい時間のソースでは、自分がどこにいるのかを決して特定できないからです。

現在、システム クロックを使用して時刻を追跡し、getCurrentPosition() を使用して時々再同期しています。ただし、まだ 100 ミリ秒以上ずれている可能性があります。

私の質問: 誰かがより良いアプローチを得ましたか?

編集:

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