1# native_avcodec_audiocodec.h 2 3## 概述 4 5音频编解码Native API的声明。 6 7**引用文件:** <multimedia/player_framework/native_avcodec_audiocodec.h> 8 9**库:** libnative_media_acodec.so 10 11**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 12 13**起始版本:** 11 14 15**相关模块:** [AudioCodec](capi-audiocodec.md) 16 17**相关示例:** [AVCodec](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec) 18 19## 汇总 20 21### 结构体 22 23| 名称 | typedef关键字 | 描述 | 24| -- | -- | -- | 25| [MediaKeySession](capi-audiocodec-mediakeysession.md) | MediaKeySession | MediaKeySession字段。 | 26 27### 函数 28 29| 名称 | 描述 | 30| -- | -- | 31| [OH_AVCodec *OH_AudioCodec_CreateByMime(const char *mime, bool isEncoder)](#oh_audiocodec_createbymime) | 根据mime类型创建音频编解码器实例,大多数场景下建议使用此方式 | 32| [OH_AVCodec *OH_AudioCodec_CreateByName(const char *name)](#oh_audiocodec_createbyname) | 通过音频编解码器名称创建音频编解码器实例,使用此接口的前提是知道编解码器的确切名称 | 33| [OH_AVErrCode OH_AudioCodec_Destroy(OH_AVCodec *codec)](#oh_audiocodec_destroy) | 清理编解码器内部资源,销毁编解码器实例 | 34| [OH_AVErrCode OH_AudioCodec_RegisterCallback(OH_AVCodec *codec, OH_AVCodecCallback callback, void *userData)](#oh_audiocodec_registercallback) | 设置异步回调函数,使您的应用程序可以响应音频编解码器生成的事件。在调用Prepare之前,必须调用此接口。 | 35| [OH_AVErrCode OH_AudioCodec_Configure(OH_AVCodec *codec, const OH_AVFormat *format)](#oh_audiocodec_configure) | 配置音频描述信息。音频编解码器通常会根据音频描述信息进行配置。在调用Prepare之前,必须调用此接口 | 36| [OH_AVErrCode OH_AudioCodec_Prepare(OH_AVCodec *codec)](#oh_audiocodec_prepare) | 准备编解码器的内部资源,在调用此接口之前必须调用Configure接口 | 37| [OH_AVErrCode OH_AudioCodec_Start(OH_AVCodec *codec)](#oh_audiocodec_start) | 调用此接口启动编解码器,在Prepare成功后执行。启动后,编解码器将开始上报OH_AVCodecOnNeedInputBuffer事件 | 38| [OH_AVErrCode OH_AudioCodec_Stop(OH_AVCodec *codec)](#oh_audiocodec_stop) | 停止编解码器。停止后,您可以通过Start重新进入已启动状态(started),但需要注意的是,如果编解码器之前已输入数据,则需要重新输入编解码器数据 | 39| [OH_AVErrCode OH_AudioCodec_Flush(OH_AVCodec *codec)](#oh_audiocodec_flush) | 清除编解码器中缓存的输入和输出数据。调用此接口后,以前通过异步回调上报的所有缓冲区索引都将失效,请确保不要访问这些索引对应的缓冲区 | 40| [OH_AVErrCode OH_AudioCodec_Reset(OH_AVCodec *codec)](#oh_audiocodec_reset) | 重置编解码器。如果要继续编解码,需要再次调用Configure接口配置编解码器实例 | 41| [OH_AVFormat *OH_AudioCodec_GetOutputDescription(OH_AVCodec *codec)](#oh_audiocodec_getoutputdescription) | 获取编解码器输出数据的描述信息,详细信息请参见{@link OH_AVFormat}需要注意的是,返回值所指向的OH_AVFormat实例的生命周期需要调用{@link OH_AVFormat_Destroy}接口手动释放。 | 42| [OH_AVErrCode OH_AudioCodec_SetParameter(OH_AVCodec *codec, const OH_AVFormat *format)](#oh_audiocodec_setparameter) | 配置编解码器的动态参数。注意:该接口必须在编解码器启动后才能调用。另外,参数配置错误可能会导致编解码失败。 | 43| [OH_AVErrCode OH_AudioCodec_PushInputBuffer(OH_AVCodec *codec, uint32_t index)](#oh_audiocodec_pushinputbuffer) | 将填充有数据的输入缓冲区提交给音频编解码器。[OH_AVCodecOnNeedInputBuffer](capi-native-avcodec-base-h.md#oh_avcodeconneedinputbuffer)回调将报告可用的输入缓冲区和对应的索引值。一旦具有指定索引的缓冲区被提交给音频编解码器,该缓冲区将无法再次访问,直到再次收到[OH_AVCodecOnNeedInputBuffer](capi-native-avcodec-base-h.md#oh_avcodeconneedinputbuffer)回调,收到相同索引时此缓冲区才可使用。此外,对于某些编解码器,需要在开始时向编解码器输入编解码特定配置数据(Codec-Specific-Data),以初始化编解码器的编解码过程。 | 44| [OH_AVErrCode OH_AudioCodec_FreeOutputBuffer(OH_AVCodec *codec, uint32_t index)](#oh_audiocodec_freeoutputbuffer) | 将处理后的输出缓冲区返回给编解码器。 | 45| [OH_AVErrCode OH_AudioCodec_IsValid(OH_AVCodec *codec, bool *isValid)](#oh_audiocodec_isvalid) | 检查当前编解码器实例是否有效。可用于后台故障恢复或应用程序从后台恢复时检测编解码器有效状态。 | 46| [OH_AVErrCode OH_AudioCodec_SetDecryptionConfig(OH_AVCodec *codec, MediaKeySession *mediaKeySession, bool secureAudio)](#oh_audiocodec_setdecryptionconfig) | 设置解密信息。 | 47| [OH_AVErrCode OH_AudioCodec_QueryInputBuffer(struct OH_AVCodec *codec, uint32_t *index, int64_t timeoutUs)](#oh_audiocodec_queryinputbuffer) | 在设置的超时时间内,尝试查询对应音频编解码器可用的输入缓冲区的索引值。获取到索引值后,使用[OH_AudioCodec_GetInputBuffer](#oh_audiocodec_getinputbuffer)接口获取索引值对应的缓冲区。<br> 在缓冲区填充数据后,使用[OH_AudioCodec_PushInputBuffer](#oh_audiocodec_pushinputbuffer)输入对应索引值,将缓冲区数据送到编解码器。注意:此接口仅可在音频编解码的同步模式中使用。 | 48| [OH_AVBuffer *OH_AudioCodec_GetInputBuffer(struct OH_AVCodec *codec, uint32_t index)](#oh_audiocodec_getinputbuffer) | 输入索引值,获取对应音频编解码器中该索引值对应的输入缓冲区。注意:此接口仅可在音频编解码的同步模式中使用。 | 49| [OH_AVErrCode OH_AudioCodec_QueryOutputBuffer(struct OH_AVCodec *codec, uint32_t *index, int64_t timeoutUs)](#oh_audiocodec_queryoutputbuffer) | 在设置的超时时间内,尝试查询对应音频编解码器可用的输出缓冲区的索引值。获取到索引值后,通过[OH_AudioCodec_GetOutputBuffer](#oh_audiocodec_getoutputbuffer)接口获取的输出缓冲区使用完后,<br> 需要调用[OH_AudioCodec_FreeOutputBuffer](#oh_audiocodec_freeoutputbuffer)接口进行释放。释放后无法再次使用,长期不释放会阻塞编解码流程。注意:此接口仅可在音频编解码的同步模式中使用。 | 50| [OH_AVBuffer *OH_AudioCodec_GetOutputBuffer(struct OH_AVCodec *codec, uint32_t index)](#oh_audiocodec_getoutputbuffer) | 输入索引值,获取对应音频编解码器中该索引值对应的输出缓冲区。注意:此接口仅可在音频编解码的同步模式中使用。 | 51 52## 函数说明 53 54### OH_AudioCodec_CreateByMime() 55 56``` 57OH_AVCodec *OH_AudioCodec_CreateByMime(const char *mime, bool isEncoder) 58``` 59 60**描述** 61 62根据MIME类型创建音频编解码器实例,大多数场景下建议使用此方式。 63 64**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 65 66**起始版本:** 11 67 68 69**参数:** 70 71| 参数项 | 描述 | 72| -- | -- | 73| const char *mime | MIME类型描述字符串,请参阅[AVCODEC_MIMETYPE](capi-native-avcodec-base-h.md#变量)。| 74| bool isEncoder | true表示需要创建编码器,false表示需要创建解码器。 | 75 76**返回:** 77 78| 类型 | 说明 | 79| -- | -- | 80| [OH_AVCodec](capi-codecbase-oh-avcodec.md) * | 返回OH_AVCodec实例的指针。 | 81 82### OH_AudioCodec_CreateByName() 83 84``` 85OH_AVCodec *OH_AudioCodec_CreateByName(const char *name) 86``` 87 88**描述** 89 90通过音频编解码器名称创建音频编解码器实例,使用此接口的前提是知道编解码器的确切名称,编解码器的名称可以通过[OH_AVCapability_GetName](capi-native-avcapability-h.md#oh_avcapability_getname)获取。 91 92**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 93 94**起始版本:** 11 95 96 97**参数:** 98 99| 参数项 | 描述 | 100| -- | -- | 101| const char *name | 音频编解码器名称。 | 102 103**返回:** 104 105| 类型 | 说明 | 106| -- | -- | 107| [OH_AVCodec](capi-codecbase-oh-avcodec.md) * | 返回OH_AVCodec实例的指针 | 108 109### OH_AudioCodec_Destroy() 110 111``` 112OH_AVErrCode OH_AudioCodec_Destroy(OH_AVCodec *codec) 113``` 114 115**描述** 116 117清理编解码器内部资源,销毁编解码器实例。注意不能进行重复销毁,否则将会导致程序崩溃。 118 119**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 120 121**起始版本:** 11 122 123 124**参数:** 125 126| 参数项 | 描述 | 127| -- | -- | 128| [OH_AVCodec](capi-codecbase-oh-avcodec.md) *codec | 指向OH_AVCodec实例的指针。 | 129 130**返回:** 131 132| 类型 | 说明 | 133| -- | -- | 134| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br> AV_ERR_INVALID_VAL:OH_AVCodec实例为nullptr或无效。<br> AV_ERR_INVALID_STATE:解码器服务不可用。<br> AV_ERR_NO_MEMORY:内部资源已经释放。<br> AV_ERR_UNKNOWN:发生内部错误,建议检查日志。 | 135 136### OH_AudioCodec_RegisterCallback() 137 138``` 139OH_AVErrCode OH_AudioCodec_RegisterCallback(OH_AVCodec *codec, OH_AVCodecCallback callback, void *userData) 140``` 141 142**描述** 143 144设置异步回调函数,使应用可以响应音频编解码器生成的事件。在调用Prepare之前,必须调用此接口。 145 146**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 147 148**起始版本:** 11 149 150 151**参数:** 152 153| 参数项 | 描述 | 154| -- | -- | 155| [OH_AVCodec](capi-codecbase-oh-avcodec.md) *codec | 指向OH_AVCodec实例的指针。 | 156| [OH_AVCodecCallback](capi-codecbase-oh-avcodeccallback.md) callback | 所有回调函数的集合,请参见[OH_AVCodecCallback]。(capi-codecbase-oh-avcodeccallback.md) | 157| void *userData | 用户特定数据。 | 158 159**返回:** 160 161| 类型 | 说明 | 162| -- | -- | 163| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br> AV_ERR_INVALID_VAL:输入参数为nullptr或无效。<br> AV_ERR_INVALID_STATE:解码器服务不可用。 | 164 165### OH_AudioCodec_Configure() 166 167``` 168OH_AVErrCode OH_AudioCodec_Configure(OH_AVCodec *codec, const OH_AVFormat *format) 169``` 170 171**描述** 172 173配置音频描述信息。音频编解码器通常会根据音频描述信息进行配置。在调用Prepare之前,必须调用此接口。 174 175**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 176 177**起始版本:** 11 178 179 180**参数:** 181 182| 参数项 | 描述 | 183| -- | -- | 184| [OH_AVCodec](capi-codecbase-oh-avcodec.md) *codec | 指向OH_AVCodec实例的指针。 | 185| [const OH_AVFormat](_core.md#oh_avformat) *format | 指向OH_AVFormat的指针,给出要编解码的音频轨道的描述。 | 186 187**返回:** 188 189| 类型 | 说明 | 190| -- | -- | 191| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br> AV_ERR_INVALID_VAL:输入参数为nullptr或无效。<br> AV_ERR_INVALID_STATE:解码器服务不可用。<br> AV_ERR_OPERATE_NOT_PERMIT:不允许操作,这可能是由于状态不正确或不支持的操作。<br> AV_ERR_UNKNOWN:发生内部错误,建议检查日志。 | 192 193### OH_AudioCodec_Prepare() 194 195``` 196OH_AVErrCode OH_AudioCodec_Prepare(OH_AVCodec *codec) 197``` 198 199**描述** 200 201准备编解码器的内部资源,在调用此接口之前必须调用Configure接口。 202 203**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 204 205**起始版本:** 11 206 207 208**参数:** 209 210| 参数项 | 描述 | 211| -- | -- | 212| [OH_AVCodec](capi-codecbase-oh-avcodec.md) *codec | 指向OH_AVCodec实例的指针。 | 213 214**返回:** 215 216| 类型 | 说明 | 217| -- | -- | 218| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br> AV_ERR_INVALID_VAL:OH_AVCodec实例为nullptr或无效。<br> AV_ERR_INVALID_STATE:解码器服务不可用。<br> AV_ERR_OPERATE_NOT_PERMIT:不允许操作,这可能是由于状态不正确或不支持的操作。<br> AV_ERR_UNKNOWN:发生内部错误,建议检查日志。 | 219 220### OH_AudioCodec_Start() 221 222``` 223OH_AVErrCode OH_AudioCodec_Start(OH_AVCodec *codec) 224``` 225 226**描述** 227 228调用此接口启动编解码器,在Prepare成功后执行。启动后,编解码器将开始上报OH_AVCodecOnNeedInputBuffer事件。 229 230**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 231 232**起始版本:** 11 233 234 235**参数:** 236 237| 参数项 | 描述 | 238| -- | -- | 239| [OH_AVCodec](capi-codecbase-oh-avcodec.md) *codec | 指向OH_AVCodec实例的指针。 | 240 241**返回:** 242 243| 类型 | 说明 | 244| -- | -- | 245| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br> AV_ERR_INVALID_VAL:OH_AVCodec实例为nullptr或无效。<br> AV_ERR_INVALID_STATE:解码器服务不可用。<br> AV_ERR_OPERATE_NOT_PERMIT:不允许操作,这可能是由于状态不正确或不支持的操作。<br> AV_ERR_UNKNOWN:发生内部错误,建议检查日志。 | 246 247### OH_AudioCodec_Stop() 248 249``` 250OH_AVErrCode OH_AudioCodec_Stop(OH_AVCodec *codec) 251``` 252 253**描述** 254 255停止编解码器。停止后,可以通过Start重新进入已启动状态(started),但需要注意的是,如果编解码器之前已输入数据,则需要重新输入编解码器数据。 256 257**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 258 259**起始版本:** 11 260 261 262**参数:** 263 264| 参数项 | 描述 | 265| -- | -- | 266| [OH_AVCodec](capi-codecbase-oh-avcodec.md) *codec | 指向OH_AVCodec实例的指针。 | 267 268**返回:** 269 270| 类型 | 说明 | 271| -- | -- | 272| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br> AV_ERR_INVALID_VAL:OH_AVCodec实例为nullptr或无效。<br> AV_ERR_INVALID_STATE:解码器服务不可用。<br> AV_ERR_OPERATE_NOT_PERMIT:不允许操作,这可能是由于状态不正确或不支持的操作。<br> AV_ERR_UNKNOWN:发生内部错误,建议检查日志。 | 273 274### OH_AudioCodec_Flush() 275 276``` 277OH_AVErrCode OH_AudioCodec_Flush(OH_AVCodec *codec) 278``` 279 280**描述** 281 282清除编解码器中缓存的输入和输出数据。调用此接口后,以前通过异步回调上报的所有缓冲区索引都将失效,请确保不要访问这些索引对应的缓冲区。 283 284**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 285 286**起始版本:** 11 287 288 289**参数:** 290 291| 参数项 | 描述 | 292| -- | -- | 293| [OH_AVCodec](capi-codecbase-oh-avcodec.md) *codec | 指向OH_AVCodec实例的指针。 | 294 295**返回:** 296 297| 类型 | 说明 | 298| -- | -- | 299| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br> AV_ERR_INVALID_VAL:OH_AVCodec实例为nullptr或无效。<br> AV_ERR_INVALID_STATE:解码器服务不可用。<br> AV_ERR_OPERATE_NOT_PERMIT:不允许操作,这可能是由于状态不正确或不支持的操作。<br> AV_ERR_UNKNOWN:发生内部错误,建议检查日志。 | 300 301### OH_AudioCodec_Reset() 302 303``` 304OH_AVErrCode OH_AudioCodec_Reset(OH_AVCodec *codec) 305``` 306 307**描述** 308 309重置编解码器。此时会清空已配置的参数和输入输出数据。<br>如果要继续编解码,需要再次调用Configure接口配置编解码器实例。 310 311**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 312 313**起始版本:** 11 314 315 316**参数:** 317 318| 参数项 | 描述 | 319| -- | -- | 320| [OH_AVCodec](capi-codecbase-oh-avcodec.md) *codec | 指向OH_AVCodec实例的指针。 | 321 322**返回:** 323 324| 类型 | 说明 | 325| -- | -- | 326| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br> AV_ERR_INVALID_VAL:OH_AVCodec实例为nullptr或无效。<br> AV_ERR_INVALID_STATE:解码器服务不可用。 | 327 328### OH_AudioCodec_GetOutputDescription() 329 330``` 331OH_AVFormat *OH_AudioCodec_GetOutputDescription(OH_AVCodec *codec) 332``` 333 334**描述** 335 336获取编解码器输出数据的OH_AVFormat信息。<br>需要注意的是,返回值所指向的OH_AVFormat实例需要开发者调用[OH_AVFormat_Destroy](_core.md#oh_avformat_destroy)接口手动释放。 337 338**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 339 340**起始版本:** 11 341 342 343**参数:** 344 345| 参数项 | 描述 | 346| -- | -- | 347| [OH_AVCodec](capi-codecbase-oh-avcodec.md) *codec | 指向OH_AVCodec实例的指针。 | 348 349**返回:** 350 351| 类型 | 说明 | 352| -- | -- | 353| [OH_AVFormat](_core.md#oh_avformat) * | 返回OH_AVFormat句柄指针,生命周期将使用下一个GetOutputDescription刷新,或使用OH_AVCodec销毁。 | 354 355### OH_AudioCodec_SetParameter() 356 357``` 358OH_AVErrCode OH_AudioCodec_SetParameter(OH_AVCodec *codec, const OH_AVFormat *format) 359``` 360 361**描述** 362 363 配置编解码器的动态参数。<br>注意,该接口必须在编解码器启动后才能调用。另外,参数配置错误可能会导致编解码失败。 364 365**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 366 367**起始版本:** 11 368 369 370**参数:** 371 372| 参数项 | 描述 | 373| -- | -- | 374| [OH_AVCodec](capi-codecbase-oh-avcodec.md) *codec | 指向OH_AVCodec实例的指针。 | 375| [const OH_AVFormat](_core.md#oh_avformat) *format | OH_AVFormat句柄指针。 | 376 377**返回:** 378 379| 类型 | 说明 | 380| -- | -- | 381| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br> AV_ERR_INVALID_VAL:输入参数为nullptr或无效。<br> AV_ERR_INVALID_STATE:解码器服务不可用。<br> AV_ERR_OPERATE_NOT_PERMIT:不允许操作,这可能是由于状态不正确或不支持的操作。<br> AV_ERR_UNKNOWN:发生内部错误,建议检查日志。 | 382 383### OH_AudioCodec_PushInputBuffer() 384 385``` 386OH_AVErrCode OH_AudioCodec_PushInputBuffer(OH_AVCodec *codec, uint32_t index) 387``` 388 389**描述** 390 391通知音频编解码器已完成对index所对应缓冲区进行输入数据的填充。<br>[OH_AVCodecOnNeedInputBuffer](capi-native-avcodec-base-h.md#oh_avcodeconneedinputbuffer)回调将报告可用的输入缓冲区和对应的索引值。一旦具有指定索引的缓冲区被提交给音频编解码器,该缓冲区将无法再次访问,直到再次收到[OH_AVCodecOnNeedInputBuffer](capi-native-avcodec-base-h.md#oh_avcodeconneedinputbuffer)回调,收到相同索引时此缓冲区才可使用。<br>此外,对于某些编解码器,需要在开始时向编解码器输入编解码特定配置数据(Codec-Specific-Data),以初始化编解码器的编解码过程。<br>注意:当返回值为AV_ERR_UNKNOWN时此次调用不生效,输入缓冲区仍为未处理状态,需根据返回的特定错误代码处理后输入相同的index重新调用OH_AudioCodec_PushInputBuffer。 392 393**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 394 395**起始版本:** 11 396 397 398**参数:** 399 400| 参数项 | 描述 | 401| -- | -- | 402| [OH_AVCodec](capi-codecbase-oh-avcodec.md) *codec | 指向OH_AVCodec实例的指针。 | 403| uint32_t index | 输入回调[OH_AVCodecOnNeedInputBuffer](capi-native-avcodec-base-h.md#oh_avcodeconneedinputbuffer)给出的索引值。 | 404 405**返回:** 406 407| 类型 | 说明 | 408| -- | -- | 409| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br> AV_ERR_INVALID_VAL:输入的index已使用或无效,需使用其他[OH_AVCodecOnNeedInputBuffer](capi-native-avcodec-base-h.md#oh_avcodeconneedinputbuffer)回调返回的index。<br> AV_ERR_INVALID_STATE:编解码器状态错误,调用OH_AudioCodec_PushInputBuffer前需确保按顺序成功调用[OH_AudioCodec_Configure](#oh_audiocodec_configure)、[OH_AudioCodec_Prepare](#oh_audiocodec_prepare)、[OH_AudioCodec_Start](#oh_audiocodec_start)。<br> AV_ERR_UNKNOWN:输入buffer size无效,需确保buffer设置了正确的buffer size和flags。 | 410 411### OH_AudioCodec_FreeOutputBuffer() 412 413``` 414OH_AVErrCode OH_AudioCodec_FreeOutputBuffer(OH_AVCodec *codec, uint32_t index) 415``` 416 417**描述** 418 419将处理后的输出缓冲区返回给编解码器。使用完输出缓冲区后需及时调用此接口进行释放,否则会阻塞编解码流程。 420 421**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 422 423**起始版本:** 11 424 425 426**参数:** 427 428| 参数项 | 描述 | 429| -- | -- | 430| [OH_AVCodec](capi-codecbase-oh-avcodec.md) *codec | 指向OH_AVCodec实例的指针。 | 431| uint32_t index | 输出[OH_AVCodecOnNewOutputBuffer](capi-native-avcodec-base-h.md#oh_avcodeconnewoutputbuffer)给出的索引值。 | 432 433**返回:** 434 435| 类型 | 说明 | 436| -- | -- | 437| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br> AV_ERR_INVALID_VAL:输入参数为nullptr或无效。缓冲区索引应该由[OH_AVCodecOnNewOutputBuffer](capi-native-avcodec-base-h.md#oh_avcodeconnewoutputbuffer)给出。<br> AV_ERR_INVALID_STATE:解码器服务不可用。<br> AV_ERR_OPERATE_NOT_PERMIT:不允许操作,这可能是由于状态不正确或不支持的操作。<br> AV_ERR_UNKNOWN:发生内部错误,建议检查日志。 | 438 439### OH_AudioCodec_IsValid() 440 441``` 442OH_AVErrCode OH_AudioCodec_IsValid(OH_AVCodec *codec, bool *isValid) 443``` 444 445**描述** 446 447检查当前编解码器实例是否有效。<br>可用于后台故障恢复或应用程序从后台恢复时检测编解码器有效状态。 448 449**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 450 451**起始版本:** 11 452 453 454**参数:** 455 456| 参数项 | 描述 | 457| -- | -- | 458| [OH_AVCodec](capi-codecbase-oh-avcodec.md) *codec | 指向OH_AVCodec实例的指针。 | 459| bool *isValid | 输出参数。指向布尔类型的指针,true:编解码器实例有效,false:编解码器实例无效。 | 460 461**返回:** 462 463| 类型 | 说明 | 464| -- | -- | 465| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br> AV_ERR_INVALID_VAL:输入参数为nullptr或无效。 | 466 467### OH_AudioCodec_SetDecryptionConfig() 468 469``` 470OH_AVErrCode OH_AudioCodec_SetDecryptionConfig(OH_AVCodec *codec, MediaKeySession *mediaKeySession,bool secureAudio) 471``` 472 473**描述** 474 475设置解密信息。 476 477**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 478 479**起始版本:** 12 480 481 482**参数:** 483 484| 参数项 | 描述 | 485| -- | -- | 486| [OH_AVCodec](capi-codecbase-oh-avcodec.md) *codec | 指向OH_AVCodec实例的指针。 | 487| [MediaKeySession](capi-audiocodec-mediakeysession.md) *mediaKeySession | 带有解密功能的媒体秘钥会话实例。 | 488| bool secureAudio | 是否使用安全解码器。使用安全解码器为true,否则为false。<br>注意:当前音频解密尚不支持使用安全解码器。 | 489 490**返回:** 491 492| 类型 | 说明 | 493| -- | -- | 494| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br> AV_ERR_INVALID_VAL:OH_AVCodec实例为nullptr或无效,mediaKeySystemInfo实例为nullptr或无效。<br> AV_ERR_INVALID_STATE:解码器服务不可用。 | 495 496### OH_AudioCodec_QueryInputBuffer() 497 498``` 499OH_AVErrCode OH_AudioCodec_QueryInputBuffer(struct OH_AVCodec *codec, uint32_t *index, int64_t timeoutUs) 500``` 501 502**描述** 503 504在设置的超时时间内,尝试查询对应音频编解码器可用的输入缓冲区的索引值。<br>获取到索引值后,使用[OH_AudioCodec_GetInputBuffer](#oh_audiocodec_getinputbuffer)接口获取索引值对应的缓冲区。<br>在缓冲区填充数据后,使用[OH_AudioCodec_PushInputBuffer](#oh_audiocodec_pushinputbuffer)输入对应索引值,将缓冲区数据送到编解码器。<br>注意:此接口仅可在音频编解码的同步模式中使用。 505 506**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 507 508**起始版本:** 20 509 510 511**参数:** 512 513| 参数项 | 描述 | 514| -- | -- | 515| [struct OH_AVCodec](capi-codecbase-oh-avcodec.md) *codec | 指向OH_AVCodec实例的指针。 | 516| uint32_t *index | 输出参数,获取到的输入缓冲区的索引值。 | 517| int64_t timeoutUs | 超时时间,单位:微秒。设置为负值时表示无限等待。 | 518 519**返回:** 520 521| 类型 | 说明 | 522| -- | -- | 523| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br> AV_ERR_INVALID_VAL:执行失败,输入参数错误。<br> AV_ERR_INVALID_STATE:执行失败,状态非法,没有启动编解码器等。<br> AV_ERR_OPERATE_NOT_PERMIT:执行失败,不允许非同步模式下调用。<br> AV_ERR_TRY_AGAIN_LATER:执行失败,超时时间内获取不到可用的缓冲区。 | 524 525### OH_AudioCodec_GetInputBuffer() 526 527``` 528OH_AVBuffer *OH_AudioCodec_GetInputBuffer(struct OH_AVCodec *codec, uint32_t index) 529``` 530 531**描述** 532 533输入索引值,获取对应音频编解码器中该索引值对应的输入缓冲区。注意:此接口仅可在音频编解码的同步模式中使用。 534 535**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 536 537**起始版本:** 20 538 539 540**参数:** 541 542| 参数项 | 描述 | 543| -- | -- | 544| [struct OH_AVCodec](capi-codecbase-oh-avcodec.md) *codec | 指向OH_AVCodec实例的指针。 | 545| uint32_t index | 输入缓冲区的索引值。该索引值通过接口[OH_AudioCodec_QueryInputBuffer](#oh_audiocodec_queryinputbuffer)获取。 | 546 547**返回:** 548 549| 类型 | 说明 | 550| -- | -- | 551| OH_AVBuffer * | 如果执行成功,则返回一个指向OH_AVBuffer实例的指针,否则返回NULL。 | 552 553### OH_AudioCodec_QueryOutputBuffer() 554 555``` 556OH_AVErrCode OH_AudioCodec_QueryOutputBuffer(struct OH_AVCodec *codec, uint32_t *index, int64_t timeoutUs) 557``` 558 559**描述** 560 561在设置的超时时间内,尝试查询对应音频编解码器可用的输出缓冲区的索引值。获取到索引值后,通过[OH_AudioCodec_GetOutputBuffer](#oh_audiocodec_getoutputbuffer)接口获取的输出缓冲区使用完后,<br> 需要调用[OH_AudioCodec_FreeOutputBuffer](#oh_audiocodec_freeoutputbuffer)接口进行释放。释放后无法再次使用,长期不释放会阻塞编解码流程。注意:此接口仅可在音频编解码的同步模式中使用。 562 563**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 564 565**起始版本:** 20 566 567 568**参数:** 569 570| 参数项 | 描述 | 571| -- | -- | 572| [struct OH_AVCodec](capi-codecbase-oh-avcodec.md) *codec | 指向OH_AVCodec实例的指针。 | 573| uint32_t *index | 输出参数,获取到的输出缓冲区的索引值。 | 574| int64_t timeoutUs | 超时时间,单位:微秒。设置为负值时表示无限等待。 | 575 576**返回:** 577 578| 类型 | 说明 | 579| -- | -- | 580| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br> AV_ERR_INVALID_VAL:执行失败,输入参数错误。<br> AV_ERR_INVALID_STATE:执行失败,状态非法,没有启动编解码器等。<br> AV_ERR_OPERATE_NOT_PERMIT:执行失败,不允许非同步模式下调用。<br> AV_ERR_STREAM_CHANGED:解码输出流格式发生变化, 可以通过调用[OH_AudioCodec_GetOutputDescription](#oh_audiocodec_getoutputdescription)接口获取新的流信息。<br> AV_ERR_TRY_AGAIN_LATER:执行失败,超时时间内获取不到可用的缓冲区。 | 581 582### OH_AudioCodec_GetOutputBuffer() 583 584``` 585OH_AVBuffer *OH_AudioCodec_GetOutputBuffer(struct OH_AVCodec *codec, uint32_t index) 586``` 587 588**描述** 589 590输入索引值,获取对应音频编解码器中该索引值对应的输出缓冲区。注意:此接口仅可在音频编解码的同步模式中使用。 591 592**系统能力:** SystemCapability.Multimedia.Media.AudioCodec 593 594**起始版本:** 20 595 596 597**参数:** 598 599| 参数项 | 描述 | 600| -- | -- | 601| [struct OH_AVCodec](capi-codecbase-oh-avcodec.md) *codec | 指向OH_AVCodec实例的指针。 | 602| uint32_t index | 输出缓冲区的索引值。该索引值通过接口[OH_AudioCodec_QueryOutputBuffer](#oh_audiocodec_queryoutputbuffer)获取。 | 603 604**返回:** 605 606| 类型 | 说明 | 607| -- | -- | 608| OH_AVBuffer * | 如果执行成功,则返回一个指向OH_AVBuffer实例的指针,否则返回NULL。 | 609 610 611