本地存储记录图片和视频的信息其实也不是必须项,但是记录下来会省很多事情,而且在很多场景里是需要根据这些信息来处理一些东西的,这里应该不用细讲为什么
获取图片宽高和大小,这里使用了mediainfo.js库,这个库可以node端和浏览器端共同使用
static async getMediaInfoByArrayBuffer(videoFile: ArrayBuffer) {
// format结果值的格式(选择:object,JSON,XML,HTML或text)
const mediaInfo = await MediaInfo({ format: 'object' });
return mediaInfo.analyzeData(
() => videoFile.byteLength,
async (chunkSize, offset) => {
const result = await videoFile.slice(offset, offset + chunkSize);
return new Uint8Array(result as ArrayBuffer);
},
);
}
const info = await getMediaInfoByArrayBuffer(await this.getFileArrayBuffer(fileEntity.hash));
const imageInfo = info.media.track.find(f => f['@type'] === 'Image');
fileEntity.width = imageInfo.Width;
fileEntity.height = imageInfo.Height;
fileEntity.size = parseFloat((imageInfo.StreamSize / (1024 * 1024)).toFixed(4));
const videoInfo = info.media.track.find(f => f['@type'] === 'Video');
fileEntity.width = videoInfo.Width;
fileEntity.height = videoInfo.Height;
fileEntity.size = parseFloat((videoInfo.StreamSize / (1024 * 1024)).toFixed(4));
fileEntity.duration = videoInfo.Duration;