【发布时间】:2018-10-24 07:37:00
【问题描述】:
我有一个 Blob 数组(二进制数据,真的——我可以表达它,但它是最有效的。我现在正在使用 Blob,但可能是 Uint8Array 或更好的东西)。每个 Blob 包含 1 秒的音频/视频数据。每秒都会生成一个新的 Blob 并将其附加到我的数组中。所以代码大致是这样的:
var arrayOfBlobs = [];
setInterval(function() {
arrayOfBlobs.append(nextChunk());
}, 1000);
我的目标是将此音频/视频数据流式传输到 HTML5 元素。我知道可以像这样生成和播放 Blob URL:
var src = URL.createObjectURL(arrayOfBlobs[0]);
var video = document.getElementsByTagName("video")[0];
video.src = src;
当然,这只播放视频的前 1 秒。我还假设我可以以某种方式简单地连接当前在我的数组中的所有 Blob 以播放超过一秒:
// Something like this (untested)
var concatenatedBlob = new Blob(arrayOfBlobs);
var src = ...
但是,这最终仍会耗尽数据。由于 Blob 是不可变的,我不知道如何在收到数据时继续追加数据。
我确信这应该是可能的,因为 YouTube 和许多其他视频流服务使用 Blob URL 进行视频播放。 他们是怎么做到的?
【问题讨论】:
-
@HyyanAboFakher 刚刚浏览了那个链接,不幸的是那里没有提到 Blob URL。它更多的是关于编码和传输流,而不是播放机制。最终答案最终说“在 HLS 中编码并使用 HLS.js”——但我的问题的症结是 HLS.js 是如何工作的?(在我的情况下,我没有 HLS,但是我同样会分块获取视频)
标签: javascript html video html5-video blob