如何解决连接多个 blob 会产生损坏的媒体文件
我有一个 media recorder,我像这样实例化:
const mediaRecorder = new MediaRecorder(stream,{
mimeType: 'video/x-matroska;codecs=h264',videoBitsPerSecond: 2500000,audioBitsPerSecond: 128000,});
mediaRecorder.ondataavailable = (e) => {
const blobUrl = URL.createObjectURL(e.data);
try {
const hyperlink = document.createElement('a');
hyperlink.href = blobUrl;
hyperlink.target = '_blank';
hyperlink.download = 'some_file_name_' + Date.now();
const evt = new MouseEvent('click',{
view: globalThis.window,bubbles: true,cancelable: true
});
hyperlink.dispatchEvent(evt);
} finally {
URL.revokeObjectURL(blobUrl);
}
};
mediaRecorder.start(5000);
这段代码在我的下载文件夹中留下了许多小文件。我想将它们连接在一起,我使用 Node 的 appendFile
API 做到了这一点。问题是视频文件在第一段之后无法正确播放。有人对调试这个有什么建议吗?
解决方法
有两个问题。
第一个问题是 blob 下载需要适当的类型,即 application/octet-stream
。我实现这一目标的方式是:
const reader = new FileReader();
reader.onloadend = (_) => {
const result = reader.result as ArrayBuffer;
const blob = new Blob([result],{ type: 'application/octet-stream' });
const blobUrl = URL.createObjectURL(blob);
// Download the blob
}
reader.readAsArrayBuffer(e.data);
第二个问题是readFile的默认编码为null,这很好。但是 appendFile 的默认编码是 utf8
,这很糟糕。
这可以通过 promisify(appendFile)(filename,data,{ encoding: 'binary' });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。