【问题标题】:Display a video from a Blob Javascript显示来自 Blob Javascript 的视频
【发布时间】:2012-12-28 08:07:01
【问题描述】:

我想在 HTML5 视频标签中显示来自 Javascript Blob/File 对象的视频。

此代码仅适用于小视频:

var reader = new FileReader();
reader.onload = function(e) {
    document.getElementById("video").src=reader.result;
 }
reader.readAsDataURL(vid);

我不能将它用于大视频 (> 10MB)。 有没有办法在 HTML 5 中显示来自 blob 对象的大视频?

【问题讨论】:

  • 你能提供更多关于问题所在的信息吗?
  • 例如,Chrome 和 Firefox 在尝试读取 15 MB 视频时关闭。我认为这是由于视频大小。浏览器无法读取和显示 HTML 代码中的 15MB 字符串。

标签: javascript html video blob


【解决方案1】:

我找到了。太简单了,我什至都没看到……


/**
 * @param {Blob} videoFile
 * @param {HTMLVideoElement} videoEl 
 * @returns {void}
 */
function display( videoFile, videoEl ) {

    // Preconditions:
    if( !( videoFile instanceof Blob ) ) throw new Error( '`videoFile` must be a Blob or File object.' ); // The `File` prototype extends the `Blob` prototype, so `instanceof Blob` works for both.
    if( !( videoEl instanceof HTMLVideoElement ) ) throw new Error( '`videoEl` must be a <video> element.' );
    
    // 

    const newObjectUrl = URL.createObjectURL( videoFile );
        
    // URLs created by `URL.createObjectURL` always use the `blob:` URI scheme: https://w3c.github.io/FileAPI/#dfn-createObjectURL
    const oldObjectUrl = videoEl.currentSrc;
    if( oldObjectUrl && oldObjectUrl.startsWith('blob:') ) {
        // It is very important to revoke the previous ObjectURL to prevent memory leaks. Un-set the `src` first.
        // See https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL

        videoEl.src = ''; // <-- Un-set the src property *before* revoking the object URL.
        URL.revokeObjectURL( oldObjectUrl );
    }

    // Then set the new URL:
    videoEl.src = newObjectUrl;

    // And load it:
    videoEl.load(); // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/load
    
}

【讨论】:

  • vid参数是什么类型的?
  • @HubertGrzeskowiak 它是一个 Blob 或 File 对象
  • 只有我还在苦苦挣扎吗?抱歉,不适合我。
  • @Satys 我已经更新了这个答案,让事情更清楚,我希望它有所帮助。
【解决方案2】:

在某些情况下,blobObject.data 应该在 createObjectURL() 方法中提供。 看看这个简单的技巧:

function playVideo(videoStream){ // as blob 

 var video = document.querySelector('video');

 var videoUrl=window.URL.createObjectURL(videoStream.data);// blob.data gives actual data

 video.src = videoUrl;
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-06-09
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
  • 1970-01-01
  • 2017-11-08
相关资源
最近更新 更多