gee*_*vee 6 javascript blob html5-video
我正在尝试为 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>');
    }
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我将替换src="' + blobURL + '"为本地文件路径,例如/media/videos/vid1.mp4,视频也会在 Safari 中加载,但我需要它从blobURL.
有什么建议?
多谢。
更新:
正如 Rod 所说,不幸的是,这是 Safari 中的一个已知错误(不受其媒体后端支持)。
我不知道该解决方案是否适用于视频和音频,但我遇到了与 Safari 音频相同的问题,我发现该解决方案是在构建 blob 时指定内容类型:
var blob = new Blob([arrayBuffer], {type: 'audio/mpeg'});
url = webkitURL.createObjectURL(blob);
Run Code Online (Sandbox Code Playgroud)
        我在 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 :(');
  });
});
Run Code Online (Sandbox Code Playgroud)
尝试video.addEventListener('error', logError)或做一些事情来弄清楚您是否有同样的问题。我怀疑 Safari 还不支持blob-type 源的视频。
更新:是的,这是一个错误。请参阅https://bugs.webkit.org/show_bug.cgi?id=101671并帮助我们让 webkit 维护人员解决这个问题。
更新,2015:它现在可以工作,更新了代码。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           9276 次  |  
        
|   最近记录:  |