问题描述
我有两个 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());