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