• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# AVRecorder
2
3
4## 概述
5
6提供请求录制能力的 API。
7
8开发者可根据实际的开发需求,参考对应的开发指南及样例:
9
10- [使用AVRecorder录制音频(C/C++)](../../media/media/using-ndk-avrecorder-for-audio-recording.md)
11- [使用AVRecorder录制视频(C/C++)](../../media/media/using-ndk-avrecorder-for-video-recording.md)
12
13**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
14
15**起始版本:** 18
16
17
18## 汇总
19
20
21### 文件
22
23| 名称 | 描述 |
24| -------- | -------- |
25| [avrecorder.h](avrecorder_8h.md) | 定义AVRecorder接口。应用可使用Media AVRecorder提供的接口录制媒体数据。 |
26| [avrecorder_base.h](avrecorder__base_8h.md) | 定义了媒体 AVRecorder 的结构体和枚举。 |
27
28
29### 结构体
30
31| 名称 | 描述 |
32| -------- | -------- |
33| struct  [OH_AVRecorder_Profile](_o_h___a_v_recorder___profile.md) | 定义音视频录制的详细参数。<br/>可以通过参数设置选择只录制音频或只录制视频:当 audioBitrate 或 audioChannels 为 0 时,不录制音频;当 videoFrameWidth 或 videoFrameHeight 为 0 时,不录制视频。 |
34| struct  [OH_AVRecorder_Location](_o_h___a_v_recorder___location.md) | 提供媒体资源的地理位置信息。 |
35| struct  [OH_AVRecorder_MetadataTemplate](_o_h___a_v_recorder___metadata_template.md) | 定义元数据的基本模板。 |
36| struct  [OH_AVRecorder_Metadata](_o_h___a_v_recorder___metadata.md) | 设置元数据信息。 |
37| struct  [OH_AVRecorder_Config](_o_h___a_v_recorder___config.md) | 提供媒体AVRecorder的配置定义。 |
38| struct  [OH_AVRecorder_Range](_o_h___a_v_recorder___range.md) | 表示一个类型的范围。 |
39| struct  [OH_AVRecorder_EncoderInfo](_o_h___a_v_recorder___encoder_info.md) | 提供编码器信息。 |
40
41
42### 类型定义
43
44| 名称 | 描述 |
45| -------- | -------- |
46| typedef struct [OH_AVRecorder](#oh_avrecorder) [OH_AVRecorder](#oh_avrecorder) | 初始化AVRecorder。 |
47| typedef enum [OH_AVRecorder_AudioSourceType](#oh_avrecorder_audiosourcetype-1) [OH_AVRecorder_AudioSourceType](#oh_avrecorder_audiosourcetype) | AVRecorder的音频源类型。 |
48| typedef enum [OH_AVRecorder_VideoSourceType](#oh_avrecorder_videosourcetype-1) [OH_AVRecorder_VideoSourceType](#oh_avrecorder_videosourcetype) | AVRecorder的视频源类型。 |
49| typedef enum [OH_AVRecorder_CodecMimeType](#oh_avrecorder_codecmimetype-1) [OH_AVRecorder_CodecMimeType](#oh_avrecorder_codecmimetype) | 枚举编码器 MIME 类型。 |
50| typedef enum [OH_AVRecorder_ContainerFormatType](#oh_avrecorder_containerformattype-1) [OH_AVRecorder_ContainerFormatType](#oh_avrecorder_containerformattype) | 枚举容器格式类型(容器格式类型的缩写是 CFT)。 |
51| typedef enum [OH_AVRecorder_State](#oh_avrecorder_state-1) [OH_AVRecorder_State](#oh_avrecorder_state) | AVRecorder状态。 |
52| typedef enum [OH_AVRecorder_StateChangeReason](#oh_avrecorder_statechangereason-1) [OH_AVRecorder_StateChangeReason](#oh_avrecorder_statechangereason) | AVRecorder状态变化的原因。 |
53| typedef enum [OH_AVRecorder_FileGenerationMode](#oh_avrecorder_filegenerationmode-1) [OH_AVRecorder_FileGenerationMode](#oh_avrecorder_filegenerationmode) | 创建录制文件的模式。 |
54| typedef struct [OH_AVRecorder_Profile](_o_h___a_v_recorder___profile.md) [OH_AVRecorder_Profile](#oh_avrecorder_profile) | 定义音视频录制的详细参数。<br/>可以通过参数设置选择只录制音频或只录制视频:当 audioBitrate 或 audioChannels 为 0 时,不录制音频;当 videoFrameWidth 或 videoFrameHeight 为 0 时,不录制视频。 |
55| typedef struct [OH_AVRecorder_Location](_o_h___a_v_recorder___location.md) [OH_AVRecorder_Location](#oh_avrecorder_location) | 提供媒体资源的地理位置信息。 |
56| typedef struct [OH_AVRecorder_MetadataTemplate](_o_h___a_v_recorder___metadata_template.md) [OH_AVRecorder_MetadataTemplate](#oh_avrecorder_metadatatemplate) | 定义元数据的基本模板。 |
57| typedef struct [OH_AVRecorder_Metadata](_o_h___a_v_recorder___metadata.md) [OH_AVRecorder_Metadata](#oh_avrecorder_metadata) | 设置元数据信息。 |
58| typedef struct [OH_AVRecorder_Config](_o_h___a_v_recorder___config.md) [OH_AVRecorder_Config](#oh_avrecorder_config) | 提供媒体AVRecorder的配置定义。 |
59| typedef struct [OH_AVRecorder_Range](_o_h___a_v_recorder___range.md) [OH_AVRecorder_Range](#oh_avrecorder_range) | 表示一个类型的范围。 |
60| typedef struct [OH_AVRecorder_EncoderInfo](_o_h___a_v_recorder___encoder_info.md) [OH_AVRecorder_EncoderInfo](#oh_avrecorder_encoderinfo) | 提供编码器信息。 |
61| typedef void(\* [OH_AVRecorder_OnStateChange](#oh_avrecorder_onstatechange)) ([OH_AVRecorder](#oh_avrecorder) \*recorder, [OH_AVRecorder_State](#oh_avrecorder_state) state, [OH_AVRecorder_StateChangeReason](#oh_avrecorder_statechangereason) reason, void \*userData) | 当录制状态发生变化时调用。 |
62| typedef void(\* [OH_AVRecorder_OnError](#oh_avrecorder_onerror)) ([OH_AVRecorder](#oh_avrecorder) \*recorder, int32_t errorCode, const char \*errorMsg, void \*userData) | 当录制过程中发生错误时调用。 |
63| typedef void(\* [OH_AVRecorder_OnUri](#oh_avrecorder_onuri)) ([OH_AVRecorder](#oh_avrecorder) \*recorder, OH_MediaAsset \*asset, void \*userData) | 当录制在 OH_AVRecorder_FileGenerationMode.AVRECORDER_AUTO_CREATE_CAMERA_SCENE模式下时调用。 |
64
65
66### 枚举
67
68| 名称 | 描述 |
69| -------- | -------- |
70| [OH_AVRecorder_AudioSourceType](#oh_avrecorder_audiosourcetype-1) {<br/>AVRECORDER_DEFAULT = 0,<br/>AVRECORDER_MIC = 1,<br/>AVRECORDER_VOICE_RECOGNITION = 2,<br/>AVRECORDER_VOICE_COMMUNICATION = 7,<br/>AVRECORDER_VOICE_MESSAGE = 10,<br/>AVRECORDER_CAMCORDER = 13<br/>} | AVRecorder的音频源类型。 |
71| [OH_AVRecorder_VideoSourceType](#oh_avrecorder_videosourcetype-1) {<br/>AVRECORDER_SURFACE_YUV = 0,<br/>AVRECORDER_SURFACE_ES = 1 } | AVRecorder的视频源类型。 |
72| [OH_AVRecorder_CodecMimeType](#oh_avrecorder_codecmimetype-1) {<br/>AVRECORDER_VIDEO_AVC = 2,<br/>AVRECORDER_AUDIO_AAC = 3,<br/>AVRECORDER_AUDIO_MP3 = 4,<br/>AVRECORDER_AUDIO_G711MU = 5,<br/>AVRECORDER_VIDEO_MPEG4 = 6,<br/>AVRECORDER_VIDEO_HEVC = 8,<br/>AVRECORDER_AUDIO_AMR_NB = 9,<br/>AVRECORDER_AUDIO_AMR_WB = 10<br/>} | 枚举编码器 MIME 类型。 |
73| [OH_AVRecorder_ContainerFormatType](#oh_avrecorder_containerformattype-1) {<br/>AVRECORDER_CFT_MPEG_4 = 2,<br/>AVRECORDER_CFT_MPEG_4A = 6,<br/>AVRECORDER_CFT_AMR = 8,<br/>AVRECORDER_CFT_MP3 = 9,<br/>AVRECORDER_CFT_WAV = 10<br/>} | 枚举容器格式类型(容器格式类型的缩写是 CFT)。 |
74| [OH_AVRecorder_State](#oh_avrecorder_state-1) {<br/>AVRECORDER_IDLE = 0,<br/>AVRECORDER_PREPARED = 1,<br/>AVRECORDER_STARTED = 2,<br/>AVRECORDER_PAUSED = 3,<br/>AVRECORDER_STOPPED = 4,<br/>AVRECORDER_RELEASED = 5, AVRECORDER_ERROR = 6<br/>} | AVRecorder状态。 |
75| [OH_AVRecorder_StateChangeReason](#oh_avrecorder_statechangereason-1) {<br/>AVRECORDER_USER = 0,<br/>AVRECORDER_BACKGROUND = 1<br/>} | AVRecorder状态变化的原因。 |
76| [OH_AVRecorder_FileGenerationMode](#oh_avrecorder_filegenerationmode-1) {<br/>AVRECORDER_APP_CREATE = 0, AVRECORDER_AUTO_CREATE_CAMERA_SCENE = 1<br/>} | 创建录制文件的模式。 |
77
78
79### 函数
80
81| 名称 | 描述 |
82| -------- | -------- |
83| [OH_AVRecorder](#oh_avrecorder) \* [OH_AVRecorder_Create](#oh_avrecorder_create) (void) | 创建AVRecorder实例。调用成功之后进入AVRECORDER_IDLE状态。 |
84| OH_AVErrCode [OH_AVRecorder_Prepare](#oh_avrecorder_prepare) ([OH_AVRecorder](#oh_avrecorder) \*recorder, [OH_AVRecorder_Config](_o_h___a_v_recorder___config.md) \*config) | 配置AVRecorder参数,准备录制。必须在[OH_AVRecorder_Start](#oh_avrecorder_start)成功触发之后调用,调用成功之后进入AVRECORDER_PREPARED状态。 |
85| OH_AVErrCode [OH_AVRecorder_GetAVRecorderConfig](#oh_avrecorder_getavrecorderconfig) ([OH_AVRecorder](#oh_avrecorder) \*recorder, [OH_AVRecorder_Config](_o_h___a_v_recorder___config.md) \*\*config) | 获取当前的录制参数。此接口必须在录制准备完成后调用。传入的 \*config 必须为 nullptr,由框架层统一分配和释放内存,以避免内存管理混乱,防止内存泄漏或重复释放等问题。 |
86| OH_AVErrCode [OH_AVRecorder_GetInputSurface](#oh_avrecorder_getinputsurface) ([OH_AVRecorder](#oh_avrecorder) \*recorder, OHNativeWindow \*\*window) | 获取输入Surface。必须在[OH_AVRecorder_Prepare](#oh_avrecorder_prepare)成功触发之后,[OH_AVRecorder_Start](#oh_avrecorder_start)之前调用。 |
87| OH_AVErrCode [OH_AVRecorder_UpdateRotation](#oh_avrecorder_updaterotation) ([OH_AVRecorder](#oh_avrecorder) \*recorder, int32_t rotation) | 更新视频旋转角度。必须在[OH_AVRecorder_Prepare](#oh_avrecorder_prepare)成功触发之后,[OH_AVRecorder_Start](#oh_avrecorder_start)之前调用。 |
88| OH_AVErrCode [OH_AVRecorder_Start](#oh_avrecorder_start) ([OH_AVRecorder](#oh_avrecorder) \*recorder) | 开始录制。必须在[OH_AVRecorder_Prepare](#oh_avrecorder_prepare)成功触发之后调用,调用成功之后进入AVRECORDER_STARTED状态。 |
89| OH_AVErrCode [OH_AVRecorder_Pause](#oh_avrecorder_pause) ([OH_AVRecorder](#oh_avrecorder) \*recorder) | 暂停录制。必须在[OH_AVRecorder_Start](#oh_avrecorder_start)成功触发之后,处于AVRECORDER_STARTED状态时调用,调用成功之后进入AVRECORDER_PAUSED状态。 |
90| OH_AVErrCode [OH_AVRecorder_Resume](#oh_avrecorder_resume) ([OH_AVRecorder](#oh_avrecorder) \*recorder) | 恢复录制。必须在[OH_AVRecorder_Pause](#oh_avrecorder_pause)成功触发之后,处于PAUSED状态时调用,调用成功之后重新进入AVRECORDER_STARTED状态。 |
91| OH_AVErrCode [OH_AVRecorder_Stop](#oh_avrecorder_stop) ([OH_AVRecorder](#oh_avrecorder) \*recorder) | 停止录制。必须在[OH_AVRecorder_Start](#oh_avrecorder_start)成功触发之后调用,调用成功之后进入AVRECORDER_STOPPED状态。 |
92| OH_AVErrCode [OH_AVRecorder_Reset](#oh_avrecorder_reset) ([OH_AVRecorder](#oh_avrecorder) \*recorder) | 重置录制状态。必须在非AVRECORDER_RELEASED状态下调用,调用成功之后进入AVRECORDER_IDLE状态。 |
93| OH_AVErrCode [OH_AVRecorder_Release](#oh_avrecorder_release) ([OH_AVRecorder](#oh_avrecorder) \*recorder) | 释放录制资源。调用成功之后进入AVRECORDER_RELEASED状态。调用此接口释放录制资源后,recorder 内存将释放,应用层需要显式地将 recorder 指针置空,避免访问野指针。 |
94| OH_AVErrCode [OH_AVRecorder_GetAvailableEncoder](#oh_avrecorder_getavailableencoder) ([OH_AVRecorder](#oh_avrecorder) \*recorder, [OH_AVRecorder_EncoderInfo](_o_h___a_v_recorder___encoder_info.md) \*\*info, int32_t \*length) | 获取 AVRecorder 可用的编码器和编码器信息。参数 \*info 必须为 nullptr,由框架层统一分配和释放内存,以避免内存管理混乱,防止内存泄漏或重复释放等问题。 |
95| OH_AVErrCode [OH_AVRecorder_SetStateCallback](#oh_avrecorder_setstatecallback) ([OH_AVRecorder](#oh_avrecorder) \*recorder, [OH_AVRecorder_OnStateChange](#oh_avrecorder_onstatechange) callback, void \*userData) | 设置状态回调函数,以便应用能够响应AVRecorder生成的状态变化事件。此接口必须在[OH_AVRecorder_Start](#oh_avrecorder_start)调用之前调用。 |
96| OH_AVErrCode [OH_AVRecorder_SetErrorCallback](#oh_avrecorder_seterrorcallback) ([OH_AVRecorder](#oh_avrecorder) \*recorder, [OH_AVRecorder_OnError](#oh_avrecorder_onerror) callback, void \*userData) | 设置错误回调函数,以便应用能够响应AVRecorder生成的错误事件。此接口必须在[OH_AVRecorder_Start](#oh_avrecorder_start)调用之前调用。 |
97| OH_AVErrCode [OH_AVRecorder_SetUriCallback](#oh_avrecorder_seturicallback) ([OH_AVRecorder](#oh_avrecorder) \*recorder, [OH_AVRecorder_OnUri](#oh_avrecorder_onuri) callback, void \*userData) | 设置 URI 回调函数,以便应用能够响应AVRecorder生成的 URI 事件。此接口必须在 [OH_AVRecorder_Start](#oh_avrecorder_start) 调用之前调用。 |
98
99
100## 类型定义说明
101
102
103### OH_AVRecorder
104
105```
106typedef struct OH_AVRecorder OH_AVRecorder
107```
108
109**描述**
110
111初始化AVRecorder。
112
113**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
114
115**起始版本:** 18
116
117
118### OH_AVRecorder_AudioSourceType
119
120```
121typedef enum OH_AVRecorder_AudioSourceType OH_AVRecorder_AudioSourceType
122```
123
124**描述**
125
126AVRecorder的音频源类型。
127
128**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
129
130**起始版本:** 18
131
132
133### OH_AVRecorder_CodecMimeType
134
135```
136typedef enum OH_AVRecorder_CodecMimeType OH_AVRecorder_CodecMimeType
137```
138
139**描述**
140
141枚举编码器 MIME 类型。
142
143**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
144
145**起始版本:** 18
146
147
148### OH_AVRecorder_Config
149
150```
151typedef struct OH_AVRecorder_Config OH_AVRecorder_Config
152```
153
154**描述**
155
156提供媒体AVRecorder的配置定义。
157
158**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
159
160**起始版本:** 18
161
162
163### OH_AVRecorder_ContainerFormatType
164
165```
166typedef enum OH_AVRecorder_ContainerFormatType OH_AVRecorder_ContainerFormatType
167```
168
169**描述**
170
171枚举容器格式类型(容器格式类型的缩写是 CFT)。
172
173**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
174
175**起始版本:** 18
176
177
178### OH_AVRecorder_EncoderInfo
179
180```
181typedef struct OH_AVRecorder_EncoderInfo OH_AVRecorder_EncoderInfo
182```
183
184**描述**
185
186提供编码器信息。
187
188**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
189
190**起始版本:** 18
191
192
193### OH_AVRecorder_FileGenerationMode
194
195```
196typedef enum OH_AVRecorder_FileGenerationMode OH_AVRecorder_FileGenerationMode
197```
198
199**描述**
200
201创建录制文件的模式。
202
203**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
204
205**起始版本:** 18
206
207
208### OH_AVRecorder_Location
209
210```
211typedef struct OH_AVRecorder_Location OH_AVRecorder_Location
212```
213
214**描述**
215
216提供媒体资源的地理位置信息。
217
218**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
219
220**起始版本:** 18
221
222
223### OH_AVRecorder_Metadata
224
225```
226typedef struct OH_AVRecorder_Metadata OH_AVRecorder_Metadata
227```
228
229**描述**
230
231设置元数据信息。
232
233**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
234
235**起始版本:** 18
236
237
238### OH_AVRecorder_MetadataTemplate
239
240```
241typedef struct OH_AVRecorder_MetadataTemplate OH_AVRecorder_MetadataTemplate
242```
243
244**描述**
245
246定义元数据的基本模板。
247
248**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
249
250**起始版本:** 18
251
252
253### OH_AVRecorder_OnError
254
255```
256typedef void (*OH_AVRecorder_OnError)(OH_AVRecorder *recorder, int32_t errorCode, const char *errorMsg, void *userData)
257```
258
259**描述**
260
261当录制过程中发生错误时调用。
262
263**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
264
265**起始版本:** 18
266
267**参数:**
268
269| 名称 | 描述 |
270| -------- | -------- |
271| recorder | OH_AVRecorder 实例的指针。 |
272| errorCode | 错误码。 |
273| errorMsg | 错误信息。 |
274| userData | 用户特定数据的指针。 |
275
276
277### OH_AVRecorder_OnStateChange
278
279```
280typedef void (*OH_AVRecorder_OnStateChange)(OH_AVRecorder *recorder, OH_AVRecorder_State state, OH_AVRecorder_StateChangeReason reason, void *userData)
281```
282
283**描述**
284
285当录制状态发生变化时调用。
286
287**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
288
289**起始版本:** 18
290
291**参数:**
292
293| 名称 | 描述 |
294| -------- | -------- |
295| recorder | OH_AVRecorder 实例的指针。 |
296| state | 表示录制器状态。详情请参见 [OH_AVRecorder_State](#oh_avrecorder_state)。 |
297| reason | 录制器状态变化的原因。详情请参见 [OH_AVRecorder_StateChangeReason](#oh_avrecorder_statechangereason)。 |
298| userData | 用户特定数据的指针。 |
299
300
301### OH_AVRecorder_OnUri
302
303```
304typedef void (*OH_AVRecorder_OnUri)(OH_AVRecorder *recorder, OH_MediaAsset *asset, void *userData)
305```
306
307**描述**
308
309当录制在 OH_AVRecorder_FileGenerationMode.AVRECORDER_AUTO_CREATE_CAMERA_SCENE 模式下时调用。
310
311**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
312
313**起始版本:** 18
314
315**参数:**
316
317| 名称 | 描述 |
318| -------- | -------- |
319| recorder | OH_AVRecorder 实例的指针。 |
320| asset | OH_MediaAsset 实例的指针。 |
321| userData | 用户特定数据的指针。 |
322
323
324### OH_AVRecorder_Profile
325
326```
327typedef struct OH_AVRecorder_Profile OH_AVRecorder_Profile
328```
329
330**描述**
331
332定义音视频录制的详细参数。
333
334可以通过参数设置选择只录制音频或只录制视频:当 audioBitrate 或 audioChannels 为 0 时,不录制音频;当 videoFrameWidth 或 videoFrameHeight 为 0 时,不录制视频。
335
336各参数的范围请参见[AVRecorderProfile](js-apis-media.md#avrecorderprofile9)。
337
338**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
339
340**起始版本:** 18
341
342
343### OH_AVRecorder_Range
344
345```
346typedef struct OH_AVRecorder_Range OH_AVRecorder_Range
347```
348
349**描述**
350
351表示一个类型的范围。
352
353**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
354
355**起始版本:** 18
356
357
358### OH_AVRecorder_State
359
360```
361typedef enum OH_AVRecorder_State OH_AVRecorder_State
362```
363
364**描述**
365
366AVRecorder状态。
367
368**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
369
370**起始版本:** 18
371
372
373### OH_AVRecorder_StateChangeReason
374
375```
376typedef enum OH_AVRecorder_StateChangeReason OH_AVRecorder_StateChangeReason
377```
378
379**描述**
380
381AVRecorder状态变化的原因。
382
383**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
384
385**起始版本:** 18
386
387
388### OH_AVRecorder_VideoSourceType
389
390```
391typedef enum OH_AVRecorder_VideoSourceType OH_AVRecorder_VideoSourceType
392```
393
394**描述**
395
396AVRecorder的视频源类型。
397
398**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
399
400**起始版本:** 18
401
402
403## 枚举类型说明
404
405
406### OH_AVRecorder_AudioSourceType
407
408```
409enum OH_AVRecorder_AudioSourceType
410```
411
412**描述**
413
414AVRecorder的音频源类型。
415
416**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
417
418**起始版本:** 18
419
420| 枚举值 | 描述 |
421| -------- | -------- |
422| AVRECORDER_DEFAULT | 默认音频源类型。 |
423| AVRECORDER_MIC | 麦克风音频源类型。 |
424| AVRECORDER_VOICE_RECOGNITION | 表示语音识别场景的音频源。 |
425| AVRECORDER_VOICE_COMMUNICATION | 表示语音通话场景的音频源。 |
426| AVRECORDER_VOICE_MESSAGE | 表示短语音消息的音频源。 |
427| AVRECORDER_CAMCORDER | 表示相机录像的音频源。 |
428
429
430### OH_AVRecorder_CodecMimeType
431
432```
433enum OH_AVRecorder_CodecMimeType
434```
435
436**描述**
437
438枚举编码器 MIME 类型。
439
440**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
441
442**起始版本:** 18
443
444| 枚举值 | 描述 |
445| -------- | -------- |
446| AVRECORDER_VIDEO_AVC | H.264 编码器 MIME 类型。 |
447| AVRECORDER_AUDIO_AAC | AAC 编码器 MIME 类型。 |
448| AVRECORDER_AUDIO_MP3 | mp3 编码器 MIME 类型。 |
449| AVRECORDER_AUDIO_G711MU | G711-mulaw 编码器 MIME 类型。 |
450| AVRECORDER_VIDEO_MPEG4 | MPEG4 编码器 MIME 类型。 |
451| AVRECORDER_VIDEO_HEVC | H.265 编码器 MIME 类型。 |
452| AVRECORDER_AUDIO_AMR_NB | AMR_NB 编解码器 MIME 类型。 |
453| AVRECORDER_AUDIO_AMR_WB | AMR_WB 编解码器 MIME 类型。 |
454
455
456### OH_AVRecorder_ContainerFormatType
457
458```
459enum OH_AVRecorder_ContainerFormatType
460```
461
462**描述**
463
464枚举容器格式类型(容器格式类型的缩写是 CFT)。
465
466**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
467
468**起始版本:** 18
469
470| 枚举值 | 描述 |
471| -------- | -------- |
472| AVRECORDER_CFT_MPEG_4 | 视频容器格式类型 mp4。 |
473| AVRECORDER_CFT_MPEG_4A | 音频容器格式类型 m4a。 |
474| AVRECORDER_CFT_AMR | 音频容器格式类型 amr。 |
475| AVRECORDER_CFT_MP3 | 音频容器格式类型 mp3。 |
476| AVRECORDER_CFT_WAV | 音频容器格式类型 wav。 |
477
478
479### OH_AVRecorder_FileGenerationMode
480
481```
482enum OH_AVRecorder_FileGenerationMode
483```
484
485**描述**
486
487创建录制文件的模式。
488
489**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
490
491**起始版本:** 18
492
493| 枚举值 | 描述 |
494| -------- | -------- |
495| AVRECORDER_APP_CREATE | 由应用自行在沙箱创建媒体文件。 |
496| AVRECORDER_AUTO_CREATE_CAMERA_SCENE | 由系统创建媒体文件,当前仅在相机录制场景下生效。 |
497
498
499### OH_AVRecorder_State
500
501```
502enum OH_AVRecorder_State
503```
504
505**描述**
506
507AVRecorder状态。
508
509**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
510
511**起始版本:** 18
512
513| 枚举值 | 描述 |
514| -------- | -------- |
515| AVRECORDER_IDLE | 空闲状态。此时可以调用OH_AVRecorder_Prepare()方法设置录制参数,进入AVRECORDER_PREPARED状态。 |
516| AVRECORDER_PREPARED | 准备状态。参数设置完成,此时可以调用OH_AVRecorder_Start()方法开始录制,进入AVRECORDER_STARTED状态。 |
517| AVRECORDER_STARTED | 启动状态。正在录制,此时可以调用OH_AVRecorder_Pause()方法暂停录制,进入AVRECORDER_PAUSED状态。也可以调用OH_AVRecorder_Stop()方法结束录制,进入AVRECORDER_STOPPED状态。 |
518| AVRECORDER_PAUSED | 暂停状态。此时可以调用OH_AVRecorder_Resume()方法继续录制,进入AVRECORDER_STARTED状态。也可以调用OH_AVRecorder_Stop()方法结束录制,进入AVRECORDER_STOPPED状态。 |
519| AVRECORDER_STOPPED | 停止状态。此时可以调用OH_AVRecorder_Prepare()方法设置录制参数,重新进入AVRECORDER_PREPARED状态。 |
520| AVRECORDER_RELEASED | 释放状态。录制资源释放,此时不能再进行任何操作。在任何其他状态下,均可以通过调用OH_AVRecorder_Release()方法进入AVRECORDER_RELEASED状态。 |
521| AVRECORDER_ERROR | 错误状态。当AVRecorder实例发生不可逆错误,会转换至当前状态。切换至AVRECORDER_ERROR状态时会伴随OH_AVRecorder_OnError事件,该事件会上报详细错误原因。在AVRECORDER_ERROR状态时,用户需要调用OH_AVRecorder_Reset()方法重置AVRecorder实例,或者调用OH_AVRecorder_Release()方法释放资源。 |
522
523
524### OH_AVRecorder_StateChangeReason
525
526```
527enum OH_AVRecorder_StateChangeReason
528```
529
530**描述**
531
532AVRecorder状态变化的原因。
533
534**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
535
536**起始版本:** 18
537
538| 枚举值 | 描述 |
539| -------- | -------- |
540| AVRECORDER_USER | 用户操作导致的状态变化。 |
541| AVRECORDER_BACKGROUND | 后台操作导致的状态变化。 |
542
543
544### OH_AVRecorder_VideoSourceType
545
546```
547enum OH_AVRecorder_VideoSourceType
548```
549
550**描述**
551
552AVRecorder的视频源类型。
553
554**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
555
556**起始版本:** 18
557
558| 枚举值 | 描述 |
559| -------- | -------- |
560| AVRECORDER_SURFACE_YUV | 原始数据Surface。 |
561| AVRECORDER_SURFACE_ES | ES数据Surface。 |
562
563
564## 函数说明
565
566
567### OH_AVRecorder_Create()
568
569```
570OH_AVRecorder *OH_AVRecorder_Create(void)
571```
572
573**描述**
574
575创建AVRecorder实例。调用成功之后进入AVRECORDER_IDLE状态。
576
577**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
578
579**起始版本:** 18
580
581**返回:**
582
583成功时返回指向 OH_AVRecorder 实例的指针,失败时返回 nullptr。
584
585
586### OH_AVRecorder_Prepare()
587
588```
589OH_AVErrCode OH_AVRecorder_Prepare(OH_AVRecorder *recorder, OH_AVRecorder_Config *config)
590```
591
592**描述**
593
594配置AVRecorder参数,准备录制。必须在[OH_AVRecorder_Start](#oh_avrecorder_start)成功触发之后调用,调用成功之后进入AVRECORDER_PREPARED状态。
595
596若只录制音频,则无需配置视频相关参数;同理,若只录制视频,则无需配置音频相关参数。
597
598**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
599
600**起始版本:** 18
601
602**参数:**
603
604| 名称 | 描述 |
605| -------- | -------- |
606| recorder | 指向 OH_AVRecorder 实例的指针。 |
607| config | 指向 [OH_AVRecorder_Config](_o_h___a_v_recorder___config.md) 实例的指针,见 [OH_AVRecorder_Config](_o_h___a_v_recorder___config.md)。 |
608
609**返回:**
610
611函数结果代码[OH_AVErrCode](../apis-avcodec-kit/_core.md#oh_averrcode-1):
612
613AV_ERR_OK:执行成功。
614
615AV_ERR_INVALID_VAL:如果输入的 recorder 为 nullptr 或者准备失败。
616
617
618### OH_AVRecorder_GetAVRecorderConfig()
619
620```
621OH_AVErrCode OH_AVRecorder_GetAVRecorderConfig(OH_AVRecorder *recorder, OH_AVRecorder_Config **config)
622```
623
624**描述**
625
626获取当前的录制参数。此接口必须在录制准备完成后调用。传入的 \*config 必须为 nullptr,由框架层统一分配和释放内存,以避免内存管理混乱,防止内存泄漏或重复释放等问题。
627
628**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
629
630**起始版本:** 18
631
632**参数:**
633
634| 名称 | 描述 |
635| -------- | -------- |
636| recorder | 指向 OH_AVRecorder 实例的指针。 |
637| config | 指向 [OH_AVRecorder_Config](_o_h___a_v_recorder___config.md) 实例的指针,见 [OH_AVRecorder_Config](_o_h___a_v_recorder___config.md)。 |
638
639**返回:**
640
641函数结果代码[OH_AVErrCode](../apis-avcodec-kit/_core.md#oh_averrcode-1):
642
643AV_ERR_OK:执行成功。
644
645AV_ERR_INVALID_VAL:如果输入的 recorder 为 nullptr 或 \*config 不为 nullptr;
646
647AV_ERR_NO_MEMORY:如果内存不足,\*config 内存分配失败。
648
649
650### OH_AVRecorder_GetInputSurface()
651
652```
653OH_AVErrCode OH_AVRecorder_GetInputSurface(OH_AVRecorder *recorder, OHNativeWindow **window)
654```
655
656**描述**
657
658获取输入Surface。必须在[OH_AVRecorder_Prepare](#oh_avrecorder_prepare)成功触发之后,[OH_AVRecorder_Start](#oh_avrecorder_start)之前调用。
659
660此Surface提供给调用者,调用者从此Surface中获取Surface Buffer,填入相应的视频数据。
661
662**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
663
664**起始版本:** 18
665
666**参数:**
667
668| 名称 | 描述 |
669| -------- | -------- |
670| recorder | 指向 OH_AVRecorder 实例的指针。 |
671| window | 指向 OHNativeWindow 实例的指针,见 **OHNativeWindow**。 |
672
673**返回:**
674
675函数结果代码[OH_AVErrCode](../apis-avcodec-kit/_core.md#oh_averrcode-1):
676
677AV_ERR_OK:执行成功。
678
679AV_ERR_INVALID_VAL:如果输入的 recorder 为 nullptr。
680
681
682### OH_AVRecorder_UpdateRotation()
683
684```
685OH_AVErrCode OH_AVRecorder_UpdateRotation(OH_AVRecorder *recorder, int32_t rotation)
686```
687
688**描述**
689
690更新视频旋转角度。必须在[OH_AVRecorder_Prepare](#oh_avrecorder_prepare)成功触发之后,[OH_AVRecorder_Start](#oh_avrecorder_start)之前调用。
691
692**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
693
694**起始版本:** 18
695
696**参数:**
697
698| 名称 | 描述 |
699| -------- | -------- |
700| recorder | 指向 OH_AVRecorder 实例的指针。 |
701| rotation | 视频旋转角度,必须是整数 [0, 90, 180, 270] 中的一个。 |
702
703**返回:**
704
705函数结果代码[OH_AVErrCode](../apis-avcodec-kit/_core.md#oh_averrcode-1):
706
707AV_ERR_OK:执行成功。
708
709AV_ERR_INVALID_VAL:如果输入的 recorder 为 nullptr 或输入的 rotation 不符合要求或更新方向失败。
710
711
712### OH_AVRecorder_Start()
713
714```
715OH_AVErrCode OH_AVRecorder_Start(OH_AVRecorder *recorder)
716```
717
718**描述**
719
720开始录制。必须在[OH_AVRecorder_Prepare](#oh_avrecorder_prepare)成功触发之后调用,调用成功之后进入AVRECORDER_STARTED状态。
721
722**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
723
724**起始版本:** 18
725
726**参数:**
727
728| 名称 | 描述 |
729| -------- | -------- |
730| recorder | 指向 OH_AVRecorder 实例的指针。 |
731
732**返回:**
733
734函数结果代码[OH_AVErrCode](../apis-avcodec-kit/_core.md#oh_averrcode-1):
735
736AV_ERR_OK:执行成功。
737
738AV_ERR_INVALID_VAL:如果输入的 recorder 为 nullptr 或启动失败。
739
740(备注:请勿使用未在本文档中声明的错误码。)
741
742### OH_AVRecorder_Pause()
743
744```
745OH_AVErrCode OH_AVRecorder_Pause(OH_AVRecorder *recorder)
746```
747
748**描述**
749
750暂停录制。必须在[OH_AVRecorder_Start](#oh_avrecorder_start)成功触发之后,处于AVRECORDER_STARTED状态时调用,调用成功之后进入AVRECORDER_PAUSED状态。
751
752之后可以通过调用[OH_AVRecorder_Resume](#oh_avrecorder_resume)恢复录制,重新进入AVRECORDER_STARTED状态。
753
754**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
755
756**起始版本:** 18
757
758**参数:**
759
760| 名称 | 描述 |
761| -------- | -------- |
762| recorder | 指向 OH_AVRecorder 实例的指针。 |
763
764**返回:**
765
766函数结果代码[OH_AVErrCode](../apis-avcodec-kit/_core.md#oh_averrcode-1):
767
768AV_ERR_OK:执行成功。
769
770AV_ERR_INVALID_VAL:如果输入的 recorder 为 nullptr 或暂停失败。
771
772
773### OH_AVRecorder_Resume()
774
775```
776OH_AVErrCode OH_AVRecorder_Resume(OH_AVRecorder *recorder)
777```
778
779**描述**
780
781恢复录制。必须在[OH_AVRecorder_Pause](#oh_avrecorder_pause)成功触发之后,处于PAUSED状态时调用,调用成功之后重新进入AVRECORDER_STARTED状态。
782
783**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
784
785**起始版本:** 18
786
787**参数:**
788
789| 名称 | 描述 |
790| -------- | -------- |
791| recorder | 指向 OH_AVRecorder 实例的指针。 |
792
793**返回:**
794
795函数结果代码[OH_AVErrCode](../apis-avcodec-kit/_core.md#oh_averrcode-1):
796
797AV_ERR_OK:执行成功。
798
799AV_ERR_INVALID_VAL:如果输入的 recorder 为 nullptr 或恢复失败。
800
801
802### OH_AVRecorder_Stop()
803
804```
805OH_AVErrCode OH_AVRecorder_Stop(OH_AVRecorder *recorder)
806```
807
808**描述**
809
810停止录制。必须在[OH_AVRecorder_Start](#oh_avrecorder_start)成功触发之后调用,调用成功之后进入AVRECORDER_STOPPED状态。
811
812纯音频录制时,需要重新调用[OH_AVRecorder_Prepare](#oh_avrecorder_prepare)接口才能重新录制。纯视频录制、音视频录制时,需要重新调用[OH_AVRecorder_Prepare](#oh_avrecorder_prepare)和[OH_AVRecorder_GetInputSurface](#oh_avrecorder_getinputsurface)接口才能重新录制。
813
814**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
815
816**起始版本:** 18
817
818**参数:**
819
820| 名称 | 描述 |
821| -------- | -------- |
822| recorder | 指向 OH_AVRecorder 实例的指针。 |
823
824**返回:**
825
826函数结果代码[OH_AVErrCode](../apis-avcodec-kit/_core.md#oh_averrcode-1):
827
828AV_ERR_OK:执行成功。
829
830AV_ERR_INVALID_VAL:如果输入的 recorder 为 nullptr 或停止失败。
831
832
833### OH_AVRecorder_Reset()
834
835```
836OH_AVErrCode OH_AVRecorder_Reset(OH_AVRecorder *recorder)
837```
838
839**描述**
840
841重置录制状态。必须在非AVRECORDER_RELEASED状态下调用,调用成功之后进入AVRECORDER_IDLE状态。
842
843纯音频录制时,需要重新调用[OH_AVRecorder_Prepare](#oh_avrecorder_prepare)接口才能重新录制。纯视频录制、音视频录制时,需要重新调用[OH_AVRecorder_Prepare](#oh_avrecorder_prepare)和[OH_AVRecorder_GetInputSurface](#oh_avrecorder_getinputsurface)接口才能重新录制。
844
845**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
846
847**起始版本:** 18
848
849**参数:**
850
851| 名称 | 描述 |
852| -------- | -------- |
853| recorder | 指向 OH_AVRecorder 实例的指针。 |
854
855**返回:**
856
857函数结果代码[OH_AVErrCode](../apis-avcodec-kit/_core.md#oh_averrcode-1):
858
859AV_ERR_OK:执行成功。
860
861AV_ERR_INVALID_VAL:如果输入的 recorder 为 nullptr 或重置失败。
862
863
864### OH_AVRecorder_Release()
865
866```
867OH_AVErrCode OH_AVRecorder_Release(OH_AVRecorder *recorder)
868```
869
870**描述**
871
872释放录制资源。调用成功之后进入AVRECORDER_RELEASED状态。调用此接口释放录制资源后,recorder 内存将释放,应用层需要显式地将 recorder 指针置空,避免访问野指针。
873
874调用此接口释放录制资源后,recorder 内存将释放,应用层需要显式地将 recorder 指针置空,避免访问野指针。 释放音视频录制资源之后,该 OH_AVRecorder 实例不能再进行任何操作。
875
876**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
877
878**起始版本:** 18
879
880**参数:**
881
882| 名称 | 描述 |
883| -------- | -------- |
884| recorder | 指向 OH_AVRecorder 实例的指针。 |
885
886**返回:**
887
888函数结果代码[OH_AVErrCode](../apis-avcodec-kit/_core.md#oh_averrcode-1):
889
890AV_ERR_OK:执行成功。
891
892AV_ERR_INVALID_VAL:如果输入的 recorder 为 nullptr 或释放失败。
893
894
895### OH_AVRecorder_GetAvailableEncoder()
896
897```
898OH_AVErrCode OH_AVRecorder_GetAvailableEncoder(OH_AVRecorder *recorder, OH_AVRecorder_EncoderInfo **info, int32_t *length)
899```
900
901**描述**
902
903获取 AVRecorder 可用的编码器和编码器信息。参数 \*info 必须为 nullptr,由框架层统一分配和释放内存,以避免内存管理混乱,防止内存泄漏或重复释放等问题。
904
905**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
906
907**起始版本:** 18
908
909**参数:**
910
911| 名称 | 描述 |
912| -------- | -------- |
913| recorder | 指向 OH_AVRecorder 实例的指针。 |
914| info | 指向 [OH_AVRecorder_EncoderInfo](_o_h___a_v_recorder___encoder_info.md) 实例的指针,见 [OH_AVRecorder_EncoderInfo](_o_h___a_v_recorder___encoder_info.md)。 |
915| length | 可用编码器的长度。 |
916
917**返回:**
918
919函数结果代码[OH_AVErrCode](../apis-avcodec-kit/_core.md#oh_averrcode-1):
920
921AV_ERR_OK:执行成功。
922
923AV_ERR_INVALID_VAL:输入的 recorder 为 nullptr。
924
925AV_ERR_NO_MEMORY:内存不足,\*info 内存分配失败。
926
927
928### OH_AVRecorder_SetStateCallback()
929
930```
931OH_AVErrCode OH_AVRecorder_SetStateCallback( OH_AVRecorder *recorder, OH_AVRecorder_OnStateChange callback, void *userData)
932```
933
934**描述**
935
936设置状态回调函数,以便应用能够响应AVRecorder生成的状态变化事件。此接口必须在[OH_AVRecorder_Start](#oh_avrecorder_start)调用之前调用。
937
938**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
939
940**起始版本:** 18
941
942**参数:**
943
944| 名称 | 描述 |
945| -------- | -------- |
946| recorder | 指向 OH_AVRecorder 实例的指针。 |
947| callback | 状态回调函数,见 [OH_AVRecorder_OnStateChange](#oh_avrecorder_onstatechange)。 |
948| userData | 指向用户特定数据的指针。 |
949
950**返回:**
951
952函数结果代码[OH_AVErrCode](../apis-avcodec-kit/_core.md#oh_averrcode-1):
953
954AV_ERR_OK:执行成功。
955
956AV_ERR_INVALID_VAL:如果输入的 recorder 为 nullptr 或回调函数为 nullptr。
957
958
959### OH_AVRecorder_SetErrorCallback()
960
961```
962OH_AVErrCode OH_AVRecorder_SetErrorCallback(OH_AVRecorder *recorder, OH_AVRecorder_OnError callback, void *userData)
963```
964
965**描述**
966
967设置错误回调函数,以便应用能够响应AVRecorder生成的错误事件。此接口必须在[OH_AVRecorder_Start](#oh_avrecorder_start)调用之前调用。
968
969**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
970
971**起始版本:** 18
972
973**参数:**
974
975| 名称 | 描述 |
976| -------- | -------- |
977| recorder | 指向 OH_AVRecorder 实例的指针。 |
978| callback | 错误回调函数,见 [OH_AVRecorder_OnError](#oh_avrecorder_onerror)。 |
979| userData | 指向用户特定数据的指针。 |
980
981**返回:**
982
983函数结果代码[OH_AVErrCode](../apis-avcodec-kit/_core.md#oh_averrcode-1):
984
985AV_ERR_OK:执行成功。
986
987AV_ERR_INVALID_VAL:如果输入的 recorder 为 nullptr 或回调函数为 nullptr。
988
989
990### OH_AVRecorder_SetUriCallback()
991
992```
993OH_AVErrCode OH_AVRecorder_SetUriCallback(OH_AVRecorder *recorder, OH_AVRecorder_OnUri callback, void *userData)
994```
995
996**描述**
997
998设置 URI 回调函数,以便应用能够响应AVRecorder生成的 URI 事件。此接口必须在 [OH_AVRecorder_Start](#oh_avrecorder_start) 调用之前调用。
999
1000**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
1001
1002**起始版本:** 18
1003
1004**参数:**
1005
1006| 名称 | 描述 |
1007| -------- | -------- |
1008| recorder | 指向 OH_AVRecorder 实例的指针。 |
1009| callback | URI 回调函数,见 [OH_AVRecorder_OnUri](#oh_avrecorder_onuri)。 |
1010| userData | 指向用户特定数据的指针。 |
1011
1012**返回:**
1013
1014函数结果代码[OH_AVErrCode](../apis-avcodec-kit/_core.md#oh_averrcode-1):
1015
1016AV_ERR_OK:执行成功。
1017
1018AV_ERR_INVALID_VAL:如果输入的 recorder 为 nullptr 或回调函数为 nullptr。
1019