HarmonyOS鸿蒙Next中OH_AVCapability_GetEncoderComplexityRange这个API是不是已经废弃了?
HarmonyOS鸿蒙Next中OH_AVCapability_GetEncoderComplexityRange这个API是不是已经废弃了? 我对H264的编码器调用OH_AVCapability_GetEncoderComplexityRange函数返回的范围是0和0,而且我也没找到OH_AVFormat_SetIntValue函数对应设置复杂度的Key在哪里,所以官方是不是已经把H264编码器设置复杂度的方法删除了?
尊敬的开发者,您好!您的问题已受理,请您耐心等待,感谢您的理解与支持!
更多关于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)通常与以下情况有关:
- 当前设备或所选编码器不支持复杂度调节:部分硬件编码器可能固定使用单一复杂度,因此范围返回为0。建议先通过
OH_AVCapability_IsEncoderComplexitySupported确认是否支持该功能。 - Key值缺失问题:H.264编码器复杂度设置的Key为
OH_MD_KEY_VIDEO_ENCODER_COMPLEXITY(需检查头文件avformat.h中是否定义)。若未找到,可能是当前版本暂未开放该参数设置,建议关注后续版本更新。 - 编码器能力查询时机:请确保在编码器实例创建前调用能力查询接口,部分编码器需在初始化后才能获取动态参数范围。
建议通过以下步骤进一步验证:
- 确认设备支持的编码器类型(硬件/软件)。
- 检查API版本与文档的对应关系,排除版本差异。
- 尝试使用
OH_AVCapability_GetEncoderComplexityRange查询其他编码格式(如HEVC)作为对比。
若问题仍存在,可参考官方示例代码中的编码器配置模块,对比参数调用流程。

