【发布时间】:2013-12-18 09:43:38
【问题描述】:
我有两个音频文件必须一个接一个地播放。 为此,我使用 XHR 下载了这两个文件
var xhr = new XMLHttpRequest();
xhr.open('GET', fileURL, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function () {
data = new Uint8Array(xhr.response);
//... other handling code
};
并从它们构造一个 Blob
var blob = new Blob([data], {type: 'video/mp4'})
这些我用来构建 Blob URL
var url = URL.createObjectURL(blob)
然后注入<audio>标签。 (audioDOM.src = url;)
此过程适用于 Chrome 和 Firefox。但是 IE11 有时会给我一个问题,它显示以下通知:
通过关闭它们所针对的 blob 来撤销一个或多个 blob URL 被创造。这些 URL 将不再解析为数据支持 该 URL 已被释放。
然而,最奇怪的部分是它确实适用于第一个文件(在 IE 中),但不适用于第二个文件。它们都对整个过程使用相同的代码,只是使用不同的fileURL 来调用。这两个文件都存在,已正确下载并已记录到控制台进行验证。
我尝试在构建 blob 之前复制数据,但这似乎无关紧要:错误仍然存在。
有没有人知道是什么导致了问题以及如何解决?
在 sbgoran 之后编辑:
整个脚本在单个文档上运行,不会重新加载。我仍然很困惑为什么会这样。当音频无法加载时,我确实设法通过循环和创建新 URL 来创建解决方法,但这不是一个可行的解决方案。奇怪的是,上述方法随机失败:有时 URL 在加载到 <audio> 标记时可用,有时则不可用。
【问题讨论】:
-
您是否有理由不能将 src=whatever 和 onended=playsecond() 用于第一次或如下所示:stackoverflow.com/questions/9326288 ?... 使用这样的 blob 似乎效率低下且不必要。跨度>
-
是的,我有充分的理由这样做。其中之一是在我的最终实现中,对原始两个文件中的数据进行了编辑以形成两个新文件。然而,这对失败率没有影响:我进行了测试,其中按照上述方式简单地复制了 blob,但问题仍然存在。 (所以操作对这里所说的问题没有影响)
标签: javascript blob