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中,实现对视频文件分段读取并分段写入另一个文件,可以通过FileFileOutputStream类来完成。首先,使用File类打开源视频文件,并通过FileInputStream读取指定大小的数据块。接着,使用FileOutputStream将读取的数据块写入目标文件。可以通过循环操作,逐段读取和写入,直到处理完整个文件。在读取和写入过程中,可以利用缓冲区(如byte[]数组)来存储数据,提高效率。注意在操作完成后,及时关闭输入输出流以释放资源。

在HarmonyOS鸿蒙Next中,可以通过FileFileInputStreamFileOutputStream类来实现视频文件的分段读取和写入。首先,使用FileInputStream按指定大小分段读取视频文件数据,然后通过FileOutputStream将读取的数据分段写入目标文件。可以通过循环读取和写入,直到整个文件处理完毕。此方法适用于大文件处理,避免一次性加载导致内存溢出。

回到顶部