HarmonyOS鸿蒙Next如何实现对视频文件分段读取然后分段写入另一个文件
HarmonyOS鸿蒙Next如何实现对视频文件分段读取然后分段写入另一个文件
是将一个视频文件分段读取后上传到服务器,我测试直接读取整个视频文件上传到服务器是ok的,但是分段有个offset参数,为了验证这个分段的问题,我将读取的分段数据,写入另一个test.mp4文件,发现无法播放,现在是这样的:
let blockLength = 1024 * 500
let position = 0
let mBlock = getBlock(position, fileSize, filePath, blockLength)
export function copyFile(position: number, fileSize: number, mBlock: ArrayBuffer, blockLength: number) {
let filePath = FileUtil.getCacheDirPath() + "/test.mp4";
let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
fs.write(file.fd, mBlock, { offset: position }).then((writeLen: number) => {
console.info("write data to file succeed and size is:" + writeLen);
position += mBlock.byteLength
mBlock = getBlock(position, fileSize, filePath, blockLength)
if (mBlock.byteLength > 0) {
copyFile(position, fileSize, mBlock, blockLength)
}
}).catch((err: BusinessError) => {
console.error("write data to file failed with error message: " + err.message + ", error code: " + err.code);
}).finally(() => {
fs.closeSync(file);
});
}
function getBlock(position: number, totalSize: number, videoFilename: string, blockSize: number): ArrayBuffer {
let result: ArrayBuffer = new ArrayBuffer(Math.min(totalSize - position, blockSize))
let file = fs.openSync(videoFilename, fs.OpenMode.READ_ONLY)
fs.readSync(file.fd, result, { offset: position })
fs.closeSync(file)
return result
}
我尝试offset+1也不行,想知道这个分段读取和写入要对offset做什么处理?
更多关于HarmonyOS鸿蒙Next如何实现对视频文件分段读取然后分段写入另一个文件的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
试试
let fd: number = fileIo.openSync(this.selectFilePath, 0o0).fd;
const file = fs.openSync(this.selectFilePath, fs.OpenMode.READ_ONLY);
let videoSize = fs.statSync(file.fd).size;
let arrayBuffer = new ArrayBuffer(videoSize);
fs.read(file.fd, arrayBuffer, (err: BusinessError, readLen: number) => {
if (err) {
console.error("read failed with error message: " + err.message + ", error code: " + err.code);
} else {
console.info("read file data succeed");
let buf = buffer.from(arrayBuffer, 0, readLen);
console.info(`The content of file: ${buf.toString()}`);
}
fs.closeSync(file);
});
fs.closeSync(file);
更多关于HarmonyOS鸿蒙Next如何实现对视频文件分段读取然后分段写入另一个文件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,可以通过File
和FileInputStream
、FileOutputStream
类来实现视频文件的分段读取和写入。首先,使用FileInputStream
按指定大小分段读取视频文件数据,然后通过FileOutputStream
将读取的数据分段写入目标文件。可以通过循环读取和写入,直到整个文件处理完毕。此方法适用于大文件处理,避免一次性加载导致内存溢出。