HarmonyOS 鸿蒙Next使用AVScreenCapture时报错
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;
}
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时报错的问题,以下是一些可能的解决方案:
-
检查权限配置: 确保你的应用已正确配置了麦克风权限(ohos.permission.MICROPHONE),并申请了长时任务,因为屏幕录制通常需要这些权限。
-
更新和配置组件: 通过SDK Manager检查并更新HarmonyOS相关组件,确保AVScreenCapture模块和相关系统应用是最新版本。同时,检查你的项目中是否正确链接了必要的动态库,如libnative_avscreen_capture.so等。
-
检查录屏参数: 确认录屏参数设置正确,包括音频采样率、视频帧宽高、视频源等。错误的参数配置可能导致录屏失败。
-
检查系统资源: 确保设备有足够的磁盘空间和系统资源来支持录屏操作。关闭其他高资源占用的程序,以释放更多资源。
如果以上方法均无法解决问题,建议检查具体的报错信息,以便进行更精确的定位和解决。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。