【发布时间】:2022-11-05 22:59:10
【问题描述】:
为了制作可搜索的 webM 视频(视频中的持续时间), 我们正在部分获取视频,我正在尝试使用 TS-ebml 包 代码:-
const injectMetadata = (blob,durationData) => {
console.warn("blob",blob)
const decoder = new Decoder();
const reader = new Reader();
reader.logging = false;
reader.drop_default_duration = false;
return readAsArrayBuffer(blob).then((buffer) => {
const elms = decoder.decode(buffer);
elms.forEach((elm) => {
reader.read(elm);
});
reader.stop();
const refinedMetadataBuf = tools.makeMetadataSeekable(
reader.metadatas,
durationData * 1000,
reader.cues
);
const body = buffer.slice(reader.metadataSize);
console.log("reader.metadataSize",reader.metadataSize)
console.warn("reader.metadatas",reader.metadatas)
return new Blob([refinedMetadataBuf, body], { type: blob.type });
});
};
在第 1 部分中注入持续时间后,再次替换 s3 中的第 1 部分。当视频一口气完成时,使用 seekbar 可以正常播放视频, 但是当会话突然关闭(刷新页面)时,我们通过 api 通过将 blob 转换为 base64 将第 1 部分单独存储在我们的数据库中,然后再次将 base64 转换为 blob 并在注入持续时间后替换 s3 中的第 1 部分,然后录制视频 刷新不起作用。 为了获得视频的确切持续时间,我使用了 get-blob-duration 包。
webm-duration-fix 包也可用,它修复了 blob 中的持续时间,但是为了使用它,我们需要一次整个视频 blob,在我们的例子中,没有时间点可以同时拥有所有 blob,因为我们正在使用s3 分段上传。
【问题讨论】:
标签: blob mediarecorder webm mediastream ebml