1# AudioEncoder 2 3 4## 概述 5 6AudioEncoder模块提供用于音频编码的函数。 7 8**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder 9 10**起始版本:** 9 11 12**废弃版本:** 11 13 14**替代建议:** 当前模块下的接口均已废弃,开发者可使用[AudioCodec](_audio_codec.md)完成对应功能开发,单个接口的替代关系可查阅具体的接口说明。 15 16 17## 汇总 18 19 20### 文件 21 22| 名称 | 描述 | 23| -------- | -------- | 24| [native_avcodec_audioencoder.h](native__avcodec__audioencoder_8h.md) | 声明用于音频编码的Native API。 | 25 26 27### 函数 28 29| 名称 | 描述 | 30| -------- | -------- | 31| OH_AVCodec \* [OH_AudioEncoder_CreateByMime](#oh_audioencoder_createbymime) (const char \*mime) | 根据MIME类型创建音频编码器实例。 | 32| OH_AVCodec \* [OH_AudioEncoder_CreateByName](#oh_audioencoder_createbyname) (const char \*name) | 通过音频编码器名称创建音频编码器实例。 | 33| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioEncoder_Destroy](#oh_audioencoder_destroy) (OH_AVCodec \*codec) | 清理编码器内部资源,销毁编码器实例。 | 34| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioEncoder_SetCallback](#oh_audioencoder_setcallback) (OH_AVCodec \*codec, [OH_AVCodecAsyncCallback](_o_h___a_v_codec_async_callback.md) callback, void \*userData) | 设置异步回调函数,使应用可以响应音频编码器生成的事件。 | 35| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioEncoder_Configure](#oh_audioencoder_configure) (OH_AVCodec \*codec, OH_AVFormat \*format) | 要配置音频编码器,通常需要配置编码后的音轨的描述信息。 | 36| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioEncoder_Prepare](#oh_audioencoder_prepare) (OH_AVCodec \*codec) | 准备编码器的内部资源。 | 37| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioEncoder_Start](#oh_audioencoder_start) (OH_AVCodec \*codec) | 调用此接口启动编码器,在Prepare成功后执行。 | 38| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioEncoder_Stop](#oh_audioencoder_stop) (OH_AVCodec \*codec) | 停止编码器。 | 39| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioEncoder_Flush](#oh_audioencoder_flush) (OH_AVCodec \*codec) | 清除编码器中缓存的输入和输出数据。 | 40| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioEncoder_Reset](#oh_audioencoder_reset) (OH_AVCodec \*codec) | 重置编码器。 | 41| OH_AVFormat \* [OH_AudioEncoder_GetOutputDescription](#oh_audioencoder_getoutputdescription) (OH_AVCodec \*codec) | 获取编码器输出数据的描述信息。 | 42| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioEncoder_SetParameter](#oh_audioencoder_setparameter) (OH_AVCodec \*codec, OH_AVFormat \*format) | 配置编码器的动态参数。 | 43| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioEncoder_PushInputData](#oh_audioencoder_pushinputdata) (OH_AVCodec \*codec, uint32_t index, [OH_AVCodecBufferAttr](_o_h___a_v_codec_buffer_attr.md) attr) | 将填充有数据的输入缓冲区提交给音频编码器。 | 44| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioEncoder_FreeOutputData](#oh_audioencoder_freeoutputdata) (OH_AVCodec \*codec, uint32_t index) | 将处理后的输出缓冲区返回给编码器。 | 45| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioEncoder_IsValid](#oh_audioencoder_isvalid) (OH_AVCodec \*codec, bool \*isValid) | 检查当前编码器实例是否有效,可用于后台故障恢复或应用程序从后台恢复时检测编码器有效状态。 | 46 47 48## 函数说明 49 50 51### OH_AudioEncoder_Configure() 52 53``` 54OH_AVErrCode OH_AudioEncoder_Configure (OH_AVCodec *codec, OH_AVFormat *format) 55``` 56 57**描述** 58 59要配置音频编码器,通常需要配置编码后的音轨的描述信息。在调用Prepare之前,必须调用此接口。 60 61**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder 62 63**起始版本:** 9 64 65**废弃版本:** 11 66 67**替代接口:**[OH_AudioCodec_Configure](_audio_codec.md#oh_audiocodec_configure) 68 69**参数:** 70 71| 名称 | 描述 | 72| -------- | -------- | 73| codec | 指向OH_AVCodec实例的指针。 | 74| format | 指向OH_AVFormat的指针,给出要编码的音频轨道的描述。 | 75 76**返回:** 77 78如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 [OH_AVErrCode](_core.md#oh_averrcode)。 79 80 81### OH_AudioEncoder_CreateByMime() 82 83``` 84OH_AVCodec* OH_AudioEncoder_CreateByMime (const char *mime) 85``` 86 87**描述** 88 89根据MIME类型创建音频编码器实例,大多数场景下建议使用此方式。 90 91**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder 92 93**起始版本:** 9 94 95**废弃版本:** 11 96 97**替代接口:**[OH_AudioCodec_CreateByMime](_audio_codec.md#oh_audiocodec_createbymime) 98 99**参数:** 100 101| 名称 | 描述 | 102| -------- | -------- | 103| mime | MIME类型描述字符串,请参阅[AVCODEC_MIMETYPE](_codec_base.md#变量)。 | 104 105**返回:** 106 107返回指向OH_AVCodec实例的指针。 108 109 110### OH_AudioEncoder_CreateByName() 111 112``` 113OH_AVCodec* OH_AudioEncoder_CreateByName (const char *name) 114``` 115 116**描述** 117 118通过音频编码器名称创建音频编码器实例,使用此接口的前提是知道编码器的确切名称。 119 120**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder 121 122**起始版本:** 9 123 124**废弃版本:** 11 125 126**替代接口:**[OH_AudioCodec_CreateByName](_audio_codec.md#oh_audiocodec_createbyname) 127 128**参数:** 129 130| 名称 | 描述 | 131| -------- | -------- | 132| name | 音频编码器名称。 | 133 134**返回:** 135 136返回指向OH_AVCodec实例的指针。 137 138 139### OH_AudioEncoder_Destroy() 140 141``` 142OH_AVErrCode OH_AudioEncoder_Destroy (OH_AVCodec *codec) 143``` 144 145**描述** 146 147清理编码器内部资源,销毁编码器实例。 148 149**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder 150 151**起始版本:** 9 152 153**废弃版本:** 11 154 155**替代接口:**[OH_AudioCodec_Destroy](_audio_codec.md#oh_audiocodec_destroy) 156 157**参数:** 158 159| 名称 | 描述 | 160| -------- | -------- | 161| codec | 指向OH_AVCodec实例的指针。 | 162 163**返回:** 164 165如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 [OH_AVErrCode](_core.md#oh_averrcode)。 166 167 168### OH_AudioEncoder_Flush() 169 170``` 171OH_AVErrCode OH_AudioEncoder_Flush (OH_AVCodec *codec) 172``` 173 174**描述** 175 176清除编码器中缓存的输入和输出数据。 177 178调用此接口后,以前通过异步回调上报的所有缓冲区索引都将失效,请确保不要访问这些索引对应的缓冲区。 179 180**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder 181 182**起始版本:** 9 183 184**废弃版本:** 11 185 186**替代接口:**[OH_AudioCodec_Flush](_audio_codec.md#oh_audiocodec_flush) 187 188**参数:** 189 190| 名称 | 描述 | 191| -------- | -------- | 192| codec | 指向OH_AVCodec实例的指针。 | 193 194**返回:** 195 196如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 [OH_AVErrCode](_core.md#oh_averrcode)。 197 198 199### OH_AudioEncoder_FreeOutputData() 200 201``` 202OH_AVErrCode OH_AudioEncoder_FreeOutputData (OH_AVCodec *codec, uint32_t index) 203``` 204 205**描述** 206 207将处理后的输出缓冲区返回给编码器。 208 209**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder 210 211**起始版本:** 9 212 213**废弃版本:** 11 214 215**替代接口:**[OH_AudioCodec_FreeOutputBuffer](_audio_codec.md#oh_audiocodec_freeoutputbuffer) 216 217**参数:** 218 219| 名称 | 描述 | 220| -------- | -------- | 221| codec | 指向OH_AVCodec实例的指针。 | 222| index | 输出缓冲区Buffer对应的索引值。 | 223 224**返回:** 225 226如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 [OH_AVErrCode](_core.md#oh_averrcode)。 227 228 229### OH_AudioEncoder_GetOutputDescription() 230 231``` 232OH_AVFormat* OH_AudioEncoder_GetOutputDescription (OH_AVCodec *codec) 233``` 234 235**描述** 236 237获取编码器输出数据的描述信息。 需要注意的是,返回值所指向的OH_AVFormat实例的生命周期需要调用者手动释放。 238 239**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder 240 241**起始版本:** 9 242 243**废弃版本:** 11 244 245**替代接口:**[OH_AudioCodec_GetOutputDescription](_audio_codec.md#oh_audiocodec_getoutputdescription) 246 247**参数:** 248 249| 名称 | 描述 | 250| -------- | -------- | 251| codec | 指向OH_AVCodec实例的指针。 | 252 253**返回:** 254 255返回OH_AVFormat句柄指针,生命周期将使用下一个GetOutputDescription 刷新,或使用OH_AVCodec销毁。 256 257 258### OH_AudioEncoder_IsValid() 259 260``` 261OH_AVErrCode OH_AudioEncoder_IsValid (OH_AVCodec *codec, bool *isValid) 262``` 263 264**描述** 265 266检查当前编码器实例是否有效,可用于后台故障恢复或应用程序从后台恢复时检测编码器有效状态。 267 268**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder 269 270**起始版本:** 10 271 272**废弃版本:** 11 273 274**替代接口:**[OH_AudioCodec_IsValid](_audio_codec.md#oh_audiocodec_isvalid) 275 276**参数:** 277 278| 名称 | 描述 | 279| -------- | -------- | 280| codec | 指向OH_AVCodec实例的指针。 | 281| isValid | 指向布尔类型的指针,true:编码器实例有效,false:编码器实例无效。 | 282 283**返回:** 284 285如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 [OH_AVErrCode](_core.md#oh_averrcode)。 286 287 288### OH_AudioEncoder_Prepare() 289 290``` 291OH_AVErrCode OH_AudioEncoder_Prepare (OH_AVCodec *codec) 292``` 293 294**描述** 295 296准备编码器的内部资源,在调用此接口之前必须调用Configure接口。 297 298**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder 299 300**起始版本:** 9 301 302**废弃版本:** 11 303 304**替代接口:**[OH_AudioCodec_Prepare](_audio_codec.md#oh_audiocodec_prepare) 305 306**参数:** 307 308| 名称 | 描述 | 309| -------- | -------- | 310| codec | 指向OH_AVCodec实例的指针。 | 311 312**返回:** 313 314如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 [OH_AVErrCode](_core.md#oh_averrcode)。 315 316 317### OH_AudioEncoder_PushInputData() 318 319``` 320OH_AVErrCode OH_AudioEncoder_PushInputData (OH_AVCodec *codec, uint32_t index, OH_AVCodecBufferAttr attr) 321``` 322 323**描述** 324 325将填充有数据的输入缓冲区提交给音频编码器。 326 327[OH_AVCodecOnNeedInputData](_codec_base.md#oh_avcodeconneedinputdata)回调 将报告可用的输入缓冲区和相应的索引值。一旦具有指定索引的缓冲区提交到音频编码器,则无法再次访问此缓冲区, 直到再次收到[OH_AVCodecOnNeedInputData](_codec_base.md#oh_avcodeconneedinputdata)回调,收到相同索引时此缓冲区才可使用。 328 329此外,对于某些编码器,需要在开始时向编码器输入特定配置参数,以初始化编码器的编码过程。 330 331**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder 332 333**起始版本:** 9 334 335**废弃版本:** 11 336 337**替代接口:**[OH_AudioCodec_PushInputBuffer](_audio_codec.md#oh_audiocodec_pushinputbuffer) 338 339**参数:** 340 341| 名称 | 描述 | 342| -------- | -------- | 343| codec | 指向OH_AVCodec实例的指针。 | 344| index | 输入缓冲区Buffer对应的索引值。 | 345| attr | 描述缓冲区中包含的数据的信息。 | 346 347**返回:** 348 349如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 [OH_AVErrCode](_core.md#oh_averrcode)。 350 351 352### OH_AudioEncoder_Reset() 353 354``` 355OH_AVErrCode OH_AudioEncoder_Reset (OH_AVCodec *codec) 356``` 357 358**描述** 359 360重置编码器。如果要继续编码,需要再次调用Configure接口配置编码器实例。 361 362**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder 363 364**起始版本:** 9 365 366**废弃版本:** 11 367 368**替代接口:**[OH_AudioCodec_Reset](_audio_codec.md#oh_audiocodec_reset) 369 370**参数:** 371 372| 名称 | 描述 | 373| -------- | -------- | 374| codec | 指向OH_AVCodec实例的指针。 | 375 376**返回:** 377 378如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 [OH_AVErrCode](_core.md#oh_averrcode)。 379 380 381### OH_AudioEncoder_SetCallback() 382 383``` 384OH_AVErrCode OH_AudioEncoder_SetCallback (OH_AVCodec *codec, OH_AVCodecAsyncCallback callback, void *userData) 385``` 386 387**描述** 388 389设置异步回调函数,使应用可以响应音频编码器生成的事件。在调用Prepare之前,必须调用此接口。 390 391**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder 392 393**起始版本:** 9 394 395**废弃版本:** 11 396 397**替代接口:**[OH_AudioCodec_RegisterCallback](_audio_codec.md#oh_audiocodec_registercallback) 398 399**参数:** 400 401| 名称 | 描述 | 402| -------- | -------- | 403| codec | 指向OH_AVCodec实例的指针。 | 404| callback | 所有回调函数的集合,请参阅 [OH_AVCodecAsyncCallback](_o_h___a_v_codec_async_callback.md)。 | 405| userData | 用户特定数据。 | 406 407**返回:** 408 409如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 [OH_AVErrCode](_core.md#oh_averrcode) 410 411 412### OH_AudioEncoder_SetParameter() 413 414``` 415OH_AVErrCode OH_AudioEncoder_SetParameter (OH_AVCodec *codec, OH_AVFormat *format) 416``` 417 418**描述** 419 420配置编码器的动态参数。 421 422注意:该接口必须在编码器启动后才能调用。另外,参数配置错误可能会导致编码失败。 423 424**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder 425 426**起始版本:** 9 427 428**废弃版本:** 11 429 430**替代接口:**[OH_AudioCodec_SetParameter](_audio_codec.md#oh_audiocodec_setparameter) 431 432**参数:** 433 434| 名称 | 描述 | 435| -------- | -------- | 436| codec | 指向OH_AVCodec实例的指针。 | 437| format | OH_AVFormat句柄指针。 | 438 439**返回:** 440 441如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 [OH_AVErrCode](_core.md#oh_averrcode)。 442 443 444### OH_AudioEncoder_Start() 445 446``` 447OH_AVErrCode OH_AudioEncoder_Start (OH_AVCodec *codec) 448``` 449 450**描述** 451 452调用此接口启动编码器,在Prepare成功后执行。启动后,编码器将开始上报OH_AVCodecOnNeedInputData事件。 453 454**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder 455 456**起始版本:** 9 457 458**废弃版本:** 11 459 460**替代接口:**[OH_AudioCodec_Start](_audio_codec.md#oh_audiocodec_start) 461 462**参数:** 463 464| 名称 | 描述 | 465| -------- | -------- | 466| codec | 指向OH_AVCodec实例的指针。 | 467 468**返回:** 469 470如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 [OH_AVErrCode](_core.md#oh_averrcode)。 471 472 473### OH_AudioEncoder_Stop() 474 475``` 476OH_AVErrCode OH_AudioEncoder_Stop (OH_AVCodec *codec) 477``` 478 479**描述** 480 481停止编码器。停止后,您可以通过Start重新进入已启动状态。 482 483**系统能力:** SystemCapability.Multimedia.Media.AudioEncoder 484 485**起始版本:** 9 486 487**废弃版本:** 11 488 489**替代接口:**[OH_AudioCodec_Stop](_audio_codec.md#oh_audiocodec_stop) 490 491**参数:** 492 493| 名称 | 描述 | 494| -------- | -------- | 495| codec | 指向OH_AVCodec实例的指针。 | 496 497**返回:** 498 499如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 [OH_AVErrCode](_core.md#oh_averrcode)。 500