私のMeteor Android AppのLocalForageに保存されているオーディオファイルを再生しようとしています。Android:URL.createObjectURLが正常に動作しません(サポートされていないソースが見つからないため読み込めません)
LocalForage.getItem(track_id, (err, value)=>{
if(err)
throw err;
//the loaded value is an arraybuffer of an m4a file
let blob = new Blob([value]);
let url = (window.URL || window.webkitURL || window || {}).createObjectURL(blob);
let testAudio = new Audio(url);
testAudio.play().then(()=>{console.log("play successful")}).catch((err)=>{console.error(err)});
});
前に、私はHowler.jsのインスタンスへのURLを渡され、それが簡単に何が起こっているか理解できるようにすること、私はtestAudioを追加しました。
ブラウザ(Chrome)でテストする場合、コードは正常に動作します。 URLが作成され、オーディオが再生されています。
(すべての流星Androidアプリとしてクロムを使用して)アンドロイドしかし、私のアプローチを好きにいないようです: オブジェクトのURLを作成する場合、クロムは次のようにURLを返します。
blob:http%3A//localhost%3A12128/4de4516a-2989-4e99-9269-0beff4517fc4
あなたが見ることができるように、これは、使用可能なURLではない、と私はこの
url = url.replace(/%3A/g, ':');
を行う場合でも、結果のコンソール出力は
DOMException: Failed to load because no supported source was found.
です
Androidでこの機能が動作しない理由を知っている人はいますか?私は同じ問題で他の質問を見てきましたが、私のコードは私には似ていて、Chromeでテストするとうまくいくので、これにどう対処するのか本当に分かりません。ところで
は、Audiobufferがそうのように保存されます。
const request = new window.XMLHttpRequest();
request.addEventListener('readystatechange',() => {
if (request.readyState === 4) {
LocalForage.setItem(track.file_id, request.response, (err, value) => {
console.log('Successfully saved to locale forage: ' + track.name);
})
}
});
request.open('GET', track.audioLink, true);
request.responseType = 'arraybuffer';
request.send();
Android 4以降で音声再生ができない問題が発生しました。 Android 5+をお使いですか? – Matthias