uni-app plus.io.FileReader读取视频文件会直接卡死
uni-app plus.io.FileReader读取视频文件会直接卡死
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | win10 | HBuilderX |
测试过的手机:
华为平板,HarmonyOS 4.2.0
操作步骤:
let camera: PlusCameraCamera = plus.camera.getCamera();
camera.startVideoCapture(
function (path) {
return new Promise((resolve, reject) => {
plus.io.requestFileSystem(
plus.io.PRIVATE_WWW,
(fs: PlusIoFileSystem) => {
fs.root?.getFile(
path,
{ create: false },
(fileEntry: PlusIoFileEntry) => {
fileEntry.file(
(file: PlusIoFile) => {
const fileReader: PlusIoFileReader = new plus.io.FileReader();
fileReader.onloadend = (evt: PlusIoFileEvent) => {
resolve({
});
};
fileReader.readAsDataURL(file, "utf-8");
},
fileError => {
reject("获取文件对象失败:" + fileError);
},
);
},
fileEntryError => {
reject("读取文件失败:" + fileEntryError);
},
);
},
fsError => {
reject("读取文件失败:" + fsError);
},
);
});
},
function (err) {
console.log(err)
}, {
resolution: "1920*1080",
});
预期结果:
- 视频文件小于20M,正常读取
实际结果:
- 视频文件大于20M,卡死
bug描述:
调用plus对象录制视频,再使用plus.io.FileReader读取视频文件会直接卡死
更多关于uni-app plus.io.FileReader读取视频文件会直接卡死的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app plus.io.FileReader读取视频文件会直接卡死的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是典型的视频文件过大导致内存溢出的问题。FileReader读取大文件时会占用大量内存,建议改用以下方案:
-
对于大视频文件,不要使用FileReader.readAsDataURL(),这个方法会将整个文件加载到内存并转为base64,非常消耗资源
-
改用流式处理或分片读取方式:
// 使用plus.io.File的slice方法分片读取
const chunkSize = 5 * 1024 * 1024; // 5MB分片
let offset = 0;
function readChunk() {
const chunk = file.slice(offset, offset + chunkSize);
const reader = new plus.io.FileReader();
reader.onload = function(e) {
// 处理当前分片数据
offset += chunkSize;
if(offset < file.size) {
readChunk(); // 继续读取下一分片
}
};
reader.readAsArrayBuffer(chunk);
}
readChunk();