• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.multimedia.media (媒体服务)
2
3> **说明:**
4> 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
5
6媒体子系统为开发者提供一套简单且易于理解的接口,使得开发者能够方便接入系统并使用系统的媒体资源。
7
8媒体子系统包含了音视频相关媒体业务,提供以下常用功能:
9
10- 音视频播放([AVPlayer](#avplayer9)<sup>9+</sup>),[AudioPlayer](#audioplayerdeprecated)<sup>6+</sup>和[VideoPlayer](#videoplayer)<sup>8+</sup>整合,升级了状态机和错误码,推荐使用
11- 音视频录制([AVRecorder](#avrecorder9)<sup>9+</sup>),[AudioRecorder](#audiorecorderdeprecated)<sup>6+</sup>和[VideoRecorder](#videorecorder9)<sup>9+</sup>整合,推荐使用
12- 音频播放([AudioPlayer](#audioplayerdeprecated)<sup>6+</sup>),[AVPlayer](#avplayer9)<sup>9+</sup>发布后停止维护,请使用[AVPlayer](#avplayer9)<sup>9+</sup>
13- 视频播放([VideoPlayer](#videoplayerdeprecated)<sup>8+</sup>),[AVPlayer](#avplayer9)<sup>9+</sup>发布后停止维护,请使用[AVPlayer](#avplayer9)<sup>9+</sup>
14- 音频录制([AudioRecorder](#audiorecorderdeprecated)<sup>6+</sup>),[AVRecorder](#avrecorder9)<sup>9+</sup>发布后停止维护,请使用[AVRecorder](#avrecorder9)<sup>9+</sup>
15- 视频录制([VideoRecorder](#videorecorder9)<sup>9+</sup>),[AVRecorder](#avrecorder9)<sup>9+</sup>发布后停止维护,请使用[AVRecorder](#avrecorder9)<sup>9+</sup>
16
17## 导入模块
18
19```js
20import media from '@ohos.multimedia.media';
21```
22
23## media.createAVPlayer<sup>9+</sup>
24
25createAVPlayer(callback: AsyncCallback\<AVPlayer>): void
26
27异步方式创建音视频播放实例,通过注册回调函数获取返回值。
28
29**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
30
31**参数:**
32
33| 参数名   | 类型                                  | 必填 | 说明                                                         |
34| -------- | ------------------------------------- | ---- | ------------------------------------------------------------ |
35| callback | AsyncCallback\<[AVPlayer](#avplayer9)> | 是   | 回调函数。异步返回AVPlayer实例,失败时返回null。可用于音视频播放。 |
36
37**错误码:**
38
39以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
40
41| 错误码ID | 错误信息                       |
42| -------- | ------------------------------ |
43| 5400101  | No memory. Return by callback. |
44
45**示例:**
46
47```js
48let avPlayer
49
50media.createAVPlayer((error, video) => {
51   if (video != null) {
52       avPlayer = video;
53       console.info('createAVPlayer success');
54   } else {
55       console.info(`createAVPlayer fail, error:${error}`);
56   }
57});
58```
59
60## media.createAVPlayer<sup>9+</sup>
61
62createAVPlayer(): Promise\<AVPlayer>
63
64异步方式创建音视频播放实例,通过Promise获取返回值。
65
66**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
67
68**返回值:**
69
70| 类型                            | 说明                                                         |
71| ------------------------------- | ------------------------------------------------------------ |
72| Promise\<[AVPlayer](#avplayer9)> | Promise对象。异步返回AVPlayer实例,失败时返回null。可用于录制视频媒体。 |
73
74**错误码:**
75
76以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
77
78| 错误码ID | 错误信息                      |
79| -------- | ----------------------------- |
80| 5400101  | No memory. Return by promise. |
81
82**示例:**
83
84```js
85let avPlayer
86
87media.createAVPlayer().then((video) => {
88    if (video != null) {
89       avPlayer = video;
90       console.info('createAVPlayer success');
91   } else {
92       console.info('createAVPlayer fail');
93   }
94}).catch((error) => {
95   console.info(`AVPlayer catchCallback, error:${error}`);
96});
97```
98
99## media.createAVRecorder<sup>9+</sup>
100
101createAVRecorder(callback: AsyncCallback\<AVRecorder>): void
102
103异步方式创建音视频录制实例。通过注册回调函数获取返回值。
104一台设备只允许创建一个录制实例。
105
106*注意:使用相机进行视频录制时,需要与相机模块配合,相机模块接口开放状态以及使用详情见[相机管理](js-apis-camera.md)。
107
108**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
109
110**参数:**
111
112| 参数名   | 类型                                       | 必填 | 说明                                                         |
113| -------- | ------------------------------------------ | ---- | ------------------------------------------------------------ |
114| callback | AsyncCallback\<[AVRecorder](#avrecorder9)> | 是   | 回调函数。异步返回AVRecorder实例,失败时返回null。可用于录制音视频媒体。 |
115
116**错误码:**
117
118以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
119
120| 错误码ID | 错误信息                       |
121| -------- | ------------------------------ |
122| 5400101  | No memory. Return by callback. |
123
124**示例:**
125
126```js
127let avRecorder
128
129media.createAVRecorder((error, recorder) => {
130   if (recorder != null) {
131       avRecorder = recorder;
132       console.info('createAVRecorder success');
133   } else {
134       console.info(`createAVRecorder fail, error:${error}`);
135   }
136});
137```
138
139## media.createAVRecorder<sup>9+</sup>
140
141createAVRecorder(): Promise\<AVRecorder>
142
143异步方式创建音视频录制实例。通过Promise获取返回值。
144一台设备只允许创建一个录制实例。
145
146*注意:使用相机进行视频录制时,需要与相机模块配合,相机模块接口开放状态以及使用详情见[相机管理](js-apis-camera.md)。
147
148**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
149
150**返回值:**
151
152| 类型                                 | 说明                                                         |
153| ------------------------------------ | ------------------------------------------------------------ |
154| Promise\<[AVRecorder](#avrecorder9)> | Promise对象。异步返回AVRecorder实例,失败时返回null。可用于录制音视频媒体。 |
155
156**错误码:**
157
158以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
159
160| 错误码ID | 错误信息                      |
161| -------- | ----------------------------- |
162| 5400101  | No memory. Return by promise. |
163
164**示例:**
165
166```js
167let avRecorder
168
169media.createAVRecorder().then((recorder) => {
170    if (recorder != null) {
171       avRecorder = recorder;
172       console.info('createAVRecorder success');
173   } else {
174       console.info('createAVRecorder fail');
175   }
176}).catch((error) => {
177   console.info(`createAVRecorder catchCallback, error:${error}`);
178});
179```
180
181## media.createVideoRecorder<sup>9+</sup>
182
183createVideoRecorder(callback: AsyncCallback\<VideoRecorder>): void
184
185异步方式创建视频录制实例。通过注册回调函数获取返回值。
186一台设备只允许创建一个录制实例。
187
188**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
189
190**系统接口:** 该接口为系统接口
191
192**参数:**
193
194| 参数名   | 类型                                            | 必填 | 说明                                                         |
195| -------- | ----------------------------------------------- | ---- | ------------------------------------------------------------ |
196| callback | AsyncCallback<[VideoRecorder](#videorecorder9)> | 是   | 回调函数。异步返回VideoRecorder实例,失败时返回null。可用于录制视频媒体。 |
197
198**错误码:**
199
200以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
201
202| 错误码ID | 错误信息                       |
203| -------- | ------------------------------ |
204| 5400101  | No memory. Return by callback. |
205
206**示例:**
207
208```js
209let videoRecorder
210
211media.createVideoRecorder((error, video) => {
212   if (video != null) {
213       videoRecorder = video;
214       console.info('video createVideoRecorder success');
215   } else {
216       console.info(`video createVideoRecorder fail, error:${error}`);
217   }
218});
219```
220
221## media.createVideoRecorder<sup>9+</sup>
222
223createVideoRecorder(): Promise\<VideoRecorder>
224
225异步方式创建视频录制实例。通过Promise获取返回值。
226一台设备只允许创建一个录制实例。
227
228**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
229
230**系统接口:** 该接口为系统接口
231
232**返回值:**
233
234| 类型                                      | 说明                                                         |
235| ----------------------------------------- | ------------------------------------------------------------ |
236| Promise<[VideoRecorder](#videorecorder9)> | Promise对象。异步返回VideoRecorder实例,失败时返回null。可用于录制视频媒体。 |
237
238**错误码:**
239
240以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
241
242| 错误码ID | 错误信息                      |
243| -------- | ----------------------------- |
244| 5400101  | No memory. Return by promise. |
245
246**示例:**
247
248```js
249let videoRecorder
250
251media.createVideoRecorder().then((video) => {
252    if (video != null) {
253       videoRecorder = video;
254       console.info('video createVideoRecorder success');
255   } else {
256       console.info('video createVideoRecorder fail');
257   }
258}).catch((error) => {
259   console.info(`video catchCallback, error:${error}`);
260});
261```
262
263## AVErrorCode<sup>9+</sup><a name=averrorcode></a>
264
265[媒体错误码](../errorcodes/errorcode-media.md)类型枚举
266
267**系统能力:** SystemCapability.Multimedia.Media.Core
268
269| 名称                       | 值      | 说明                                 |
270| :------------------------- | ------- | ------------------------------------ |
271| AVERR_OK                   | 0       | 表示操作成功。                       |
272| AVERR_NO_PERMISSION        | 201     | 表示无权限执行此操作。               |
273| AVERR_INVALID_PARAMETER    | 401     | 表示传入入参无效。                   |
274| AVERR_UNSUPPORT_CAPABILITY | 801     | 表示当前版本不支持该API能力。        |
275| AVERR_NO_MEMORY            | 5400101 | 表示系统内存不足或服务数量达到上限。 |
276| AVERR_OPERATE_NOT_PERMIT   | 5400102 | 表示当前状态不允许或无权执行此操作。 |
277| AVERR_IO                   | 5400103 | 表示数据流异常信息。                 |
278| AVERR_TIMEOUT              | 5400104 | 表示系统或网络响应超时。             |
279| AVERR_SERVICE_DIED         | 5400105 | 表示服务进程死亡。                   |
280| AVERR_UNSUPPORT_FORMAT     | 5400106 | 表示不支持当前媒体资源的格式。       |
281
282## MediaType<sup>8+</sup>
283
284媒体类型枚举。
285
286**系统能力:** SystemCapability.Multimedia.Media.Core
287
288| 名称           | 值   | 说明       |
289| -------------- | ---- | ---------- |
290| MEDIA_TYPE_AUD | 0    | 表示音频。 |
291| MEDIA_TYPE_VID | 1    | 表示视频。 |
292
293## CodecMimeType<sup>8+</sup>
294
295Codec MIME类型枚举。
296
297**系统能力:** SystemCapability.Multimedia.Media.Core
298
299| 名称         | 值                    | 说明                     |
300| ------------ | --------------------- | ------------------------ |
301| VIDEO_H263   | 'video/h263'          | 表示视频/h263类型。      |
302| VIDEO_AVC    | 'video/avc'           | 表示视频/avc类型。       |
303| VIDEO_MPEG2  | 'video/mpeg2'         | 表示视频/mpeg2类型。     |
304| VIDEO_MPEG4  | 'video/mp4v-es'       | 表示视频/mpeg4类型。     |
305| VIDEO_VP8    | 'video/x-vnd.on2.vp8' | 表示视频/vp8类型。       |
306| AUDIO_AAC    | 'audio/mp4a-latm'     | 表示音频/mp4a-latm类型。 |
307| AUDIO_VORBIS | 'audio/vorbis'        | 表示音频/vorbis类型。    |
308| AUDIO_FLAC   | 'audio/flac'          | 表示音频/flac类型。      |
309
310## MediaDescriptionKey<sup>8+</sup>
311
312媒体信息描述枚举。
313
314**系统能力:** SystemCapability.Multimedia.Media.Core
315
316| 名称                     | 值              | 说明                                                         |
317| ------------------------ | --------------- | ------------------------------------------------------------ |
318| MD_KEY_TRACK_INDEX       | 'track_index'   | 表示轨道序号,其对应键值类型为number。                       |
319| MD_KEY_TRACK_TYPE        | 'track_type'    | 表示轨道类型,其对应键值类型为number,参考[MediaType](#mediatype8)。 |
320| MD_KEY_CODEC_MIME        | 'codec_mime'    | 表示codec_mime类型,其对应键值类型为string。                 |
321| MD_KEY_DURATION          | 'duration'      | 表示媒体时长,其对应键值类型为number,单位为毫秒(ms)。     |
322| MD_KEY_BITRATE           | 'bitrate'       | 表示比特率,其对应键值类型为number,单位为比特率(bps)。    |
323| MD_KEY_WIDTH             | 'width'         | 表示视频宽度,其对应键值类型为number,单位为像素(px)。     |
324| MD_KEY_HEIGHT            | 'height'        | 表示视频高度,其对应键值类型为number,单位为像素(px)。     |
325| MD_KEY_FRAME_RATE        | 'frame_rate'    | 表示视频帧率,其对应键值类型为number,单位为100帧每秒(100fps)。 |
326| MD_KEY_AUD_CHANNEL_COUNT | 'channel_count' | 表示声道数,其对应键值类型为number。                         |
327| MD_KEY_AUD_SAMPLE_RATE   | 'sample_rate'   | 表示采样率,其对应键值类型为number,单位为赫兹(Hz)。       |
328
329## BufferingInfoType<sup>8+</sup>
330
331缓存事件类型枚举。
332
333**系统能力:** SystemCapability.Multimedia.Media.Core
334
335| 名称              | 值   | 说明                             |
336| ----------------- | ---- | -------------------------------- |
337| BUFFERING_START   | 1    | 表示开始缓存。                   |
338| BUFFERING_END     | 2    | 表示结束缓存。                   |
339| BUFFERING_PERCENT | 3    | 表示缓存百分比。                 |
340| CACHED_DURATION   | 4    | 表示缓存时长,单位为毫秒(ms)。 |
341
342## StateChangeReason<sup>9+</sup>
343
344表示播放或录制实例状态机切换原因的枚举,伴随state一起上报。
345
346**系统能力:** SystemCapability.Multimedia.Media.Core
347
348| 名称       | 值   | 说明                                                         |
349| ---------- | ---- | ------------------------------------------------------------ |
350| USER       | 1    | 表示用户行为造成的状态切换,由用户或客户端主动调用接口产生。 |
351| BACKGROUND | 2    | 表示系统行为造成的状态切换,比如应用未注册播控中心权限,退到后台时被系统强制暂停或停止。 |
352
353## AVPlayer<sup>9+</sup>
354
355播放管理类,用于管理和播放媒体资源。在调用AVPlayer的方法前,需要先通过[createAVPlayer()](#mediacreateavplayer9)构建一个AVPlayer实例。
356
357Audio/Video播放demo可参考:[AVPlayer开发指导](../../media/avplayer-playback.md)。
358
359### 属性<a name=avplayer_属性></a>
360
361**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
362
363| 名称                                                | 类型                                                   | 可读 | 可写 | 说明                                                         |
364| --------------------------------------------------- | ------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
365| url<sup>9+</sup>                                    | string                                                 | 是   | 是   | 媒体URL,只允许在**idle**状态下设置,静态属性。<br/>支持的视频格式(mp4、mpeg-ts、webm、mkv)。<br>支持的音频格式(m4a、aac、mp3、ogg、wav)。<br/>**支持路径示例**:<br>1. fd类型播放:fd://xx。<br>![](figures/zh-cn_image_url.png)<br>2. http网络播放: http://xx。<br/>3. https网络播放: https://xx。<br/>4. hls网络播放路径:http://xx或者https://xx。 |
366| fdSrc<sup>9+</sup>                                  | [AVFileDescriptor](#avfiledescriptor9)                 | 是   | 是   | 媒体文件描述,只允许在**idle**状态下设置,静态属性。<br/>使用场景:应用中的媒体资源被连续存储在同一个文件中。<br/>**使用示例**:<br/>假设一个连续存储的媒体文件: <br/>视频1(地址偏移:0,字节长度:100);<br/>视频2(地址偏移:101,字节长度:50);<br/>视频3(地址偏移:151,字节长度:150);<br/>1. 播放视频1:AVFileDescriptor { fd = 资源句柄; offset = 0; length = 100; }。<br/>2. 播放视频2:AVFileDescriptor { fd = 资源句柄; offset = 101; length = 50; }。<br/>3. 播放视频3:AVFileDescriptor { fd = 资源句柄; offset = 151; length = 150; }。<br/>假设是一个独立的媒体文件: 请使用src=fd://xx。 |
367| surfaceId<sup>9+</sup>                              | string                                                 | 是   | 是   | 视频窗口ID,默认无窗口,只允许在**initialized**状态下设置,静态属性。<br/>使用场景:视频播放的窗口渲染,纯音频播放不用设置。<br/>**使用示例**:<br/>[通过Xcomponent创建surfaceId](../arkui-ts/ts-basic-components-xcomponent.md#getxcomponentsurfaceid)。 |
368| loop<sup>9+</sup>                                   | boolean                                                | 是   | 是   | 视频循环播放属性,默认'false',设置为'true'表示循环播放,动态属性。<br/>只允许在**prepared**/**playing**/**paused**/**completed**状态下设置。 |
369| videoScaleType<sup>9+</sup>                         | [VideoScaleType](#videoscaletype9)                     | 是   | 是   | 视频缩放模式,默认VIDEO_SCALE_TYPE_FIT_CROP,动态属性。<br/>只允许在**prepared**/**playing**/**paused**/**completed**状态下设置。 |
370| audioInterruptMode<sup>9+</sup>                     | [audio.InterruptMode](js-apis-audio.md#interruptmode9) | 是   | 是   | 音频焦点模型,默认SHARE_MODE,动态属性。<br/>只允许在**prepared**/**playing**/**paused**/**completed**状态下设置。 |
371| state<sup>9+</sup>                                  | [AVPlayerState](#avplayerstate9)                       | 是   | 否   | 音视频播放的状态,全状态有效,可查询参数。                   |
372| currentTime<sup>9+</sup>                            | number                                                 | 是   | 否   | 视频的当前播放位置,单位为毫秒(ms),可查询参数。<br/>返回为(-1)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。 |
373| duration<sup>9+</sup><a name=avplayer_duration></a> | number                                                 | 是   | 否   | 视频时长,单位为毫秒(ms),可查询参数。<br/>返回为(-1)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。<br/>直播场景默认返回(-1)。 |
374| width<sup>9+</sup>                                  | number                                                 | 是   | 否   | 视频宽,单位为像素(px),可查询参数。<br/>返回为(0)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。 |
375| height<sup>9+</sup>                                 | number                                                 | 是   | 否   | 视频高,单位为像素(px),可查询参数。<br/>返回为(0)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。 |
376
377**说明:**
378
379将资源句柄(fd)传递给媒体播放器之后,请不要通过该资源句柄做其他读写操作,包括但不限于将同一个资源句柄传递给多个媒体播放器。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致播放异常。
380
381### on('stateChange')<sup>9+</sup><a name = stateChange_on></a>
382
383on(type: 'stateChange', callback: (state: AVPlayerState, reason: StateChangeReason) => void): void
384
385监听播放状态机AVPlayerState切换的事件。
386
387**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
388
389**参数:**
390
391| 参数名   | 类型     | 必填 | 说明                                                         |
392| -------- | -------- | ---- | ------------------------------------------------------------ |
393| type     | string   | 是   | 状态机切换事件回调类型,支持的事件:'stateChange',用户操作和系统都会触发此事件。 |
394| callback | function | 是   | 状态机切换事件回调方法:<br/>state: [AVPlayerState](#avplayerstate9),表示当前播放状态;<br/>reason: [StateChangeReason](#statechangereason9),表示当前播放状态的切换原因。 |
395
396**示例:**
397
398```js
399avPlayer.on('stateChange', async (state, reason) => {
400    switch (state) {
401        case 'idle':
402            console.info('state idle called')
403            break;
404        case 'initialized':
405            console.info('initialized prepared called')
406            break;
407        case 'prepared':
408            console.info('state prepared called')
409            break;
410        case 'playing':
411            console.info('state playing called')
412            break;
413        case 'paused':
414            console.info('state paused called')
415            break;
416        case 'completed':
417            console.info('state completed called')
418            break;
419        case 'stopped':
420            console.info('state stopped called')
421            break;
422        case 'released':
423            console.info('state released called')
424            break;
425        case 'error':
426            console.info('state error called')
427            break;
428        default:
429            console.info('unkown state :' + state)
430            break;
431    }
432})
433```
434
435### off('stateChange')<sup>9+</sup><a name = stateChange_off></a>
436
437off(type: 'stateChange'): void
438
439取消监听播放状态机[AVPlayerState](#avplayerstate9)切换的事件。
440
441**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
442
443**参数:**
444
445| 参数名 | 类型   | 必填 | 说明                                                  |
446| ------ | ------ | ---- | ----------------------------------------------------- |
447| type   | string | 是   | 状态机切换事件回调类型,取消注册的事件:'stateChange' |
448
449**示例:**
450
451```js
452avPlayer.off('stateChange')
453```
454
455### on('error')<sup>9+</sup><a name = error_on></a>
456
457on(type: 'error', callback: ErrorCallback): void
458
459监听[AVPlayer](#avplayer9)的错误事件,该事件仅用于错误提示,不需要用户停止播控动作。如果此时[AVPlayerState](#avplayerstate9)也切至error状态,用户需要通过reset()或者release()退出播放操作。
460
461**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
462
463**参数:**
464
465| 参数名   | 类型     | 必填 | 说明                                                         |
466| -------- | -------- | ---- | ------------------------------------------------------------ |
467| type     | string   | 是   | 错误事件回调类型,支持的事件:'error',用户操作和系统都会触发此事件。 |
468| callback | function | 是   | 错误事件回调方法:使用播放器的过程中发生错误,会提供错误码ID和错误信息。 |
469
470AVPlayer回调的**错误分类**<a name = error_info></a>可以分为以下几种:
471
472| 错误码ID | 错误信息              | 说明                                                         |
473| -------- | --------------------- | ------------------------------------------------------------ |
474| 201      | No Permission:        | 无权限执行此操作,[AVPlayerState](#avplayerstate9)会进入error状态。 |
475| 401      | Invalid Parameter:    | 入参错误,表示调用无效。                                     |
476| 801      | Unsupport Capability: | 不支持该API能力,表示调用无效。                              |
477| 5400101  | No Memory:            | 播放内存不足,[AVPlayerState](#avplayerstate9)会进入error状态。 |
478| 5400102  | Operate Not Permit:   | 当前状态机不支持此操作,表示调用无效。                       |
479| 5400103  | IO Error:             | 播放中发现码流异常。                                         |
480| 5400104  | Network Timeout:      | 网络原因超时响应,[AVPlayerState](#avplayerstate9)会进入error状态。 |
481| 5400105  | Service Died:         | 播放进程死亡,[AVPlayerState](#avplayerstate9)会进入error状态。 |
482| 5400106  | Unsupport Format:     | 不支持的文件格式,[AVPlayerState](#avplayerstate9)会进入error状态。 |
483
484**示例:**
485
486```js
487avPlayer.on('error', (error) => {
488    console.info('error happened,and error message is :' + error.message)
489    console.info('error happened,and error code is :' + error.code)
490})
491```
492
493### off('error')<sup>9+</sup><a name = error_off></a>
494
495off(type: 'error'): void
496
497取消监听播放的错误事件。
498
499**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
500
501**参数:**
502
503| 参数名 | 类型   | 必填 | 说明                                      |
504| ------ | ------ | ---- | ----------------------------------------- |
505| type   | string | 是   | 错误事件回调类型,取消注册的事件:'error' |
506
507**示例:**
508
509```js
510avPlayer.off('error')
511```
512
513### prepare<sup>9+</sup><a name=avplayer_prepare></a>
514
515prepare(callback: AsyncCallback\<void>): void
516
517通过回调方式准备播放视频,需在[stateChange](#stateChange_on)事件成功触发至initialized状态后,才能调用。
518
519**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
520
521**参数:**
522
523| 参数名   | 类型     | 必填 | 说明                 |
524| -------- | -------- | ---- | -------------------- |
525| callback | function | 是   | 准备播放的回调方法。 |
526
527**错误码:**
528
529以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
530
531| 错误码ID | 错误信息                                   |
532| -------- | ------------------------------------------ |
533| 5400102  | Operation not allowed. Return by callback. |
534| 5400106  | Unsupport format. Return by callback.      |
535
536**示例:**
537
538```js
539avPlayer.prepare((err) => {
540    if (err == null) {
541        console.info('prepare success');
542    } else {
543        console.error('prepare filed,error message is :' + err.message)
544    }
545})
546```
547
548### prepare<sup>9+</sup>
549
550prepare(): Promise\<void>
551
552通过Promise方式准备播放视频,需在[stateChange](#stateChange_on)事件成功触发至initialized状态后,才能调用。
553
554**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
555
556**返回值:**
557
558| 类型           | 说明                      |
559| -------------- | ------------------------- |
560| Promise\<void> | 准备播放的Promise返回值。 |
561
562**错误码:**
563
564以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
565
566| 错误码ID | 错误信息                                  |
567| -------- | ----------------------------------------- |
568| 5400102  | Operation not allowed. Return by promise. |
569| 5400106  | Unsupport format. Return by promise.      |
570
571**示例:**
572
573```js
574avPlayer.prepare().then(() => {
575    console.info('prepare success');
576}, (err) => {
577    console.error('prepare filed,error message is :' + err.message)
578})
579```
580
581### play<sup>9+</sup><a name=avplayer_play></a>
582
583play(callback: AsyncCallback\<void>): void
584
585通过回调方式开始播放音视频资源,只能在prepared/paused/complete状态调用。
586
587**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
588
589**参数:**
590
591| 参数名   | 类型     | 必填 | 说明                 |
592| -------- | -------- | ---- | -------------------- |
593| callback | function | 是   | 开始播放的回调方法。 |
594
595**错误码:**
596
597以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
598
599| 错误码ID | 错误信息                                   |
600| -------- | ------------------------------------------ |
601| 5400102  | Operation not allowed. Return by callback. |
602
603**示例:**
604
605```js
606avPlayer.play((err) => {
607    if (err == null) {
608        console.info('play success');
609    } else {
610        console.error('play filed,error message is :' + err.message)
611    }
612})
613```
614
615### play<sup>9+</sup>
616
617play(): Promise\<void>
618
619通过Promise方式开始播放音视频资源,只能在prepared/paused/complete状态调用。
620
621**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
622
623**返回值:**
624
625| 类型           | 说明                      |
626| -------------- | ------------------------- |
627| Promise\<void> | 开始播放的Promise返回值。 |
628
629**错误码:**
630
631以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
632
633| 错误码ID | 错误信息                                  |
634| -------- | ----------------------------------------- |
635| 5400102  | Operation not allowed. Return by promise. |
636
637**示例:**
638
639```js
640avPlayer.play().then(() => {
641    console.info('play success');
642}, (err) => {
643    console.error('play filed,error message is :' + err.message)
644})
645```
646
647### pause<sup>9+</sup><a name=avplayer_pause></a>
648
649pause(callback: AsyncCallback\<void>): void
650
651通过回调方式暂停播放音视频资源,只能在playing状态调用。
652
653**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
654
655**参数:**
656
657| 参数名   | 类型     | 必填 | 说明                 |
658| -------- | -------- | ---- | -------------------- |
659| callback | function | 是   | 暂停播放的回调方法。 |
660
661**错误码:**
662
663以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
664
665| 错误码ID | 错误信息                                   |
666| -------- | ------------------------------------------ |
667| 5400102  | Operation not allowed. Return by callback. |
668
669**示例:**
670
671```js
672avPlayer.pause((err) => {
673    if (err == null) {
674        console.info('pause success');
675    } else {
676        console.error('pause filed,error message is :' + err.message)
677    }
678})
679```
680
681### pause<sup>9+</sup>
682
683pause(): Promise\<void>
684
685通过Promise方式暂停播放音视频资源,只能在playing状态调用。
686
687**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
688
689**返回值:**
690
691| 类型           | 说明                      |
692| -------------- | ------------------------- |
693| Promise\<void> | 暂停播放的Promise返回值。 |
694
695**错误码:**
696
697以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
698
699| 错误码ID | 错误信息                                  |
700| -------- | ----------------------------------------- |
701| 5400102  | Operation not allowed. Return by promise. |
702
703**示例:**
704
705```js
706avPlayer.pause().then(() => {
707    console.info('pause success');
708}, (err) => {
709    console.error('pause filed,error message is :' + err.message)
710})
711```
712
713### stop<sup>9+</sup><a name=avplayer_stop></a>
714
715stop(callback: AsyncCallback\<void>): void
716
717通过回调方式停止播放音视频资源,只能在prepared/playing/paused/complete状态调用。
718
719**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
720
721**参数:**
722
723| 参数名   | 类型     | 必填 | 说明                 |
724| -------- | -------- | ---- | -------------------- |
725| callback | function | 是   | 停止播放的回调方法。 |
726
727**错误码:**
728
729以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
730
731| 错误码ID | 错误信息                                   |
732| -------- | ------------------------------------------ |
733| 5400102  | Operation not allowed. Return by callback. |
734
735**示例:**
736
737```js
738avPlayer.stop((err) => {
739    if (err == null) {
740        console.info('stop success');
741    } else {
742        console.error('stop filed,error message is :' + err.message)
743    }
744})
745```
746
747### stop<sup>9+</sup>
748
749stop(): Promise\<void>
750
751通过Promise方式停止播放音视频资源,只能在prepared/playing/paused/complete状态调用。
752
753**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
754
755**返回值:**
756
757| 类型           | 说明                      |
758| -------------- | ------------------------- |
759| Promise\<void> | 停止播放的Promise返回值。 |
760
761**错误码:**
762
763以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
764
765| 错误码ID | 错误信息                                  |
766| -------- | ----------------------------------------- |
767| 5400102  | Operation not allowed. Return by promise. |
768
769**示例:**
770
771```js
772avPlayer.stop().then(() => {
773    console.info('stop success');
774}, (err) => {
775    console.error('stop filed,error message is :' + err.message)
776})
777```
778
779### reset<sup>9+</sup><a name=avplayer_reset></a>
780
781reset(callback: AsyncCallback\<void>): void
782
783通过回调方式重置播放,只能在initialized/prepared/playing/paused/complete/stopped/error状态调用。
784
785**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
786
787**参数:**
788
789| 参数名   | 类型     | 必填 | 说明                 |
790| -------- | -------- | ---- | -------------------- |
791| callback | function | 是   | 重置播放的回调方法。 |
792
793**错误码:**
794
795以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
796
797| 错误码ID | 错误信息                                   |
798| -------- | ------------------------------------------ |
799| 5400102  | Operation not allowed. Return by callback. |
800
801**示例:**
802
803```js
804avPlayer.reset((err) => {
805    if (err == null) {
806        console.info('reset success');
807    } else {
808        console.error('reset filed,error message is :' + err.message)
809    }
810})
811```
812
813### reset<sup>9+</sup>
814
815reset(): Promise\<void>
816
817通过Promise方式通过Promise方式重置播放,只能在initialized/prepared/playing/paused/complete/stopped/error状态调用。
818
819**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
820
821**返回值:**
822
823| 类型           | 说明                      |
824| -------------- | ------------------------- |
825| Promise\<void> | 重置播放的Promise返回值。 |
826
827**错误码:**
828
829以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
830
831| 错误码ID | 错误信息                                  |
832| -------- | ----------------------------------------- |
833| 5400102  | Operation not allowed. Return by promise. |
834
835**示例:**
836
837```js
838avPlayer.reset().then(() => {
839    console.info('reset success');
840}, (err) => {
841    console.error('reset filed,error message is :' + err.message)
842})
843```
844
845### release<sup>9+</sup><a name=avplayer_release></a>
846
847release(callback: AsyncCallback\<void>): void
848
849通过回调方式销毁播放资源,除released状态,都可以调用。
850
851**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
852
853**参数:**
854
855| 参数名   | 类型     | 必填 | 说明                 |
856| -------- | -------- | ---- | -------------------- |
857| callback | function | 是   | 销毁播放的回调方法。 |
858
859**错误码:**
860
861以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
862
863| 错误码ID | 错误信息                                   |
864| -------- | ------------------------------------------ |
865| 5400102  | Operation not allowed. Return by callback. |
866
867**示例:**
868
869```js
870avPlayer.release((err) => {
871    if (err == null) {
872        console.info('reset success');
873    } else {
874        console.error('release filed,error message is :' + err.message)
875    }
876})
877```
878
879### release<sup>9+</sup>
880
881release(): Promise\<void>
882
883通过Promise方式通过Promise方式销毁播放,除released状态,都可以调用。
884
885**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
886
887**返回值:**
888
889| 类型           | 说明                      |
890| -------------- | ------------------------- |
891| Promise\<void> | 销毁播放的Promise返回值。 |
892
893**错误码:**
894
895以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
896
897| 错误码ID | 错误信息                                  |
898| -------- | ----------------------------------------- |
899| 5400102  | Operation not allowed. Return by promise. |
900
901**示例:**
902
903```js
904avPlayer.release().then(() => {
905    console.info('release success');
906}, (err) => {
907    console.error('release filed,error message is :' + err.message)
908})
909```
910
911### getTrackDescription<sup>9+</sup>
912
913getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void
914
915通过回调方式获取音视频轨道信息,可以在prepared/playing/paused状态调用。
916
917**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
918
919**参数:**
920
921| 参数名   | 类型                                                         | 必填 | 说明                                         |
922| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------- |
923| callback | AsyncCallback<Array<[MediaDescription](#mediadescription8)>> | 是   | 音视频轨道信息MediaDescription数组回调方法。 |
924
925**错误码:**
926
927以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
928
929| 错误码ID | 错误信息                                   |
930| -------- | ------------------------------------------ |
931| 5400102  | Operation not allowed. Return by callback. |
932
933**示例:**
934
935```js
936printfDescription(obj) {
937    for (let item in obj) {
938        let property = obj[item];
939        console.info('audio key is ' + item);
940        console.info('audio value is ' + property);
941    }
942}
943
944avPlayer.getTrackDescription((error, arrList) => {
945    if ((arrList) != null) {
946        for (let i = 0; i < arrList.length; i++) {
947            printfDescription(arrList[i]);
948        }
949    } else {
950        console.log(`video getTrackDescription fail, error:${error}`);
951    }
952});
953```
954
955### getTrackDescription<sup>9+</sup>
956
957getTrackDescription(): Promise\<Array\<MediaDescription>>
958
959通过Promise方式获取音频轨道信息,可以在prepared/playing/paused状态调用。
960
961**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
962
963**返回值:**
964
965| 类型                                                   | 说明                                              |
966| ------------------------------------------------------ | ------------------------------------------------- |
967| Promise<Array<[MediaDescription](#mediadescription8)>> | 音视频轨道信息MediaDescription数组Promise返回值。 |
968
969**错误码:**
970
971以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
972
973| 错误码ID | 错误信息                                  |
974| -------- | ----------------------------------------- |
975| 5400102  | Operation not allowed. Return by promise. |
976
977**示例:**
978
979```js
980let arrayDescription;
981
982printfDescription(obj) {
983    for (let item in obj) {
984        let property = obj[item];
985        console.info('audio key is ' + item);
986        console.info('audio value is ' + property);
987    }
988}
989avPlayer.getTrackDescription().then((arrList) => {
990    if (arrList != null) {
991        arrayDescription = arrList;
992    } else {
993        console.log('video getTrackDescription fail');
994    }
995}).catch((error) => {
996    console.info(`video catchCallback, error:${error}`);
997});
998for (let i = 0; i < arrayDescription.length; i++) {
999    printfDescription(arrayDescription[i]);
1000}
1001```
1002
1003### seek<sup>9+</sup><a name=avplayer_seek></a>
1004
1005seek(timeMs: number, mode?:SeekMode): void
1006
1007跳转到指定播放位置,只能在prepared/playing/paused/complete状态调用,可以通过[seekDone事件](#seekDone_on)确认是否生效。
1008
1009**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1010
1011**参数:**
1012
1013| 参数名 | 类型                   | 必填 | 说明                                                         |
1014| ------ | ---------------------- | ---- | ------------------------------------------------------------ |
1015| timeMs | number                 | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, [duration](#avplayer_duration)]。 |
1016| mode   | [SeekMode](#seekmode8) | 否   | 基于视频I帧的跳转模式,**仅在视频资源播放时设置**。          |
1017
1018**示例:**
1019
1020```js
1021let seekTime = 1000
1022avPlayer.seek(seekTime, media.SeekMode.SEEK_PREV_SYNC)
1023```
1024
1025### on('seekDone')<sup>9+</sup><a name = seekDone_on></a>
1026
1027on(type: 'seekDone', callback: Callback\<number>): void
1028
1029监听seek生效的事件。
1030
1031**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1032
1033**参数:**
1034
1035| 参数名   | 类型     | 必填 | 说明                                                         |
1036| -------- | -------- | ---- | ------------------------------------------------------------ |
1037| type     | string   | 是   | seek生效的事件回调类型,支持的事件:'seekDone',每次调用seek后都会回调此事件。 |
1038| callback | Callback\<number> | 是   | seek生效的事件回调方法,只会上报用户请求的time位置。<br/>**视频播放:**[SeekMode](#seekmode8)会造成实际跳转位置与用户设置产生偏差,精准位置需要通过currentTime获取,事件回调的time仅代表完成用户某一次请求。 |
1039
1040**示例:**
1041
1042```js
1043avPlayer.on('seekDone', (seekDoneTime:number) => {
1044    console.info('seekDone success,and seek time is:' + seekDoneTime)
1045})
1046```
1047
1048### off('seekDone')<sup>9+</sup><a name = seekDone_off></a>
1049
1050off(type: 'seekDone'): void
1051
1052取消监听seek生效的事件。
1053
1054**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1055
1056**参数:**
1057
1058| 参数名 | 类型   | 必填 | 说明                                                 |
1059| ------ | ------ | ---- | ---------------------------------------------------- |
1060| type   | string | 是   | seek生效的事件回调类型,取消注册的事件:'seekDone'。 |
1061
1062**示例:**
1063
1064```js
1065avPlayer.off('seekDone')
1066```
1067
1068### setSpeed<sup>9+</sup>
1069
1070setSpeed(speed: PlaybackSpeed): void
1071
1072设置倍速模式,只能在prepared/playing/paused/complete状态调用,可以通过[speedDone事件](#speedDone_on)确认是否生效。
1073
1074**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1075
1076**参数:**
1077
1078| 参数名 | 类型                             | 必填 | 说明               |
1079| ------ | -------------------------------- | ---- | ------------------ |
1080| speed  | [PlaybackSpeed](#playbackspeed8) | 是   | 指定播放倍速模式。 |
1081
1082**示例:**
1083
1084```js
1085avPlayer.setSpeed(media.PlaybackSpeed.SPEED_FORWARD_2_00_X)
1086```
1087
1088### on('speedDone')<sup>9+</sup><a name = speedDone_on></a>
1089
1090on(type: 'speedDone', callback: Callback\<number>): void
1091
1092监听setSpeed生效的事件
1093
1094**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1095
1096**参数:**
1097
1098| 参数名   | 类型     | 必填 | 说明                                                         |
1099| -------- | -------- | ---- | ------------------------------------------------------------ |
1100| type     | string   | 是   | setSpeed生效的事件回调类型,支持的事件:'speedDone',每次调用setSpeed后都会回调此事件。 |
1101| callback | Callback\<number> | 是   | setSpeed生效的事件回调方法,上报生效的倍速模式,具体见[PlaybackSpeed](#playbackspeed8)。 |
1102
1103**示例:**
1104
1105```js
1106avPlayer.on('speedDone', (speed:number) => {
1107    console.info('speedDone success,and speed value is:' + speed)
1108})
1109```
1110
1111### off('speedDone')<sup>9+</sup><a name = speedDone_off></a>
1112
1113off(type: 'speedDone'): void
1114
1115取消监听setSpeed生效的事件。
1116
1117**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1118
1119**参数:**
1120
1121| 参数名 | 类型   | 必填 | 说明                                                      |
1122| ------ | ------ | ---- | --------------------------------------------------------- |
1123| type   | string | 是   | setSpeed生效的事件回调类型,取消注册的事件:'speedDone'。 |
1124
1125**示例:**
1126
1127```js
1128avPlayer.off('speedDone')
1129```
1130
1131### setBitrate<sup>9+</sup>
1132
1133setBitrate(bitrate: number): void
1134
1135选择要播放的指定比特率,仅对**HLS协议网络流**有效,只能在prepared/playing/paused/complete状态调用,可以通过[bitrateDone](#bitrateDone_on)事件确认是否生效。
1136
1137**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1138
1139**参数:**
1140
1141| 参数名  | 类型   | 必填 | 说明                                                         |
1142| ------- | ------ | ---- | ------------------------------------------------------------ |
1143| bitrate | number | 是   | 指定比特率,可以通过[availableBitrates](#availableBitrates_on)事件获得当前HLS协议流可用的比特率,如果用户指定的比特率不在此列表中,则播放器将从可用比特率列表中选择最小和最接近的比特率。如果通过availableBitrates时间获得的比特率列表长度为0,则不支持指定比特率,也不会产生bitrateDone回调。 |
1144
1145**示例:**
1146
1147```js
1148let bitrate = 96000
1149avPlayer.setBitrate(bitrate)
1150```
1151
1152### on('bitrateDone')<sup>9+</sup><a name = bitrateDone_on></a>
1153
1154on(type: 'bitrateDone', callback: Callback\<number>): void
1155
1156监听setBitrate生效的事件。
1157
1158**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1159
1160**参数:**
1161
1162| 参数名   | 类型     | 必填 | 说明                                                         |
1163| -------- | -------- | ---- | ------------------------------------------------------------ |
1164| type     | string   | 是   | setBitrate生效的事件回调类型,支持的事件:'bitrateDone',每次调用setBitrate后都会回调此事件。 |
1165| callback | function | 是   | setBitrate生效的事件回调方法,上报生效的比特率。             |
1166
1167**示例:**
1168
1169```js
1170avPlayer.on('bitrateDone', (bitrate:number) => {
1171    console.info('bitrateDone success,and bitrate value is:' + bitrate)
1172})
1173```
1174
1175### off('bitrateDone')<sup>9+</sup><a name = bitrateDone_off></a>
1176
1177off(type: 'bitrateDone'): void
1178
1179取消监听setBitrate生效的事件。
1180
1181**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1182
1183**参数:**
1184
1185| 参数名 | 类型   | 必填 | 说明                                                         |
1186| ------ | ------ | ---- | ------------------------------------------------------------ |
1187| type   | string | 是   | setBitrate生效的事件回调类型,取消注册的事件:'bitrateDone'。 |
1188
1189**示例:**
1190
1191```js
1192avPlayer.off('bitrateDone')
1193```
1194
1195### on('availableBitrates')<sup>9+</sup><a name = availableBitrates_on></a>
1196
1197on(type: 'availableBitrates', callback: (bitrates: Array\<number>) => void): void
1198
1199监听HLS协议流可用的比特率列表,只会在切换prepared状态后上报。
1200
1201**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1202
1203**参数:**
1204
1205| 参数名   | 类型     | 必填 | 说明                                                         |
1206| -------- | -------- | ---- | ------------------------------------------------------------ |
1207| type     | string   | 是   | HLS协议可用比特率上报事件回调类型,支持的事件:'availableBitrates',只会在prepared之后上报一次。 |
1208| callback | function | 是   | HLS协议可用比特率上报事件回调方法,使用数组存放支持的比特率。如果数组长度为0,则不支持指定比特率。 |
1209
1210**示例:**
1211
1212```js
1213avPlayer.on('availableBitrates', (bitrates: Array<number>) => {
1214    console.info('availableBitrates success,and availableBitrates length is:' + bitrates.length)
1215})
1216```
1217
1218### off('availableBitrates')<sup>9+</sup><a name = availableBitrates_off></a>
1219
1220off(type: 'availableBitrates'): void
1221
1222取消监听HLS协议流可用的比特率列表。
1223
1224**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1225
1226**参数:**
1227
1228| 参数名 | 类型   | 必填 | 说明                                                         |
1229| ------ | ------ | ---- | ------------------------------------------------------------ |
1230| type   | string | 是   | HLS协议可用比特率上报事件回调类型,取消注册的事件:'availableBitrates'。 |
1231
1232**示例:**
1233
1234```js
1235avPlayer.off('availableBitrates')
1236```
1237
1238### setVolume<sup>9+</sup>
1239
1240setVolume(volume: number): void
1241
1242设置媒体播放音量,只能在prepared/playing/paused/complete状态调用,可以通过[volumeChange事件](#volumeChange_on)确认是否生效。
1243
1244**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1245
1246**参数:**
1247
1248| 参数名 | 类型   | 必填 | 说明                                                         |
1249| ------ | ------ | ---- | ------------------------------------------------------------ |
1250| volume | number | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
1251
1252**示例:**
1253
1254```js
1255let volume = 1.0
1256avPlayer.setVolume(volume)
1257```
1258
1259### on('volumeChange')<sup>9+</sup><a name = volumeChange_on></a>
1260
1261on(type: 'volumeChange', callback: Callback\<number>): void
1262
1263监听setVolume生效的事件。
1264
1265**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1266
1267**参数:**
1268
1269| 参数名   | 类型     | 必填 | 说明                                                         |
1270| -------- | -------- | ---- | ------------------------------------------------------------ |
1271| type     | string   | 是   | setVolume生效的事件回调类型,支持的事件:'volumeChange',每次调用setVolume后都会回调此事件。 |
1272| callback | function | 是   | setVolume生效的事件回调方法,上报生效的媒体音量。            |
1273
1274**示例:**
1275
1276```js
1277avPlayer.on('volumeChange', (vol:number) => {
1278    console.info('volumeChange success,and new volume is :' + vol)
1279})
1280```
1281
1282### off('volumeChange')<sup>9+</sup><a name = volumeChange_off></a>
1283
1284off(type: 'volumeChange'): void
1285
1286取消监听setVolume生效的事件。
1287
1288**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1289
1290**参数:**
1291
1292| 参数名 | 类型   | 必填 | 说明                                                         |
1293| ------ | ------ | ---- | ------------------------------------------------------------ |
1294| type   | string | 是   | setVolume生效的事件回调类型,取消注册的事件:'availableBitrates'。 |
1295
1296**示例:**
1297
1298```js
1299avPlayer.off('volumeChange')
1300```
1301
1302### on('endOfStream')<sup>9+</sup><a name = endOfStream_on></a>
1303
1304on(type: 'endOfStream', callback: Callback\<void>): void
1305
1306监听资源播放至结尾的事件;如果用户设置**loop=1**,播放会跳转至开头重播;如果用户没有设置loop,会通过[stateChange](#stateChange_on)上报completed状态。
1307
1308**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1309
1310**参数:**
1311
1312| 参数名   | 类型     | 必填 | 说明                                                         |
1313| -------- | -------- | ---- | ------------------------------------------------------------ |
1314| type     | string   | 是   | 资源播放至结尾的事件回调类型,支持的事件:'endOfStream',当播放至结尾时会上报此事件。 |
1315| callback | Callback\<void> | 是   | 资源播放至结尾的事件回调方法。                               |
1316
1317**示例:**
1318
1319```js
1320avPlayer.on('endOfStream', () => {
1321    console.info('endOfStream success')
1322})
1323```
1324
1325### off('endOfStream')<sup>9+</sup><a name = endOfStream_off></a>
1326
1327off(type: 'endOfStream'): void
1328
1329取消监听资源播放至结尾的事件。
1330
1331**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1332
1333**参数:**
1334
1335| 参数名 | 类型   | 必填 | 说明                                                         |
1336| ------ | ------ | ---- | ------------------------------------------------------------ |
1337| type   | string | 是   | 资源播放至结尾的事件回调类型,取消注册的事件:'endOfStream'。 |
1338
1339**示例:**
1340
1341```js
1342avPlayer.off('endOfStream')
1343```
1344
1345### on('timeUpdate')<sup>9+</sup><a name = timeUpdate_on></a>
1346
1347on(type: 'timeUpdate', callback: Callback\<number>): void
1348
1349监听资源播放当前时间,单位为毫秒(ms),用于刷新进度条当前位置,默认间隔1s时间上报,因用户操作(seek)产生的时间变化会立刻上报。
1350
1351**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1352
1353**参数:**
1354
1355| 参数名   | 类型     | 必填 | 说明                                           |
1356| -------- | -------- | ---- | ---------------------------------------------- |
1357| type     | string   | 是   | 时间更新的回调类型,支持的事件:'timeUpdate'。 |
1358| callback | function | 是   | 当前时间。                                     |
1359
1360**示例:**
1361
1362```js
1363avPlayer.on('timeUpdate', (time:number) => {
1364    console.info('timeUpdate success,and new time is :' + time)
1365})
1366```
1367
1368### off('timeUpdate')<sup>9+</sup><a name = timeUpdate_off></a>
1369
1370off(type: 'timeUpdate'): void
1371
1372取消监听资源播放当前时间。
1373
1374**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1375
1376**参数:**
1377
1378| 参数名 | 类型   | 必填 | 说明                                               |
1379| ------ | ------ | ---- | -------------------------------------------------- |
1380| type   | string | 是   | 时间更新的回调类型,取消注册的事件:'timeUpdate'。 |
1381
1382**示例:**
1383
1384```js
1385avPlayer.off('timeUpdate')
1386```
1387
1388### on('durationUpdate')<sup>9+</sup><a name = durationUpdate_on></a>
1389
1390on(type: 'durationUpdate', callback: Callback\<number>): void
1391
1392监听资源播放资源的时长,单位为毫秒(ms),用于刷新进度条长度,默认只在prepared上报一次,同时允许一些特殊码流刷新多次时长。
1393
1394**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1395
1396**参数:**
1397
1398| 参数名   | 类型     | 必填 | 说明                                               |
1399| -------- | -------- | ---- | -------------------------------------------------- |
1400| type     | string   | 是   | 时长更新的回调类型,支持的事件:'durationUpdate'。 |
1401| callback | function | 是   | 资源时长。                                         |
1402
1403**示例:**
1404
1405```js
1406avPlayer.on('durationUpdate', (duration) => {
1407    console.info('durationUpdate success,new duration is :' + duration)
1408})
1409```
1410
1411### off('durationUpdate')<sup>9+</sup><a name = durationUpdate_off></a>
1412
1413off(type: 'durationUpdate'): void
1414
1415取消监听资源播放资源的时长。
1416
1417**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1418
1419**参数:**
1420
1421| 参数名 | 类型   | 必填 | 说明                                                   |
1422| ------ | ------ | ---- | ------------------------------------------------------ |
1423| type   | string | 是   | 时长更新的回调类型,取消注册的事件:'durationUpdate'。 |
1424
1425**示例:**
1426
1427```js
1428avPlayer.off('durationUpdate')
1429```
1430
1431### on('bufferingUpdate')<sup>9+</sup><a name = bufferingUpdate_on></a>
1432
1433on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: number) => void): void
1434
1435订阅音视频缓存更新事件,仅网络播放支持该订阅事件。
1436
1437**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1438
1439**参数:**
1440
1441| 参数名   | 类型     | 必填 | 说明                                                         |
1442| -------- | -------- | ---- | ------------------------------------------------------------ |
1443| type     | string   | 是   | 播放缓存事件回调类型,支持的事件:'bufferingUpdate'。        |
1444| callback | function | 是   | 播放缓存事件回调方法。<br/>[BufferingInfoType](#bufferinginfotype8)为BUFFERING_PERCENT或CACHED_DURATION时,value值有效,否则固定为0。 |
1445
1446**示例:**
1447
1448```js
1449avPlayer.on('bufferingUpdate', (infoType: media.BufferingInfoType, value: number) => {
1450    console.info('bufferingUpdate success,and infoType value is:' + infoType + ', value is :' + value)
1451})
1452```
1453
1454### off('bufferingUpdate')<sup>9+</sup><a name = bufferingUpdate_off></a>
1455
1456off(type: 'bufferingUpdate'): void
1457
1458取消监听音视频缓存更新事件。
1459
1460**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1461
1462**参数:**
1463
1464| 参数名 | 类型   | 必填 | 说明                                                      |
1465| ------ | ------ | ---- | --------------------------------------------------------- |
1466| type   | string | 是   | 播放缓存事件回调类型,取消注册的事件:'bufferingUpdate'。 |
1467
1468**示例:**
1469
1470```js
1471avPlayer.off('bufferingUpdate')
1472```
1473
1474### on('startRenderFrame')<sup>9+</sup><a name = startRenderFrame_on></a>
1475
1476on(type: 'startRenderFrame', callback: Callback\<void>): void
1477
1478订阅视频播放开始首帧渲染的更新事件,仅视频播放支持该订阅事件,该事件仅代表播放服务将第一帧画面送显示模块,实际效果依赖显示服务渲染性能。
1479
1480**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1481
1482**参数:**
1483
1484| 参数名   | 类型     | 必填 | 说明                                                         |
1485| -------- | -------- | ---- | ------------------------------------------------------------ |
1486| type     | string   | 是   | 视频播放开始首帧渲染事件回调类型,支持的事件:'startRenderFrame'。 |
1487| callback | Callback\<void> | 是   | 视频播放开始首帧渲染事件回调方法。                           |
1488
1489**示例:**
1490
1491```js
1492avPlayer.on('startRenderFrame', () => {
1493    console.info('startRenderFrame success')
1494})
1495```
1496
1497### off('startRenderFrame')<sup>9+</sup><a name = startRenderFrame_off></a>
1498
1499off(type: 'startRenderFrame'): void
1500
1501取消监听视频播放开始首帧渲染的更新事件。
1502
1503**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1504
1505**参数:**
1506
1507| 参数名 | 类型   | 必填 | 说明                                                         |
1508| ------ | ------ | ---- | ------------------------------------------------------------ |
1509| type   | string | 是   | 视频播放开始首帧渲染事件回调类型,取消注册的事件:'startRenderFrame'。 |
1510
1511**示例:**
1512
1513```js
1514avPlayer.off('startRenderFrame')
1515```
1516
1517### on('videoSizeChange')<sup>9+</sup><a name = videoSizeChange_on></a>
1518
1519on(type: 'videoSizeChange', callback: (width: number, height: number) => void): void
1520
1521监听视频播放宽高变化事件,仅视频播放支持该订阅事件,默认只在prepread状态上报一次,但HLS协议码流会在切换分辨率时上报;
1522
1523**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1524
1525**参数:**
1526
1527| 参数名   | 类型     | 必填 | 说明                                                         |
1528| -------- | -------- | ---- | ------------------------------------------------------------ |
1529| type     | string   | 是   | 视频播放宽高变化事件回调类型,支持的事件:'videoSizeChange'。 |
1530| callback | function | 是   | 视频播放宽高变化事件回调方法,width表示宽,height表示高。    |
1531
1532**示例:**
1533
1534```js
1535avPlayer.on('videoSizeChange', (width: number, height: number) => {
1536    console.info('videoSizeChange success,and width is:' + width + ', height is :' + height)
1537})
1538```
1539
1540### off('videoSizeChange')<sup>9+</sup><a name = videoSizeChange_off></a>
1541
1542off(type: 'videoSizeChange'): void
1543
1544取消监听视频播放宽高变化事件。
1545
1546**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1547
1548**参数:**
1549
1550| 参数名 | 类型   | 必填 | 说明                                                         |
1551| ------ | ------ | ---- | ------------------------------------------------------------ |
1552| type   | string | 是   | 视频播放宽高变化事件回调类型,取消注册的事件:'videoSizeChange'。 |
1553
1554**示例:**
1555
1556```js
1557avPlayer.off('videoSizeChange')
1558```
1559
1560### on('audioInterrupt')<sup>9+</sup><a name = audioInterrupt_on></a>
1561
1562on(type: 'audioInterrupt', callback: (info: audio.InterruptEvent) => void): void
1563
1564监听音频焦点变化事件,多个音视频资源同时播放时,会根据音频焦点模型[audio.InterruptMode](js-apis-audio.md#interruptmode9)触发此事件。
1565
1566**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1567
1568**参数:**
1569
1570| 参数名   | 类型                                                         | 必填 | 说明                                                     |
1571| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------------------- |
1572| type     | string                                                       | 是   | 音频焦点变化事件回调类型,支持的事件:'audioInterrupt'。 |
1573| callback | [audio.InterruptEvent<sup>9+</sup>](js-apis-audio.md#interruptevent9) | 是   | 音频焦点变化事件回调方法。                               |
1574
1575**示例:**
1576
1577```js
1578import audio from '@ohos.multimedia.audio';
1579
1580avPlayer.on('audioInterrupt', (info: audio.InterruptEvent) => {
1581    console.info('audioInterrupt success,and InterruptEvent info is:' + info)
1582})
1583```
1584
1585### off('audioInterrupt')<sup>9+</sup><a name = audioInterrupt_off></a>
1586
1587off(type: 'audioInterrupt'): void
1588
1589取消监听音频焦点变化事件。
1590
1591**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1592
1593**参数:**
1594
1595| 参数名 | 类型   | 必填 | 说明                                                         |
1596| ------ | ------ | ---- | ------------------------------------------------------------ |
1597| type   | string | 是   | 音频焦点变化事件回调类型,取消注册的事件:'audioInterrupt'。 |
1598
1599**示例:**
1600
1601```js
1602avPlayer.off('audioInterrupt')
1603```
1604
1605## AVPlayerState<sup>9+</sup><a name = avplayerstate></a>
1606
1607[AVPlayer](#avplayer9)的状态机,可通过state属性主动获取当前状态,也可通过监听[stateChange](#stateChange_on)事件上报当前状态,状态机之间的切换规则,可参考[AVPlayer播放器开发指导](../../media/avplayer-playback.md)。
1608
1609**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1610
1611|              名称               |  类型  | 说明                                                         |
1612| :-----------------------------: | :----: | :----------------------------------------------------------- |
1613|              idle               | string | 闲置状态,AVPlayer刚被创建[createAVPlayer()](#mediacreateavplayer9)或者调用了reset()方法之后,进入Idle状态。<br/>首次创建createAVPlayer(),所有属性都为默认值。<br/>调用reset()方法,url<sup>9+</sup> 或 fdSrc<sup>9+</sup>属性会被重置,其他用户设置的属性将被保留。 |
1614|           initialized           | string | 资源初始化,在Idle 状态设置 url<sup>9+</sup> 或 fdSrc<sup>9+</sup>属性,AVPlayer会进入initialized状态,此时可以配置窗口、音频等静态属性。 |
1615|            prepared             | string | 已准备状态,在initialized状态调用prepare()方法,AVPlayer会进入prepared状态,此时播放引擎的资源已准备就绪。 |
1616|             playing             | string | 正在播放状态,在prepared/paused/completed状态调用play()方法,AVPlayer会进入playing状态。 |
1617|             paused              | string | 暂停状态,在playing状态调用pause方法,AVPlayer会进入paused状态。 |
1618|            completed            | string | 播放至结尾状态,当媒体资源播放至结尾时,如果用户未设置循环播放(loop = 1),AVPlayer会进入completed状态,此时调用play()会进入playing状态和重播,调用stop()会进入stopped状态。 |
1619|             stopped             | string | 停止状态,在prepared/playing/paused/completed状态调用stop()方法,AVPlayer会进入stopped状态,此时播放引擎只会保留属性,但会释放内存资源,可以调用prepare()重新准备,也可以调用reset()重置,或者调用release()彻底销毁。 |
1620|            released             | string | 销毁状态,销毁与当前AVPlayer关联的播放引擎,无法再进行状态转换,调用release()方法后,会进入released状态,结束流程。 |
1621| error<a name = error_state></a> | string | 错误状态,当**播放引擎**发生**不可逆的错误**,详见[错误分类](#error_info),则会转换至当前状态,可以调用reset()重置,也可以调用release()销毁重建。<br/>**注意:** 区分error状态和 [on('error')](#error_on) :<br/>1、进入error状态时,会触发[on('error')](#error_on)监听事件,可以通过[on('error')](#error_on)事件获取详细错误信息;<br/>2、处于error状态时,播放服务进入不可播控的状态,要求客户端设计容错机制,使用reset()重置或者release()销毁重建;<br/>3、如果客户端收到[on('error')](#error_on),但未进入error状态:<br/>原因1:客户端未按状态机调用API或传入参数错误,被AVPlayer拦截提醒,需要客户端调整代码逻辑;<br/>原因2:播放过程发现码流问题,导致容器、解码短暂异常,不影响连续播放和播控操作的,不需要客户端设计容错机制。 |
1622
1623## AVFileDescriptor<sup>9+</sup>
1624
1625音视频文件资源描述,一种特殊资源的播放方式,使用场景:应用中的音频资源被连续存储在同一个文件中,需要根据偏移量和长度进行播放。
1626
1627**系统能力:** SystemCapability.Multimedia.Media.Core
1628
1629| 名称   | 类型   | 必填 | 说明                                                         |
1630| ------ | ------ | ---- | ------------------------------------------------------------ |
1631| fd     | number | 是   | 资源句柄,通过resourceManager.getRawFileDescriptor获取。     |
1632| offset | number | 是   | 资源偏移量,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 |
1633| length | number | 是   | 资源长度,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 |
1634
1635## SeekMode<sup>8+</sup>
1636
1637视频播放的Seek模式枚举,可通过seek方法作为参数传递下去。
1638
1639**系统能力:** SystemCapability.Multimedia.Media.Core
1640
1641| 名称           | 值   | 说明                                                         |
1642| -------------- | ---- | ------------------------------------------------------------ |
1643| SEEK_NEXT_SYNC | 0    | 表示跳转到指定时间点的下一个关键帧,建议向后快进的时候用这个枚举值。 |
1644| SEEK_PREV_SYNC | 1    | 表示跳转到指定时间点的上一个关键帧,建议向前快进的时候用这个枚举值。 |
1645
1646## PlaybackSpeed<sup>8+</sup>
1647
1648视频播放的倍速枚举,可通过setSpeed方法作为参数传递下去。
1649
1650**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
1651
1652| 名称                 | 值   | 说明                           |
1653| -------------------- | ---- | ------------------------------ |
1654| SPEED_FORWARD_0_75_X | 0    | 表示视频播放正常播速的0.75倍。 |
1655| SPEED_FORWARD_1_00_X | 1    | 表示视频播放正常播速。         |
1656| SPEED_FORWARD_1_25_X | 2    | 表示视频播放正常播速的1.25倍。 |
1657| SPEED_FORWARD_1_75_X | 3    | 表示视频播放正常播速的1.75倍。 |
1658| SPEED_FORWARD_2_00_X | 4    | 表示视频播放正常播速的2.00倍。 |
1659
1660## VideoScaleType<sup>9+</sup>
1661
1662枚举,视频缩放模式。
1663
1664**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
1665
1666| 名称                      | 值   | 说明                                             |
1667| ------------------------- | ---- | ------------------------------------------------ |
1668| VIDEO_SCALE_TYPE_FIT      | 0    | 视频拉伸至与窗口等大。                           |
1669| VIDEO_SCALE_TYPE_FIT_CROP | 1    | 保持视频宽高比拉伸至填满窗口,内容可能会有裁剪。 |
1670
1671## MediaDescription<sup>8+</sup>
1672
1673通过key-value方式获取媒体信息。
1674
1675**系统能力:** SystemCapability.Multimedia.Media.Core
1676
1677**示例:**
1678
1679```js
1680import media from '@ohos.multimedia.media'
1681function printfItemDescription(obj, key) {
1682    let property = obj[key];
1683    console.info('audio key is ' + key); // 通过key值获取对应的value。key值具体可见[MediaDescriptionKey]
1684    console.info('audio value is ' + property); //对应key值得value。其类型可为任意类型,具体key对应value的类型可参考[MediaDescriptionKey]
1685}
1686let audioPlayer = media.createAudioPlayer();
1687audioPlayer.getTrackDescription((error, arrList) => {
1688    if (arrList != null) {
1689        for (let i = 0; i < arrList.length; i++) {
1690            printfItemDescription(arrList[i], media.MediaDescriptionKey.MD_KEY_TRACK_TYPE);  //打印出每条轨道MD_KEY_TRACK_TYPE的值
1691        }
1692    } else {
1693        console.log(`audio getTrackDescription fail, error:${error}`);
1694    }
1695});
1696```
1697
1698## AVRecorder<sup>9+</sup>
1699
1700音视频录制管理类,用于音视频媒体录制。在调用AVRecorder的方法前,需要先通过createAVRecorder()构建一个AVRecorder实例。
1701
1702音视频录制demo可参考:[音视频录制开发指导](../../media/avrecorder.md)
1703
1704*注意:使用相机进行视频录制时,需要与相机模块配合,相机模块接口开放状态以及使用详情见[相机管理](js-apis-camera.md)。
1705
1706### 属性
1707
1708**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
1709
1710| 名称    | 类型                                 | 可读 | 可写 | 说明               |
1711| ------- | ------------------------------------ | ---- | ---- | ------------------ |
1712| state9+ | [AVRecorderState](#avrecorderstate9) | 是   | 否   | 音视频录制的状态。 |
1713
1714### prepare<sup>9+</sup><a name=avrecorder_prepare></a>
1715
1716prepare(config: AVRecorderConfig, callback: AsyncCallback\<void>): void
1717
1718异步方式进行音视频录制的参数设置。通过注册回调函数获取返回值。
1719
1720**需要权限:** ohos.permission.MICROPHONE
1721
1722不涉及音频录制时,可以不需要获取ohos.permission.MICROPHONE权限。
1723
1724**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
1725
1726**参数:**
1727
1728| 参数名   | 类型                                   | 必填 | 说明                                  |
1729| -------- | -------------------------------------- | ---- | ------------------------------------- |
1730| config   | [AVRecorderConfig](#avrecorderconfig9) | 是   | 配置音视频录制的相关参数。            |
1731| callback | AsyncCallback\<void>                   | 是   | 异步音视频录制prepare方法的回调方法。 |
1732
1733**错误码:**
1734
1735以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
1736
1737| 错误码ID | 错误信息                                |
1738| -------- | --------------------------------------- |
1739| 201      | Permission denied. Return by callback.  |
1740| 401      | Parameter error. Return by callback.    |
1741| 5400102  | Operate not permit. Return by callback. |
1742| 5400105  | Service died. Return by callback.       |
1743
1744**示例:**
1745
1746```js
1747// 配置参数以实际硬件设备支持的范围为准
1748let AVRecorderProfile = {
1749    audioBitrate : 48000,
1750    audioChannels : 2,
1751    audioCodec : media.CodecMimeType.AUDIO_AAC,
1752    audioSampleRate : 48000,
1753    fileFormat : media.ContainerFormatType.CFT_MPEG_4,
1754    videoBitrate : 2000000,
1755    videoCodec : media.CodecMimeType.VIDEO_AVC,
1756    videoFrameWidth : 640,
1757    videoFrameHeight : 480,
1758    videoFrameRate : 30
1759}
1760let AVRecorderConfig = {
1761    audioSourceType : media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC,
1762    videoSourceType : media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV,
1763    profile : AVRecorderProfile,
1764    url : 'fd://', // 文件需先由调用者创建,赋予读写权限,将文件fd传给此参数,eg.fd://45
1765    rotation : 0, // 合理值0、90、180、270,非合理值prepare接口将报错
1766    location : { latitude : 30, longitude : 130 }
1767}
1768
1769avRecorder.prepare(AVRecorderConfig, (err) => {
1770    if (err == null) {
1771        console.info('prepare success');
1772    } else {
1773        console.info('prepare failed and error is ' + err.message);
1774    }
1775})
1776```
1777
1778### prepare<sup>9+</sup>
1779
1780prepare(config: AVRecorderConfig): Promise\<void>
1781
1782异步方式进行音视频录制的参数设置。通过Promise获取返回值。
1783
1784**需要权限:** ohos.permission.MICROPHONE
1785
1786不涉及音频录制时,可以不需要获ohos.permission.MICROPHONE权限。
1787
1788**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
1789
1790**参数:**
1791
1792| 参数名 | 类型                                   | 必填 | 说明                       |
1793| ------ | -------------------------------------- | ---- | -------------------------- |
1794| config | [AVRecorderConfig](#avrecorderconfig9) | 是   | 配置音视频录制的相关参数。 |
1795
1796**返回值:**
1797
1798| 类型           | 说明                                       |
1799| -------------- | ------------------------------------------ |
1800| Promise\<void> | 异步音视频录制prepare方法的Promise返回值。 |
1801
1802**错误码:**
1803
1804以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
1805
1806| 错误码ID | 错误信息                               |
1807| -------- | -------------------------------------- |
1808| 201      | Permission denied. Return by promise.  |
1809| 401      | Parameter error. Return by promise.    |
1810| 5400102  | Operate not permit. Return by promise. |
1811| 5400105  | Service died. Return by promise.       |
1812
1813**示例:**
1814
1815```js
1816// 配置参数以实际硬件设备支持的范围为准
1817let AVRecorderProfile = {
1818    audioBitrate : 48000,
1819    audioChannels : 2,
1820    audioCodec : media.CodecMimeType.AUDIO_AAC,
1821    audioSampleRate : 48000,
1822    fileFormat : media.ContainerFormatType.CFT_MPEG_4,
1823    videoBitrate : 2000000,
1824    videoCodec : media.CodecMimeType.VIDEO_AVC,
1825    videoFrameWidth : 640,
1826    videoFrameHeight : 480,
1827    videoFrameRate : 30
1828}
1829let AVRecorderConfig = {
1830    audioSourceType : media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC,
1831    videoSourceType : media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV,
1832    profile : AVRecorderProfile,
1833    url : 'fd://',  // 文件需先由调用者创建,赋予读写权限,将文件fd传给此参数,eg.fd://45
1834    rotation : 0, // 合理值0、90、180、270,非合理值prepare接口报错
1835    location : { latitude : 30, longitude : 130 }
1836}
1837
1838avRecorder.prepare(AVRecorderConfig).then(() => {
1839    console.info('prepare success');
1840}).catch((err) => {
1841    console.info('prepare failed and catch error is ' + err.message);
1842});
1843
1844```
1845
1846### getInputSurface<sup>9+</sup><a name=avrecorder_getinputsurface></a>
1847
1848getInputSurface(callback: AsyncCallback\<string>): void
1849
1850异步方式获得录制需要的surface。此surface提供给调用者,调用者从此surface中获取surfaceBuffer,填入相应的视频数据。
1851
1852应当注意,填入的视频数据需要携带时间戳(单位ns)和buffersize。时间戳的起始时间请以系统启动时间为基准。
1853
1854需在prepare()事件成功触发后,才能调用getInputSurface()方法。
1855
1856**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
1857
1858**参数:**
1859
1860| 参数名   | 类型                   | 必填 | 说明                        |
1861| -------- | ---------------------- | ---- | --------------------------- |
1862| callback | AsyncCallback\<string> | 是   | 异步获得surface的回调方法。 |
1863
1864**错误码:**
1865
1866以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
1867
1868| 错误码ID | 错误信息                                |
1869| -------- | --------------------------------------- |
1870| 5400102  | Operate not permit. Return by callback. |
1871| 5400103  | IO error. Return by callback.           |
1872| 5400105  | Service died. Return by callback.       |
1873
1874**示例:**
1875
1876```js
1877let surfaceID = null; // 该surfaceID用于传递给相机接口创造videoOutput
1878
1879avRecorder.getInputSurface((err, surfaceId) => {
1880    if (err == null) {
1881        console.info('getInputSurface success');
1882        surfaceID = surfaceId;
1883    } else {
1884        console.info('getInputSurface failed and error is ' + err.message);
1885    }
1886});
1887
1888```
1889
1890### getInputSurface<sup>9+</sup>
1891
1892getInputSurface(): Promise\<string>
1893
1894异步方式获得录制需要的surface。此surface提供给调用者,调用者从此surface中获取surfaceBuffer,填入相应的视频数据。
1895
1896应当注意,填入的视频数据需要携带时间戳(单位ns)和buffersize。时间戳的起始时间请以系统启动时间为基准。
1897
1898需在prepare()事件成功触发后,才能调用getInputSurface方法。
1899
1900**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
1901
1902**返回值:**
1903
1904| 类型             | 说明                             |
1905| ---------------- | -------------------------------- |
1906| Promise\<string> | 异步获得surface的Promise返回值。 |
1907
1908**错误码:**
1909
1910以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
1911
1912| 错误码ID | 错误信息                               |
1913| -------- | -------------------------------------- |
1914| 5400102  | Operate not permit. Return by promise. |
1915| 5400103  | IO error. Return by promise.           |
1916| 5400105  | Service died. Return by promise.       |
1917
1918**示例:**
1919
1920```js
1921let surfaceID = null; // 该surfaceID用于传递给相机接口创造videoOutput
1922
1923avRecorder.getInputSurface().then((surfaceId) => {
1924    console.info('getInputSurface success');
1925    surfaceID = surfaceId;
1926}).catch((err) => {
1927    console.info('getInputSurface failed and catch error is ' + err.message);
1928});
1929```
1930
1931### start<sup>9+</sup><a name=avrecorder_start></a>
1932
1933start(callback: AsyncCallback\<void>): void
1934
1935异步方式开始视频录制。通过注册回调函数获取返回值。
1936
1937纯音频录制需在prepare()事件成功触发后,才能调用start方法。纯视频录制,音视频录制需在getInputSurface()事件成功触发后,才能调用start方法。
1938
1939**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
1940
1941**参数:**
1942
1943| 参数名   | 类型                 | 必填 | 说明                         |
1944| -------- | -------------------- | ---- | ---------------------------- |
1945| callback | AsyncCallback\<void> | 是   | 异步开始视频录制的回调方法。 |
1946
1947**错误码:**
1948
1949以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
1950
1951| 错误码ID | 错误信息                                |
1952| -------- | --------------------------------------- |
1953| 5400102  | Operate not permit. Return by callback. |
1954| 5400103  | IO error. Return by callback.           |
1955| 5400105  | Service died. Return by callback.       |
1956
1957**示例:**
1958
1959```js
1960avRecorder.start((err) => {
1961    if (err == null) {
1962        console.info('start AVRecorder success');
1963    } else {
1964        console.info('start AVRecorder failed and error is ' + err.message);
1965    }
1966});
1967```
1968
1969### start<sup>9+</sup>
1970
1971start(): Promise\<void>
1972
1973异步方式开始视频录制。通过Promise获取返回值。
1974
1975纯音频录制需在prepare()事件成功触发后,才能调用start方法。纯视频录制,音视频录制需在getInputSurface()事件成功触发后,才能调用start方法。
1976
1977**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
1978
1979**返回值:**
1980
1981| 类型           | 说明                                  |
1982| -------------- | ------------------------------------- |
1983| Promise\<void> | 异步开始视频录制方法的Promise返回值。 |
1984
1985**错误码:**
1986
1987以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
1988
1989| 错误码ID | 错误信息                               |
1990| -------- | -------------------------------------- |
1991| 5400102  | Operate not permit. Return by promise. |
1992| 5400103  | IO error. Return by promise.           |
1993| 5400105  | Service died. Return by promise.       |
1994
1995**示例:**
1996
1997```js
1998avRecorder.start().then(() => {
1999    console.info('start AVRecorder success');
2000}).catch((err) => {
2001    console.info('start AVRecorder failed and catch error is ' + err.message);
2002});
2003```
2004
2005### pause<sup>9+</sup><a name=avrecorder_pause></a>
2006
2007pause(callback: AsyncCallback\<void>): void
2008
2009异步方式暂停视频录制。通过注册回调函数获取返回值。
2010
2011需要start()事件成功触发后,才能调用pause方法,可以通过调用resume()接口来恢复录制。
2012
2013**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2014
2015**参数:**
2016
2017| 参数名   | 类型                 | 必填 | 说明                        |
2018| -------- | -------------------- | ---- | --------------------------- |
2019| callback | AsyncCallback\<void> | 是   | 异步获得surface的回调方法。 |
2020
2021**错误码:**
2022
2023以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
2024
2025| 错误码ID | 错误信息                                |
2026| -------- | --------------------------------------- |
2027| 5400102  | Operate not permit. Return by callback. |
2028| 5400103  | IO error. Return by callback.           |
2029| 5400105  | Service died. Return by callback.       |
2030
2031**示例:**
2032
2033```js
2034avRecorder.pause((err) => {
2035    if (err == null) {
2036        console.info('pause AVRecorder success');
2037    } else {
2038        console.info('pause AVRecorder failed and error is ' + err.message);
2039    }
2040});
2041```
2042
2043### pause<sup>9+</sup>
2044
2045pause(): Promise\<void>
2046
2047异步方式暂停视频录制。通过Promise获取返回值。
2048
2049需要start()事件成功触发后,才能调用pause方法,可以通过调用resume()接口来恢复录制。
2050
2051**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2052
2053**返回值:**
2054
2055| 类型           | 说明                                  |
2056| -------------- | ------------------------------------- |
2057| Promise\<void> | 异步暂停视频录制方法的Promise返回值。 |
2058
2059**错误码:**
2060
2061以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
2062
2063| 错误码ID | 错误信息                               |
2064| -------- | -------------------------------------- |
2065| 5400102  | Operate not permit. Return by promise. |
2066| 5400103  | IO error. Return by promise.           |
2067| 5400105  | Service died. Return by promise.       |
2068
2069**示例:**
2070
2071```js
2072avRecorder.pause().then(() => {
2073    console.info('pause AVRecorder success');
2074}).catch((err) => {
2075    console.info('pause AVRecorder failed and catch error is ' + err.message);
2076});
2077```
2078
2079### resume<sup>9+</sup><a name=avrecorder_resume></a>
2080
2081resume(callback: AsyncCallback\<void>): void
2082
2083异步方式恢复视频录制。通过注册回调函数获取返回值。
2084
2085需要在pause()事件成功触发后,才能调用resume方法。
2086
2087**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2088
2089**参数:**
2090
2091| 参数名   | 类型                 | 必填 | 说明                         |
2092| -------- | -------------------- | ---- | ---------------------------- |
2093| callback | AsyncCallback\<void> | 是   | 异步恢复视频录制的回调方法。 |
2094
2095**错误码:**
2096
2097以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
2098
2099| 错误码ID | 错误信息                                |
2100| -------- | --------------------------------------- |
2101| 5400102  | Operate not permit. Return by callback. |
2102| 5400103  | IO error. Return by callback.           |
2103| 5400105  | Service died. Return by callback.       |
2104
2105**示例:**
2106
2107```js
2108avRecorder.resume((err) => {
2109    if (err == null) {
2110        console.info('resume AVRecorder success');
2111    } else {
2112        console.info('resume AVRecorder failed and error is ' + err.message);
2113    }
2114});
2115```
2116
2117### resume<sup>9+</sup>
2118
2119resume(): Promise\<void>
2120
2121异步方式恢复视频录制。通过Promise获取返回值。
2122
2123需要在pause()事件成功触发后,才能调用resume方法。
2124
2125**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2126
2127**返回值:**
2128
2129| 类型           | 说明                                  |
2130| -------------- | ------------------------------------- |
2131| Promise\<void> | 异步恢复视频录制方法的Promise返回值。 |
2132
2133**错误码:**
2134
2135以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
2136
2137| 错误码ID | 错误信息                               |
2138| -------- | -------------------------------------- |
2139| 5400102  | Operate not permit. Return by promise. |
2140| 5400103  | IO error. Return by promise.           |
2141| 5400105  | Service died. Return by promise.       |
2142
2143**示例:**
2144
2145```js
2146avRecorder.resume().then(() => {
2147    console.info('resume AVRecorder success');
2148}).catch((err) => {
2149    console.info('resume AVRecorder failed and catch error is ' + err.message);
2150});
2151```
2152
2153### stop<sup>9+</sup><a name=avrecorder_stop></a>
2154
2155stop(callback: AsyncCallback\<void>): void
2156
2157异步方式停止视频录制。通过注册回调函数获取返回值。
2158
2159需要在start()或pause()事件成功触发后,才能调用stop方法。
2160
2161纯音频录制时,需要重新调用prepare()接口才能重新录制。纯视频录制,音视频录制时,需要重新调用prepare()和getInputSurface()接口才能重新录制。
2162
2163**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2164
2165**参数:**
2166
2167| 参数名   | 类型                 | 必填 | 说明                         |
2168| -------- | -------------------- | ---- | ---------------------------- |
2169| callback | AsyncCallback\<void> | 是   | 异步停止视频录制的回调方法。 |
2170
2171**错误码:**
2172
2173以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
2174
2175| 错误码ID | 错误信息                                |
2176| -------- | --------------------------------------- |
2177| 5400102  | Operate not permit. Return by callback. |
2178| 5400103  | IO error. Return by callback.           |
2179| 5400105  | Service died. Return by callback.       |
2180
2181**示例:**
2182
2183```js
2184avRecorder.stop((err) => {
2185    if (err == null) {
2186        console.info('stop AVRecorder success');
2187    } else {
2188        console.info('stop AVRecorder failed and error is ' + err.message);
2189    }
2190});
2191```
2192
2193### stop<sup>9+</sup>
2194
2195stop(): Promise\<void>
2196
2197异步方式停止视频录制。通过Promise获取返回值。
2198
2199需要在start()或pause()事件成功触发后,才能调用stop方法。
2200
2201纯音频录制时,需要重新调用prepare()接口才能重新录制。纯视频录制,音视频录制时,需要重新调用prepare()和getInputSurface()接口才能重新录制。
2202
2203**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2204
2205**返回值:**
2206
2207| 类型           | 说明                                  |
2208| -------------- | ------------------------------------- |
2209| Promise\<void> | 异步停止视频录制方法的Promise返回值。 |
2210
2211**错误码:**
2212
2213以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
2214
2215| 错误码ID | 错误信息                               |
2216| -------- | -------------------------------------- |
2217| 5400102  | Operate not permit. Return by promise. |
2218| 5400103  | IO error. Return by promise.           |
2219| 5400105  | Service died. Return by promise.       |
2220
2221**示例:**
2222
2223```js
2224avRecorder.stop().then(() => {
2225    console.info('stop AVRecorder success');
2226}).catch((err) => {
2227    console.info('stop AVRecorder failed and catch error is ' + err.message);
2228});
2229```
2230
2231### reset<sup>9+</sup><a name=avrecorder_reset></a>
2232
2233reset(callback: AsyncCallback\<void>): void
2234
2235异步方式重置音视频录制。通过注册回调函数获取返回值。
2236
2237纯音频录制时,需要重新调用prepare()接口才能重新录制。纯视频录制,音视频录制时,需要重新调用prepare()和getInputSurface()接口才能重新录制。
2238
2239**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2240
2241**参数:**
2242
2243| 参数名   | 类型                 | 必填 | 说明                           |
2244| -------- | -------------------- | ---- | ------------------------------ |
2245| callback | AsyncCallback\<void> | 是   | 异步重置音视频录制的回调方法。 |
2246
2247**错误码:**
2248
2249以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
2250
2251| 错误码ID | 错误信息                          |
2252| -------- | --------------------------------- |
2253| 5400103  | IO error. Return by callback.     |
2254| 5400105  | Service died. Return by callback. |
2255
2256**示例:**
2257
2258```js
2259avRecorder.reset((err) => {
2260    if (err == null) {
2261        console.info('reset AVRecorder success');
2262    } else {
2263        console.info('reset AVRecorder failed and error is ' + err.message);
2264    }
2265});
2266```
2267
2268### reset<sup>9+</sup>
2269
2270reset(): Promise\<void>
2271
2272异步方式重置音视频录制。通过Promise获取返回值。
2273
2274纯音频录制时,需要重新调用prepare()接口才能重新录制。纯视频录制,音视频录制时,需要重新调用prepare()和getInputSurface()接口才能重新录制。
2275
2276**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2277
2278**返回值:**
2279
2280| 类型           | 说明                                    |
2281| -------------- | --------------------------------------- |
2282| Promise\<void> | 异步重置音视频录制方法的Promise返回值。 |
2283
2284**错误码:**
2285
2286以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
2287
2288| 错误码ID | 错误信息                         |
2289| -------- | -------------------------------- |
2290| 5400103  | IO error. Return by promise.     |
2291| 5400105  | Service died. Return by promise. |
2292
2293**示例:**
2294
2295```js
2296avRecorder.reset().then(() => {
2297    console.info('reset AVRecorder success');
2298}).catch((err) => {
2299    console.info('reset AVRecorder failed and catch error is ' + err.message);
2300});
2301```
2302
2303### release<sup>9+</sup><a name=avrecorder_release></a>
2304
2305release(callback: AsyncCallback\<void>): void
2306
2307异步方式释放音视频录制资源。通过注册回调函数获取返回值。
2308
2309释放音视频录制资源之后,该AVRecorder实例不能再进行任何操作。
2310
2311**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2312
2313**参数:**
2314
2315| 参数名   | 类型                 | 必填 | 说明                               |
2316| -------- | -------------------- | ---- | ---------------------------------- |
2317| callback | AsyncCallback\<void> | 是   | 异步释放音视频录制资源的回调方法。 |
2318
2319**错误码:**
2320
2321以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
2322
2323| 错误码ID | 错误信息                          |
2324| -------- | --------------------------------- |
2325| 5400105  | Service died. Return by callback. |
2326
2327**示例:**
2328
2329```js
2330avRecorder.release((err) => {
2331    if (err == null) {
2332        console.info('release AVRecorder success');
2333    } else {
2334        console.info('release AVRecorder failed and error is ' + err.message);
2335    }
2336});
2337```
2338
2339### release<sup>9+</sup>
2340
2341release(): Promise\<void>
2342
2343异步方式释放音视频录制资源。通过Promise获取返回值。
2344
2345释放音视频录制资源之后,该AVRecorder实例不能再进行任何操作。
2346
2347**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2348
2349**返回值:**
2350
2351| 类型           | 说明                                        |
2352| -------------- | ------------------------------------------- |
2353| Promise\<void> | 异步释放音视频录制资源方法的Promise返回值。 |
2354
2355**错误码:**
2356
2357以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
2358
2359| 错误码ID | 错误信息                          |
2360| -------- | --------------------------------- |
2361| 5400105  | Service died. Return by callback. |
2362
2363**示例:**
2364
2365```js
2366avRecorder.release().then(() => {
2367    console.info('release AVRecorder success');
2368}).catch((err) => {
2369    console.info('release AVRecorder failed and catch error is ' + err.message);
2370});
2371```
2372
2373### on('stateChange')<sup>9+</sup><a name=avrecorder_onstatechange></a>
2374
2375on(type: 'stateChange', callback: (state: AVRecorderState, reason: StateChangeReason) => void): void
2376
2377订阅录制状态机AVRecorderState切换的事件,当 AVRecorderState状态机发生变化时,会通过订阅的回调方法通知用户。用户只能订阅一个状态机切换事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
2378
2379**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2380
2381**参数:**
2382
2383| 参数名   | 类型     | 必填 | 说明                                                         |
2384| -------- | -------- | ---- | ------------------------------------------------------------ |
2385| type     | string   | 是   | 状态机切换事件回调类型,支持的事件:'stateChange',用户操作和系统都会触发此事件。 |
2386| callback | function | 是   | 状态机切换事件回调方法:<br>state: [AVRecorderState](#avrecorderstate9),表示当前播放状态 ;<br>reason: [StateChangeReason](#statechangereason9),表示当前播放状态的切换原因。 |
2387
2388**示例:**
2389
2390```js
2391avRecorder.on('stateChange', async (state, reason) => {
2392    console.info('case state has changed, new state is :' + state + ',and new reason is : ' + reason);
2393});
2394```
2395
2396### off('stateChange')<sup>9+</sup>
2397
2398off(type: 'stateChange'): void
2399
2400取消订阅播放状态机[AVRecorderState](#avrecorderstate9)切换的事件。
2401
2402**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2403
2404**参数:**
2405
2406| 参数名 | 类型   | 必填 | 说明                                                         |
2407| ------ | ------ | ---- | ------------------------------------------------------------ |
2408| type   | string | 是   | 状态机切换事件回调类型,支持的事件:'stateChange',用户操作和系统都会触发此事件。 |
2409
2410**示例:**
2411
2412```js
2413avRecorder.off('stateChange');
2414```
2415
2416### on('error')<sup>9+</sup><a name=avrecorder_onerror></a>
2417
2418on(type: 'error', callback: ErrorCallback): void
2419
2420订阅AVRecorder的错误事件,该事件仅用于错误提示,不需要用户停止播控动作。如果此时[AVRecorderState](#avrecorderstate9)也切至error状态,用户需要通过reset()或者release()退出录制操作。
2421
2422用户只能订阅一个错误事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
2423
2424**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2425
2426**参数:**
2427
2428| 参数名   | 类型          | 必填 | 说明                                                         |
2429| -------- | ------------- | ---- | ------------------------------------------------------------ |
2430| type     | string        | 是   | 录制错误事件回调类型'error'。 <br>- 'error':录制过程中发生错误,触发该事件。 |
2431| callback | ErrorCallback | 是   | 录制错误事件回调方法。                                       |
2432
2433**错误码:**
2434
2435以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
2436
2437| 错误码ID | 错误信息                          |
2438| -------- | --------------------------------- |
2439| 5400103  | IO error. Return by callback.     |
2440| 5400105  | Service died. Return by callback. |
2441
2442**示例:**
2443
2444```js
2445avRecorder.on('error', (err) => {
2446    console.info('case avRecorder.on(error) called, errMessage is ' + err.message);
2447});
2448```
2449
2450### off('error')<sup>9+</sup>
2451
2452off(type: 'error'): void
2453
2454取消订阅录制错误事件,取消后不再接收到AVRecorder的错误事件。
2455
2456**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2457
2458**参数:**
2459
2460| 参数名 | 类型   | 必填 | 说明                                                         |
2461| ------ | ------ | ---- | ------------------------------------------------------------ |
2462| type   | string | 是   | 录制错误事件回调类型'error'。 <br>- 'error':录制过程中发生错误,触发该事件。 |
2463
2464**错误码:**
2465
2466以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。
2467
2468| 错误码ID | 错误信息                          |
2469| -------- | --------------------------------- |
2470| 5400103  | IO error. Return by callback.     |
2471| 5400105  | Service died. Return by callback. |
2472
2473**示例:**
2474
2475```js
2476avRecorder.off('error');
2477```
2478
2479## AVRecorderState<sup>9+</sup>
2480
2481音视频录制的状态机。可通过state属性获取当前状态。
2482
2483**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2484
2485| 名称     | 类型   | 说明                                                         |
2486| -------- | ------ | ------------------------------------------------------------ |
2487| idle     | string | 闲置状态。此时可以调用[prepare()](#avrecorder_prepare)方法设置录制参数,进入prepared状态。AVRecorder刚被创建,或者在任何非released状态下调用[reset()](#avrecorder_reset)方法,均进入idle状态。 |
2488| prepared | string | 参数设置完成。此时可以调用[start()](#avrecorder_start)方法开始录制,进入started状态。 |
2489| started  | string | 正在录制。此时可以调用[pause()](#avrecorder_pause)方法暂停录制,进入paused状态。也可以调用[stop()](#avrecorder_stop)方法结束录制,进入stopped状态。 |
2490| paused   | string | 录制暂停。此时可以调用[resume()](#avrecorder_resume)方法继续录制,进入started状态。也可以调用[stop()](#avrecorder_stop)方法结束录制,进入stopped状态。 |
2491| stopped  | string | 录制停止。此时可以调用[prepare()](#avrecorder_prepare)方法设置录制参数,重新进入prepared状态。 |
2492| released | string | 录制资源释放。此时不能再进行任何操作。在任何其他状态下,均可以通过调用[release()](#avrecorder_release)方法进入released状态。 |
2493| error    | string | 错误状态。当AVRecorder实例发生不可逆错误,会转换至当前状态。切换至error状态时会伴随[on('error')事件](#avrecorder_onerror),该事件会上报详细错误原因。在error状态时,用户需要调用[reset()](#avrecorder_reset)方法重置AVRecorder实例,或者调用[release()](#avrecorder_release)方法释放资源。 |
2494
2495## AVRecorderConfig<sup>9+</sup>
2496
2497表示音视频录制的参数设置。
2498
2499**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2500
2501| 名称            | 类型                                     | 必填 | 说明                                                         |
2502| --------------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
2503| audioSourceType | [AudioSourceType](#audiosourcetype9)     | 否   | 选择录制的音频源类型。选择音频录制时必填。                   |
2504| videoSourceType | [VideoSourceType](#videosourcetype9)     | 否   | 选择录制的视频源类型。选择视频录制时必填。                   |
2505| profile         | [AVRecorderProfile](#avrecorderprofile9) | 是   | 录制的profile,必要参数。                                    |
2506| url             | string                                   | 是   | 录制输出URL:fd://xx (fd number) ![img](figures/zh-cn_image_url.png),必要参数。 |
2507| rotation        | number                                   | 否   | 录制的视频旋转角度,仅支持0,90,180,270。                  |
2508| location        | [Location](#location)                    | 否   | 录制的地理位置。                                             |
2509
2510通过audioSourceType和videoSourceType区分纯音频录制、纯视频录制或音视频录制。纯音频录制时,仅需要设置audioSourceType;纯视频录制时,仅需要设置videoSourceType;音视频录制时,audioSourceType和videoSourceType均需要设置。
2511
2512## AVRecorderProfile<sup>9+</sup>
2513
2514音视频录制的配置文件。
2515
2516**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2517
2518| 名称             | 类型                                         | 必填 | 说明                                                         |
2519| ---------------- | -------------------------------------------- | ---- | ------------------------------------------------------------ |
2520| audioBitrate     | number                                       | 否   | 音频编码比特率,选择音频录制时必填。                         |
2521| audioChannels    | number                                       | 否   | 音频采集声道数,选择音频录制时必填。                         |
2522| audioCodec       | [CodecMimeType](#codecmimetype8)             | 否   | 音频编码格式,选择音频录制时必填。当前仅支持AUDIO_AAC。      |
2523| audioSampleRate  | number                                       | 否   | 音频采样率,选择音频录制时必填。                             |
2524| fileFormat       | [ContainerFormatType](#containerformattype8) | 是   | 文件的容器格式,必要参数。                                   |
2525| videoBitrate     | number                                       | 否   | 视频编码比特率,选择视频录制时必填。                         |
2526| videoCodec       | [CodecMimeType](#codecmimetype8)             | 否   | 视频编码格式,选择视频录制时必填。需要查询设备支持的编码能力(包括编码格式,分辨率大小等)。 |
2527| videoFrameWidth  | number                                       | 否   | 视频帧的宽,选择视频录制时必填。                             |
2528| videoFrameHeight | number                                       | 否   | 视频帧的高,选择视频录制时必填。                             |
2529| videoFrameRate   | number                                       | 否   | 视频帧率,选择视频录制时必填。                               |
2530
2531## AudioSourceType<sup>9+</sup>
2532
2533表示视频录制中音频源类型的枚举。
2534
2535**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2536
2537| 名称                      | 值   | 说明                   |
2538| ------------------------- | ---- | ---------------------- |
2539| AUDIO_SOURCE_TYPE_DEFAULT | 0    | 默认的音频输入源类型。 |
2540| AUDIO_SOURCE_TYPE_MIC     | 1    | 表示MIC的音频输入源。  |
2541
2542## VideoSourceType<sup>9+</sup>
2543
2544表示视频录制中视频源类型的枚举。
2545
2546**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
2547
2548| 名称                          | 值   | 说明                            |
2549| ----------------------------- | ---- | ------------------------------- |
2550| VIDEO_SOURCE_TYPE_SURFACE_YUV | 0    | 输入surface中携带的是raw data。 |
2551| VIDEO_SOURCE_TYPE_SURFACE_ES  | 1    | 输入surface中携带的是ES data。  |
2552
2553## ContainerFormatType<sup>8+</sup>
2554
2555表示容器格式类型的枚举,缩写为CFT。
2556
2557**系统能力:** SystemCapability.Multimedia.Media.Core
2558
2559| 名称        | 值    | 说明                  |
2560| ----------- | ----- | --------------------- |
2561| CFT_MPEG_4  | 'mp4' | 视频的容器格式,MP4。 |
2562| CFT_MPEG_4A | 'm4a' | 音频的容器格式,M4A。 |
2563
2564## Location
2565
2566视频录制的地理位置。
2567
2568**系统能力:** SystemCapability.Multimedia.Media.Core
2569
2570| 名称      | 类型   | 必填 | 说明             |
2571| --------- | ------ | ---- | ---------------- |
2572| latitude  | number | 是   | 地理位置的纬度。 |
2573| longitude | number | 是   | 地理位置的经度。 |
2574
2575## VideoRecorder<sup>9+</sup>
2576
2577> **说明:**
2578> AVRecorder<sup>9+</sup>发布后停止维护,建议使用[AVRecorder](#avrecorder9)替代。
2579
2580视频录制管理类,用于录制视频媒体。在调用VideoRecorder的方法前,需要先通过[createVideoRecorder()](#mediacreatevideorecorder9)构建一个[VideoRecorder](#videorecorder9)实例。
2581
2582视频录制demo可参考:[视频录制开发指导](../../media/video-recorder.md)
2583
2584### 属性
2585
2586**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
2587
2588**系统接口:** 该接口为系统接口
2589
2590| 名称               | 类型                                   | 可读 | 可写 | 说明             |
2591| ------------------ | -------------------------------------- | ---- | ---- | ---------------- |
2592| state<sup>9+</sup> | [VideoRecordState](#videorecordstate9) | 是   | 否   | 视频录制的状态。 |
2593
2594### prepare<sup>9+</sup><a name=videorecorder_prepare1></a>
2595
2596prepare(config: VideoRecorderConfig, callback: AsyncCallback\<void>): void;
2597
2598异步方式进行视频录制的参数设置。通过注册回调函数获取返回值。
2599
2600**需要权限:** ohos.permission.MICROPHONE
2601
2602**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
2603
2604**系统接口:** 该接口为系统接口
2605
2606**参数:**
2607
2608| 参数名   | 类型                                         | 必填 | 说明                                |
2609| -------- | -------------------------------------------- | ---- | ----------------------------------- |
2610| config   | [VideoRecorderConfig](#videorecorderconfig9) | 是   | 配置视频录制的相关参数。            |
2611| callback | AsyncCallback\<void>                         | 是   | 异步视频录制prepare方法的回调方法。 |
2612
2613**错误码:**
2614
2615以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
2616
2617| 错误码ID | 错误信息                                   |
2618| -------- | ------------------------------------------ |
2619| 201      | Permission denied. Return by callback.     |
2620| 401      | Parameter error. Return by callback.       |
2621| 5400102  | Operation not allowed. Return by callback. |
2622| 5400105  | Service died. Return by callback.          |
2623
2624**示例:**
2625
2626```js
2627// 配置参数以实际硬件设备支持的范围为准
2628let videoProfile = {
2629    audioBitrate : 48000,
2630    audioChannels : 2,
2631    audioCodec : 'audio/mp4a-latm',
2632    audioSampleRate : 48000,
2633    fileFormat : 'mp4',
2634    videoBitrate : 2000000,
2635    videoCodec : 'video/avc',
2636    videoFrameWidth : 640,
2637    videoFrameHeight : 480,
2638    videoFrameRate : 30
2639}
2640
2641let videoConfig = {
2642    audioSourceType : 1,
2643    videoSourceType : 0,
2644    profile : videoProfile,
2645    url : 'fd://xx',   // 文件需先由调用者创建,并给予适当的权限
2646    orientationHint : 0,
2647    location : { latitude : 30, longitude : 130 },
2648}
2649
2650// asyncallback
2651videoRecorder.prepare(videoConfig, (err) => {
2652    if (err == null) {
2653        console.info('prepare success');
2654    } else {
2655        console.info('prepare failed and error is ' + err.message);
2656    }
2657})
2658```
2659
2660### prepare<sup>9+</sup><a name=videorecorder_prepare2></a>
2661
2662prepare(config: VideoRecorderConfig): Promise\<void>;
2663
2664异步方式进行视频录制的参数设置。通过Promise获取返回值。
2665
2666**需要权限:** ohos.permission.MICROPHONE
2667
2668**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
2669
2670**系统接口:** 该接口为系统接口
2671
2672**参数:**
2673
2674| 参数名 | 类型                                         | 必填 | 说明                     |
2675| ------ | -------------------------------------------- | ---- | ------------------------ |
2676| config | [VideoRecorderConfig](#videorecorderconfig9) | 是   | 配置视频录制的相关参数。 |
2677
2678**返回值:**
2679
2680| 类型           | 说明                                     |
2681| -------------- | ---------------------------------------- |
2682| Promise\<void> | 异步视频录制prepare方法的Promise返回值。 |
2683
2684**错误码:**
2685
2686以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
2687
2688| 错误码ID | 错误信息                                  |
2689| -------- | ----------------------------------------- |
2690| 201      | Permission denied. Return by promise.     |
2691| 401      | Parameter error. Return by promise.       |
2692| 5400102  | Operation not allowed. Return by promise. |
2693| 5400105  | Service died. Return by promise.          |
2694
2695**示例:**
2696
2697```js
2698// 配置参数以实际硬件设备支持的范围为准
2699let videoProfile = {
2700    audioBitrate : 48000,
2701    audioChannels : 2,
2702    audioCodec : 'audio/mp4a-latm',
2703    audioSampleRate : 48000,
2704    fileFormat : 'mp4',
2705    videoBitrate : 2000000,
2706    videoCodec : 'video/avc',
2707    videoFrameWidth : 640,
2708    videoFrameHeight : 480,
2709    videoFrameRate : 30
2710}
2711
2712let videoConfig = {
2713    audioSourceType : 1,
2714    videoSourceType : 0,
2715    profile : videoProfile,
2716    url : 'fd://xx',   // 文件需先由调用者创建,并给予适当的权限
2717    orientationHint : 0,
2718    location : { latitude : 30, longitude : 130 },
2719}
2720
2721// promise
2722videoRecorder.prepare(videoConfig).then(() => {
2723    console.info('prepare success');
2724}).catch((err) => {
2725    console.info('prepare failed and catch error is ' + err.message);
2726});
2727```
2728
2729### getInputSurface<sup>9+</sup>
2730
2731getInputSurface(callback: AsyncCallback\<string>): void;
2732
2733异步方式获得录制需要的surface。此surface提供给调用者,调用者从此surface中获取surfaceBuffer,填入相应的数据。
2734
2735应当注意,填入的视频数据需要携带时间戳(单位ns),buffersize。时间戳的起始时间请以系统启动时间为基准。
2736
2737只能在[prepare()](#videorecorder_prepare1)接口调用后调用。
2738
2739**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
2740
2741**系统接口:** 该接口为系统接口
2742
2743**参数:**
2744
2745| 参数名   | 类型                   | 必填 | 说明                        |
2746| -------- | ---------------------- | ---- | --------------------------- |
2747| callback | AsyncCallback\<string> | 是   | 异步获得surface的回调方法。 |
2748
2749**错误码:**
2750
2751以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
2752
2753| 错误码ID | 错误信息                                   |
2754| -------- | ------------------------------------------ |
2755| 5400102  | Operation not allowed. Return by callback. |
2756| 5400103  | I/O error. Return by callback.             |
2757| 5400105  | Service died. Return by callback.          |
2758
2759**示例:**
2760
2761```js
2762// asyncallback
2763let surfaceID = null;                                               // 传递给外界的surfaceID
2764videoRecorder.getInputSurface((err, surfaceId) => {
2765    if (err == null) {
2766        console.info('getInputSurface success');
2767        surfaceID = surfaceId;
2768    } else {
2769        console.info('getInputSurface failed and error is ' + err.message);
2770    }
2771});
2772```
2773
2774### getInputSurface<sup>9+</sup>
2775
2776getInputSurface(): Promise\<string>;
2777
2778 异步方式获得录制需要的surface。此surface提供给调用者,调用者从此surface中获取surfaceBuffer,填入相应的数据。
2779
2780应当注意,填入的视频数据需要携带时间戳(单位ns),buffersize。时间戳的起始时间请以系统启动时间为基准。
2781
2782只能在[prepare()](#videorecorder_prepare1)接口调用后调用。
2783
2784**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
2785
2786**系统接口:** 该接口为系统接口
2787
2788**返回值:**
2789
2790| 类型             | 说明                             |
2791| ---------------- | -------------------------------- |
2792| Promise\<string> | 异步获得surface的Promise返回值。 |
2793
2794**错误码:**
2795
2796以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
2797
2798| 错误码ID | 错误信息                                  |
2799| -------- | ----------------------------------------- |
2800| 5400102  | Operation not allowed. Return by promise. |
2801| 5400103  | I/O error. Return by promise.             |
2802| 5400105  | Service died. Return by promise.          |
2803
2804**示例:**
2805
2806```js
2807// promise
2808let surfaceID = null;                                               // 传递给外界的surfaceID
2809videoRecorder.getInputSurface().then((surfaceId) => {
2810    console.info('getInputSurface success');
2811    surfaceID = surfaceId;
2812}).catch((err) => {
2813    console.info('getInputSurface failed and catch error is ' + err.message);
2814});
2815```
2816
2817### start<sup>9+</sup><a name=videorecorder_start1></a>
2818
2819start(callback: AsyncCallback\<void>): void;
2820
2821异步方式开始视频录制。通过注册回调函数获取返回值。
2822
2823在[prepare()](#videorecorder_prepare1)和[getInputSurface()](#getinputsurface9)后调用,需要依赖数据源先给surface传递数据。
2824
2825**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
2826
2827**系统接口:** 该接口为系统接口
2828
2829**参数:**
2830
2831| 参数名   | 类型                 | 必填 | 说明                         |
2832| -------- | -------------------- | ---- | ---------------------------- |
2833| callback | AsyncCallback\<void> | 是   | 异步开始视频录制的回调方法。 |
2834
2835**错误码:**
2836
2837以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
2838
2839| 错误码ID | 错误信息                                   |
2840| -------- | ------------------------------------------ |
2841| 5400102  | Operation not allowed. Return by callback. |
2842| 5400103  | I/O error. Return by callback.             |
2843| 5400105  | Service died. Return by callback.          |
2844
2845**示例:**
2846
2847```js
2848// asyncallback
2849videoRecorder.start((err) => {
2850    if (err == null) {
2851        console.info('start videorecorder success');
2852    } else {
2853        console.info('start videorecorder failed and error is ' + err.message);
2854    }
2855});
2856```
2857
2858### start<sup>9+</sup><a name=videorecorder_start2></a>
2859
2860start(): Promise\<void>;
2861
2862异步方式开始视频录制。通过Promise获取返回值。
2863
2864在[prepare()](#videorecorder_prepare1)和[getInputSurface()](#getinputsurface9)后调用,需要依赖数据源先给surface传递数据。
2865
2866**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
2867
2868**系统接口:** 该接口为系统接口
2869
2870**返回值:**
2871
2872| 类型           | 说明                                  |
2873| -------------- | ------------------------------------- |
2874| Promise\<void> | 异步开始视频录制方法的Promise返回值。 |
2875
2876**错误码:**
2877
2878以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
2879
2880| 错误码ID | 错误信息                                  |
2881| -------- | ----------------------------------------- |
2882| 5400102  | Operation not allowed. Return by promise. |
2883| 5400103  | I/O error. Return by promise.             |
2884| 5400105  | Service died. Return by promise.          |
2885
2886**示例:**
2887
2888```js
2889// promise
2890videoRecorder.start().then(() => {
2891    console.info('start videorecorder success');
2892}).catch((err) => {
2893    console.info('start videorecorder failed and catch error is ' + err.message);
2894});
2895```
2896
2897### pause<sup>9+</sup><a name=videorecorder_pause1></a>
2898
2899pause(callback: AsyncCallback\<void>): void;
2900
2901异步方式暂停视频录制。通过注册回调函数获取返回值。
2902
2903在[start()](#videorecorder_start1)后调用。可以通过调用[resume()](#videorecorder_resume1)接口来恢复录制。
2904
2905**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
2906
2907**系统接口:** 该接口为系统接口
2908
2909**参数:**
2910
2911| 参数名   | 类型                 | 必填 | 说明                         |
2912| -------- | -------------------- | ---- | ---------------------------- |
2913| callback | AsyncCallback\<void> | 是   | 异步暂停视频录制的回调方法。 |
2914
2915**错误码:**
2916
2917以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
2918
2919| 错误码ID | 错误信息                                   |
2920| -------- | ------------------------------------------ |
2921| 5400102  | Operation not allowed. Return by callback. |
2922| 5400103  | I/O error. Return by callback.             |
2923| 5400105  | Service died. Return by callback.          |
2924
2925**示例:**
2926
2927```js
2928// asyncallback
2929videoRecorder.pause((err) => {
2930    if (err == null) {
2931        console.info('pause videorecorder success');
2932    } else {
2933        console.info('pause videorecorder failed and error is ' + err.message);
2934    }
2935});
2936```
2937
2938### pause<sup>9+</sup><a name=videorecorder_pause2></a>
2939
2940pause(): Promise\<void>;
2941
2942异步方式暂停视频录制。通过Promise获取返回值。
2943
2944在[start()](#videorecorder_start1)后调用。可以通过调用[resume()](#videorecorder_resume1)接口来恢复录制。
2945
2946**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
2947
2948**系统接口:** 该接口为系统接口
2949
2950**返回值:**
2951
2952| 类型           | 说明                                  |
2953| -------------- | ------------------------------------- |
2954| Promise\<void> | 异步暂停视频录制方法的Promise返回值。 |
2955
2956**错误码:**
2957
2958以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
2959
2960| 错误码ID | 错误信息                                  |
2961| -------- | ----------------------------------------- |
2962| 5400102  | Operation not allowed. Return by promise. |
2963| 5400103  | I/O error. Return by promise.             |
2964| 5400105  | Service died. Return by promise.          |
2965
2966**示例:**
2967
2968```js
2969// promise
2970videoRecorder.pause().then(() => {
2971    console.info('pause videorecorder success');
2972}).catch((err) => {
2973    console.info('pause videorecorder failed and catch error is ' + err.message);
2974});
2975```
2976
2977### resume<sup>9+</sup><a name=videorecorder_resume1></a>
2978
2979resume(callback: AsyncCallback\<void>): void;
2980
2981异步方式恢复视频录制。通过注册回调函数获取返回值。
2982
2983**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
2984
2985**系统接口:** 该接口为系统接口
2986
2987**参数:**
2988
2989| 参数名   | 类型                 | 必填 | 说明                         |
2990| -------- | -------------------- | ---- | ---------------------------- |
2991| callback | AsyncCallback\<void> | 是   | 异步恢复视频录制的回调方法。 |
2992
2993**错误码:**
2994
2995以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
2996
2997| 错误码ID | 错误信息                                   |
2998| -------- | ------------------------------------------ |
2999| 5400102  | Operation not allowed. Return by callback. |
3000| 5400103  | I/O error. Return by callback.             |
3001| 5400105  | Service died. Return by callback.          |
3002
3003**示例:**
3004
3005```js
3006// asyncallback
3007videoRecorder.resume((err) => {
3008    if (err == null) {
3009        console.info('resume videorecorder success');
3010    } else {
3011        console.info('resume videorecorder failed and error is ' + err.message);
3012    }
3013});
3014```
3015
3016### resume<sup>9+</sup><a name=videorecorder_resume2></a>
3017
3018resume(): Promise\<void>;
3019
3020异步方式恢复视频录制。通过Promise获取返回值。
3021
3022**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
3023
3024**系统接口:** 该接口为系统接口
3025
3026**返回值:**
3027
3028| 类型           | 说明                                  |
3029| -------------- | ------------------------------------- |
3030| Promise\<void> | 异步恢复视频录制方法的Promise返回值。 |
3031
3032**错误码:**
3033
3034以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
3035
3036| 错误码ID | 错误信息                                  |
3037| -------- | ----------------------------------------- |
3038| 5400102  | Operation not allowed. Return by promise. |
3039| 5400103  | I/O error. Return by promise.             |
3040| 5400105  | Service died. Return by promise.          |
3041
3042**示例:**
3043
3044```js
3045// promise
3046videoRecorder.resume().then(() => {
3047    console.info('resume videorecorder success');
3048}).catch((err) => {
3049    console.info('resume videorecorder failed and catch error is ' + err.message);
3050});
3051```
3052
3053### stop<sup>9+</sup><a name=videorecorder_stop1></a>
3054
3055stop(callback: AsyncCallback\<void>): void;
3056
3057异步方式停止视频录制。通过注册回调函数获取返回值。
3058
3059需要重新调用[prepare()](#videorecorder_prepare1)和[getInputSurface()](#getinputsurface9)接口才能重新录制。
3060
3061**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
3062
3063**系统接口:** 该接口为系统接口
3064
3065**参数:**
3066
3067| 参数名   | 类型                 | 必填 | 说明                         |
3068| -------- | -------------------- | ---- | ---------------------------- |
3069| callback | AsyncCallback\<void> | 是   | 异步停止视频录制的回调方法。 |
3070
3071**错误码:**
3072
3073以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
3074
3075| 错误码ID | 错误信息                                   |
3076| -------- | ------------------------------------------ |
3077| 5400102  | Operation not allowed. Return by callback. |
3078| 5400103  | I/O error. Return by callback.             |
3079| 5400105  | Service died. Return by callback.          |
3080
3081**示例:**
3082
3083```js
3084// asyncallback
3085videoRecorder.stop((err) => {
3086    if (err == null) {
3087        console.info('stop videorecorder success');
3088    } else {
3089        console.info('stop videorecorder failed and error is ' + err.message);
3090    }
3091});
3092```
3093
3094### stop<sup>9+</sup><a name=videorecorder_stop2></a>
3095
3096stop(): Promise\<void>;
3097
3098异步方式停止视频录制。通过Promise获取返回值。
3099
3100需要重新调用[prepare()](#videorecorder_prepare1)和[getInputSurface()](#getinputsurface9)接口才能重新录制。
3101
3102**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
3103
3104**系统接口:** 该接口为系统接口
3105
3106**返回值:**
3107
3108| 类型           | 说明                                  |
3109| -------------- | ------------------------------------- |
3110| Promise\<void> | 异步停止视频录制方法的Promise返回值。 |
3111
3112**错误码:**
3113
3114以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
3115
3116| 错误码ID | 错误信息                                  |
3117| -------- | ----------------------------------------- |
3118| 5400102  | Operation not allowed. Return by promise. |
3119| 5400103  | I/O error. Return by promise.             |
3120| 5400105  | Service died. Return by promise.          |
3121
3122**示例:**
3123
3124```js
3125// promise
3126videoRecorder.stop().then(() => {
3127    console.info('stop videorecorder success');
3128}).catch((err) => {
3129    console.info('stop videorecorder failed and catch error is ' + err.message);
3130});
3131```
3132
3133### release<sup>9+</sup><a name=videorecorder_release1></a>
3134
3135release(callback: AsyncCallback\<void>): void;
3136
3137异步方式释放视频录制资源。通过注册回调函数获取返回值。
3138
3139**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
3140
3141**系统接口:** 该接口为系统接口
3142
3143**参数:**
3144
3145| 参数名   | 类型                 | 必填 | 说明                             |
3146| -------- | -------------------- | ---- | -------------------------------- |
3147| callback | AsyncCallback\<void> | 是   | 异步释放视频录制资源的回调方法。 |
3148
3149**错误码:**
3150
3151以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
3152
3153| 错误码ID | 错误信息                          |
3154| -------- | --------------------------------- |
3155| 5400105  | Service died. Return by callback. |
3156
3157**示例:**
3158
3159```js
3160// asyncallback
3161videoRecorder.release((err) => {
3162    if (err == null) {
3163        console.info('release videorecorder success');
3164    } else {
3165        console.info('release videorecorder failed and error is ' + err.message);
3166    }
3167});
3168```
3169
3170### release<sup>9+</sup><a name=videorecorder_release2></a>
3171
3172release(): Promise\<void>;
3173
3174异步方式释放视频录制资源。通过Promise获取返回值。
3175
3176**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
3177
3178**系统接口:** 该接口为系统接口
3179
3180**返回值:**
3181
3182| 类型           | 说明                                      |
3183| -------------- | ----------------------------------------- |
3184| Promise\<void> | 异步释放视频录制资源方法的Promise返回值。 |
3185
3186**错误码:**
3187
3188以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
3189
3190| 错误码ID | 错误信息                          |
3191| -------- | --------------------------------- |
3192| 5400105  | Service died. Return by callback. |
3193
3194**示例:**
3195
3196```js
3197// promise
3198videoRecorder.release().then(() => {
3199    console.info('release videorecorder success');
3200}).catch((err) => {
3201    console.info('release videorecorder failed and catch error is ' + err.message);
3202});
3203```
3204
3205### reset<sup>9+</sup><a name=videorecorder_reset1></a>
3206
3207reset(callback: AsyncCallback\<void>): void;
3208
3209异步方式重置视频录制。通过注册回调函数获取返回值。
3210
3211需要重新调用[prepare()](#videorecorder_prepare1)和[getInputSurface()](#getinputsurface9)接口才能重新录制。
3212
3213**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
3214
3215**系统接口:** 该接口为系统接口
3216
3217**参数:**
3218
3219| 参数名   | 类型                 | 必填 | 说明                         |
3220| -------- | -------------------- | ---- | ---------------------------- |
3221| callback | AsyncCallback\<void> | 是   | 异步重置视频录制的回调方法。 |
3222
3223**错误码:**
3224
3225以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
3226
3227| 错误码ID | 错误信息                          |
3228| -------- | --------------------------------- |
3229| 5400103  | I/O error. Return by callback.    |
3230| 5400105  | Service died. Return by callback. |
3231
3232**示例:**
3233
3234```js
3235// asyncallback
3236videoRecorder.reset((err) => {
3237    if (err == null) {
3238        console.info('reset videorecorder success');
3239    } else {
3240        console.info('reset videorecorder failed and error is ' + err.message);
3241    }
3242});
3243```
3244
3245### reset<sup>9+</sup><a name=videorecorder_reset2></a>
3246
3247reset(): Promise\<void>;
3248
3249异步方式重置视频录制。通过Promise获取返回值。
3250
3251需要重新调用[prepare()](#videorecorder_prepare1)和[getInputSurface()](#getinputsurface9)接口才能重新录制。
3252
3253**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
3254
3255**系统接口:** 该接口为系统接口
3256
3257**返回值:**
3258
3259| 类型           | 说明                                  |
3260| -------------- | ------------------------------------- |
3261| Promise\<void> | 异步重置视频录制方法的Promise返回值。 |
3262
3263**错误码:**
3264
3265以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
3266
3267| 错误码ID | 错误信息                         |
3268| -------- | -------------------------------- |
3269| 5400103  | I/O error. Return by promise.    |
3270| 5400105  | Service died. Return by promise. |
3271
3272**示例:**
3273
3274```js
3275// promise
3276videoRecorder.reset().then(() => {
3277    console.info('reset videorecorder success');
3278}).catch((err) => {
3279    console.info('reset videorecorder failed and catch error is ' + err.message);
3280});
3281```
3282
3283### on('error')<sup>9+</sup>
3284
3285on(type: 'error', callback: ErrorCallback): void
3286
3287开始订阅视频录制错误事件,当上报error错误事件后,用户需处理error事件,退出录制操作。
3288
3289**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
3290
3291**参数:**
3292
3293| 参数名   | 类型          | 必填 | 说明                                                         |
3294| -------- | ------------- | ---- | ------------------------------------------------------------ |
3295| type     | string        | 是   | 录制错误事件回调类型'error'。<br/>-&nbsp;'error':视频录制过程中发生错误,触发该事件。 |
3296| callback | ErrorCallback | 是   | 录制错误事件回调方法。                                       |
3297
3298**错误码:**
3299
3300以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)
3301
3302| 错误码ID | 错误信息                          |
3303| -------- | --------------------------------- |
3304| 5400103  | I/O error. Return by callback.    |
3305| 5400105  | Service died. Return by callback. |
3306
3307**示例:**
3308
3309```js
3310// 当获取videoRecordState接口出错时通过此订阅事件上报
3311videoRecorder.on('error', (error) => {                                  // 设置'error'事件回调
3312    console.info(`audio error called, error: ${error}`);
3313})
3314```
3315
3316## VideoRecordState<sup>9+</sup>
3317
3318视频录制的状态机。可通过state属性获取当前状态。
3319
3320**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
3321
3322**系统接口:** 该接口为系统接口
3323
3324| 名称     | 类型   | 说明                   |
3325| -------- | ------ | ---------------------- |
3326| idle     | string | 视频录制空闲。         |
3327| prepared | string | 视频录制参数设置完成。 |
3328| playing  | string | 视频正在录制。         |
3329| paused   | string | 视频暂停录制。         |
3330| stopped  | string | 视频录制停止。         |
3331| error    | string | 错误状态。             |
3332
3333## VideoRecorderConfig<sup>9+</sup>
3334
3335表示视频录制的参数设置。
3336
3337**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
3338
3339**系统接口:** 该接口为系统接口
3340
3341| 名称            | 类型                                           | 必填 | 说明                                                         |
3342| --------------- | ---------------------------------------------- | ---- | ------------------------------------------------------------ |
3343| audioSourceType | [AudioSourceType](#audiosourcetype9)           | 是   | 视频录制的音频源类型。                                       |
3344| videoSourceType | [VideoSourceType](#videosourcetype9)           | 是   | 视频录制的视频源类型。                                       |
3345| profile         | [VideoRecorderProfile](#videorecorderprofile9) | 是   | 视频录制的profile。                                          |
3346| rotation        | number                                         | 否   | 录制视频的旋转角度。                                         |
3347| location        | [Location](#location)                          | 否   | 录制视频的地理位置。                                         |
3348| url             | string                   | 是   | 视频输出URL:fd://xx&nbsp;(fd&nbsp;number)<br/>![](figures/zh-cn_image_url.png) |
3349
3350## VideoRecorderProfile<sup>9+</sup>
3351
3352视频录制的配置文件。
3353
3354**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
3355
3356**系统接口:** 该接口为系统接口
3357
3358| 名称             | 类型                                         | 必填 | 说明             |
3359| ---------------- | -------------------------------------------- | ---- | ---------------- |
3360| audioBitrate     | number                                       | 是   | 音频编码比特率。 |
3361| audioChannels    | number                                       | 是   | 音频采集声道数。 |
3362| audioCodec       | [CodecMimeType](#codecmimetype8)             | 是   | 音频编码格式。   |
3363| audioSampleRate  | number                                       | 是   | 音频采样率。     |
3364| fileFormat       | [ContainerFormatType](#containerformattype8) | 是   | 文件的容器格式。 |
3365| videoBitrate     | number                                       | 是   | 视频编码比特率。 |
3366| videoCodec       | [CodecMimeType](#codecmimetype8)             | 是   | 视频编码格式。   |
3367| videoFrameWidth  | number                                       | 是   | 录制视频帧的宽。 |
3368| videoFrameHeight | number                                       | 是   | 录制视频帧的高。 |
3369| videoFrameRate   | number                                       | 是   | 录制视频帧率。   |
3370
3371## media.createAudioPlayer<sup>(deprecated)</sup><a name=createaudioplayer></a>
3372
3373createAudioPlayer(): AudioPlayer
3374
3375同步方式创建音频播放实例。
3376
3377> **说明:**
3378> 从API version 6开始支持,从API version 9开始废弃,建议使用[createAVPlayer](#mediacreateavplayer9)替代。
3379
3380**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
3381
3382**返回值:**
3383
3384| 类型                        | 说明                                                         |
3385| --------------------------- | ------------------------------------------------------------ |
3386| [AudioPlayer](#audioplayerdeprecated) | 返回AudioPlayer类实例,失败时返回null。可用于音频播放、暂停、停止等操作。 |
3387
3388**示例:**
3389
3390```js
3391let audioPlayer = media.createAudioPlayer();
3392```
3393
3394## media.createVideoPlayer<sup>(deprecated)</sup><a name=createvideoplayer></a>
3395
3396createVideoPlayer(callback: AsyncCallback\<VideoPlayer>): void
3397
3398异步方式创建视频播放实例,通过注册回调函数获取返回值。
3399
3400> **说明:**
3401> 从API version 8开始支持,从API version 9开始废弃,建议使用[createAVPlayer](#mediacreateavplayer9)替代。
3402
3403**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
3404
3405**参数:**
3406
3407| 参数名   | 类型                                       | 必填 | 说明                                                         |
3408| -------- | ------------------------------------------ | ---- | ------------------------------------------------------------ |
3409| callback | AsyncCallback<[VideoPlayer](#videoplayerdeprecated)> | 是   | 回调函数。异步返回VideoPlayer实例,失败时返回null。可用于管理和播放视频媒体。 |
3410
3411**示例:**
3412
3413```js
3414let videoPlayer
3415
3416media.createVideoPlayer((error, video) => {
3417   if (video != null) {
3418       videoPlayer = video;
3419       console.info('video createVideoPlayer success');
3420   } else {
3421       console.info(`video createVideoPlayer fail, error:${error}`);
3422   }
3423});
3424```
3425
3426## media.createVideoPlayer<sup>(deprecated)</sup>
3427
3428createVideoPlayer(): Promise\<VideoPlayer>
3429
3430异步方式创建视频播放实例,通过Promise获取返回值。
3431
3432> **说明:**
3433> 从API version 8开始支持,从API version 9开始废弃,建议使用[createAVPlayer](#mediacreateavplayer9-1)替代。
3434
3435**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
3436
3437**返回值:**
3438
3439| 类型                                 | 说明                                                         |
3440| ------------------------------------ | ------------------------------------------------------------ |
3441| Promise<[VideoPlayer](#videoplayerdeprecated)> | Promise对象。异步返回VideoPlayer实例,失败时返回null。可用于管理和播放视频媒体。 |
3442
3443**示例:**
3444
3445```js
3446let videoPlayer
3447
3448media.createVideoPlayer().then((video) => {
3449   if (video != null) {
3450       videoPlayer = video;
3451       console.info('video createVideoPlayer success');
3452   } else {
3453       console.info('video createVideoPlayer fail');
3454   }
3455}).catch((error) => {
3456   console.info(`video catchCallback, error:${error}`);
3457});
3458```
3459
3460## media.createAudioRecorder<sup>(deprecated)</sup><a name=createaudiorecorder></a>
3461
3462createAudioRecorder(): AudioRecorder
3463
3464创建音频录制的实例来控制音频的录制。
3465一台设备只允许创建一个录制实例。
3466
3467> **说明:**
3468> 从API version 8开始支持,从API version 9开始废弃,建议使用[createAVRecorder](#mediacreateavrecorder9)替代。
3469
3470**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
3471
3472**返回值:**
3473
3474| 类型                            | 说明                                                         |
3475| ------------------------------- | ------------------------------------------------------------ |
3476| [AudioRecorder](#audiorecorderdeprecated) | 返回AudioRecorder类实例,失败时返回null。可用于录制音频媒体。 |
3477
3478**示例:**
3479
3480```js
3481let audioRecorder = media.createAudioRecorder();
3482```
3483
3484## MediaErrorCode<sup>(deprecated)</sup><a name=mediaerrorcode></a>
3485
3486媒体服务错误类型枚举。
3487
3488> **说明:**
3489> 从API version 8开始支持,从API version 9开始废弃,建议使用[媒体错误码](../errorcodes/errorcode-media.md)替代。
3490
3491**系统能力:** SystemCapability.Multimedia.Media.Core
3492
3493| 名称                       | 值   | 说明                                   |
3494| -------------------------- | ---- | -------------------------------------- |
3495| MSERR_OK                   | 0    | 表示操作成功。                         |
3496| MSERR_NO_MEMORY            | 1    | 表示申请内存失败,系统可能无可用内存。 |
3497| MSERR_OPERATION_NOT_PERMIT | 2    | 表示无权限执行此操作。                 |
3498| MSERR_INVALID_VAL          | 3    | 表示传入入参无效。                     |
3499| MSERR_IO                   | 4    | 表示发生IO错误。                       |
3500| MSERR_TIMEOUT              | 5    | 表示操作超时。                         |
3501| MSERR_UNKNOWN              | 6    | 表示未知错误。                         |
3502| MSERR_SERVICE_DIED         | 7    | 表示服务端失效。                       |
3503| MSERR_INVALID_STATE        | 8    | 表示在当前状态下,不允许执行此操作。   |
3504| MSERR_UNSUPPORTED          | 9    | 表示在当前版本下,不支持此操作。       |
3505
3506## AudioPlayer<sup>(deprecated)</sup>
3507
3508> **说明:**
3509> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer](#avplayer9)替代。
3510
3511音频播放管理类,用于管理和播放音频媒体。在调用AudioPlayer的方法前,需要先通过[createAudioPlayer()](#mediacreateaudioplayerdeprecated)构建一个AudioPlayer实例。
3512
3513### 属性<a name=audioplayer_属性></a>
3514
3515**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
3516
3517| 名称                            | 类型                                                   | 可读 | 可写 | 说明                                                         |
3518| ------------------------------- | ------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
3519| src                             | string                                                 | 是   | 是   | 音频媒体URI,支持当前主流的音频格式(m4a、aac、mp3、ogg、wav)。<br>**支持路径示例**:<br>1. fd类型播放:fd://xx<br>![](figures/zh-cn_image_url.png)<br>2. http网络播放: http://xx<br/>3. https网络播放: https://xx<br/>4. hls网络播放路径:http://xx或者https://xx<br/>**需要权限:** ohos.permission.READ_MEDIAohos.permission.INTERNET。 |
3520| fdSrc<sup>9+</sup>              | [AVFileDescriptor](#avfiledescriptor9)                 | 是   | 是   | 音频媒体文件描述,使用场景:应用中的音频资源被连续存储在同一个文件中。<br/>**使用示例**:<br/>假设一个连续存储的音乐文件: <br/>音乐1(地址偏移:0,字节长度:100)<br/>音乐2(地址偏移:101,字节长度:50)<br/>音乐3(地址偏移:151,字节长度:150)<br/>1. 播放音乐1:AVFileDescriptor { fd = 资源句柄; offset = 0; length = 100; }<br/>2. 播放音乐2:AVFileDescriptor { fd = 资源句柄; offset = 101; length = 50; }<br/>3. 播放音乐3:AVFileDescriptor { fd = 资源句柄; offset = 151; length = 150; }<br/>假设是一个独立的音乐文件: 请使用src=fd://xx <br/> |
3521| loop                            | boolean                                                | 是   | 是   | 音频循环播放属性,设置为'true'表示循环播放。                 |
3522| audioInterruptMode<sup>9+</sup> | [audio.InterruptMode](js-apis-audio.md#interruptmode9) | 是   | 是   | 音频焦点模型。                                               |
3523| currentTime                     | number                                                 | 是   | 否   | 音频的当前播放位置,单位为毫秒(ms)。                       |
3524| duration                        | number                                                 | 是   | 否   | 音频时长,单位为毫秒(ms)。                                 |
3525| state                           | [AudioState](#audiostate)                              | 是   | 否   | 可以查询音频播放的状态,该状态不可作为调用play/pause/stop等状态切换的触发条件。 |
3526
3527### play<a name=audioplayer_play></a>
3528
3529play(): void
3530
3531开始播放音频资源,需在[dataLoad](#audioplayer_on)事件成功触发后,才能调用。
3532
3533**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
3534
3535**示例:**
3536
3537```js
3538audioPlayer.on('play', () => {    //设置'play'事件回调
3539    console.log('audio play success');
3540});
3541audioPlayer.play();
3542```
3543
3544### pause<a name=audioplayer_pause></a>
3545
3546pause(): void
3547
3548暂停播放音频资源。
3549
3550**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
3551
3552**示例:**
3553
3554```js
3555audioPlayer.on('pause', () => {    //设置'pause'事件回调
3556    console.log('audio pause success');
3557});
3558audioPlayer.pause();
3559```
3560
3561### stop<a name=audioplayer_stop></a>
3562
3563stop(): void
3564
3565停止播放音频资源。
3566
3567**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
3568
3569**示例:**
3570
3571```js
3572audioPlayer.on('stop', () => {    //设置'stop'事件回调
3573    console.log('audio stop success');
3574});
3575audioPlayer.stop();
3576```
3577
3578### reset<sup>7+</sup><a name=audioplayer_reset></a>
3579
3580reset(): void
3581
3582重置播放音频资源。
3583
3584**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
3585
3586**示例:**
3587
3588```js
3589audioPlayer.on('reset', () => {    //设置'reset'事件回调
3590    console.log('audio reset success');
3591});
3592audioPlayer.reset();
3593```
3594
3595### seek<a name=audioplayer_seek></a>
3596
3597seek(timeMs: number): void
3598
3599跳转到指定播放位置。
3600
3601**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
3602
3603**参数:**
3604
3605| 参数名 | 类型   | 必填 | 说明                                                        |
3606| ------ | ------ | ---- | ----------------------------------------------------------- |
3607| timeMs | number | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围[0, duration]。 |
3608
3609**示例:**
3610
3611```js
3612audioPlayer.on('timeUpdate', (seekDoneTime) => {    //设置'timeUpdate'事件回调
3613    if (seekDoneTime == null) {
3614        console.info('audio seek fail');
3615        return;
3616    }
3617    console.log('audio seek success. seekDoneTime: ' + seekDoneTime);
3618});
3619audioPlayer.seek(30000);    //seek到30000ms的位置
3620```
3621
3622### setVolume<a name=audioplayer_setvolume></a>
3623
3624setVolume(vol: number): void
3625
3626设置音量。
3627
3628**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
3629
3630**参数:**
3631
3632| 参数名 | 类型   | 必填 | 说明                                                         |
3633| ------ | ------ | ---- | ------------------------------------------------------------ |
3634| vol    | number | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
3635
3636**示例:**
3637
3638```js
3639audioPlayer.on('volumeChange', () => {    //设置'volumeChange'事件回调
3640    console.log('audio volumeChange success');
3641});
3642audioPlayer.setVolume(1);    //设置音量到100%
3643```
3644
3645### release<a name=audioplayer_release></a>
3646
3647release(): void
3648
3649释放音频资源。
3650
3651**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
3652
3653**示例:**
3654
3655```js
3656audioPlayer.release();
3657audioPlayer = undefined;
3658```
3659
3660### getTrackDescription<sup>8+</sup><a name=audioplayer_gettrackdescription1></a>
3661
3662getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void
3663
3664通过回调方式获取音频轨道信息。需在[dataLoad](#audioplayer_on)事件成功触发后,才能调用。
3665
3666**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
3667
3668**参数:**
3669
3670| 参数名   | 类型                                                         | 必填 | 说明                                       |
3671| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------ |
3672| callback | AsyncCallback\<Array\<[MediaDescription](#mediadescription8)>> | 是   | 音频轨道信息MediaDescription数组回调方法。 |
3673
3674**示例:**
3675
3676```js
3677function printfDescription(obj) {
3678    for (let item in obj) {
3679        let property = obj[item];
3680        console.info('audio key is ' + item);
3681        console.info('audio value is ' + property);
3682    }
3683}
3684
3685audioPlayer.getTrackDescription((error, arrList) => {
3686    if (arrList != null) {
3687        for (let i = 0; i < arrList.length; i++) {
3688            printfDescription(arrList[i]);
3689        }
3690    } else {
3691        console.log(`audio getTrackDescription fail, error:${error}`);
3692    }
3693});
3694```
3695
3696### getTrackDescription<sup>8+</sup><a name=audioplayer_gettrackdescription2></a>
3697
3698getTrackDescription(): Promise\<Array\<MediaDescription>>
3699
3700通过Promise方式获取音频轨道信息。需在[dataLoad](#audioplayer_on)事件成功触发后,才能调用
3701
3702**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
3703
3704**返回值:**
3705
3706| 类型                                                   | 说明                                            |
3707| ------------------------------------------------------ | ----------------------------------------------- |
3708| Promise<Array<[MediaDescription](#mediadescription8)>> | 音频轨道信息MediaDescription数组Promise返回值。 |
3709
3710**示例:**
3711
3712```js
3713function printfDescription(obj) {
3714    for (let item in obj) {
3715        let property = obj[item];
3716        console.info('audio key is ' + item);
3717        console.info('audio value is ' + property);
3718    }
3719}
3720let arrayDescription = null
3721audioPlayer.getTrackDescription().then((arrList) => {
3722    if (arrList != null) {
3723        arrayDescription = arrList;
3724    } else {
3725        console.log('audio getTrackDescription fail');
3726    }
3727}).catch((error) => {
3728   console.info(`audio catchCallback, error:${error}`);
3729});
3730
3731for (let i = 0; i < arrayDescription.length; i++) {
3732    printfDescription(arrayDescription[i]);
3733}
3734```
3735
3736### on('bufferingUpdate')<sup>8+</sup>
3737
3738on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: number) => void): void
3739
3740开始订阅音频缓存更新事件。仅网络播放支持该订阅事件。
3741
3742**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
3743
3744**参数:**
3745
3746| 参数名   | 类型     | 必填 | 说明                                                         |
3747| -------- | -------- | ---- | ------------------------------------------------------------ |
3748| type     | string   | 是   | 音频缓存事件回调类型,支持的事件:'bufferingUpdate'。        |
3749| callback | function | 是   | 音频缓存事件回调方法。<br>[BufferingInfoType](#bufferinginfotype8)为BUFFERING_PERCENT或CACHED_DURATION时,value值有效,否则固定为0。 |
3750
3751**示例:**
3752
3753```js
3754audioPlayer.on('bufferingUpdate', (infoType, value) => {
3755    console.log('audio bufferingInfo type: ' + infoType);
3756    console.log('audio bufferingInfo value: ' + value);
3757});
3758```
3759
3760 ### on('play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange')<a name = audioplayer_on></a>
3761
3762on(type: 'play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange', callback: () => void): void
3763
3764开始订阅音频播放事件。
3765
3766**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
3767
3768**参数:**
3769
3770| 参数名   | 类型       | 必填 | 说明                                                         |
3771| -------- | ---------- | ---- | ------------------------------------------------------------ |
3772| type     | string     | 是   | 播放事件回调类型,支持的事件包括:'play' \| 'pause' \| 'stop' \| 'reset' \| 'dataLoad' \| 'finish' \| 'volumeChange'。<br>- 'play':完成[play()](#audioplayer_play)调用,音频开始播放,触发该事件。<br>- 'pause':完成[pause()](#audioplayer_pause)调用,音频暂停播放,触发该事件。<br>- 'stop':完成[stop()](#audioplayer_stop)调用,音频停止播放,触发该事件。<br>- 'reset':完成[reset()](#audioplayer_reset)调用,播放器重置,触发该事件。<br>- 'dataLoad':完成音频数据加载后触发该事件,即src属性设置完成后触发该事件。<br>- 'finish':完成音频播放后触发该事件。<br>- 'volumeChange':完成[setVolume()](#audioplayer_setvolume)调用,播放音量改变后触发该事件。 |
3773| callback | () => void | 是   | 播放事件回调方法。                                           |
3774
3775**示例:**
3776
3777```js
3778import fileio from '@ohos.fileio'
3779
3780let audioPlayer = media.createAudioPlayer();  //创建一个音频播放实例
3781audioPlayer.on('dataLoad', () => {            //设置'dataLoad'事件回调,src属性设置成功后,触发此回调
3782    console.info('audio set source success');
3783    audioPlayer.play();                       //开始播放,并触发'play'事件回调
3784});
3785audioPlayer.on('play', () => {                //设置'play'事件回调
3786    console.info('audio play success');
3787    audioPlayer.seek(30000);                  //调用seek方法,并触发'timeUpdate'事件回调
3788});
3789audioPlayer.on('pause', () => {               //设置'pause'事件回调
3790    console.info('audio pause success');
3791    audioPlayer.stop();                       //停止播放,并触发'stop'事件回调
3792});
3793audioPlayer.on('reset', () => {               //设置'reset'事件回调
3794    console.info('audio reset success');
3795    audioPlayer.release();                    //释放播放实例资源
3796    audioPlayer = undefined;
3797});
3798audioPlayer.on('timeUpdate', (seekDoneTime) => {  //设置'timeUpdate'事件回调
3799    if (seekDoneTime == null) {
3800        console.info('audio seek fail');
3801        return;
3802    }
3803    console.info('audio seek success, and seek time is ' + seekDoneTime);
3804    audioPlayer.setVolume(0.5);                //设置音量为50%,并触发'volumeChange'事件回调
3805});
3806audioPlayer.on('volumeChange', () => {         //设置'volumeChange'事件回调
3807    console.info('audio volumeChange success');
3808    audioPlayer.pause();                       //暂停播放,并触发'pause'事件回调
3809});
3810audioPlayer.on('finish', () => {               //设置'finish'事件回调
3811    console.info('audio play finish');
3812    audioPlayer.stop();                        //停止播放,并触发'stop'事件回调
3813});
3814audioPlayer.on('error', (error) => {           //设置'error'事件回调
3815    console.info(`audio error called, error: ${error}`);
3816});
3817
3818// 用户选择音频设置fd(本地播放)
3819let fdPath = 'fd://';
3820// path路径的码流可通过"hdc file send D:\xxx\01.mp3 /data/accounts/account_0/appdata" 命令,将其推送到设备上
3821let path = '/data/accounts/account_0/appdata/ohos.xxx.xxx.xxx/01.mp3';
3822fileio.open(path).then((fdValue) => {
3823   fdPath = fdPath + '' + fdValue;
3824   console.info('open fd success fd is' + fdPath);
3825}, (err) => {
3826   console.info('open fd failed err is' + err);
3827}).catch((err) => {
3828   console.info('open fd failed err is' + err);
3829});
3830audioPlayer.src = fdPath;  //设置src属性,并触发'dataLoad'事件回调
3831```
3832
3833### on('timeUpdate')
3834
3835on(type: 'timeUpdate', callback: Callback\<number>): void
3836
3837开始订阅音频播放时间更新事件。处于播放状态时,每隔1s上报一次该事件。
3838
3839**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
3840
3841**参数:**
3842
3843| 参数名   | 类型              | 必填 | 说明                                                         |
3844| -------- | ----------------- | ---- | ------------------------------------------------------------ |
3845| type     | string            | 是   | 播放事件回调类型,支持的事件包括:'timeUpdate'。<br>- 'timeUpdate':音频播放时间戳更新,开始播放后自动触发该事件。 |
3846| callback | Callback\<number> | 是   | 播放事件回调方法。回调方法入参为更新后的时间戳。             |
3847
3848**示例:**
3849
3850```js
3851audioPlayer.on('timeUpdate', (newTime) => {    //设置'timeUpdate'事件回调
3852    if (newTime == null) {
3853        console.info('audio timeUpadate fail');
3854        return;
3855    }
3856    console.log('audio timeUpadate success. seekDoneTime: ' + newTime);
3857});
3858audioPlayer.play();    //开始播放后,自动触发时间戳更新事件
3859```
3860
3861### on('error')
3862
3863on(type: 'error', callback: ErrorCallback): void
3864
3865开始订阅音频播放错误事件,当上报error错误事件后,用户需处理error事件,退出播放操作。
3866
3867**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
3868
3869**参数:**
3870
3871| 参数名   | 类型          | 必填 | 说明                                                         |
3872| -------- | ------------- | ---- | ------------------------------------------------------------ |
3873| type     | string        | 是   | 播放错误事件回调类型,支持的事件包括:'error'。<br>- 'error':音频播放中发生错误,触发该事件。 |
3874| callback | ErrorCallback | 是   | 播放错误事件回调方法。                                       |
3875
3876**示例:**
3877
3878```js
3879audioPlayer.on('error', (error) => {      //设置'error'事件回调
3880    console.info(`audio error called, error: ${error}`);
3881});
3882audioPlayer.setVolume(3);  //设置volume为无效值,触发'error'事件
3883```
3884
3885## AudioState<sup>(deprecated)</sup>
3886
3887音频播放的状态机。可通过state属性获取当前状态。
3888
3889> **说明:**
3890> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayerState](#avplayerstate9)替代。
3891
3892**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
3893
3894| 名称    | 类型   | 说明                                           |
3895| ------- | ------ | ---------------------------------------------- |
3896| idle    | string | 音频播放空闲,dataload/reset成功后处于此状态。 |
3897| playing | string | 音频正在播放,play成功后处于此状态。           |
3898| paused  | string | 音频暂停播放,pause成功后处于此状态。          |
3899| stopped | string | 音频播放停止,stop/播放结束后处于此状态。      |
3900| error   | string | 错误状态。                                     |
3901
3902## VideoPlayer<sup>(deprecated)</sup><a name=videoplayer></a>
3903
3904> **说明:**
3905> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer](#avplayer9)替代。
3906
3907视频播放管理类,用于管理和播放视频媒体。在调用VideoPlayer的方法前,需要先通过[createVideoPlayer()](#createvideoplayer)构建一个VideoPlayer实例。
3908
3909视频播放demo可参考:[视频播放开发指导](../../media/video-playback.md)
3910
3911### 属性<a name=videoplayer_属性></a>
3912
3913**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
3914
3915| 名称                            | 类型                                                   | 可读 | 可写 | 说明                                                         |
3916| ------------------------------- | ------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
3917| url<sup>8+</sup>                | string                                                 | 是   | 是   | 视频媒体URL,支持当前主流的视频格式(mp4、mpeg-ts、webm、mkv)。<br>**支持路径示例**:<br>1. fd类型播放:fd://xx<br>![](figures/zh-cn_image_url.png)<br>2. http网络播放: http://xx<br/>3. https网络播放: https://xx<br/>4. hls网络播放路径:http://xx或者https://xx<br/> |
3918| fdSrc<sup>9+</sup>              | [AVFileDescriptor](#avfiledescriptor9)                 | 是   | 是   | 视频媒体文件描述,使用场景:应用中的视频资源被连续存储在同一个文件中。<br/>**使用示例**:<br/>假设一个连续存储的音乐文件: <br/>视频1(地址偏移:0,字节长度:100)<br/>视频2(地址偏移:101,字节长度:50)<br/>视频3(地址偏移:151,字节长度:150)<br/>1. 播放视频1:AVFileDescriptor { fd = 资源句柄; offset = 0; length = 100; }<br/>2. 播放视频2:AVFileDescriptor { fd = 资源句柄; offset = 101; length = 50; }<br/>3. 播放视频3:AVFileDescriptor { fd = 资源句柄; offset = 151; length = 150; }<br/>假设是一个独立的视频文件: 请使用src=fd://xx <br/> |
3919| loop<sup>8+</sup>               | boolean                                                | 是   | 是   | 视频循环播放属性,设置为'true'表示循环播放。                 |
3920| videoScaleType<sup>9+</sup>     | [VideoScaleType](#videoscaletype9)                     | 是   | 是   | 视频缩放模式。                                               |
3921| audioInterruptMode<sup>9+</sup> | [audio.InterruptMode](js-apis-audio.md#interruptmode9) | 是   | 是   | 音频焦点模型。                                               |
3922| currentTime<sup>8+</sup>        | number                                                 | 是   | 否   | 视频的当前播放位置,单位为毫秒(ms)。                       |
3923| duration<sup>8+</sup>           | number                                                 | 是   | 否   | 视频时长,单位为毫秒(ms),返回-1表示直播模式。             |
3924| state<sup>8+</sup>              | [VideoPlayState](#videoplayerstate)                    | 是   | 否   | 视频播放的状态。                                             |
3925| width<sup>8+</sup>              | number                                                 | 是   | 否   | 视频宽,单位为像素(px)。                                   |
3926| height<sup>8+</sup>             | number                                                 | 是   | 否   | 视频高,单位为像素(px)。                                   |
3927
3928### setDisplaySurface<sup>8+</sup>
3929
3930setDisplaySurface(surfaceId: string, callback: AsyncCallback\<void>): void
3931
3932通过回调方式设置SurfaceId。
3933
3934*注意:SetDisplaySurface需要在设置url和Prepare之间,无音频的视频流必须设置Surface否则Prepare失败。
3935
3936**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
3937
3938**参数:**
3939
3940| 参数名    | 类型                 | 必填 | 说明                      |
3941| --------- | -------------------- | ---- | ------------------------- |
3942| surfaceId | string               | 是   | SurfaceId                 |
3943| callback  | AsyncCallback\<void> | 是   | 设置SurfaceId的回调方法。 |
3944
3945**示例:**
3946
3947```js
3948let surfaceId = null;
3949videoPlayer.setDisplaySurface(surfaceId, (err) => {
3950    if (err == null) {
3951        console.info('setDisplaySurface success!');
3952    } else {
3953        console.info('setDisplaySurface fail!');
3954    }
3955});
3956```
3957
3958### setDisplaySurface<sup>8+</sup>
3959
3960setDisplaySurface(surfaceId: string): Promise\<void>
3961
3962通过Promise方式设置SurfaceId。
3963
3964*注意:SetDisplaySurface需要在设置url和Prepare之间,无音频的视频流必须设置Surface否则Prepare失败。
3965
3966**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
3967
3968**参数:**
3969
3970| 参数名    | 类型   | 必填 | 说明      |
3971| --------- | ------ | ---- | --------- |
3972| surfaceId | string | 是   | SurfaceId |
3973
3974**返回值:**
3975
3976| 类型           | 说明                           |
3977| -------------- | ------------------------------ |
3978| Promise\<void> | 设置SurfaceId的Promise返回值。 |
3979
3980**示例:**
3981
3982```js
3983let surfaceId = null;
3984videoPlayer.setDisplaySurface(surfaceId).then(() => {
3985    console.info('setDisplaySurface success');
3986}).catch((error) => {
3987   console.info(`video catchCallback, error:${error}`);
3988});
3989```
3990
3991### prepare<sup>8+</sup>
3992
3993prepare(callback: AsyncCallback\<void>): void
3994
3995通过回调方式准备播放视频。
3996
3997**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
3998
3999**参数:**
4000
4001| 参数名   | 类型                 | 必填 | 说明                     |
4002| -------- | -------------------- | ---- | ------------------------ |
4003| callback | AsyncCallback\<void> | 是   | 准备播放视频的回调方法。 |
4004
4005**示例:**
4006
4007```js
4008videoPlayer.prepare((err) => {
4009    if (err == null) {
4010        console.info('prepare success!');
4011    } else {
4012        console.info('prepare fail!');
4013    }
4014});
4015```
4016
4017### prepare<sup>8+</sup>
4018
4019prepare(): Promise\<void>
4020
4021通过Promise方式准备播放视频。
4022
4023**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4024
4025**返回值:**
4026
4027| 类型           | 说明                          |
4028| -------------- | ----------------------------- |
4029| Promise\<void> | 准备播放视频的Promise返回值。 |
4030
4031**示例:**
4032
4033```js
4034videoPlayer.prepare().then(() => {
4035    console.info('prepare success');
4036}).catch((error) => {
4037   console.info(`video catchCallback, error:${error}`);
4038});
4039```
4040
4041### play<sup>8+</sup>
4042
4043play(callback: AsyncCallback\<void>): void;
4044
4045通过回调方式开始播放视频。
4046
4047**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4048
4049**参数:**
4050
4051| 参数名   | 类型                 | 必填 | 说明                     |
4052| -------- | -------------------- | ---- | ------------------------ |
4053| callback | AsyncCallback\<void> | 是   | 开始播放视频的回调方法。 |
4054
4055**示例:**
4056
4057```js
4058videoPlayer.play((err) => {
4059    if (err == null) {
4060        console.info('play success!');
4061    } else {
4062        console.info('play fail!');
4063    }
4064});
4065```
4066
4067### play<sup>8+</sup>
4068
4069play(): Promise\<void>;
4070
4071通过Promise方式开始播放视频。
4072
4073**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4074
4075**返回值:**
4076
4077| 类型           | 说明                          |
4078| -------------- | ----------------------------- |
4079| Promise\<void> | 开始播放视频的Promise返回值。 |
4080
4081**示例:**
4082
4083```js
4084videoPlayer.play().then(() => {
4085    console.info('play success');
4086}).catch((error) => {
4087   console.info(`video catchCallback, error:${error}`);
4088});
4089```
4090
4091### pause<sup>8+</sup>
4092
4093pause(callback: AsyncCallback\<void>): void
4094
4095通过回调方式暂停播放视频。
4096
4097**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4098
4099**参数:**
4100
4101| 参数名   | 类型                 | 必填 | 说明                     |
4102| -------- | -------------------- | ---- | ------------------------ |
4103| callback | AsyncCallback\<void> | 是   | 暂停播放视频的回调方法。 |
4104
4105**示例:**
4106
4107```js
4108videoPlayer.pause((err) => {
4109    if (err == null) {
4110        console.info('pause success!');
4111    } else {
4112        console.info('pause fail!');
4113    }
4114});
4115```
4116
4117### pause<sup>8+</sup>
4118
4119pause(): Promise\<void>
4120
4121通过Promise方式暂停播放视频。
4122
4123**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4124
4125**返回值:**
4126
4127| 类型           | 说明                          |
4128| -------------- | ----------------------------- |
4129| Promise\<void> | 暂停播放视频的Promise返回值。 |
4130
4131**示例:**
4132
4133```js
4134videoPlayer.pause().then(() => {
4135    console.info('pause success');
4136}).catch((error) => {
4137   console.info(`video catchCallback, error:${error}`);
4138});
4139```
4140
4141### stop<sup>8+</sup>
4142
4143stop(callback: AsyncCallback\<void>): void
4144
4145通过回调方式停止播放视频。
4146
4147**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4148
4149**参数:**
4150
4151| 参数名   | 类型                 | 必填 | 说明                     |
4152| -------- | -------------------- | ---- | ------------------------ |
4153| callback | AsyncCallback\<void> | 是   | 停止播放视频的回调方法。 |
4154
4155**示例:**
4156
4157```js
4158videoPlayer.stop((err) => {
4159    if (err == null) {
4160        console.info('stop success!');
4161    } else {
4162        console.info('stop fail!');
4163    }
4164});
4165```
4166
4167### stop<sup>8+</sup>
4168
4169stop(): Promise\<void>
4170
4171通过Promise方式停止播放视频。
4172
4173**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4174
4175**返回值:**
4176
4177| 类型           | 说明                          |
4178| -------------- | ----------------------------- |
4179| Promise\<void> | 停止播放视频的Promise返回值。 |
4180
4181**示例:**
4182
4183```js
4184videoPlayer.stop().then(() => {
4185    console.info('stop success');
4186}).catch((error) => {
4187   console.info(`video catchCallback, error:${error}`);
4188});
4189```
4190
4191### reset<sup>8+</sup>
4192
4193reset(callback: AsyncCallback\<void>): void
4194
4195通过回调方式重置播放视频。
4196
4197**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4198
4199**参数:**
4200
4201| 参数名   | 类型                 | 必填 | 说明                     |
4202| -------- | -------------------- | ---- | ------------------------ |
4203| callback | AsyncCallback\<void> | 是   | 切换播放视频的回调方法。 |
4204
4205**示例:**
4206
4207```js
4208videoPlayer.reset((err) => {
4209    if (err == null) {
4210        console.info('reset success!');
4211    } else {
4212        console.info('reset fail!');
4213    }
4214});
4215```
4216
4217### reset<sup>8+</sup>
4218
4219reset(): Promise\<void>
4220
4221通过Promise方式重置播放视频。
4222
4223**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4224
4225**返回值:**
4226
4227| 类型           | 说明                          |
4228| -------------- | ----------------------------- |
4229| Promise\<void> | 切换播放视频的Promise返回值。 |
4230
4231**示例:**
4232
4233```js
4234videoPlayer.reset().then(() => {
4235    console.info('reset success');
4236}).catch((error) => {
4237   console.info(`video catchCallback, error:${error}`);
4238});
4239```
4240
4241### seek<sup>8+</sup>
4242
4243seek(timeMs: number, callback: AsyncCallback\<number>): void
4244
4245通过回调方式跳转到指定播放位置,默认跳转到指定时间点的上一个关键帧。
4246
4247**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4248
4249**参数:**
4250
4251| 参数名   | 类型                   | 必填 | 说明                                                         |
4252| -------- | ---------------------- | ---- | ------------------------------------------------------------ |
4253| timeMs   | number                 | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, duration]。 |
4254| callback | AsyncCallback\<number> | 是   | 跳转到指定播放位置的回调方法。                               |
4255
4256**示例:**
4257
4258```js
4259let seekTime = 5000;
4260videoPlayer.seek(seekTime, (err, result) => {
4261    if (err == null) {
4262        console.info('seek success!');
4263    } else {
4264        console.info('seek fail!');
4265    }
4266});
4267```
4268
4269### seek<sup>8+</sup>
4270
4271seek(timeMs: number, mode:SeekMode, callback: AsyncCallback\<number>): void
4272
4273通过回调方式跳转到指定播放位置。
4274
4275**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4276
4277**参数:**
4278
4279| 参数名   | 类型                   | 必填 | 说明                                                         |
4280| -------- | ---------------------- | ---- | ------------------------------------------------------------ |
4281| timeMs   | number                 | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, duration]。 |
4282| mode     | [SeekMode](#seekmode8) | 是   | 跳转模式。                                                   |
4283| callback | AsyncCallback\<number> | 是   | 跳转到指定播放位置的回调方法。                               |
4284
4285**示例:**
4286
4287```js
4288import media from '@ohos.multimedia.media'
4289let seekTime = 5000;
4290videoPlayer.seek(seekTime, media.SeekMode.SEEK_NEXT_SYNC, (err, result) => {
4291    if (err == null) {
4292        console.info('seek success!');
4293    } else {
4294        console.info('seek fail!');
4295    }
4296});
4297```
4298
4299### seek<sup>8+</sup>
4300
4301seek(timeMs: number, mode?:SeekMode): Promise\<number>
4302
4303通过Promise方式跳转到指定播放位置,如果没有设置mode则跳转到指定时间点的上一个关键帧。
4304
4305**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4306
4307**参数:**
4308
4309| 参数名 | 类型                   | 必填 | 说明                                                         |
4310| ------ | ---------------------- | ---- | ------------------------------------------------------------ |
4311| timeMs | number                 | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, duration]。 |
4312| mode   | [SeekMode](#seekmode8) | 否   | 跳转模式。                                                   |
4313
4314**返回值:**
4315
4316| 类型             | 说明                                        |
4317| ---------------- | ------------------------------------------- |
4318| Promise\<number> | 跳转到指定播放位置的Promise返回值,单位ms。 |
4319
4320**示例:**
4321
4322```js
4323import media from '@ohos.multimedia.media'
4324let seekTime = 5000;
4325videoPlayer.seek(seekTime).then((seekDoneTime) => { // seekDoneTime表示seek完成后的时间点
4326    console.info('seek success');
4327}).catch((error) => {
4328   console.info(`video catchCallback, error:${error}`);
4329});
4330
4331videoPlayer.seek(seekTime, media.SeekMode.SEEK_NEXT_SYNC).then((seekDoneTime) => {
4332    console.info('seek success');
4333}).catch((error) => {
4334   console.info(`video catchCallback, error:${error}`);
4335});
4336```
4337
4338### setVolume<sup>8+</sup>
4339
4340setVolume(vol: number, callback: AsyncCallback\<void>): void
4341
4342通过回调方式设置音量。
4343
4344**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4345
4346**参数:**
4347
4348| 参数名   | 类型                 | 必填 | 说明                                                         |
4349| -------- | -------------------- | ---- | ------------------------------------------------------------ |
4350| vol      | number               | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
4351| callback | AsyncCallback\<void> | 是   | 设置音量的回调方法。                                         |
4352
4353**示例:**
4354
4355```js
4356let vol = 0.5;
4357videoPlayer.setVolume(vol, (err, result) => {
4358    if (err == null) {
4359        console.info('setVolume success!');
4360    } else {
4361        console.info('setVolume fail!');
4362    }
4363});
4364```
4365
4366### setVolume<sup>8+</sup>
4367
4368setVolume(vol: number): Promise\<void>
4369
4370通过Promise方式设置音量。
4371
4372**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4373
4374**参数:**
4375
4376| 参数名 | 类型   | 必填 | 说明                                                         |
4377| ------ | ------ | ---- | ------------------------------------------------------------ |
4378| vol    | number | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
4379
4380**返回值:**
4381
4382| 类型           | 说明                      |
4383| -------------- | ------------------------- |
4384| Promise\<void> | 设置音量的Promise返回值。 |
4385
4386**示例:**
4387
4388```js
4389let vol = 0.5;
4390videoPlayer.setVolume(vol).then(() => {
4391    console.info('setVolume success');
4392}).catch((error) => {
4393   console.info(`video catchCallback, error:${error}`);
4394});
4395```
4396
4397### release<sup>8+</sup>
4398
4399release(callback: AsyncCallback\<void>): void
4400
4401通过回调方式释放视频资源。
4402
4403**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4404
4405**参数:**
4406
4407| 参数名   | 类型                 | 必填 | 说明                     |
4408| -------- | -------------------- | ---- | ------------------------ |
4409| callback | AsyncCallback\<void> | 是   | 释放视频资源的回调方法。 |
4410
4411**示例:**
4412
4413```js
4414videoPlayer.release((err) => {
4415    if (err == null) {
4416        console.info('release success!');
4417    } else {
4418        console.info('release fail!');
4419    }
4420});
4421```
4422
4423### release<sup>8+</sup>
4424
4425release(): Promise\<void>
4426
4427通过Promise方式释放视频资源。
4428
4429**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4430
4431**返回值:**
4432
4433| 类型           | 说明                          |
4434| -------------- | ----------------------------- |
4435| Promise\<void> | 释放视频资源的Promise返回值。 |
4436
4437**示例:**
4438
4439```js
4440videoPlayer.release().then(() => {
4441    console.info('release success');
4442}).catch((error) => {
4443   console.info(`video catchCallback, error:${error}`);
4444});
4445```
4446
4447### getTrackDescription<sup>8+</sup>
4448
4449getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void
4450
4451通过回调方式获取视频轨道信息。
4452
4453**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4454
4455**参数:**
4456
4457| 参数名   | 类型                                                         | 必填 | 说明                                       |
4458| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------ |
4459| callback | AsyncCallback\<Array\<[MediaDescription](#mediadescription8)>> | 是   | 视频轨道信息MediaDescription数组回调方法。 |
4460
4461**示例:**
4462
4463```js
4464function printfDescription(obj) {
4465    for (let item in obj) {
4466        let property = obj[item];
4467        console.info('video key is ' + item);
4468        console.info('video value is ' + property);
4469    }
4470}
4471
4472videoPlayer.getTrackDescription((error, arrList) => {
4473    if ((arrList) != null) {
4474        for (let i = 0; i < arrList.length; i++) {
4475            printfDescription(arrList[i]);
4476        }
4477    } else {
4478        console.log(`video getTrackDescription fail, error:${error}`);
4479    }
4480});
4481```
4482
4483### getTrackDescription<sup>8+</sup>
4484
4485getTrackDescription(): Promise\<Array\<MediaDescription>>
4486
4487通过Promise方式获取视频轨道信息。
4488
4489**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4490
4491**返回值:**
4492
4493| 类型                                                   | 说明                                            |
4494| ------------------------------------------------------ | ----------------------------------------------- |
4495| Promise<Array<[MediaDescription](#mediadescription8)>> | 视频轨道信息MediaDescription数组Promise返回值。 |
4496
4497**示例:**
4498
4499```js
4500function printfDescription(obj) {
4501    for (let item in obj) {
4502        let property = obj[item];
4503        console.info('video key is ' + item);
4504        console.info('video value is ' + property);
4505    }
4506}
4507
4508let arrayDescription;
4509videoPlayer.getTrackDescription().then((arrList) => {
4510    if (arrList != null) {
4511        arrayDescription = arrList;
4512    } else {
4513        console.log('video getTrackDescription fail');
4514    }
4515}).catch((error) => {
4516   console.info(`video catchCallback, error:${error}`);
4517});
4518for (let i = 0; i < arrayDescription.length; i++) {
4519    printfDescription(arrayDescription[i]);
4520}
4521```
4522
4523### setSpeed<sup>8+</sup>
4524
4525setSpeed(speed:number, callback: AsyncCallback\<number>): void
4526
4527通过回调方式设置播放速度。
4528
4529**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4530
4531**参数:**
4532
4533| 参数名   | 类型                   | 必填 | 说明                                                       |
4534| -------- | ---------------------- | ---- | ---------------------------------------------------------- |
4535| speed    | number                 | 是   | 指定播放视频速度,具体见[PlaybackSpeed](#playbackspeed8)。 |
4536| callback | AsyncCallback\<number> | 是   | 设置播放速度的回调方法。                                   |
4537
4538**示例:**
4539
4540```js
4541import media from '@ohos.multimedia.media'
4542let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X;
4543
4544videoPlayer.setSpeed(speed, (err, result) => {
4545    if (err == null) {
4546        console.info('setSpeed success!');
4547    } else {
4548        console.info('setSpeed fail!');
4549    }
4550});
4551```
4552
4553### setSpeed<sup>8+</sup>
4554
4555setSpeed(speed:number): Promise\<number>
4556
4557通过Promise方式设置播放速度。
4558
4559**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4560
4561**参数:**
4562
4563| 参数名 | 类型   | 必填 | 说明                                                       |
4564| ------ | ------ | ---- | ---------------------------------------------------------- |
4565| speed  | number | 是   | 指定播放视频速度,具体见[PlaybackSpeed](#playbackspeed8)。 |
4566
4567**返回值:**
4568
4569| 类型             | 说明                                                         |
4570| ---------------- | ------------------------------------------------------------ |
4571| Promise\<number> | 播放速度Promise返回值,具体见[PlaybackSpeed](#playbackspeed8)。 |
4572
4573**示例:**
4574
4575```js
4576import media from '@ohos.multimedia.media'
4577let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X;
4578
4579videoPlayer.setSpeed(speed).then(() => {
4580    console.info('setSpeed success');
4581}).catch((error) => {
4582   console.info(`video catchCallback, error:${error}`);
4583});
4584```
4585
4586### on('playbackCompleted')<sup>8+</sup>
4587
4588on(type: 'playbackCompleted', callback: Callback\<void>): void
4589
4590开始监听视频播放完成事件。
4591
4592**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4593
4594**参数:**
4595
4596| 参数名   | 类型     | 必填 | 说明                                                        |
4597| -------- | -------- | ---- | ----------------------------------------------------------- |
4598| type     | string   | 是   | 视频播放完成事件回调类型,支持的事件:'playbackCompleted'。 |
4599| callback | function | 是   | 视频播放完成事件回调方法。                                  |
4600
4601**示例:**
4602
4603```js
4604videoPlayer.on('playbackCompleted', () => {
4605    console.info('playbackCompleted success!');
4606});
4607```
4608
4609### on('bufferingUpdate')<sup>8+</sup>
4610
4611on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: number) => void): void
4612
4613开始监听视频缓存更新事件。仅网络播放支持该订阅事件。
4614
4615**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4616
4617**参数:**
4618
4619| 参数名   | 类型     | 必填 | 说明                                                         |
4620| -------- | -------- | ---- | ------------------------------------------------------------ |
4621| type     | string   | 是   | 视频缓存事件回调类型,支持的事件:'bufferingUpdate'。        |
4622| callback | function | 是   | 视频缓存事件回调方法。<br>[BufferingInfoType](#bufferinginfotype8)为BUFFERING_PERCENT或CACHED_DURATION时,value值有效,否则固定为0。 |
4623
4624**示例:**
4625
4626```js
4627videoPlayer.on('bufferingUpdate', (infoType, value) => {
4628    console.log('video bufferingInfo type: ' + infoType);
4629    console.log('video bufferingInfo value: ' + value);
4630});
4631```
4632
4633### on('startRenderFrame')<sup>8+</sup>
4634
4635on(type: 'startRenderFrame', callback: Callback\<void>): void
4636
4637开始监听视频播放首帧送显上报事件。
4638
4639**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4640
4641**参数:**
4642
4643| 参数名   | 类型            | 必填 | 说明                                                         |
4644| -------- | --------------- | ---- | ------------------------------------------------------------ |
4645| type     | string          | 是   | 视频播放首帧送显上报事件回调类型,支持的事件:'startRenderFrame'。 |
4646| callback | Callback\<void> | 是   | 视频播放首帧送显上报事件回调方法。                           |
4647
4648**示例:**
4649
4650```js
4651videoPlayer.on('startRenderFrame', () => {
4652    console.info('startRenderFrame success!');
4653});
4654```
4655
4656### on('videoSizeChanged')<sup>8+</sup>
4657
4658on(type: 'videoSizeChanged', callback: (width: number, height: number) => void): void
4659
4660开始监听视频播放宽高变化事件。
4661
4662**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4663
4664**参数:**
4665
4666| 参数名   | 类型     | 必填 | 说明                                                         |
4667| -------- | -------- | ---- | ------------------------------------------------------------ |
4668| type     | string   | 是   | 视频播放宽高变化事件回调类型,支持的事件:'videoSizeChanged'。 |
4669| callback | function | 是   | 视频播放宽高变化事件回调方法,width表示宽,height表示高。    |
4670
4671**示例:**
4672
4673```js
4674videoPlayer.on('videoSizeChanged', (width, height) => {
4675    console.log('video width is: ' + width);
4676    console.log('video height is: ' + height);
4677});
4678```
4679
4680### on('error')<sup>8+</sup>
4681
4682on(type: 'error', callback: ErrorCallback): void
4683
4684开始监听视频播放错误事件,当上报error错误事件后,用户需处理error事件,退出播放操作。
4685
4686**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4687
4688**参数:**
4689
4690| 参数名   | 类型          | 必填 | 说明                                                         |
4691| -------- | ------------- | ---- | ------------------------------------------------------------ |
4692| type     | string        | 是   | 播放错误事件回调类型,支持的事件包括:'error'。<br>- 'error':视频播放中发生错误,触发该事件。 |
4693| callback | ErrorCallback | 是   | 播放错误事件回调方法。                                       |
4694
4695**示例:**
4696
4697```js
4698videoPlayer.on('error', (error) => {      // 设置'error'事件回调
4699    console.info(`video error called, error: ${error}`);
4700});
4701videoPlayer.url = 'fd://error';  //设置错误的播放地址,触发'error'事件
4702```
4703
4704## VideoPlayState<sup>(deprecated)</sup><a name=videoplayerstate></a>
4705
4706视频播放的状态机,可通过state属性获取当前状态。
4707
4708> **说明:**
4709> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayerState](#avplayerstate9)替代。
4710
4711**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
4712
4713| 名称     | 类型   | 说明           |
4714| -------- | ------ | -------------- |
4715| idle     | string | 视频播放空闲。 |
4716| prepared | string | 视频播放准备。 |
4717| playing  | string | 视频正在播放。 |
4718| paused   | string | 视频暂停播放。 |
4719| stopped  | string | 视频播放停止。 |
4720| error    | string | 错误状态。     |
4721
4722## AudioRecorder<sup>(deprecated)</sup>
4723
4724> **说明:**
4725> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder](#avrecorder9)替代。
4726
4727音频录制管理类,用于录制音频媒体。在调用AudioRecorder的方法前,需要先通过[createAudioRecorder()](#mediacreateaudiorecorder) 构建一个AudioRecorder实例。
4728
4729音频录制demo可参考:[音频录制开发指导](../../media/audio-recorder.md)
4730
4731### prepare<a name=audiorecorder_prepare></a>
4732
4733prepare(config: AudioRecorderConfig): void
4734
4735录音准备。
4736
4737**需要权限:** ohos.permission.MICROPHONE
4738
4739**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
4740
4741**参数:**
4742
4743| 参数名 | 类型                                        | 必填 | 说明                                                         |
4744| ------ | ------------------------------------------- | ---- | ------------------------------------------------------------ |
4745| config | [AudioRecorderConfig](#audiorecorderconfigdeprecated) | 是   | 配置录音的相关参数,包括音频输出URI、编码格式、采样率、声道数、输出格式等。 |
4746
4747**示例:**
4748
4749```js
4750let audioRecorderConfig = {
4751    audioEncoder : media.AudioEncoder.AAC_LC,
4752    audioEncodeBitRate : 22050,
4753    audioSampleRate : 22050,
4754    numberOfChannels : 2,
4755    format : media.AudioOutputFormat.AAC_ADTS,
4756    uri : 'fd://1',       // 文件需先由调用者创建,并给予适当的权限
4757    location : { latitude : 30, longitude : 130},
4758}
4759audioRecorder.on('prepare', () => {    //设置'prepare'事件回调
4760    console.log('prepare success');
4761});
4762audioRecorder.prepare(audioRecorderConfig);
4763```
4764
4765
4766### start<a name=audiorecorder_start></a>
4767
4768start(): void
4769
4770开始录制,需在[prepare](#audiorecorder_on)事件成功触发后,才能调用start方法。
4771
4772**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
4773
4774**示例:**
4775
4776```js
4777audioRecorder.on('start', () => {    //设置'start'事件回调
4778    console.log('audio recorder start success');
4779});
4780audioRecorder.start();
4781```
4782
4783### pause<a name=audiorecorder_pause></a>
4784
4785pause():void
4786
4787暂停录制,需要在[start](#audiorecorder_on)事件成功触发后,才能调用pause方法。
4788
4789**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
4790
4791**示例:**
4792
4793```js
4794audioRecorder.on('pause', () => {    //设置'pause'事件回调
4795    console.log('audio recorder pause success');
4796});
4797audioRecorder.pause();
4798```
4799
4800### resume<a name=audiorecorder_resume></a>
4801
4802resume():void
4803
4804恢复录制,需要在[pause](#audiorecorder_on)事件成功触发后,才能调用resume方法。
4805
4806**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
4807
4808**示例:**
4809
4810```js
4811audioRecorder.on('resume', () => {    //设置'resume'事件回调
4812    console.log('audio recorder resume success');
4813});
4814audioRecorder.resume();
4815```
4816
4817### stop<a name=audiorecorder_stop></a>
4818
4819stop(): void
4820
4821停止录音。
4822
4823**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
4824
4825**示例:**
4826
4827```js
4828audioRecorder.on('stop', () => {    //设置'stop'事件回调
4829    console.log('audio recorder stop success');
4830});
4831audioRecorder.stop();
4832```
4833
4834### release<a name=audiorecorder_release></a>
4835
4836release(): void
4837
4838释放录音资源。
4839
4840**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
4841
4842**示例:**
4843
4844```js
4845audioRecorder.on('release', () => {    //设置'release'事件回调
4846    console.log('audio recorder release success');
4847});
4848audioRecorder.release();
4849audioRecorder = undefined;
4850```
4851
4852### reset<a name=audiorecorder_reset></a>
4853
4854reset(): void
4855
4856重置录音。
4857
4858进行重置录音之前,需要先调用[stop()](#audiorecorder_stop)停止录音。重置录音之后,需要调用[prepare()](#audiorecorder_prepare)设置录音参数项,才能再次进行录音。
4859
4860**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
4861
4862**示例:**
4863
4864```js
4865audioRecorder.on('reset', () => {    //设置'reset'事件回调
4866    console.log('audio recorder reset success');
4867});
4868audioRecorder.reset();
4869```
4870
4871### on('prepare' | 'start' | 'pause' | 'resume' | 'stop' | 'release' | 'reset')<a name=audiorecorder_on></a>
4872
4873on(type: 'prepare' | 'start' | 'pause' | 'resume' | 'stop' | 'release' | 'reset', callback: () => void): void
4874
4875开始订阅音频录制事件。
4876
4877**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
4878
4879**参数:**
4880
4881| 参数名   | 类型     | 必填 | 说明                                                         |
4882| -------- | -------- | ---- | ------------------------------------------------------------ |
4883| type     | string   | 是   | 录制事件回调类型,支持的事件包括:'prepare'&nbsp;\|&nbsp;'start'&nbsp;\|  'pause' \| ’resume‘ \|&nbsp;'stop'&nbsp;\|&nbsp;'release'&nbsp;\|&nbsp;'reset'。<br/>-&nbsp;'prepare'&nbsp;:完成[prepare](#audiorecorder_prepare)调用,音频录制参数设置完成,触发该事件。<br/>-&nbsp;'start'&nbsp;:完成[start](#audiorecorder_start)调用,音频录制开始,触发该事件。<br/>-&nbsp;'pause': 完成[pause](#audiorecorder_pause)调用,音频暂停录制,触发该事件。<br/>-&nbsp;'resume': 完成[resume](#audiorecorder_resume)调用,音频恢复录制,触发该事件。<br/>-&nbsp;'stop'&nbsp;:完成[stop](#audiorecorder_stop)调用,音频停止录制,触发该事件。<br/>-&nbsp;'release'&nbsp;:完成[release](#audiorecorder_release)调用,音频释放录制资源,触发该事件。<br/>-&nbsp;'reset':完成[reset](#audiorecorder_reset)调用,音频重置为初始状态,触发该事件。 |
4884| callback | ()=>void | 是   | 录制事件回调方法。                                           |
4885
4886**示例:**
4887
4888```js
4889let audioRecorder = media.createAudioRecorder();                                  // 创建一个音频录制实例
4890let audioRecorderConfig = {
4891    audioEncoder : media.AudioEncoder.AAC_LC,
4892    audioEncodeBitRate : 22050,
4893    audioSampleRate : 22050,
4894    numberOfChannels : 2,
4895    format : media.AudioOutputFormat.AAC_ADTS,
4896    uri : 'fd://xx',                                                            // 文件需先由调用者创建,并给予适当的权限
4897    location : { latitude : 30, longitude : 130},
4898}
4899audioRecorder.on('error', (error) => {                                             // 设置'error'事件回调
4900    console.info(`audio error called, error: ${error}`);
4901});
4902audioRecorder.on('prepare', () => {                                              // 设置'prepare'事件回调
4903    console.log('prepare success');
4904    audioRecorder.start();                                                       // 开始录制,并触发'start'事件回调
4905});
4906audioRecorder.on('start', () => {                                                 // 设置'start'事件回调
4907    console.log('audio recorder start success');
4908});
4909audioRecorder.on('pause', () => {                                                 // 设置'pause'事件回调
4910    console.log('audio recorder pause success');
4911});
4912audioRecorder.on('resume', () => {                                                 // 设置'resume'事件回调
4913    console.log('audio recorder resume success');
4914});
4915audioRecorder.on('stop', () => {                                                 // 设置'stop'事件回调
4916    console.log('audio recorder stop success');
4917});
4918audioRecorder.on('release', () => {                                                 // 设置'release'事件回调
4919    console.log('audio recorder release success');
4920});
4921audioRecorder.on('reset', () => {                                                 // 设置'reset'事件回调
4922    console.log('audio recorder reset success');
4923});
4924audioRecorder.prepare(audioRecorderConfig)                                       // 设置录制参数 ,并触发'prepare'事件回调
4925```
4926
4927### on('error')
4928
4929on(type: 'error', callback: ErrorCallback): void
4930
4931开始订阅音频录制错误事件,当上报error错误事件后,用户需处理error事件,退出录制操作。
4932
4933**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
4934
4935**参数:**
4936
4937| 参数名   | 类型          | 必填 | 说明                                                         |
4938| -------- | ------------- | ---- | ------------------------------------------------------------ |
4939| type     | string        | 是   | 录制错误事件回调类型'error'。<br/>-&nbsp;'error':音频录制过程中发生错误,触发该事件。 |
4940| callback | ErrorCallback | 是   | 录制错误事件回调方法。                                       |
4941
4942**示例:**
4943
4944```js
4945let audioRecorderConfig = {
4946    audioEncoder : media.AudioEncoder.AAC_LC,
4947    audioEncodeBitRate : 22050,
4948    audioSampleRate : 22050,
4949    numberOfChannels : 2,
4950    format : media.AudioOutputFormat.AAC_ADTS,
4951    uri : 'fd://xx',                                                     // 文件需先由调用者创建,并给予适当的权限
4952    location : { latitude : 30, longitude : 130},
4953}
4954audioRecorder.on('error', (error) => {                                  // 设置'error'事件回调
4955    console.info(`audio error called, error: ${error}`);
4956});
4957audioRecorder.prepare(audioRecorderConfig);                            // prepare不设置参数,触发'error'事件
4958```
4959
4960## AudioRecorderConfig<sup>(deprecated)</sup>
4961
4962> **说明:**
4963> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorderConfig](#avrecorderconfig9)替代。
4964
4965表示音频的录音配置。
4966
4967**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
4968
4969| 名称                                | 类型                                         | 必填 | 说明                                                         |
4970| ----------------------------------- | -------------------------------------------- | ---- | ------------------------------------------------------------ |
4971| audioEncoder                        | [AudioEncoder](#audioencoderdeprecated)                | 否   | 音频编码格式,默认设置为AAC_LC。<br/>**说明:** 从API version 8开始废弃,建议使用audioEncoderMime替代。 |
4972| audioEncodeBitRate                  | number                                       | 否   | 音频编码比特率,默认值为48000。                              |
4973| audioSampleRate                     | number                                       | 否   | 音频采集采样率,默认值为48000。                              |
4974| numberOfChannels                    | number                                       | 否   | 音频采集声道数,默认值为2。                                  |
4975| format                              | [AudioOutputFormat](#audiooutputformatdeprecated)      | 否   | 音频输出封装格式,默认设置为MPEG_4。<br/>**说明:** 从API version 8开始废弃,建议使用fileFormat替代。 |
4976| location                            | [Location](#location)                        | 否   | 音频采集的地理位置。                                         |
4977| uri                                 | string                                       | 是   | 音频输出URI:fd://xx&nbsp;(fd&nbsp;number)<br/>![](figures/zh-cn_image_url.png) <br/>文件需要由调用者创建,并赋予适当的权限。 |
4978| audioEncoderMime<sup>8+</sup>       | [CodecMimeType](#codecmimetype8)             | 否   | 音频编码格式。                                               |
4979| fileFormat<sup>8+</sup>             | [ContainerFormatType](#containerformattype8) | 否   | 音频编码格式。                                               |
4980
4981## AudioEncoder<sup>(deprecated)</sup>
4982
4983> **说明:**
4984> 从API version 6开始支持,从API version 8开始废弃,建议使用[CodecMimeType](#codecmimetype8)替代。
4985
4986表示音频编码格式的枚举。
4987
4988**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
4989
4990| 名称    | 值   | 说明                                                         |
4991| ------- | ---- | ------------------------------------------------------------ |
4992| DEFAULT | 0    | 默认编码格式。<br/>仅做接口定义,暂不支持使用。              |
4993| AMR_NB  | 1    | AMR-NB(Adaptive Multi Rate-Narrow Band Speech Codec) 编码格式。<br/>仅做接口定义,暂不支持使用。 |
4994| AMR_WB  | 2    | AMR-WB(Adaptive Multi Rate-Wide Band Speech Codec) 编码格式。<br/>仅做接口定义,暂不支持使用。 |
4995| AAC_LC  | 3    | AAC-LC(Advanced&nbsp;Audio&nbsp;Coding&nbsp;Low&nbsp;Complexity)编码格式。 |
4996| HE_AAC  | 4    | HE_AAC(High-Efficiency Advanced&nbsp;Audio&nbsp;Coding)编码格式。<br/>仅做接口定义,暂不支持使用。 |
4997
4998## AudioOutputFormat<sup>(deprecated)</sup>
4999
5000> **说明:**
5001> 从API version 6开始支持,从API version 8 开始废弃,建议使用[ContainerFormatType](#containerformattype8)替代。
5002
5003表示音频封装格式的枚举。
5004
5005**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
5006
5007| 名称     | 值   | 说明                                                         |
5008| -------- | ---- | ------------------------------------------------------------ |
5009| DEFAULT  | 0    | 默认封装格式。<br/>仅做接口定义,暂不支持使用。              |
5010| MPEG_4   | 2    | 封装为MPEG-4格式。                                           |
5011| AMR_NB   | 3    | 封装为AMR_NB格式。<br/>仅做接口定义,暂不支持使用。          |
5012| AMR_WB   | 4    | 封装为AMR_WB格式。<br/>仅做接口定义,暂不支持使用。          |
5013| AAC_ADTS | 6    | 封装为ADTS(Audio&nbsp;Data&nbsp;Transport&nbsp;Stream)格式,是AAC音频的传输流格式。 |
5014