Chromeを使用しています。開発ツールコンソールで、次のことを試しました。
最後の行を除いてすべてが期待どおりに機能します。なぜcurrentTime
を設定できないのですか?
また、一般的には、このHTML5オーディオの全体があまり信頼できないことがわかりました。フラッシュにフォールバックする堅牢なjavascriptラッパーはありますか?
あなたはこのようなことをする必要があります(jQueryを使用している場合)
$('#elem_audio').bind('canplay', function() {
this.currentTime = 10;
});
またはJavaScriptで
var aud = document.getElementById("elem_audio");
aud.oncanplay = function() {
aud.currentTime = 10;
};
このセットアップの背後にある理由は、オーディオの再生準備ができているであることを確認する必要があるためです。
テスト環境でHTTPサーバーの構成を確認します(Chrome 69))currentTimeプロパティaudio要素は、オーディオソースがHTTPサーバーサポートによって提供される場合にのみ機能します永続的接続。
使用しているHTTPサーバーが永続的な接続をサポートしている場合、(Chrome DevToolで)オーディオソースの応答ヘッダーのConnectionフィールドがkeep-aliveであることがわかります。対照的に、オーディオソースが永続的な接続の互換性のないサーバーによって提供されている場合は、応答ヘッダーに接続フィールドなしがあります。
オーディオソースHTTPリクエストのステータスコードも参照になります。永続的な接続をサポートするサーバーの場合は206 Partial Content、下位のサーバーの場合は200 OKです。
私は同じ問題を抱えていましたが、その理由は次のようにmp3ファイルのヘッダーが欠落していたためです。
Content-Length, Content-Range, Content-Type
なぜ
currentTime
を設定できないのですか?
0
に設定した後、currentTime
を10
に設定して再現できませんでした。 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/
currentTime
を設定するための唯一の解決策は、onprogress
イベントを使用することでした。
audio.onprogress = function() {
if (audio.currentTime == 0) {
audio.currentTime = 10;
}
}
私の推測では、「10」はMP3の長さよりも長いと思います。
ただし、「0」ではなくmp3の長さがログに記録されます。
あなたのChrome=バージョンは何ですか?