• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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