HarmonyOS鸿蒙Next中屏幕录制遇到的问题,请帮忙解答

HarmonyOS鸿蒙Next中屏幕录制遇到的问题,请帮忙解答

采集初始化配置如下:

```cpp
_capture = OH_AVScreenCapture_Create();
// 设置回调
OH_AVScreenCapture_SetErrorCallback(_capture, OnError, this);
OH_AVScreenCapture_SetStateCallback(_capture, OnStateChange, this);
OH_AVScreenCapture_SetDataCallback(_capture, OnBufferAvailable, this);
// 可选 配置录屏旋转,此接口在感知到手机屏幕旋转时调用,如果手机的屏幕实际上没有发生旋转,调用接口是无效的。
OH_AVScreenCapture_SetCanvasRotation(_capture, true);
// 可选 [过滤音频]
// OH_AVScreenCapture_ContentFilter contentFilter = OH_AVScreenCapture_CreateContentFilter();
// 添加过滤通知音
// OH_AVScreenCapture_ContentFilter_AddAudioContent(contentFilter, OH_SCREEN_CAPTURE_NOTIFICATION_AUDIO);
// 排除过滤器
// OH_AVScreenCapture_ExcludeContent(capture, contentFilter);

// 初始化录屏,传入配置信息OH_AVScreenRecorderConfig
OH_AudioCaptureInfo miccapinfo = {.audioSampleRate = 16000, .audioChannels = 2, .audioSource = OH_MIC};
OH_VideoCaptureInfo videocapinfo = {
    .videoFrameWidth = 720, .videoFrameHeight = 1080, .videoSource = OH_VIDEO_SOURCE_SURFACE_RGBA};
OH_AudioInfo audioinfo = {
    .micCapInfo = miccapinfo,
};
OH_VideoInfo videoinfo = {.videoCapInfo = videocapinfo};
OH_AVScreenCaptureConfig config = {.captureMode = OH_CAPTURE_HOME_SCREEN,
                                  .dataType = OH_ORIGINAL_STREAM,
                                  .audioInfo = audioinfo,
                                  .videoInfo = videoinfo};
OH_AVSCREEN_CAPTURE_ErrCode errorCode = OH_AVScreenCapture_Init(_capture, config);

OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, LOG_PRINT_SCREEN_CAPTURE_TAG, "OH_AVScreenCapture_Init, %{public}d", errorCode);

// 开始录屏
errorCode = OH_AVScreenCapture_StartScreenCapture(_capture);
OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, LOG_PRINT_SCREEN_CAPTURE_TAG, "OH_AVScreenCapture_StartScreenCapture, %{public}d", errorCode);
// mic开关设置
OH_AVScreenCapture_SetMicrophoneEnabled(_capture, true);

问题1、OnBufferAvailable 回调中使用OH_AVBuffer_GetNativeBuffer获取原始数据写入文件正常,但是根据文档(https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/using-avscreencapture-for-buffer-V5#ZH-CN_TOPIC_0000001930675781__)中说明的OH_AVScreenCapture_AcquireVideoBuffer获取数据, 获取OH_NativeBuffer_Config, 测试下来好像数据都不对,log如下format:126, width:126, height:-324586528, stride:126

问题2、OH_AVScreenCapture_AcquireAudioBuffer 获取音频数据一直返回错误码2, 根据文档要求需要提前分配内存,

OH_AudioBuffer *audiobuffer = new OH_AudioBuffer();
uint8_t *testDat = (uint8_t *)malloc(10000);
audiobuffer->buf = testDat;
audiobuffer->size = 10000;
audiobuffer->timestamp = timestamp;
audiobuffer->type = OH_APP_PLAYBACK;
ret = OH_AVScreenCapture_AcquireAudioBuffer(capture, &audiobuffer, OH_APP_PLAYBACK);

难道我分配内存方式错误?


更多关于HarmonyOS鸿蒙Next中屏幕录制遇到的问题,请帮忙解答的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

1、获得的是video的数据,

2、看看您是否设置了回调 如果设置了回调的话 只能够通过回调来获取audiobuffer 不能够直接通过OH_AVScreenCapture_AcquireAudioBuffer获取

更多关于HarmonyOS鸿蒙Next中屏幕录制遇到的问题,请帮忙解答的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中进行屏幕录制时,可能会遇到以下问题:

  • 权限问题:屏幕录制需要获取相应的系统权限,如ohos.permission.CAPTURE_SCREEN。如果权限未正确配置,录制功能将无法使用。

  • 录制服务未启动:屏幕录制依赖于系统服务ScreenCaptureService。如果该服务未启动或异常,录制功能将失效。

  • 录制参数配置错误:在调用startScreenRecording接口时,参数如分辨率、帧率、比特率等配置不当可能导致录制失败或质量不佳。

  • 系统资源不足:屏幕录制是资源密集型任务,若系统内存、CPU等资源不足,可能导致录制过程中断或失败。

  • 多任务冲突:在进行屏幕录制时,若同时运行其他高资源消耗任务(如游戏、视频播放等),可能导致录制不稳定。

  • 存储空间不足:录制视频需要足够的存储空间,若设备存储空间不足,录制将无法进行。

  • 系统版本兼容性:某些API或功能可能在特定系统版本中存在兼容性问题,需确认系统版本是否支持所需功能。

  • 应用层限制:某些应用可能限制了屏幕录制的功能,如银行类应用、视频流媒体应用等。

  • 硬件限制:部分设备可能因硬件性能限制,无法支持高分辨率或高帧率的屏幕录制。

  • 录制过程中断:在录制过程中,若设备进入休眠状态或用户手动中断录制,录制将停止。

若遇到上述问题,需逐一排查并确认相关配置和条件是否符合要求。

在HarmonyOS鸿蒙Next中,屏幕录制可能遇到以下问题及解决方案:

  1. 无法启动录制:检查权限设置,确保已授予“屏幕录制”权限。进入“设置” > “应用管理” > “权限管理”,开启相关权限。

  2. 录制无声音:确认是否启用了“录制系统声音”或“录制麦克风声音”。在录制界面,点击设置图标,选择正确的音频源。

  3. 存储空间不足:录制前确保设备有足够的存储空间,建议清理不必要的文件或应用。

  4. 录制卡顿:关闭后台占用资源较多的应用,或重启设备后再试。

若问题仍未解决,建议更新系统至最新版本,或联系华为客服获取进一步支持。

回到顶部