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