记录鸿蒙相机输出预览流报错问题(CAMERA_SERVICE_FATAL_ERROR)

问题背景

鸿蒙相机按照流程调用数据之后,想将相机数据输出预览画面到鸿蒙的XComponent上面,这里踩了一个坑了,一直报错CAMERA_SERVICE_FATAL_ERROR。这个问题通过官方文档查询错误原因是:相机服务异常。没有相机权限、相机服务重启、跨进程调用异常等。

问题排查

通过系统日志发现错误日志:

bash 复制代码
04-27 15:09:12.173   16262-16262   C01401/com.exa...s/Bufferqueue  com.examp...eancplus  E     <surface_utils.cpp:48-GetSurface>: Cannot find surface, uniqueId: 0.
04-27 15:09:12.173   16262-18181   C02B01/com.exa...ncplus/CAMERA  com.examp...eancplus  I     {OnCameraStatusChanged():197} OnCameraStatusChanged cameraId: device/0, status: 3
04-27 15:09:12.173   16262-16262   C02B01/com.exa...ncplus/CAMERA  com.examp...eancplus  E     {CreatePreviewOutput()-camera_manager_impl.cpp:542} Failed to get previewOutput surface

发现是没有找到surface。最后原因是我弄混了Xcomponent和Surface两个不同的概念,我将Xcomponent的Id作为Surface的Id作为入参surfaceId的值,函数无法找到相应的surface导致的。

关键代码

cpp 复制代码
static napi_value InitSurface(napi_env env, napi_callback_info info) {
    napi_value result;
    size_t typeLen = 0;
    size_t argc = 1;
    napi_value args[1] = {nullptr};
    napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
    webrtc::ohos::CameraRender *render = webrtc::ohos::CameraRender::getCameraInstance();
    napi_get_value_string_utf8(env, args[0], nullptr, 0, &typeLen);
    render->surfaceId = new char[typeLen + 1]; // 从外部取到surfaceId
    napi_get_value_string_utf8(env, args[0], render->surfaceId, typeLen + 1, &typeLen);
    napi_create_int32(env, argc, &result);
    return result;
}

int32_t OhosCamera::createOutputPreview(webrtc::ohos::CameraRender *render) {
   char* surfaceId = render->surfaceId; // 这里不能取XComponentID
   Camera_ErrorCode ret =  OH_CameraManager_CreatePreviewOutput(camera_manager_, preview_profile_, surfaceId, &preview_output_);
    if(ret != CAMERA_OK) {
        OH_LOG_ERROR(LOG_APP, "createOutputPreview failed.");
        return  -1;
    }
    return 0;
}
相关推荐
贾伟康9 小时前
【时光清单|19】HarmonyOS ArkTS 回归测试实战:覆盖启动、空数据、异常输入和重复点击
软件测试·harmonyos·arkts·回归测试·hypium
坚果的博客9 小时前
Flutter OHOS 环境搭建实战:oh-3.44.9-dev 从 0 到 1 完整记录
flutter·华为·harmonyos
坚果的博客9 小时前
认识 CPF-RN:React Native 鸿蒙官方社区与四大核心仓库
react native·react.js·harmonyos
大雷神10 小时前
HarmonyOS ArkGraphics 2D可变帧率实操——同屏对比30、60和90 FPS动画
华为·harmonyos
OH_TPC10 小时前
【鸿蒙优选三方库】@react-native-ohos/react-native-fast-image:高性能图片加载与缓存组件
缓存·华为·harmonyos·鸿蒙
贾伟康12 小时前
【句匠|03】HarmonyOS ArkTS 每日打卡实战:实现连续天数、补签边界和本地日期判断
harmonyos·arkts·本地存储·每日打卡·学习应用
小雨青年12 小时前
【HarmonyOS 7 平行视界深度实战】02 从普通页面到第一个平行视界 Demo
华为·harmonyos
~远在太平洋~12 小时前
06-鸿蒙系统 uitest UI 自动化指南
ui·自动化·harmonyos
OH_TPC12 小时前
OpenHarmony平台RN三方库适配情况
华为·harmonyos·鸿蒙
坚果的博客13 小时前
从 0 到 1:用 CJMP 开发「每日早报」鸿蒙应用完整实战
华为·harmonyos