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