web-dev-qa-db-ja.com

HTMLオーディオはcurrentTimeを設定できません

Chromeを使用しています。開発ツールコンソールで、次のことを試しました。

enter image description here

最後の行を除いてすべてが期待どおりに機能します。なぜcurrentTimeを設定できないのですか?

また、一般的には、このHTML5オーディオの全体があまり信頼できないことがわかりました。フラッシュにフォールバックする堅牢なjavascriptラッパーはありますか?

25
Rajat

あなたはこのようなことをする必要があります(jQueryを使用している場合)

$('#elem_audio').bind('canplay', function() {
  this.currentTime = 10;
});

またはJavaScriptで

var aud = document.getElementById("elem_audio");
aud.oncanplay = function() {
    aud.currentTime = 10;
};

このセットアップの背後にある理由は、オーディオの再生準備ができているであることを確認する必要があるためです。

7
Netorica

テスト環境でHTTPサーバーの構成を確認します(Chrome 69))currentTimeプロパティaudio要素は、オーディオソースがHTTPサーバーサポートによって提供される場合にのみ機能します永続的接続

使用しているHTTPサーバーが永続的な接続をサポートしている場合、(Chrome DevToolで)オーディオソースの応答ヘッダーのConnectionフィールドがkeep-aliveであることがわかります。対照的に、オーディオソースが永続的な接続の互換性のないサーバーによって提供されている場合は、応答ヘッダーに接続フィールドなしがあります。

オーディオソースHTTPリクエストのステータスコードも参照になります。永続的な接続をサポートするサーバーの場合は206 Partial Content、下位のサーバーの場合は200 OKです。

4
Bono Lv

私は同じ問題を抱えていましたが、その理由は次のようにmp3ファイルのヘッダーが欠落していたためです。

Content-Length, Content-Range, Content-Type

なぜcurrentTimeを設定できないのですか?

0に設定した後、currentTime10に設定して再現できませんでした。 18.mp3の期間は10より短いですか?

var request = new XMLHttpRequest();
request.open("GET", "/assets/audio/18.mp3", true);
request.responseType = "blob";    
request.onload = function() {
  if (this.status == 200) {
    var audio = new Audio(URL.createObjectURL(this.response));
    audio.load();
    audio.currentTime = 10;
    audio.play();
  }
}
request.send();

jsfiddle http://jsfiddle.net/Lg5L4qso/3/

3
guest271314

currentTimeを設定するための唯一の解決策は、onprogressイベントを使用することでした。

audio.onprogress = function() {
  if (audio.currentTime == 0) {
    audio.currentTime = 10;
  }
}
0
ultra

私の推測では、「10」はMP3の長さよりも長いと思います。

ただし、「0」ではなくmp3の長さがログに記録されます。

あなたのChrome=バージョンは何ですか?

0
Arjenloeb