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读取大文件时会占用大量内存,建议改用以下方案:

  1. 对于大视频文件,不要使用FileReader.readAsDataURL(),这个方法会将整个文件加载到内存并转为base64,非常消耗资源

  2. 改用流式处理或分片读取方式:

// 使用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();
回到顶部