1# AudioCodec
2
3
4## 概述
5
6AudioCodec模块提供用于音频编解码功能的函数。
7
8开发者可根据实际的开发需求,参考对应的开发指南及样例:
9
10- [音频编码](../../media/avcodec/audio-encoding.md)
11- [音频解码](../../media/avcodec/audio-decoding.md)
12
13**系统能力:** SystemCapability.Multimedia.Media.AudioCodec
14
15**起始版本:** 11
16
17
18## 汇总
19
20
21### 文件
22
23| 名称 | 描述 |
24| -------- | -------- |
25| [native_avcodec_audiocodec.h](native__avcodec__audiocodec_8h.md) | 声明用于音频编解码的Native API。 |
26
27
28### 函数
29
30| 名称 | 描述 |
31| -------- | -------- |
32| [OH_AVCodec](_codec_base.md#oh_avcodec) \* [OH_AudioCodec_CreateByMime](#oh_audiocodec_createbymime) (const char \*mime, bool isEncoder) | 根据MIME类型创建音频编解码器实例。 |
33| [OH_AVCodec](_codec_base.md#oh_avcodec) \* [OH_AudioCodec_CreateByName](#oh_audiocodec_createbyname) (const char \*name) | 通过音频编解码器名称创建音频编解码器实例。  |
34| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioCodec_Destroy](#oh_audiocodec_destroy) ([OH_AVCodec](_codec_base.md#oh_avcodec) \*codec) | 清理编解码器内部资源,销毁编解码器实例。 |
35| [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之前,必须调用此接口。  |
36| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioCodec_Configure](#oh_audiocodec_configure) ([OH_AVCodec](_codec_base.md#oh_avcodec) \*codec, const OH_AVFormat \*format) | 配置音频描述信息。音频编解码器通常会根据音频描述信息进行配置。 |
37| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioCodec_Prepare](#oh_audiocodec_prepare) ([OH_AVCodec](_codec_base.md#oh_avcodec) \*codec) | 准备编解码器的内部资源。 |
38| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioCodec_Start](#oh_audiocodec_start) ([OH_AVCodec](_codec_base.md#oh_avcodec) \*codec) | 调用此接口启动编解码器,在Prepare成功后执行。 |
39| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioCodec_Stop](#oh_audiocodec_stop) ([OH_AVCodec](_codec_base.md#oh_avcodec) \*codec) | 停止编解码器。 |
40| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioCodec_Flush](#oh_audiocodec_flush) ([OH_AVCodec](_codec_base.md#oh_avcodec) \*codec) | 清除编解码器中缓存的输入和输出数据。 |
41| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioCodec_Reset](#oh_audiocodec_reset) ([OH_AVCodec](_codec_base.md#oh_avcodec) \*codec) | 重置编解码器。如果要继续编解码,需要再次调用Configure接口配置编解码器实例。  |
42| OH_AVFormat \* [OH_AudioCodec_GetOutputDescription](#oh_audiocodec_getoutputdescription) ([OH_AVCodec](_codec_base.md#oh_avcodec) \*codec) | 获取编解码器输出数据的描述信息。  |
43| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioCodec_SetParameter](#oh_audiocodec_setparameter) ([OH_AVCodec](_codec_base.md#oh_avcodec) \*codec, const OH_AVFormat \*format) | 配置编解码器的动态参数。  |
44| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioCodec_PushInputBuffer](#oh_audiocodec_pushinputbuffer) ([OH_AVCodec](_codec_base.md#oh_avcodec) \*codec, uint32_t index) | 将填充有数据的输入缓冲区提交给音频编解码器。  |
45| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioCodec_FreeOutputBuffer](#oh_audiocodec_freeoutputbuffer) ([OH_AVCodec](_codec_base.md#oh_avcodec) \*codec, uint32_t index) | 将处理后的输出缓冲区返回给编解码器。  |
46| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioCodec_IsValid](#oh_audiocodec_isvalid) ([OH_AVCodec](_codec_base.md#oh_avcodec) \*codec, bool \*isValid) | 检查当前编解码器实例是否有效。<br>可用于后台故障恢复或应用程序从后台恢复时检测编解码器有效状态。  |
47| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AudioCodec_SetDecryptionConfig](#oh_audiocodec_setdecryptionconfig) ([OH_AVCodec](_codec_base.md#oh_avcodec) \*codec, MediaKeySession \*mediaKeySession, bool secureAudio) | 设置解密信息。  |
48
49
50## 函数说明
51
52
53### OH_AudioCodec_Configure()
54
55```
56OH_AVErrCode OH_AudioCodec_Configure (OH_AVCodec *codec, const OH_AVFormat *format)
57```
58**描述**
59配置音频描述信息。音频编解码器通常会根据音频描述信息进行配置。在调用Prepare之前,必须调用此接口。
60
61**系统能力:** SystemCapability.Multimedia.Media.AudioCodec
62
63**起始版本:** 11
64
65**参数:**
66
67| 名称 | 描述 |
68| -------- | -------- |
69| codec | 指向OH_AVCodec实例的指针。 |
70| format | 指向OH_AVFormat的指针,给出要编解码的音频轨道的描述。 |
71
72**返回:**
73
74如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
75
76
77### OH_AudioCodec_CreateByMime()
78
79```
80OH_AVCodec* OH_AudioCodec_CreateByMime (const char *mime, bool isEncoder)
81```
82**描述**
83根据MIME类型创建音频编解码器实例,大多数场景下建议使用此方式。
84
85**系统能力:** SystemCapability.Multimedia.Media.AudioCodec
86
87**起始版本:** 11
88
89**参数:**
90
91| 名称 | 描述 |
92| -------- | -------- |
93| mime | MIME类型描述字符串,请参阅[AVCODEC_MIMETYPE](_codec_base.md#变量)。 |
94| isEncoder | true表示需要创建编码器,false表示需要创建解码器。 |
95
96**返回:**
97
98返回OH_AVCodec实例的指针。
99
100
101### OH_AudioCodec_CreateByName()
102
103```
104OH_AVCodec* OH_AudioCodec_CreateByName (const char *name)
105```
106**描述**
107通过音频编解码器名称创建音频编解码器实例,使用此接口的前提是知道编解码器的确切名称。
108
109**系统能力:** SystemCapability.Multimedia.Media.AudioCodec
110
111**起始版本:** 11
112
113**参数:**
114
115| 名称 | 描述 |
116| -------- | -------- |
117| name | 音频编解码器名称。 |
118
119**返回:**
120
121返回OH_AVCodec实例的指针。
122
123
124### OH_AudioCodec_Destroy()
125
126```
127OH_AVErrCode OH_AudioCodec_Destroy (OH_AVCodec *codec)
128```
129**描述**
130清理编解码器内部资源,销毁编解码器实例。
131
132**系统能力:** SystemCapability.Multimedia.Media.AudioCodec
133
134**起始版本:** 11
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### OH_AudioCodec_Flush()
148
149```
150OH_AVErrCode OH_AudioCodec_Flush (OH_AVCodec *codec)
151```
152**描述**
153清除编解码器中缓存的输入和输出数据。调用此接口后,以前通过异步回调上报的所有缓冲区索引都将失效,请确保不要访问这些索引对应的缓冲区。
154
155**系统能力:** SystemCapability.Multimedia.Media.AudioCodec
156
157**起始版本:** 11
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_AudioCodec_FreeOutputBuffer()
171
172```
173OH_AVErrCode OH_AudioCodec_FreeOutputBuffer (OH_AVCodec *codec, uint32_t index)
174```
175**描述**
176将处理后的输出缓冲区返回给编解码器。
177
178**系统能力:** SystemCapability.Multimedia.Media.AudioCodec
179
180**起始版本:** 11
181
182**参数:**
183
184| 名称 | 描述 |
185| -------- | -------- |
186| codec | 指向OH_AVCodec实例的指针。 |
187| index | 输出Buffer对应的索引值。 |
188
189**返回:**
190
191如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
192
193
194### OH_AudioCodec_GetOutputDescription()
195
196```
197OH_AVFormat* OH_AudioCodec_GetOutputDescription (OH_AVCodec *codec)
198```
199**描述**
200获取编解码器输出数据的描述信息。
201
202
203需要注意的是,返回值所指向的OH_AVFormat实例的生命周期需要调用[OH_AVFormat_Destroy](_core.md#oh_avformat_destroy)接口手动释放。
204
205**系统能力:** SystemCapability.Multimedia.Media.AudioCodec
206
207**起始版本:** 11
208
209**参数:**
210
211| 名称 | 描述 |
212| -------- | -------- |
213| codec | 指向OH_AVCodec实例的指针。 |
214
215**返回:**
216
217返回OH_AVFormat句柄指针,生命周期将使用下一个GetOutputDescription刷新,或使用OH_AVCodec销毁。
218
219
220### OH_AudioCodec_IsValid()
221
222```
223OH_AVErrCode OH_AudioCodec_IsValid (OH_AVCodec *codec, bool *isValid)
224```
225**描述**
226检查当前编解码器实例是否有效。<br>可用于后台故障恢复或应用程序从后台恢复时检测编解码器有效状态。
227
228**系统能力:** SystemCapability.Multimedia.Media.AudioCodec
229
230**起始版本:** 11
231
232**参数:**
233
234| 名称 | 描述 |
235| -------- | -------- |
236| codec | 指向OH_AVCodec实例的指针。 |
237| isValid | 输出参数。指向布尔类型的指针,true:编解码器实例有效,false:编解码器实例无效。 |
238
239**返回:**
240
241如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
242
243
244### OH_AudioCodec_Prepare()
245
246```
247OH_AVErrCode OH_AudioCodec_Prepare (OH_AVCodec *codec)
248```
249**描述**
250准备编解码器的内部资源,在调用此接口之前必须调用Configure接口。
251
252**系统能力:** SystemCapability.Multimedia.Media.AudioCodec
253
254**起始版本:** 11
255
256**参数:**
257
258| 名称 | 描述 |
259| -------- | -------- |
260| codec | 指向OH_AVCodec实例的指针。 |
261
262**返回:**
263
264如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
265
266
267### OH_AudioCodec_PushInputBuffer()
268
269```
270OH_AVErrCode OH_AudioCodec_PushInputBuffer (OH_AVCodec *codec, uint32_t index)
271```
272**描述**
273将填充有数据的输入缓冲区提交给音频编解码器。
274
275[OH_AVCodecOnNeedInputBuffer](_codec_base.md#oh_avcodeconneedinputbuffer)回调将报告可用的输入缓冲区和对应的索引值。一旦具有指定索引的缓冲区被提交给音频编解码器,该缓冲区将无法再次访问, 直到再次收到[OH_AVCodecOnNeedInputBuffer](_codec_base.md#oh_avcodeconneedinputbuffer)回调,收到相同索引时此缓冲区才可使用。
276
277此外,对于某些编解码器,需要在开始时向编解码器输入编解码特定配置数据(Codec-Specific-Data), 以初始化编解码器的编解码过程。
278
279**系统能力:** SystemCapability.Multimedia.Media.AudioCodec
280
281**起始版本:** 11
282
283**参数:**
284
285| 名称 | 描述 |
286| -------- | -------- |
287| codec | 指向OH_AVCodec实例的指针。 |
288| index | 输入缓冲区Buffer对应的索引值。 |
289
290**返回:**
291
292如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
293
294
295### OH_AudioCodec_RegisterCallback()
296
297```
298OH_AVErrCode OH_AudioCodec_RegisterCallback (OH_AVCodec *codec, OH_AVCodecCallback callback, void *userData)
299```
300**描述**
301设置异步回调函数,使应用可以响应音频编解码器生成的事件。在调用Prepare之前,必须调用此接口。
302
303**系统能力:** SystemCapability.Multimedia.Media.AudioCodec
304
305**起始版本:** 11
306
307**参数:**
308
309| 名称 | 描述 |
310| -------- | -------- |
311| codec | 指向OH_AVCodec实例的指针。 |
312| callback | 所有回调函数的集合,请参阅 [OH_AVCodecCallback](_o_h___a_v_codec_callback.md)。 |
313| userData | 用户特定数据。 |
314
315**返回:**
316
317如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
318
319
320### OH_AudioCodec_Reset()
321
322```
323OH_AVErrCode OH_AudioCodec_Reset (OH_AVCodec *codec)
324```
325**描述**
326重置编解码器。如果要继续编解码,需要再次调用Configure接口配置编解码器实例。
327
328**系统能力:** SystemCapability.Multimedia.Media.AudioCodec
329
330**起始版本:** 11
331
332**参数:**
333
334| 名称 | 描述 |
335| -------- | -------- |
336| codec | 指向OH_AVCodec实例的指针。  |
337
338**返回:**
339
340如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
341
342
343### OH_AudioCodec_SetDecryptionConfig()
344
345```
346OH_AVErrCode OH_AudioCodec_SetDecryptionConfig (OH_AVCodec *codec, MediaKeySession *mediaKeySession, bool secureAudio)
347```
348**描述**
349设置解密信息。
350
351**系统能力:** SystemCapability.Multimedia.Media.AudioCodec
352
353**起始版本:** 12
354
355**参数:**
356
357| 名称 | 描述 |
358| -------- | -------- |
359| codec | 指向OH_AVCodec实例的指针。  |
360| mediaKeySession | 带有解密功能的媒体秘钥会话实例。  |
361| secureAudio | 是否使用安全解码器。使用安全解码器为true,否则为false。<br>注意:当前音频解密尚不支持使用安全解码器。  |
362
363**返回:**
364
365返回函数结果代码[OH_AVErrCode](_core.md#oh_averrcode):
366
367AV_ERR_OK:操作成功。
368
369AV_ERR_INVALID_VAL:OH_AVCodec实例为nullptr或无效,mediaKeySystemInfo实例为nullptr或无效。
370
371AV_ERR_INVALID_STATE:解码器服务不可用。
372
373
374### OH_AudioCodec_SetParameter()
375
376```
377OH_AVErrCode OH_AudioCodec_SetParameter (OH_AVCodec *codec, const OH_AVFormat *format)
378```
379**描述**
380配置编解码器的动态参数。注意,该接口必须在编解码器启动后才能调用。另外,参数配置错误可能会导致编解码失败。
381
382**系统能力:** SystemCapability.Multimedia.Media.AudioCodec
383
384**起始版本:** 11
385
386**参数:**
387
388| 名称 | 描述 |
389| -------- | -------- |
390| codec | 指向OH_AVCodec实例的指针。 |
391| format | OH_AVFormat句柄指针。 |
392
393**返回:**
394
395如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
396
397
398### OH_AudioCodec_Start()
399
400```
401OH_AVErrCode OH_AudioCodec_Start (OH_AVCodec *codec)
402```
403**描述**
404调用此接口启动编解码器,在Prepare成功后执行。启动后,编解码器将开始上报OH_AVCodecOnNeedInputBuffer事件。
405
406**系统能力:** SystemCapability.Multimedia.Media.AudioCodec
407
408**起始版本:** 11
409
410**参数:**
411
412| 名称 | 描述 |
413| -------- | -------- |
414| codec | 指向OH_AVCodec实例的指针。 |
415
416**返回:**
417
418如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
419
420
421### OH_AudioCodec_Stop()
422
423```
424OH_AVErrCode OH_AudioCodec_Stop (OH_AVCodec *codec)
425```
426**描述**
427停止编解码器。停止后,可以通过Start重新进入已启动状态(started),但需要注意的是, 如果编解码器之前已输入数据,则需要重新输入编解码器数据。
428
429**系统能力:** SystemCapability.Multimedia.Media.AudioCodec
430
431**起始版本:** 11
432
433**参数:**
434
435| 名称 | 描述 |
436| -------- | -------- |
437| codec | 指向OH_AVCodec实例的指针。 |
438
439**返回:**
440
441如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
442