OpenHarmony 硬件编码问题

leohe 显示全部楼层 发表于 2023-12-27 17:49:28

背景

  • OpenHarmony3.2
  • dayu150

需求描述

使用OpenHarmony摄像头预览并将摄像头源的数据传给硬件编码器的作为源输入进行H264编码.

打开摄像头,设置输出源需要使用目标输出的surfaceid

  // 创建VideoOutput对象
  let videoOutput: camera.VideoOutput | undefined = undefined;
  try {
    videoOutput = cameraManager.createVideoOutput(videoProfilesArray[0], videoSurfaceId);
  } catch (error) {
    let err = error as BusinessError;
    console.error(`Failed to create the videoOutput instance. error: ${JSON.stringify(err)}`);
  }

打开视频编码器, 可以获得nativewindows指针.

   // 配置编码器
        ret = OH_VideoEncoder_Configure(videoEnc, format);
        if (ret != AV_ERR_OK) {
            // 异常处理
            return OH_ENC_ERR_CONFIG_ERR;
        }
        // 获取需要输入的Surface,以进行编码
        OHNativeWindow *nativeWindow;
        ret = OH_VideoEncoder_GetSurface(videoEnc, &nativeWindow);
        if (ret != AV_ERR_OK) {
            // 异常处理
            return OH_ENC_ERR_GET_SURFACE_ERR;
        }
        ret = OH_VideoEncoder_Prepare(videoEnc);
        if (ret != AV_ERR_OK) {
            // 异常处理
            return OH_ENC_ERR_PREPARE_ERR;
        }

问题

  1. 如何将编码器获取到的OHNativeWindow 提取到surfaceid提供给Camera关联数据源?
  2. APP已经申请 'ohos.permission.CAMERA','ohos.permission.WRITE_MEDIA','ohos.permission.READ_MEDIA','ohos.permission.MEDIA_LOCATION' 四个权限. 调用OH_VideoEncoder_Prepare, 一直返回 AV_ERR_OPERATE_NOT_PERMIT. 应该怎么解决?
您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论2

论坛小助手 官方账号

沙发 发表于 2024-1-12 10:40:03
问题1,可以参考下官方文档使用的方式https://gitee.com/openharmony/do ... edia.md#avrecorder9
问题2,方便提供一下日志吗

leohe

发表于 2024-1-12 10:56  IP属地: - 中国广东省广州市 中国电信IDC

回复 论坛小助手: 问题1: 官方的文档是arkts层的基于AVRecorder的实现用法. surfaceid直接从AVRecorder里面可以获取. 但是我拿到的是native层的nativewindows. 怎么从nativewindows 句柄获取surfaceid 都没找到接口.
我打赌你们肯定没用过这个接口.
关键一点,  AVRecorder编码设置于native层的编码一样报错2的错误码

问题2: 采集你所需日志的方法是什么?

【1 条回复】

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部