使用多文件流保存 Blob?

问题描述

我有两个 Uint8Array。第一个包含视频,第二个包含音频数据。 现在,我使用 blob 保存它们。我很遗憾找不到关于如何将它们保存在一个文件中的任何解释。

有人可以提供代码示例吗?

谢谢

编辑:对 Matt Ellens 请求的评论我移到这里以获得更好的可读性 不幸的是没有。我试图自己组装一个函数

var blob1 = new Blob([arrayConcat(video)],{
    type: 'application/octet-stream'
});
var blob2 = new Blob([arrayConcat(audio)],{
    type: 'application/octet-stream'
});
stream = new MediaStream();
stream.addTrack(arrayConcat(video));
stream.addTrack(arrayConcat(audio));
console.log(stream);

如果我想添加一个轨道,它总是说我需要一个 MediaStreamTrack。然后我搜索并找到了这个:Is there a way to create your own mediaStreamTrack using say,JSON objects?。 Tracks 似乎只适用于网络摄像头和 user micro,因为它们是由浏览器创建的。

解决方法

我认为您可以像这样组合两个缓冲区(我将假设您的媒体的 mime 类型):

let vidBlob = new Blob([videoData],{
    type: 'application/octet-stream'
});
let audBlob = new Blob([audioData],{
    type: 'application/octet-stream'
});

let medSrc = new MediaSource;

let audSrcBuf = medSrc.addSourceBuffer('audio/mpeg3');
audSrcBuf.addEventListener('updateend',function (_) 
{
  medSrc.endOfStream();

  let vidSrcBuf = medSrc.addSourceBuffer('video/mp4');
  vidSrcBuf.appendBuffer(vidBlob.arrayBuffer());

  vidSrcBuf.addEventListener('updateend',function (_) 
  {
    medSrc.endOfStream();

    let objURL = URL.createObjectURL(medSrc);

    // use the objURL to save the two streams.

  });
});



audSrcBuf.appendBuffer(audBlob.arrayBuffer());