正在写一个转码demo,HarmonyOS 鸿蒙Next编码设置输出视频文件路径应该怎么处理

正在写一个转码demo,HarmonyOS 鸿蒙Next编码设置输出视频文件路径应该怎么处理

查到的demo都是录制demo,都是在ets层处理的以同步方法打开文件,并使用native_avmuxer来做封装。

fileIo.openSync(uri, fileIo.OpenMode.READ_WRITE)

现在我想自己创建mp4文件,调用ffmpeg的muxer来做封装,我先在ets层获取到了Uri,再C++里面调接口获取到真实的path,这时会报错:avio open error:No such file or directory /data/storage/el2/share/r/media/Photo/53/VID_1740379735_049/VID_049.mp4

async createAndGetUri(mediaType: number) {
  let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
  Logger.info(this.tag, `createAndGetUri`);
  let photoType: photoAccessHelper.PhotoType = mediaType;
  let info = this.getInfoFromType(mediaType)
  let extension: string = info.suffix;
  // Return the created media resource.
  return await phAccessHelper.createAsset(photoType, extension)
}

//C++
    pathResult = NULL;
    ret = OH_FileUri_GetPathFromUri(encodeFileUri.c_str(), encodeFileUri.size(), &pathResult);
    if (ret == 0 && pathResult != NULL) {
        LOG(INFO) << "encodeFilePath: " << pathResult;
    }
    std::string encodeFilePath = pathResult;

更多关于正在写一个转码demo,HarmonyOS 鸿蒙Next编码设置输出视频文件路径应该怎么处理的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于正在写一个转码demo,HarmonyOS 鸿蒙Next编码设置输出视频文件路径应该怎么处理的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS中,处理转码demo的输出视频文件路径时,可以使用ohos.file.fs模块来管理文件系统。首先,通过context.getFilesDir()获取应用内部存储路径,然后使用ohos.file.fsFile类创建或指定输出文件路径。例如:

import fs from '@ohos.file.fs';
import featureAbility from '@ohos.ability.featureAbility';

let context = featureAbility.getContext();
let internalDir = context.getFilesDir();
let outputPath = internalDir + '/output_video.mp4';

let file = fs.openSync(outputPath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);
// 进行转码操作并将结果写入文件
fs.closeSync(file);

在转码过程中,确保路径字符串正确拼接,并使用fs.openSync创建或打开文件。转码完成后,使用fs.closeSync关闭文件。这样,输出视频文件将被保存到指定路径。

回到顶部