我有一个Blob数组(二进制数据,实际上--可以以最有效的方式表达),目前我正在使用Blobs,但可能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进行视频播放。他们是如何做到的?