cmlxiaogeaaa 2025-07-23 15:27 采纳率: 0%
浏览 20

OPenharmony USB 摄像头

在RK3568 标准系统开发相机应用时,根据OpenHarmony应用开发文档相机应用开发步骤开发相机应用,执行Session.commitConfig()函数报错误码error code: 7400201 执行Session.start() 函数报 error code: 7400103.但是开发板自带的相机不会报上述错误代码 求大神帮助。。

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2025-07-23 15:28
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    你提到在使用 OpenHarmonyRK3568 开发板上开发相机应用时,执行 Session.commitConfig() 报错 error code: 7400201,执行 Session.start() 报错 error code: 7400103。而开发板自带的相机应用却不会报错,说明问题可能出在你的应用实现或配置上。


    🔍 一、错误代码含义分析

    7400201

    • 错误描述: 配置未成功提交(Configuration commit failed)。
    • 可能原因:
      • 相机配置参数不合法或不支持;
      • Session 的状态不正确(如未初始化);
      • 没有正确获取相机设备句柄;
      • 权限不足或权限未申请。

    7400103

    • 错误描述: 会话启动失败(Session start failed)。
    • 可能原因:
      • Session 未正确配置;
      • 设备资源被占用;
      • 应用没有正确的权限;
      • 系统服务未正常运行(如 Camera Service)。

    🛠️ 二、解决方案步骤

    以下为详细排查和修复步骤:

    1. 确认相机权限是否已申请

    • 检查 config.json 文件中的权限声明:

      {
        "module": {
          "name": "entry",
          "type": "entry",
          "abilities": [
            {
              "name": "MainAbility",
              "label": "Main Ability",
              "icon": "$media:icon",
              "description": "Main Ability",
              "permissions": ["ohos.camera", "ohos.camera.preview"]
            }
          ]
        }
      }
      
      • 如果缺少 ohos.cameraohos.camera.preview 权限,会导致无法访问摄像头。
    • 在应用中动态请求权限(如果需要):

      import abilityAccessCtrl from '@ohos.security.abilityAccessCtrl';
      
      let atManager = abilityAccessCtrl.createAtManager();
      atManager.requestPermissionsFromUser(this, ['ohos.camera', 'ohos.camera.preview'], (err, data) => {
        if (err.code === 0) {
          // 权限申请成功
        } else {
          // 权限申请失败
        }
      });
      

    2. 检查相机设备是否可用

    • 确保相机设备已经正确识别:

      import camera from '@ohos.multimedia.camera';
      
      let cameraManager = camera.getCameraManager();
      cameraManager.getDeviceList((err, devices) => {
        if (err.code === 0) {
          console.log("Available cameras:", devices);
        } else {
          console.error("Failed to get device list:", err.message);
        }
      });
      
    • **确认你使用的相机设备是有效的,例如:

      • 使用 cameraId 是否与系统支持的设备一致;
      • 是否尝试了多个摄像头(如前置/后置)。

    3. 检查 Session 配置是否正确

    • 确保 Session 创建前已正确获取相机设备:

      let session = camera.createSession(camera.CameraType.CAMERA_TYPE_BACK);
      
    • 配置 Session 参数是否符合规范:

      let config = {
        cameraId: "your_camera_id",
        previewWidth: 1280,
        previewHeight: 720,
        previewFormat: camera.PreviewFormat.YUV_420_SP
      };
      session.setConfig(config);
      
    • 检查 setConfig() 的返回值是否为 0(表示成功):

      let result = session.setConfig(config);
      if (result !== 0) {
        console.error("Set config failed:", result);
      }
      

    4. 确保 commitConfig() 调用时机正确

    • 必须在 setConfig() 之后调用 commitConfig()

      let commitResult = session.commitConfig();
      if (commitResult !== 0) {
        console.error("Commit config failed:", commitResult); // error code: 7400201
      }
      
    • 确保 commitConfig() 成功后再调用 start()

      if (commitResult === 0) {
        let startResult = session.start();
        if (startResult !== 0) {
          console.error("Start session failed:", startResult); // error code: 7400103
        }
      }
      

    5. 检查是否有其他进程占用摄像头

    • 使用命令行查看系统进程:

      ps | grep camera
      
    • 如果发现其他进程(如系统自带的相机应用)正在使用摄像头,尝试关闭它们再测试你的应用。

    6. 查看系统日志定位具体错误

    • 使用 hilog 工具查看系统日志:

      hilog -t "CameraService" -d
      
    • 查找与 Session.commitConfig()Session.start() 相关的日志信息,定位具体错误原因。


    ✅ 三、示例代码(修正后的版本)

    import camera from '@ohos.multimedia.camera';
    
    let cameraManager = camera.getCameraManager();
    
    // 获取相机设备列表
    cameraManager.getDeviceList((err, devices) => {
      if (err.code === 0 && devices.length > 0) {
        let cameraId = devices[0].id;
    
        // 创建 Session
        let session = camera.createSession(camera.CameraType.CAMERA_TYPE_BACK);
    
        // 设置配置
        let config = {
          cameraId: cameraId,
          previewWidth: 1280,
          previewHeight: 720,
          previewFormat: camera.PreviewFormat.YUV_420_SP
        };
    
        let setConfigResult = session.setConfig(config);
        if (setConfigResult === 0) {
          let commitResult = session.commitConfig();
          if (commitResult === 0) {
            let startResult = session.start();
            if (startResult === 0) {
              console.log("Camera started successfully.");
            } else {
              console.error("Session start failed:", startResult);
            }
          } else {
            console.error("Commit config failed:", commitResult);
          }
        } else {
          console.error("Set config failed:", setConfigResult);
        }
      } else {
        console.error("No camera devices found.");
      }
    });
    

    📌 四、其他建议

    • 参考 OpenHarmony 官方文档:

    • 对比系统自带相机应用的实现逻辑:

      • 分析其 Session 初始化、配置、启动流程;
      • 对比你的应用是否在某些关键步骤上存在差异。

    🧩 总结

    | 错误码 | 原因 | 解决方案 | |--------|------|----------| | 7400201 | 配置未成功提交 | 检查权限、配置参数、设备 ID、setConfig() 返回值 | | 7400103 | 会话启动失败 | 确保 commitConfig() 成功后再调用 start(),检查设备占用情况 |


    如果你能提供更详细的代码片段或日志内容,我可以进一步帮助你定位问题。希望以上方法能解决你的问题!

    评论

报告相同问题?

问题事件

  • 创建了问题 7月23日