HarmonyOS 鸿蒙Next使用AVScreenCapture时报错

发布于 1周前 作者 sinazl 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next使用AVScreenCapture时报错

static napi_value Screencapture(napi_env env, napi_callback_info info) {
    OH_AVScreenCaptureConfig config;
    OH_AudioCaptureInfo micCapInfo = {.audioSampleRate = 48000, .audioChannels = 2, .audioSource = OH_MIC};

    OH_AudioEncInfo audioEncInfo = {.audioBitrate = 48000, .audioCodecformat = OH_AudioCodecFormat::OH_AAC_LC};

    OH_VideoCaptureInfo videoCapInfo = {
        .videoFrameWidth = 720, .videoFrameHeight = 1080, .videoSource = OH_VIDEO_SOURCE_SURFACE_RGBA};

    OH_VideoEncInfo videoEncInfo = {
        .videoCodec = OH_VideoCodecFormat::OH_H264, .videoBitrate = 2000000, .videoFrameRate = 30};

    OH_AudioInfo audioInfo = {.micCapInfo = micCapInfo, .audioEncInfo = audioEncInfo};

    OH_VideoInfo videoInfo = {.videoCapInfo = videoCapInfo, .videoEncInfo = videoEncInfo};

    config = {
        .captureMode = OH_CAPTURE_HOME_SCREEN,
        .dataType = OH_CAPTURE_FILE,
        .audioInfo = audioInfo,
        .videoInfo = videoInfo,
    };

    struct OH_AVScreenCapture *capture = OH_AVScreenCapture_Create();

    // 初始化录屏参数,传入配置信息OH_AVScreenRecorderConfig
    OH_RecorderInfo recorderInfo;
    const std::string SCREEN_CAPTURE_ROOT = "/data/storage/el2/base/files/";
    int32_t outputFd = open((SCREEN_CAPTURE_ROOT + "screen01.mp4").c_str(), O_RDWR | O_CREAT, 0777);
    std::string fileUrl = "fd://" + std::to_string(outputFd);
    recorderInfo.url = const_cast<char *>(fileUrl.c_str());
    recorderInfo.fileFormat = OH_ContainerFormatType::CFT_MPEG_4;
    config.recorderInfo = recorderInfo;

    // 进行初始化操作
    int32_t retInit = OH_AVScreenCapture_Init(capture, config);

    // 开始录屏
    int32_t retStart = OH_AVScreenCapture_StartScreenCapture(capture);

    // 录制10s
    sleep(10);

    // 结束录屏
    int32_t retStop = OH_AVScreenCapture_StopScreenCapture(capture);

    // 释放ScreenCapture
    int32_t retRelease = OH_AVScreenCapture_Release(capture);

    napi_value sum;
    napi_create_double(env, 5, &sum);

    return sum;
}
7 回复
大佬 那你现在还在搞么,是不是 4.1.0 所有的 system 都不能调用啊?

ACL 里面有支持部分,你可以看下

seems not succeeded in creating file. may be not writable or invalid file path? 

try this one: /data/storage/el2/base/haps/entry/files

REF: https://blog.csdn.net/shudaoshanQAQ/article/details/136236781

应该不是路径的问题,调用OH_AVScreenCapture_Init时返回的ErrCode为2。 /** * opertation not be permitted. */ AV_SCREEN_CAPTURE_ERR_OPERATE_NOT_PERMIT = AV_SCREEN_CAPTURE_ERR_BASE + 2,

昨天又看了api文档 里面说要“ohos.permission.CAPTURE_SCREEN”权限,但实际申请不到这权限。 邮件跟华为技术支持沟通了,说当前4.1的api不支持第三方调用,让等5.0再看。。。

5.0现在可以录屏了

嗯,现在用不上了,之前的想要实现的功能已经完成了

针对HarmonyOS 鸿蒙Next使用AVScreenCapture时报错的问题,以下是一些可能的解决方案:

  1. 检查权限配置: 确保你的应用已正确配置了麦克风权限(ohos.permission.MICROPHONE),并申请了长时任务,因为屏幕录制通常需要这些权限。

  2. 更新和配置组件: 通过SDK Manager检查并更新HarmonyOS相关组件,确保AVScreenCapture模块和相关系统应用是最新版本。同时,检查你的项目中是否正确链接了必要的动态库,如libnative_avscreen_capture.so等。

  3. 检查录屏参数: 确认录屏参数设置正确,包括音频采样率、视频帧宽高、视频源等。错误的参数配置可能导致录屏失败。

  4. 检查系统资源: 确保设备有足够的磁盘空间和系统资源来支持录屏操作。关闭其他高资源占用的程序,以释放更多资源。

如果以上方法均无法解决问题,建议检查具体的报错信息,以便进行更精确的定位和解决。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部