OpenHarmony3.2 支持NATIVE层的H264硬编码吗?

leohe 显示全部楼层 发表于 2023-12-29 09:00:11

背景

  1. OpenHarmony3.2
  2. dayu150

需求描述

我有个需求, 需要使用H264的CBR动态设置码率的视频编码功能.

问题描述

OpenHarmony3.2的官方文档并未显示支持硬编功能. 但是OpenHarmony4.0 则开放了H264的硬编的使用说明. 参考OpenHarmony4.0的编码用法. 在调试阶段发现异常.

   // 配置编码器
        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. OH_VideoEncoder_Configure接口调用返回正常
  2. OH_VideoEncoder_Prepare接口调用返回AV_ERR_OPERATE_NOT_PERMIT错误
  3. app在module.json5和使用过程中均实现了4个权限申请
    1. 'ohos.permission.CAMERA'
    2. 'ohos.permission.WRITE_MEDIA'
    3. 'ohos.permission.READ_MEDIA'
    4. 'ohos.permission.MEDIA_LOCATION'

补充说明

通过查阅Openharmony4.0 NDK底层源码实现. 留意到NDK的错误实现返回实现并不规范.

只要videoEncObj->videoEncoder_->Prepare()发生错误. 默认都是AV_ERR_OPERATE_NOT_PERMIT错误.

并未将具体的错误原因抛到上层来. studio上跟踪日志打印. 发现OH_VideoEncoder_Prepare 函数内部的日志信息会打印出来. 但是更底层的错误信息并未打印出来. 导致无法进一步判断分析

OH_AVErrCode OH_VideoEncoder_Prepare(struct OH_AVCodec *codec)
{
    CHECK_AND_RETURN_RET_LOG(codec != nullptr, AV_ERR_INVALID_VAL, "input codec is nullptr!");
    CHECK_AND_RETURN_RET_LOG(codec->magic_ == AVMagic::MEDIA_MAGIC_VIDEO_ENCODER, AV_ERR_INVALID_VAL, "magic error!");

    struct VideoEncoderObject *videoEncObj = reinterpret_cast<VideoEncoderObject *>(codec);
    CHECK_AND_RETURN_RET_LOG(videoEncObj->videoEncoder_ != nullptr, AV_ERR_INVALID_VAL, "videoEncoder_ is nullptr!");

    int32_t ret = videoEncObj->videoEncoder_->Prepare();
    CHECK_AND_RETURN_RET_LOG(ret == MSERR_OK, AV_ERR_OPERATE_NOT_PERMIT, "videoEncoder Prepare failed!");

    return AV_ERR_OK;
}

问题

  1. OpenHarmony3.2支持H264的native层的硬编码吗?
  2. 调试NDK层时, 如何进一步调试更底层的源码呢?
您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

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

返回顶部