我正在尝试在 Javascript 中使用通过 fetch() 实现的 blob URL,并且在调用 URL.revokeObjectURL() 之前,响应返回的 blob URL(text/plain) 将转到原始文件 URL。
但是,当我使用 blob URL 更改元素的 src 属性并尝试在调用 revokeObjectURL() 之前加载视频时,我遇到了来自控制台的 ERR_REQUEST_RANGE_NOT_SATISFIED 错误。
但这次我要使用的视频是一个静态 .mp4 文件,可以通过 URL 检索。
有什么提示可以解决这个问题吗?
我曾以相同的方式尝试过使用 .m3u8 源,但没关系。
function fetchVideo(url, opt) {
return fetch(url, opt).then(function(response) {
return response.blob();
});
}
function replaceSrc(blob, source) {
bloburl = URL.createObjectURL(blob);
source.setAttribute('src', bloburl);
source.removeAttribute('data-src');
$(source).closest('video').load();
URL.revokeObjectURL(bloburl);
}
function changeVideoSource(videoElement) {
if(videoElement[0] != undefined) {
var source = videoElement[0].getElementsByTagName('source')[0];
var src = source.getAttribute('data-src');
var fetchHeaders = new Headers({
"Content-Type": "text/plain"
});
var fetchOpt = {
method: 'GET',
headers: fetchHeaders,
mode: 'no-cors'
};
fetchVideo(src, fetchOpt).then(function(blob){
replaceSrc(blob, source);
});
}
}
<video autoplay muted preload="auto">
<source id="vidSrc" data-src="https://sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4" type="video/mp4">
</video>