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