HarmonyOS鸿蒙Next中OH_AVCapability_GetEncoderComplexityRange这个API是不是已经废弃了?

HarmonyOS鸿蒙Next中OH_AVCapability_GetEncoderComplexityRange这个API是不是已经废弃了? 我对H264的编码器调用OH_AVCapability_GetEncoderComplexityRange函数返回的范围是0和0,而且我也没找到OH_AVFormat_SetIntValue函数对应设置复杂度的Key在哪里,所以官方是不是已经把H264编码器设置复杂度的方法删除了?

7 回复

尊敬的开发者,您好!您的问题已受理,请您耐心等待,感谢您的理解与支持!

更多关于HarmonyOS鸿蒙Next中OH_AVCapability_GetEncoderComplexityRange这个API是不是已经废弃了?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


查询编码器支持复杂度范围

复杂度等级决定了编码器使用的工具数量,但并非所有编码器都支持这一功能。

接口 功能描述
OH_AVCapability_GetEncoderComplexityRange 获取当前编码器支持的复杂度等级范围。
OH_AVCapability *capability = OH_AVCodec_GetCapability(OH_AVCODEC_MIMETYPE_AUDIO_AAC, true);
if (capability == nullptr) {
   // 异常处理。
}
// 确认支持的编码复杂度范围。
OH_AVRange complexityRange = {-1, -1};
int32_t ret = OH_AVCapability_GetEncoderComplexityRange(capability, &complexityRange);

非常感谢您的回答,可是我没找到设置复杂度的函数。

查询编码器支持复杂度范围

复杂度等级决定了编码器使用的工具数量,但并非所有编码器都支持这一功能。

接口 功能描述
OH_AVCapability_GetEncoderComplexityRange 获取当前编码器支持的复杂度等级范围。
OH_AVCapability *capability = OH_AVCodec_GetCapability(OH_AVCODEC_MIMETYPE_AUDIO_AAC, true);
if (capability == nullptr) {
    // 异常处理。
}
// 确认支持的编码复杂度范围。
OH_AVRange complexityRange = {-1, -1};
int32_t ret = OH_AVCapability_GetEncoderComplexityRange(capability, &complexityRange);

OH_AVFormat_SetIntValue()

bool OH_AVFormat_SetIntValue(struct OH_AVFormat *format, const char *key, int32_t value)

描述

对OH_AVFormat的key赋int类型的值。该接口仅能设置int类型的参数,参数类型定义详见native_avcodec_base.h

系统能力: SystemCapability.Multimedia.Media.Core

起始版本: 9

参数:

参数项 描述
struct OH_AVFormat *format 指向OH_AVFormat实例的指针。
const char *key 写入数据的键。
int32_t value 写入数据的值。

返回:

类型 说明
bool 返回值为true表示成功,为false表示失败。
可能的失败原因:
1. 输入format为空指针。
2. 输入format参数结构校验失败。
3. 输入key为空指针。
4. 设置的key对应的value类型错误。

非常感谢您的回答,可是这个native_avcodec_base.h头文件中没有对复杂度进行设置的key,那我要怎么设置复杂度呢?

根据HarmonyOS官方文档,OH_AVCapability_GetEncoderComplexityRange API在鸿蒙Next中已废弃。建议使用OH_AVCapability_GetEncoderComplexityRangeSupport替代,该接口用于查询编码器支持的复杂度范围。

根据HarmonyOS Next的API文档和开发指南,OH_AVCapability_GetEncoderComplexityRange 这个API并未被废弃,它仍然是用于查询编码器支持的复杂度范围的有效接口。

你遇到的问题(返回范围0和0)通常与以下情况有关:

  1. 当前设备或所选编码器不支持复杂度调节:部分硬件编码器可能固定使用单一复杂度,因此范围返回为0。建议先通过OH_AVCapability_IsEncoderComplexitySupported确认是否支持该功能。
  2. Key值缺失问题:H.264编码器复杂度设置的Key为OH_MD_KEY_VIDEO_ENCODER_COMPLEXITY(需检查头文件avformat.h中是否定义)。若未找到,可能是当前版本暂未开放该参数设置,建议关注后续版本更新。
  3. 编码器能力查询时机:请确保在编码器实例创建前调用能力查询接口,部分编码器需在初始化后才能获取动态参数范围。

建议通过以下步骤进一步验证:

  • 确认设备支持的编码器类型(硬件/软件)。
  • 检查API版本与文档的对应关系,排除版本差异。
  • 尝试使用OH_AVCapability_GetEncoderComplexityRange查询其他编码格式(如HEVC)作为对比。

若问题仍存在,可参考官方示例代码中的编码器配置模块,对比参数调用流程。

回到顶部