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