OpenHarmony开发者论坛

标题: OpenHarmony3.2 支持NATIVE层的H264硬编码吗? [打印本页]

作者: leohe    时间: 2023-12-29 09:00
标题: OpenHarmony3.2 支持NATIVE层的H264硬编码吗?
[md]背景

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层时, 如何进一步调试更底层的源码呢?
[/md]




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5