HarmonyOS 鸿蒙Next OH_CaptureSession_Stop(captureSession) 失败,错误码7400201 及 OH_CameraInput_Close(cameraInput) 失败,错误码7400201

发布于 1周前 作者 ionicwang 来自 鸿蒙OS

HarmonyOS 鸿蒙Next OH_CaptureSession_Stop(captureSession) 失败,错误码7400201 及 OH_CameraInput_Close(cameraInput) 失败,错误码7400201

void NemoSDKCamera::stopCapture()
{
  OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, LOG_TAG_CAMERA, "begin stopCapture.");
  Camera_ErrorCode ret;
  if (imageReceiverOutput != nullptr) {
    ret = OH_PreviewOutput_Stop(imageReceiverOutput);
    if (ret != CAMERA_OK) {
      OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, LOG_TAG_CAMERA, "OH_PreviewOutput_Stop failed.");
    }
  }
  if (captureSession != nullptr) {
    ret = OH_CaptureSession_Stop(captureSession);
    if (ret != CAMERA_OK) {
      OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, LOG_TAG_CAMERA, "OH_CaptureSession_Stop failed.");
    }
  }

  if (cameraInput != nullptr) {
    ret = OH_CameraInput_Close(cameraInput);
    if (ret != CAMERA_OK) {
      OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, LOG_TAG_CAMERA, "OH_CameraInput_Release failed.");
    }
    ret = OH_CameraInput_Release(cameraInput);
    if (ret != CAMERA_OK) {
      OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, LOG_TAG_CAMERA, "OH_CameraInput_Close failed.");
    }
  }

  if (imageReceiverOutput != nullptr) {
    ret = OH_PreviewOutput_Release(imageReceiverOutput);
    if (ret != CAMERA_OK) {
      OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, LOG_TAG_CAMERA, "OH_PreviewOutput_Release failed.");
    }
  }

  if (captureSession != nullptr) {
    ret = OH_CaptureSession_Release(captureSession);
    if (ret != CAMERA_OK) {
      OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, LOG_TAG_CAMERA, "OH_CaptureSession_Release failed.");
    }
  }

  OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, LOG_TAG_CAMERA, "stopCapture OK.");
}

更多关于HarmonyOS 鸿蒙Next OH_CaptureSession_Stop(captureSession) 失败,错误码7400201 及 OH_CameraInput_Close(cameraInput) 失败,错误码7400201的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

相机回调顺序问题,cameraInput.open()为异步方法,后续代码在open操作执行完之前就进行会出现此错误。

参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/native-camera-shooting-case-V5 中示例调整下释放顺序。

OH_CaptureSession_Stop ==> OH_CameraInput_Close ==> OH_PreviewOutput_Release

更多关于HarmonyOS 鸿蒙Next OH_CaptureSession_Stop(captureSession) 失败,错误码7400201 及 OH_CameraInput_Close(cameraInput) 失败,错误码7400201的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


cameraInput和PreviewOutput写的有问题,这两个地方即stop又release,导致问题。

cameraInput 只要执行OH_CameraInput_Close,PreviewOutput只要执行OH_PreviewOutput_Release就可以了。资源释放使用方法顺序:OH_CaptureSession_Stop ==> OH_PreviewOutput_Release ==> OH_CameraInput_Close ==> OH_CaptureSession_Release

调整顺序之后OH_CameraInput_Close failed.ret:7400201,OH_PreviewOutput_Stop failed.ret:7400201 报错

OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, LOG_TAG_CAMERA, "begin stopVideoCapture.");
Camera_ErrorCode ret;
if (captureSession != nullptr) {
  ret = OH_CaptureSession_Stop(captureSession);
  if (ret != CAMERA_OK) {
    OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, LOG_TAG_CAMERA, "OH_CaptureSession_Stop failed.ret:%{public}d", ret);
  }
}

if (cameraInput != nullptr) {
  ret = OH_CameraInput_Close(cameraInput);
  if (ret != CAMERA_OK) {
    OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, LOG_TAG_CAMERA, "OH_CameraInput_Release failed.ret:%{public}d", ret);
  }
  ret = OH_CameraInput_Release(cameraInput);
  if (ret != CAMERA_OK) {
    OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, LOG_TAG_CAMERA, "OH_CameraInput_Close failed.ret:%{public}d", ret);
  }
  this->cameraInput = nullptr;
}

if (imageReceiverOutput != nullptr) {
  ret = OH_PreviewOutput_Stop(imageReceiverOutput);
  if (ret != CAMERA_OK) {
    OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, LOG_TAG_CAMERA, "OH_PreviewOutput_Stop failed.ret:%{public}d", ret);
  }
  ret = OH_PreviewOutput_Release(imageReceiverOutput);
  if (ret != CAMERA_OK) {
    OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, LOG_TAG_CAMERA, "OH_PreviewOutput_Release failed.ret:%{public}d", ret);
  }
  this->imageReceiverOutput = nullptr;
}

if (captureSession != nullptr) {
  ret = OH_CaptureSession_Release(captureSession);
  if (ret != CAMERA_OK) {
    OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, LOG_TAG_CAMERA, "OH_CaptureSession_Release failed.ret:%{public}d", ret);
  }
  this->captureSession = nullptr;
}
OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, LOG_TAG_CAMERA, "camera stop Capture OK.");

针对HarmonyOS鸿蒙系统中OH_CaptureSession_Stop(captureSession)OH_CameraInput_Close(cameraInput)函数调用失败,并返回错误码7400201的问题,以下提供可能的解决方案:

错误码7400201通常指示资源或状态问题。在处理摄像头相关的操作时,此错误可能意味着摄像头资源正被其他应用或服务占用,或者摄像头会话状态不正确。

  1. 检查摄像头权限:确保应用已正确申请并获得了摄像头使用权限。

  2. 摄像头会话状态:在调用OH_CaptureSession_StopOH_CameraInput_Close之前,确认摄像头会话已正确启动,并且没有其他操作(如同时启动另一个会话)正在干扰。

  3. 资源释放:在调用OH_CaptureSession_Stop后,确保所有与该会话相关的资源(如预览窗口、输出流等)已正确释放,再尝试关闭cameraInput

  4. 错误处理:在代码中添加适当的错误处理逻辑,以捕获并响应此类错误,可能包括重试机制或用户提示。

  5. 系统日志:查看系统日志以获取更多关于错误发生时的上下文信息,这有助于诊断问题。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部