我正在尝试为html5视频代码实现动态加载。
当用户通过<input type="file">
元素选择视频文件时,我想将其动态加载到<video>
元素,并将其附加到正文。
以下代码适用于Chrome,但不适用于Safari:
function load_video(file) { // this came from <input type="file"> change event
var reader = new FileReader();
reader.onload = function(event) {
var blob = new Blob([event.target.result]);
window.URL = window.URL || window.webkitURL;
var blobURL = window.URL.createObjectURL(blob);
$('body').append('<video controls width="320" src="' + blobURL + '" onloadedmetadata="alert('loaded meta data!')"></video>');
}
}
现在,
如果我将src="' + blobURL + '"
替换为本地文件路径,比如说/media/videos/vid1.mp4
,视频也会在Safari中加载,但我需要它来加载来自blobURL
的视频。
有什么建议吗?
非常感谢。
更新
Rod说,不幸的是,这是Safari中的一个已知错误(不受媒体后端的支持)。答案 0 :(得分:3)
我对Safari 6.1有同样的问题,在尝试从输入加载文件时获取MEDIA_ERR_SRC_NOT_SUPPORTED
,如下所示:
var fileInput = document.querySelector('#file'),
video = document.querySelector('video');
fileInput.addEventListener('change', function(evt){
evt.preventDefault();
var file = evt.target.files[0];
var url = window.URL.createObjectURL(file);
video.src = url;
video.addEventListener('error', function(err){
// This craps out in Safari 6
console.error(video.error, err);
alert('nay :(');
});
});
尝试使用 video.addEventListener('error', logError)
或其他内容来确定您是否遇到同样的问题。我怀疑Safari不支持带有blob
类型源的视频。
更新:是的,这是一个错误。请参阅https://bugs.webkit.org/show_bug.cgi?id=101671并帮助我们让webkit维护者需要解决这个问题。
UPDATE,2015 :现在可以使用,更新了代码。
答案 1 :(得分:1)
我不知道该解决方案是否适用于视频和音频,但我遇到了与Safari音频相同的问题,我发现解决方案是在构建blob时指定内容类型:
var blob = new Blob([arrayBuffer], {type: 'audio/mpeg'});
url = webkitURL.createObjectURL(blob);