js-apis-media.md 87.0 KB
Newer Older
W
wusongqing 已提交
1
# 媒体服务
2

Z
zengyawen 已提交
3 4 5
> **说明:**
> 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

W
wusongqing 已提交
6
媒体子系统为开发者提供一套简单且易于理解的接口,使得开发者能够方便接入系统并使用系统的媒体资源。
Z
zengyawen 已提交
7

W
wusongqing 已提交
8
媒体子系统包含了音视频相关媒体业务,提供以下常用功能:
9

W
wusongqing 已提交
10 11 12
- 音频播放([AudioPlayer](#audioplayer)
- 视频播放([VideoPlayer](#videoplayer8)
- 音频录制([AudioRecorder](#audiorecorder)
Z
zengyawen 已提交
13
- 视频录制([VideoRecorder](#videorecorder9)
14

W
wusongqing 已提交
15
后续将提供以下功能:DataSource音视频播放、音视频编解码、容器封装解封装、媒体能力查询等功能。
16

W
wusongqing 已提交
17
## 导入模块
Z
zengyawen 已提交
18

19
```js
Z
zengyawen 已提交
20 21 22
import media from '@ohos.multimedia.media';
```

23
##  media.createAudioPlayer
Z
zengyawen 已提交
24

25
createAudioPlayer(): [AudioPlayer](#audioplayer)
Z
zengyawen 已提交
26

W
wusongqing 已提交
27 28
同步方式创建音频播放实例。

Z
zengyawen 已提交
29
**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
30

W
wusongqing 已提交
31
**返回值:**
Z
zengyawen 已提交
32

W
wusongqing 已提交
33
| 类型                        | 说明                                                         |
34
| --------------------------- | ------------------------------------------------------------ |
W
wusongqing 已提交
35
| [AudioPlayer](#audioplayer) | 返回AudioPlayer类实例,失败时返回null。可用于音频播放、暂停、停止等操作。 |
Z
zengyawen 已提交
36

W
wusongqing 已提交
37
**示例:**
Z
zengyawen 已提交
38

39
```js
Z
zengyawen 已提交
40
let audioPlayer = media.createAudioPlayer();
Z
zengyawen 已提交
41
```
42

43 44 45 46
## media.createVideoPlayer<sup>8+</sup>

createVideoPlayer(callback: AsyncCallback\<[VideoPlayer](#videoplayer8)>): void

W
wusongqing 已提交
47
异步方式创建视频播放实例,通过注册回调函数获取返回值。
48

Z
zengyawen 已提交
49 50
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
51
**参数:**
Z
zengyawen 已提交
52

W
wusongqing 已提交
53
| 参数名   | 类型                                        | 必填 | 说明                           |
Z
zengyawen 已提交
54
| -------- | ------------------------------------------- | ---- | ------------------------------ |
W
wusongqing 已提交
55
| callback | AsyncCallback<[VideoPlayer](#videoplayer8)> | 是   | 异步创建视频播放实例回调方法。 |
56

W
wusongqing 已提交
57
**示例:**
58 59

```js
Z
zengyawen 已提交
60 61
let videoPlayer

62 63 64 65 66 67 68 69 70 71 72 73
media.createVideoPlayer((error, video) => {
   if (typeof(video) != 'undefined') {
       videoPlayer = video;
       console.info('video createVideoPlayer success');
   } else {
       console.info(`video createVideoPlayer fail, error:${error.message}`);
   }
});
```

## media.createVideoPlayer<sup>8+</sup>

Z
zengyawen 已提交
74
createVideoPlayer(): Promise<[VideoPlayer](#videoplayer8)>
75

W
wusongqing 已提交
76
异步方式创建视频播放实例,通过Promise获取返回值。
77

Z
zengyawen 已提交
78 79
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
80
**返回值:**
Z
zengyawen 已提交
81

W
wusongqing 已提交
82
| 类型                                  | 说明                                |
Z
zengyawen 已提交
83
| ------------------------------------- | ----------------------------------- |
W
wusongqing 已提交
84
| Promise<[VideoPlayer](#videoplayer8)> | 异步创建视频播放实例Promise返回值。 |
85

W
wusongqing 已提交
86
**示例:**
87 88

```js
Z
zengyawen 已提交
89 90
let videoPlayer

91 92
media.createVideoPlayer().then((video) => {
   if (typeof(video) != 'undefined') {
93 94 95 96 97
       videoPlayer = video;
       console.info('video createVideoPlayer success');
   } else {
       console.info('video createVideoPlayer fail');
   }
98 99 100
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
101 102
```

Z
zengyawen 已提交
103
## media.createAudioRecorder
104

Z
zengyawen 已提交
105
createAudioRecorder(): AudioRecorder
Z
zengyawen 已提交
106

W
wusongqing 已提交
107
创建音频录制的实例来控制音频的录制。
Z
zengyawen 已提交
108

Z
zengyawen 已提交
109 110
**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder

W
wusongqing 已提交
111
**返回值:**
Z
zengyawen 已提交
112

W
wusongqing 已提交
113
| 类型                            | 说明                                      |
Z
zengyawen 已提交
114
| ------------------------------- | ----------------------------------------- |
W
wusongqing 已提交
115
| [AudioRecorder](#audiorecorder) | 返回AudioRecorder类实例,失败时返回null。 |
Z
zengyawen 已提交
116

W
wusongqing 已提交
117
**示例:**
118

119
```js
Z
zengyawen 已提交
120
let audioRecorder = media.createAudioRecorder();
Z
zengyawen 已提交
121
```
Z
zengyawen 已提交
122

123
## media.createVideoRecorder<sup>9+</sup>
W
wusongqing 已提交
124

125
createVideoRecorder(callback: AsyncCallback\<[VideoRecorder](#videorecorder9)>): void
W
wusongqing 已提交
126 127 128

异步方式创建视频录制实例。通过注册回调函数获取返回值。

Z
zengyawen 已提交
129 130
**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder

W
wusongqing 已提交
131 132
**参数:**

Z
zengyawen 已提交
133 134
| 参数名   | 类型                                            | 必填 | 说明                           |
| -------- | ----------------------------------------------- | ---- | ------------------------------ |
135
| callback | AsyncCallback<[VideoRecorder](#videorecorder9)> | 是   | 异步创建视频录制实例回调方法。 |
W
wusongqing 已提交
136 137 138 139

**示例:**

```js
Z
zengyawen 已提交
140 141 142
let videoRecorder

media.createVideoRecorder((error, video) => {
143 144
   if (typeof(video) != 'undefined') {
       videoRecorder = video;
Z
zengyawen 已提交
145
       console.info('video createVideoRecorder success');
146
   } else {
Z
zengyawen 已提交
147
       console.info(`video createVideoRecorder fail, error:${error.message}`);
148 149 150 151
   }
});
```

152
## media.createVideoRecorder<sup>9+</sup>
153

154
createVideoRecorder(): Promise<[VideoRecorder](#videorecorder9)>
155

W
wusongqing 已提交
156
异步方式创建视频录制实例。通过Promise获取返回值。
Z
zengyawen 已提交
157

Z
zengyawen 已提交
158 159
**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder

W
wusongqing 已提交
160
**返回值:**
161

Z
zengyawen 已提交
162 163
| 类型                                      | 说明                                |
| ----------------------------------------- | ----------------------------------- |
164
| Promise<[VideoRecorder](#videorecorder9)> | 异步创建视频录制实例Promise返回值。 |
165

W
wusongqing 已提交
166
**示例:**
167 168

```js
Z
zengyawen 已提交
169 170
let videoRecorder

171
media.createVideoRecorder().then((video) => {
172 173
    if (typeof(video) != 'undefined') {
       videoRecorder = video;
Z
zengyawen 已提交
174
       console.info('video createVideoRecorder success');
175
   } else {
Z
zengyawen 已提交
176
       console.info('video createVideoRecorder fail');
177
   }
178 179 180
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
181 182 183 184
```



185 186
## MediaErrorCode<sup>8+</sup>

Z
zengyawen 已提交
187 188 189
媒体服务错误类型枚举。

**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。
W
wusongqing 已提交
190 191 192 193 194 195 196 197 198 199 200 201 202

| 名称                       | 值   | 说明                                   |
| -------------------------- | ---- | -------------------------------------- |
| MSERR_OK                   | 0    | 表示操作成功。                         |
| MSERR_NO_MEMORY            | 1    | 表示申请内存失败,系统可能无可用内存。 |
| MSERR_OPERATION_NOT_PERMIT | 2    | 表示无权限执行此操作。                 |
| MSERR_INVALID_VAL          | 3    | 表示传入入参无效。                     |
| MSERR_IO                   | 4    | 表示发生IO错误。                       |
| MSERR_TIMEOUT              | 5    | 表示操作超时。                         |
| MSERR_UNKNOWN              | 6    | 表示未知错误。                         |
| MSERR_SERVICE_DIED         | 7    | 表示服务端失效。                       |
| MSERR_INVALID_STATE        | 8    | 表示在当前状态下,不允许执行此操作。   |
| MSERR_UNSUPPORTED          | 9    | 表示在当前版本下,不支持此操作。       |
203 204 205

## MediaType<sup>8+</sup>

Z
zengyawen 已提交
206 207 208
媒体类型枚举。

**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。
209

Z
zengyawen 已提交
210 211 212 213
| 名称           | 值   | 说明       |
| -------------- | ---- | ---------- |
| MEDIA_TYPE_AUD | 0    | 表示音频。 |
| MEDIA_TYPE_VID | 1    | 表示视频。 |
214 215 216

## CodecMimeType<sup>8+</sup>

Z
zengyawen 已提交
217 218 219
Codec MIME类型枚举。

**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。
220

Z
zengyawen 已提交
221 222 223 224 225 226 227
| 名称         | 值                    | 说明                     |
| ------------ | --------------------- | ------------------------ |
| VIDEO_H263   | 'video/h263'          | 表示视频/h263类型。      |
| VIDEO_AVC    | 'video/avc'           | 表示视频/avc类型。       |
| VIDEO_MPEG2  | 'video/mpeg2'         | 表示视频/mpeg2类型。     |
| VIDEO_MPEG4  | 'video/mp4v-es'       | 表示视频/mpeg4类型。     |
| VIDEO_VP8    | 'video/x-vnd.on2.vp8' | 表示视频/vp8类型。       |
228
| AUDIO_AAC    | "audio/mp4a-latm"     | 表示音频/mp4a-latm类型。 |
Z
zengyawen 已提交
229 230
| AUDIO_VORBIS | 'audio/vorbis'        | 表示音频/vorbis类型。    |
| AUDIO_FLAC   | 'audio/flac'          | 表示音频/flac类型。      |
231 232 233

## MediaDescriptionKey<sup>8+</sup>

Z
zengyawen 已提交
234 235 236
媒体信息描述枚举。

**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。
237

W
wusongqing 已提交
238
| 名称                     | 值              | 说明                                                         |
239
| ------------------------ | --------------- | ------------------------------------------------------------ |
W
wusongqing 已提交
240 241 242
| MD_KEY_TRACK_INDEX       | "track_index"   | 表示轨道序号,其对应键值类型为number。                       |
| MD_KEY_TRACK_TYPE        | "track_type"    | 表示轨道类型,其对应键值类型为number,参考[MediaType](#mediatype8)。 |
| MD_KEY_CODEC_MIME        | "codec_mime"    | 表示codec_mime类型,其对应键值类型为string。                 |
Z
zengyawen 已提交
243 244 245 246 247
| MD_KEY_DURATION          | "duration"      | 表示媒体时长,其对应键值类型为number,单位为毫秒(ms)。     |
| MD_KEY_BITRATE           | "bitrate"       | 表示比特率,其对应键值类型为number,单位为比特率(bps)。    |
| MD_KEY_WIDTH             | "width"         | 表示视频宽度,其对应键值类型为number,单位为像素(px)。     |
| MD_KEY_HEIGHT            | "height"        | 表示视频高度,其对应键值类型为number,单位为像素(px)。     |
| MD_KEY_FRAME_RATE        | "frame_rate"    | 表示视频帧率,其对应键值类型为number,单位为100帧每秒(100fps)。 |
W
wusongqing 已提交
248
| MD_KEY_AUD_CHANNEL_COUNT | "channel_count" | 表示声道数,其对应键值类型为number。                         |
Z
zengyawen 已提交
249
| MD_KEY_AUD_SAMPLE_RATE   | "sample_rate"   | 表示采样率,其对应键值类型为number,单位为赫兹(Hz)。       |
250 251 252

## BufferingInfoType<sup>8+</sup>

Z
zengyawen 已提交
253 254 255
缓存事件类型枚举。

**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。
256

Z
zengyawen 已提交
257 258 259 260 261 262
| 名称              | 值   | 说明                             |
| ----------------- | ---- | -------------------------------- |
| BUFFERING_START   | 1    | 表示开始缓存。                   |
| BUFFERING_END     | 2    | 表示结束缓存。                   |
| BUFFERING_PERCENT | 3    | 表示缓存百分比。                 |
| CACHED_DURATION   | 4    | 表示缓存时长,单位为毫秒(ms)。 |
263

Z
zengyawen 已提交
264
## AudioPlayer
Z
zengyawen 已提交
265

Z
zengyawen 已提交
266
音频播放管理类,用于管理和播放音频媒体。在调用AudioPlayer的方法前,需要先通过[createAudioPlayer()](#mediacreateaudioplayer)构建一个[AudioPlayer](#audioplayer)实例。
Z
zengyawen 已提交
267

W
wusongqing 已提交
268
音频播放demo可参考:[音频播放开发指导](../../media/audio-playback.md)
Z
zengyawen 已提交
269

W
wusongqing 已提交
270
### 属性<a name=audioplayer_属性></a>
Z
zengyawen 已提交
271

Z
zengyawen 已提交
272 273
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.AudioPlayer。

W
wusongqing 已提交
274
| 名称        | 类型                      | 可读 | 可写 | 说明                                                         |
275
| ----------- | ------------------------- | ---- | ---- | ------------------------------------------------------------ |
Z
zengyawen 已提交
276
| src         | string                    | 是   | 是   | 音频媒体URI,支持当前主流的音频格式(mp4、aac、mp3、ogg、wav)。<br>**支持路径示例**<br>1、fd类型播放:fd://xx<br>![](figures/zh-cn_image_url.png)<br>2、http网络播放: http://xx<br>3、hls网络播放路径:开发中<br>**注意事项**<br>使用媒体素材需要获取读权限,否则无法正常播放。 |
Z
zengyawen 已提交
277 278 279 280
| loop        | boolean                   | 是   | 是   | 音频循环播放属性,设置为'true'表示循环播放。                 |
| currentTime | number                    | 是   | 否   | 音频的当前播放位置。                                         |
| duration    | number                    | 是   | 否   | 音频时长。                                                   |
| state       | [AudioState](#audiostate) | 是   | 否   | 音频播放的状态。                                             |
Z
zengyawen 已提交
281

282
### play<a name=audioplayer_play></a>
Z
zengyawen 已提交
283

Z
zengyawen 已提交
284
play(): void
Z
zengyawen 已提交
285

286
开始播放音频资源,需在[dataLoad](#audioplayer_on)事件成功触发后,才能调用。
Z
zengyawen 已提交
287

Z
zengyawen 已提交
288 289
**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer

W
wusongqing 已提交
290
**示例:**
Z
zengyawen 已提交
291

292
```js
W
wusongqing 已提交
293
audioPlayer.on('play', () => {    //设置'play'事件回调
294
    console.log('audio play success');
Z
zengyawen 已提交
295
});
296
audioPlayer.play();
Z
zengyawen 已提交
297
```
Z
zengyawen 已提交
298

299
### pause<a name=audioplayer_pause></a>
Z
zengyawen 已提交
300

Z
zengyawen 已提交
301
pause(): void
Z
zengyawen 已提交
302

W
wusongqing 已提交
303
暂停播放音频资源。
B
bird_j 已提交
304

Z
zengyawen 已提交
305 306
**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer

W
wusongqing 已提交
307
**示例:**
Z
zengyawen 已提交
308

309
```js
W
wusongqing 已提交
310
audioPlayer.on('pause', () => {    //设置'pause'事件回调
311
    console.log('audio pause success');
Z
zengyawen 已提交
312
});
313
audioPlayer.pause();
Z
zengyawen 已提交
314
```
Z
zengyawen 已提交
315

316
### stop<a name=audioplayer_stop></a>
Z
zengyawen 已提交
317

Z
zengyawen 已提交
318
stop(): void
Z
zengyawen 已提交
319

W
wusongqing 已提交
320
停止播放音频资源。
Z
zengyawen 已提交
321

Z
zengyawen 已提交
322 323
**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer

W
wusongqing 已提交
324
**示例:**
Z
zengyawen 已提交
325

326
```js
W
wusongqing 已提交
327
audioPlayer.on('stop', () => {    //设置'stop'事件回调
328 329 330
    console.log('audio stop success');
});
audioPlayer.stop();
Z
zengyawen 已提交
331
```
332 333 334 335 336

### reset<sup>7+</sup><a name=audioplayer_reset></a>

reset(): void

W
wusongqing 已提交
337
切换播放音频资源。
B
bird_j 已提交
338

Z
zengyawen 已提交
339 340
**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer

W
wusongqing 已提交
341
**示例:**
342 343

```js
W
wusongqing 已提交
344
audioPlayer.on('reset', () => {    //设置'reset'事件回调
345
    console.log('audio reset success');
Z
zengyawen 已提交
346
});
347
audioPlayer.reset();
Z
zengyawen 已提交
348
```
Z
zengyawen 已提交
349

350
### seek<a name=audioplayer_seek></a>
Z
zengyawen 已提交
351

Z
zengyawen 已提交
352
seek(timeMs: number): void
Z
zengyawen 已提交
353

W
wusongqing 已提交
354
跳转到指定播放位置。
Z
zengyawen 已提交
355

Z
zengyawen 已提交
356 357
**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer

W
wusongqing 已提交
358
**参数:**
B
bird_j 已提交
359

Z
zengyawen 已提交
360 361 362
| 参数名 | 类型   | 必填 | 说明                                 |
| ------ | ------ | ---- | ------------------------------------ |
| timeMs | number | 是   | 指定的跳转时间节点,单位毫秒(ms)。 |
Z
zengyawen 已提交
363

W
wusongqing 已提交
364
**示例:**
Z
zengyawen 已提交
365

366
```js
W
wusongqing 已提交
367
audioPlayer.on('timeUpdate', (seekDoneTime) => {    //设置'timeUpdate'事件回调
368 369 370 371 372
    if (typeof (seekDoneTime) == 'undefined') {
        console.info('audio seek fail');
        return;
    }
    console.log('audio seek success. seekDoneTime: ' + seekDoneTime);
Z
zengyawen 已提交
373
});
W
wusongqing 已提交
374
audioPlayer.seek(30000);    //seek到30000ms的位置
Z
zengyawen 已提交
375
```
Z
zengyawen 已提交
376

377
### setVolume<a name=audioplayer_setvolume></a>
Z
zengyawen 已提交
378

Z
zengyawen 已提交
379
setVolume(vol: number): void
Z
zengyawen 已提交
380

W
wusongqing 已提交
381
设置音量。
B
bird_j 已提交
382

Z
zengyawen 已提交
383 384
**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer

W
wusongqing 已提交
385
**参数:**
Z
zengyawen 已提交
386

W
wusongqing 已提交
387
| 参数名 | 类型   | 必填 | 说明                                                         |
388
| ------ | ------ | ---- | ------------------------------------------------------------ |
W
wusongqing 已提交
389
| vol    | number | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
Z
zengyawen 已提交
390

W
wusongqing 已提交
391
**示例:**
Z
zengyawen 已提交
392

393
```js
W
wusongqing 已提交
394
audioPlayer.on('volumeChange', () => {    //设置'volumeChange'事件回调
395
    console.log('audio volumeChange success');
Z
zengyawen 已提交
396
});
W
wusongqing 已提交
397
audioPlayer.setVolume(1);    //设置音量到100%
Z
zengyawen 已提交
398
```
Z
zengyawen 已提交
399

400
### release<a name=audioplayer_release></a>
Z
zengyawen 已提交
401

402
release(): void
Z
zengyawen 已提交
403

W
wusongqing 已提交
404
释放音频资源。
B
bird_j 已提交
405

Z
zengyawen 已提交
406 407
**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer

W
wusongqing 已提交
408
**示例:**
Z
zengyawen 已提交
409

410 411 412
```js
audioPlayer.release();
audioPlayer = undefined;
Z
zengyawen 已提交
413
```
Z
zengyawen 已提交
414

415
### getTrackDescription<sup>8+</sup><a name=audioplayer_gettrackdescription1></a>
Z
zengyawen 已提交
416

Z
zengyawen 已提交
417
getTrackDescription(callback: AsyncCallback<Array\<MediaDescription>>): void
Z
zengyawen 已提交
418

419
通过回调方式获取音频轨道信息。需在[dataLoad](#audioplayer_on)事件成功触发后,才能调用。
420

Z
zengyawen 已提交
421 422
**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer

W
wusongqing 已提交
423
**参数:**
B
bird_j 已提交
424

W
wusongqing 已提交
425
| 参数名   | 类型                                                         | 必填 | 说明                       |
426
| -------- | ------------------------------------------------------------ | ---- | -------------------------- |
W
wusongqing 已提交
427
| callback | AsyncCallback<Array<[MediaDescription](#mediadescription8)>> | 是   | 获取音频轨道信息回调方法。 |
Z
zengyawen 已提交
428

W
wusongqing 已提交
429
**示例:**
Z
zengyawen 已提交
430

431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448
```js
function printfDescription(obj) {
    for (let item in obj) {
        let property = obj[item];
        console.info('audio key is ' + item);
        console.info('audio value is ' + property);
    }
}

audioPlayer.getTrackDescription((error, arrlist) => {
    if (typeof (arrlist) != 'undefined') {
        for (let i = 0; i < arrlist.length; i++) {
            printfDescription(arrlist[i]);
        }
    } else {
        console.log(`audio getTrackDescription fail, error:${error.message}`);
    }
});
Z
zengyawen 已提交
449
```
450 451 452

### getTrackDescription<sup>8+</sup><a name=audioplayer_gettrackdescription2></a>

Z
zengyawen 已提交
453
getTrackDescription(): Promise<Array\<MediaDescription>>
454

455
通过Promise方式获取音频轨道信息。需在[dataLoad](#audioplayer_on)事件成功触发后,才能调用
B
bird_j 已提交
456

Z
zengyawen 已提交
457 458
**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer

W
wusongqing 已提交
459
**返回值:**
460

W
wusongqing 已提交
461
| 类型                                                   | 说明                            |
462
| ------------------------------------------------------ | ------------------------------- |
W
wusongqing 已提交
463
| Promise<Array<[MediaDescription](#mediadescription8)>> | 获取音频轨道信息Promise返回值。 |
464

W
wusongqing 已提交
465
**示例:**
466 467 468 469 470 471 472 473 474 475

```js
function printfDescription(obj) {
    for (let item in obj) {
        let property = obj[item];
        console.info('audio key is ' + item);
        console.info('audio value is ' + property);
    }
}

476
audioPlayer.getTrackDescription().then((arrlist) => {
477 478 479 480 481
    if (typeof (arrlist) != 'undefined') {
        arrayDescription = arrlist;
    } else {
        console.log('audio getTrackDescription fail');
    }
482 483 484 485
}).catch((error) => {
   console.info(`audio catchCallback, error:${error.message}`);
});

486 487 488
for (let i = 0; i < arrayDescription.length; i++) {
    printfDescription(arrayDescription[i]);
}
Z
zengyawen 已提交
489 490
```

491
### on('bufferingUpdate')<sup>8+</sup>
Z
zengyawen 已提交
492

493
on(type: 'bufferingUpdate', callback: (infoType: [BufferingInfoType](#bufferinginfotype8), value: number) => void): void
Z
zengyawen 已提交
494

W
wusongqing 已提交
495
开始订阅音频缓存更新事件。
Z
zengyawen 已提交
496

Z
zengyawen 已提交
497 498
**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer

W
wusongqing 已提交
499
**参数:**
B
bird_j 已提交
500

Z
zengyawen 已提交
501 502 503 504
| 参数名   | 类型     | 必填 | 说明                                                         |
| -------- | -------- | ---- | ------------------------------------------------------------ |
| type     | string   | 是   | 音频缓存事件回调类型,支持的事件:'bufferingUpdate'。        |
| callback | function | 是   | 音频缓存事件回调方法。<br>[BufferingInfoType](#bufferinginfotype8)为BUFFERING_PERCENT或CACHED_DURATION时,value值有效,否则固定为0。 |
Z
zengyawen 已提交
505

W
wusongqing 已提交
506
**示例:**
Z
zengyawen 已提交
507

508 509 510 511 512
```js
audioPlayer.on('bufferingUpdate', (infoType, value) => {
    console.log('audio bufferingInfo type: ' + infoType);
    console.log('audio bufferingInfo value: ' + value);
});
Z
zengyawen 已提交
513
```
514

Z
zengyawen 已提交
515
 ### on('play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange')<a name = audioplayer_on></a>
516 517 518

on(type: 'play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange', callback: () => void): void

W
wusongqing 已提交
519
开始订阅音频播放事件。
B
bird_j 已提交
520

Z
zengyawen 已提交
521 522
**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer

W
wusongqing 已提交
523
**参数:**
524

W
wusongqing 已提交
525
| 参数名   | 类型       | 必填 | 说明                                                         |
526
| -------- | ---------- | ---- | ------------------------------------------------------------ |
Z
zengyawen 已提交
527
| 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)调用,播放音量改变后触发该事件。 |
W
wusongqing 已提交
528
| callback | () => void | 是   | 播放事件回调方法。                                           |
529

W
wusongqing 已提交
530
**示例:**
531 532

```js
W
wusongqing 已提交
533 534
let audioPlayer = media.createAudioPlayer();  //创建一个音频播放实例
audioPlayer.on('dataLoad', () => {            //设置'dataLoad'事件回调,src属性设置成功后,触发此回调
A
tab  
abc12133 已提交
535
    console.info('audio set source success');
W
wusongqing 已提交
536
    audioPlayer.play();                       //开始播放,并触发'play'事件回调
537
});
W
wusongqing 已提交
538
audioPlayer.on('play', () => {                //设置'play'事件回调
A
tab  
abc12133 已提交
539
    console.info('audio play success');
W
wusongqing 已提交
540
    audioPlayer.seek(30000);                  //调用seek方法,并触发'timeUpdate'事件回调
541
});
W
wusongqing 已提交
542
audioPlayer.on('pause', () => {               //设置'pause'事件回调
A
tab  
abc12133 已提交
543
    console.info('audio pause success');
W
wusongqing 已提交
544
    audioPlayer.stop();                       //停止播放,并触发'stop'事件回调
545
});
W
wusongqing 已提交
546
audioPlayer.on('reset', () => {               //设置'reset'事件回调
A
tab  
abc12133 已提交
547
    console.info('audio reset success');
W
wusongqing 已提交
548
    audioPlayer.release();                    //释放播放实例资源
549 550
    audioPlayer = undefined;
});
W
wusongqing 已提交
551
audioPlayer.on('timeUpdate', (seekDoneTime) => {  //设置'timeUpdate'事件回调
A
tab  
abc12133 已提交
552
    if (typeof(seekDoneTime) == "undefined") {
553 554 555 556
        console.info('audio seek fail');
        return;
    }
    console.info('audio seek success, and seek time is ' + seekDoneTime);
W
wusongqing 已提交
557
    audioPlayer.setVolume(0.5);                //设置音量为50%,并触发'volumeChange'事件回调
558
});
W
wusongqing 已提交
559
audioPlayer.on('volumeChange', () => {         //设置'volumeChange'事件回调
A
tab  
abc12133 已提交
560
    console.info('audio volumeChange success');
W
wusongqing 已提交
561
    audioPlayer.pause();                       //暂停播放,并触发'pause'事件回调
562
});
W
wusongqing 已提交
563
audioPlayer.on('finish', () => {               //设置'finish'事件回调
A
tab  
abc12133 已提交
564
    console.info('audio play finish');
W
wusongqing 已提交
565
    audioPlayer.stop();                        //停止播放,并触发'stop'事件回调
566
});
W
wusongqing 已提交
567
audioPlayer.on('error', (error) => {           //设置'error'事件回调
A
tab  
abc12133 已提交
568
    console.info(`audio error called, errName is ${error.name}`);
569 570
    console.info(`audio error called, errCode is ${error.code}`);
    console.info(`audio error called, errMessage is ${error.message}`);
Z
zengyawen 已提交
571
});
Z
zengyawen 已提交
572 573 574

// 用户选择视频设置fd(本地播放)
let fdPath = 'fd://'
575 576
// path路径的码流可通过"hdc file send D:\xxx\01.mp3 /data/accounts/account_0/appdata" 命令,将其推送到设备上
let path = '/data/accounts/account_0/appdata/ohos.xxx.xxx.xxx/01.mp3';
577
fileIO.open(path).then(fdNumber) => {
Z
zengyawen 已提交
578
   fdPath = fdPath + '' + fdNumber;
579
   console.info('open fd success fd is' + fdPath);
Z
zengyawen 已提交
580 581
}, (err) => {
   console.info('open fd failed err is' + err);
582
}).catch((err) => {
Z
zengyawen 已提交
583 584 585
   console.info('open fd failed err is' + err);
});
audioPlayer.src = fdPath;  //设置src属性,并触发'dataLoad'事件回调
Z
zengyawen 已提交
586 587 588 589 590
```

### on('timeUpdate')

on(type: 'timeUpdate', callback: Callback\<number>): void
Z
zengyawen 已提交
591

W
wusongqing 已提交
592
开始订阅音频播放[seek()](#seek)时间更新事件。
Z
zengyawen 已提交
593

Z
zengyawen 已提交
594 595
**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer

W
wusongqing 已提交
596
**参数:**
B
bird_j 已提交
597

W
wusongqing 已提交
598
| 参数名   | 类型              | 必填 | 说明                                                         |
599
| -------- | ----------------- | ---- | ------------------------------------------------------------ |
Z
zengyawen 已提交
600
| type     | string            | 是   | 播放事件回调类型,支持的事件包括:'timeUpdate'。<br>- 'timeUpdate':[seek()](#audioplayer_seek)调用完成,触发该事件。 |
W
wusongqing 已提交
601
| callback | Callback\<number> | 是   | 播放事件回调方法。回调方法入参为成功seek的时间。             |
Z
zengyawen 已提交
602

W
wusongqing 已提交
603
**示例:**
Z
zengyawen 已提交
604

605
```js
W
wusongqing 已提交
606
audioPlayer.on('timeUpdate', (seekDoneTime) => {    //设置'timeUpdate'事件回调
607 608 609 610 611
    if (typeof (seekDoneTime) == 'undefined') {
        console.info('audio seek fail');
        return;
    }
    console.log('audio seek success. seekDoneTime: ' + seekDoneTime);
Z
zengyawen 已提交
612
});
W
wusongqing 已提交
613
audioPlayer.seek(30000);    //seek到30000ms的位置
Z
zengyawen 已提交
614 615 616 617 618
```

### on('error')

on(type: 'error', callback: ErrorCallback): void
Z
zengyawen 已提交
619

W
wusongqing 已提交
620
开始订阅音频播放错误事件。
B
bird_j 已提交
621

Z
zengyawen 已提交
622 623
**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer

W
wusongqing 已提交
624
**参数:**
Z
zengyawen 已提交
625

W
wusongqing 已提交
626
| 参数名   | 类型          | 必填 | 说明                                                         |
627
| -------- | ------------- | ---- | ------------------------------------------------------------ |
W
wusongqing 已提交
628 629
| type     | string        | 是   | 播放错误事件回调类型,支持的事件包括:'error'。<br>- 'error':音频播放中发生错误,触发该事件。 |
| callback | ErrorCallback | 是   | 播放错误事件回调方法。                                       |
Z
zengyawen 已提交
630

W
wusongqing 已提交
631
**示例:**
Z
zengyawen 已提交
632

633
```js
W
wusongqing 已提交
634
audioPlayer.on('error', (error) => {      //设置'error'事件回调
A
tab  
abc12133 已提交
635
    console.info(`audio error called, errName is ${error.name}`);      //打印错误类型名称
W
wusongqing 已提交
636 637
    console.info(`audio error called, errCode is ${error.code}`);      //打印错误码
    console.info(`audio error called, errMessage is ${error.message}`);//打印错误类型详细描述
Z
zengyawen 已提交
638
});
W
wusongqing 已提交
639
audioPlayer.setVolume(3);  //设置volume为无效值,触发'error'事件
Z
zengyawen 已提交
640 641 642
```

## AudioState
Z
zengyawen 已提交
643

W
wusongqing 已提交
644
音频播放的状态机。可通过state属性获取当前状态。
645

Z
zengyawen 已提交
646 647
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.AudioPlayer。

W
wusongqing 已提交
648 649 650 651 652 653 654
| 名称               | 类型   | 描述           |
| ------------------ | ------ | -------------- |
| idle               | string | 音频播放空闲。 |
| playing            | string | 音频正在播放。 |
| paused             | string | 音频暂停播放。 |
| stopped            | string | 音频播放停止。 |
| error<sup>8+</sup> | string | 错误状态。     |
655

656 657
## VideoPlayer<sup>8+</sup>

Z
zengyawen 已提交
658
视频播放管理类,用于管理和播放视频媒体。在调用VideoPlayer的方法前,需要先通过[createVideoPlayer()](#mediacreatevideoplayer8)构建一个[VideoPlayer](#videoplayer8)实例。
659

W
wusongqing 已提交
660
视频播放demo可参考:[视频播放开发指导](../../media/video-playback.md)
661

Z
zengyawen 已提交
662
### 属性<a name=videoplayer_属性></a>
663

Z
zengyawen 已提交
664 665 666 667
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoPlayer。

| 名称                     | 类型                               | 可读 | 可写 | 说明                                                         |
| ------------------------ | ---------------------------------- | ---- | ---- | ------------------------------------------------------------ |
Z
zengyawen 已提交
668
| 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、hls网络播放路径:开发中<br/>**注意事项**<br>使用媒体素材需要获取读权限,否则无法正常播放。 |
Z
zengyawen 已提交
669 670 671 672 673 674
| loop<sup>8+</sup>        | boolean                            | 是   | 是   | 视频循环播放属性,设置为'true'表示循环播放。                 |
| currentTime<sup>8+</sup> | number                             | 是   | 否   | 视频的当前播放位置。                                         |
| duration<sup>8+</sup>    | number                             | 是   | 否   | 视频时长,返回-1表示直播模式。                               |
| state<sup>8+</sup>       | [VideoPlayState](#videoplaystate8) | 是   | 否   | 视频播放的状态。                                             |
| width<sup>8+</sup>       | number                             | 是   | 否   | 视频宽。                                                     |
| height<sup>8+</sup>      | number                             | 是   | 否   | 视频高。                                                     |
675 676 677 678 679

### setDisplaySurface<sup>8+</sup>

setDisplaySurface(surfaceId: string, callback: AsyncCallback\<void>): void

W
wusongqing 已提交
680
通过回调方式设置SurfaceId。
B
bird_j 已提交
681

682 683
*注意:SetDisplaySurface需要在设置url和Prepare之间,无音频的视频流必须设置Surface否则Prepare失败。

Z
zengyawen 已提交
684 685
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
686
**参数:**
687

W
wusongqing 已提交
688
| 参数名    | 类型     | 必填 | 说明                      |
689
| --------- | -------- | ---- | ------------------------- |
W
wusongqing 已提交
690 691
| surfaceId | string   | 是   | SurfaceId                 |
| callback  | function | 是   | 设置SurfaceId的回调方法。 |
692

W
wusongqing 已提交
693
**示例:**
694 695 696

```js
videoPlayer.setDisplaySurface(surfaceId, (err) => {
A
tab  
abc12133 已提交
697 698 699
    if (typeof (err) == 'undefined') {
        console.info('setDisplaySurface success!');
    } else {
700 701 702 703 704 705 706 707 708
        console.info('setDisplaySurface fail!');
    }
});
```

### setDisplaySurface<sup>8+</sup>

setDisplaySurface(surfaceId: string): Promise\<void>

W
wusongqing 已提交
709
通过Promise方式设置SurfaceId。
710

711 712
*注意:SetDisplaySurface需要在设置url和Prepare之间,无音频的视频流必须设置Surface否则Prepare失败。

Z
zengyawen 已提交
713 714
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
715
**参数:**
B
bird_j 已提交
716

W
wusongqing 已提交
717
| 参数名    | 类型   | 必填 | 说明      |
718
| --------- | ------ | ---- | --------- |
W
wusongqing 已提交
719
| surfaceId | string | 是   | SurfaceId |
720

W
wusongqing 已提交
721
**返回值:**
722

Z
zengyawen 已提交
723 724 725
| 类型           | 说明                           |
| -------------- | ------------------------------ |
| Promise\<void> | 设置SurfaceId的Promise返回值。 |
726

W
wusongqing 已提交
727
**示例:**
728 729

```js
730
videoPlayer.setDisplaySurface(surfaceId).then(() => {
731
    console.info('setDisplaySurface success');
732 733 734
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
735 736 737 738 739 740
```

### prepare<sup>8+</sup>

prepare(callback: AsyncCallback\<void>): void

W
wusongqing 已提交
741
通过回调方式准备播放视频。
B
bird_j 已提交
742

Z
zengyawen 已提交
743 744
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
745
**参数:**
746

W
wusongqing 已提交
747
| 参数名   | 类型     | 必填 | 说明                     |
748
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
749
| callback | function | 是   | 准备播放视频的回调方法。 |
750

W
wusongqing 已提交
751
**示例:**
752 753 754

```js
videoPlayer.prepare((err) => {
A
tab  
abc12133 已提交
755 756 757
    if (typeof (err) == 'undefined') {
        console.info('prepare success!');
    } else {
758 759 760 761 762 763 764 765 766
        console.info('prepare fail!');
    }
});
```

### prepare<sup>8+</sup>

prepare(): Promise\<void>

W
wusongqing 已提交
767
通过Promise方式准备播放视频。
768

Z
zengyawen 已提交
769 770
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
771
**返回值:**
B
bird_j 已提交
772

W
wusongqing 已提交
773
| 类型           | 说明                          |
774
| -------------- | ----------------------------- |
W
wusongqing 已提交
775
| Promise\<void> | 准备播放视频的Promise返回值。 |
776

W
wusongqing 已提交
777
**示例:**
778 779

```js
780
videoPlayer.prepare().then(() => {
781
    console.info('prepare success');
782 783 784
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
785 786 787 788 789 790
```

### play<sup>8+</sup>

play(callback: AsyncCallback\<void>): void;

W
wusongqing 已提交
791
通过回调方式开始播放视频。
B
bird_j 已提交
792

Z
zengyawen 已提交
793 794
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
795
**参数:**
796

W
wusongqing 已提交
797
| 参数名   | 类型     | 必填 | 说明                     |
798
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
799
| callback | function | 是   | 开始播放视频的回调方法。 |
800

W
wusongqing 已提交
801
**示例:**
802 803 804

```js
videoPlayer.play((err) => {
A
tab  
abc12133 已提交
805 806 807
    if (typeof (err) == 'undefined') {
        console.info('play success!');
    } else {
808 809 810 811 812 813 814 815 816
        console.info('play fail!');
    }
});
```

### play<sup>8+</sup>

play(): Promise\<void>;

W
wusongqing 已提交
817
通过Promise方式开始播放视频。
818

Z
zengyawen 已提交
819 820
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
821
**返回值:**
B
bird_j 已提交
822

W
wusongqing 已提交
823
| 类型           | 说明                          |
824
| -------------- | ----------------------------- |
W
wusongqing 已提交
825
| Promise\<void> | 开始播放视频的Promise返回值。 |
826

W
wusongqing 已提交
827
**示例:**
828 829

```js
830
videoPlayer.play().then(() => {
831
    console.info('play success');
832 833 834
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
835 836 837 838 839 840
```

### pause<sup>8+</sup>

pause(callback: AsyncCallback\<void>): void

W
wusongqing 已提交
841
通过回调方式暂停播放视频。
B
bird_j 已提交
842

Z
zengyawen 已提交
843 844
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
845
**参数:**
846

W
wusongqing 已提交
847
| 参数名   | 类型     | 必填 | 说明                     |
848
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
849
| callback | function | 是   | 暂停播放视频的回调方法。 |
850

W
wusongqing 已提交
851
**示例:**
852 853 854

```js
videoPlayer.pause((err) => {
A
tab  
abc12133 已提交
855 856 857
    if (typeof (err) == 'undefined') {
        console.info('pause success!');
    } else {
858 859 860 861 862 863 864 865 866
        console.info('pause fail!');
    }
});
```

### pause<sup>8+</sup>

pause(): Promise\<void>

W
wusongqing 已提交
867
通过Promise方式暂停播放视频。
868

Z
zengyawen 已提交
869 870
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
871
**返回值:**
B
bird_j 已提交
872

W
wusongqing 已提交
873
| 类型           | 说明                          |
874
| -------------- | ----------------------------- |
W
wusongqing 已提交
875
| Promise\<void> | 暂停播放视频的Promise返回值。 |
876

W
wusongqing 已提交
877
**示例:**
878 879

```js
880
videoPlayer.pause().then(() => {
881
    console.info('pause success');
882 883 884
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
885 886 887 888 889 890
```

### stop<sup>8+</sup>

stop(callback: AsyncCallback\<void>): void

W
wusongqing 已提交
891
通过回调方式停止播放视频。
B
bird_j 已提交
892

Z
zengyawen 已提交
893 894
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
895
**参数:**
896

W
wusongqing 已提交
897
| 参数名   | 类型     | 必填 | 说明                     |
898
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
899
| callback | function | 是   | 停止播放视频的回调方法。 |
900

W
wusongqing 已提交
901
**示例:**
902 903 904

```js
videoPlayer.stop((err) => {
A
tab  
abc12133 已提交
905 906 907
    if (typeof (err) == 'undefined') {
        console.info('stop success!');
    } else {
908 909 910 911 912 913 914 915 916
        console.info('stop fail!');
    }
});
```

### stop<sup>8+</sup>

stop(): Promise\<void>

W
wusongqing 已提交
917
通过Promise方式停止播放视频。
B
bird_j 已提交
918

Z
zengyawen 已提交
919 920
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
921
**返回值:**
922

W
wusongqing 已提交
923
| 类型           | 说明                          |
924
| -------------- | ----------------------------- |
W
wusongqing 已提交
925
| Promise\<void> | 停止播放视频的Promise返回值。 |
926

W
wusongqing 已提交
927
**示例:**
928 929

```js
930
videoPlayer.stop().then(() => {
931
    console.info('stop success');
932 933 934
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
935 936 937 938 939 940
```

### reset<sup>8+</sup>

reset(callback: AsyncCallback\<void>): void

W
wusongqing 已提交
941
通过回调方式切换播放视频。
942

Z
zengyawen 已提交
943 944
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
945
**参数:**
B
bird_j 已提交
946

W
wusongqing 已提交
947
| 参数名   | 类型     | 必填 | 说明                     |
948
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
949
| callback | function | 是   | 切换播放视频的回调方法。 |
950

W
wusongqing 已提交
951
**示例:**
952 953 954

```js
videoPlayer.reset((err) => {
A
tab  
abc12133 已提交
955 956 957
    if (typeof (err) == 'undefined') {
        console.info('reset success!');
    } else {
958 959 960 961 962 963 964 965 966
        console.info('reset fail!');
    }
});
```

### reset<sup>8+</sup>

reset(): Promise\<void>

W
wusongqing 已提交
967
通过Promise方式切换播放视频。
B
bird_j 已提交
968

Z
zengyawen 已提交
969 970
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
971
**返回值:**
972

W
wusongqing 已提交
973
| 类型           | 说明                          |
974
| -------------- | ----------------------------- |
W
wusongqing 已提交
975
| Promise\<void> | 切换播放视频的Promise返回值。 |
976

W
wusongqing 已提交
977
**示例:**
978 979

```js
980
videoPlayer.reset().then(() => {
981
    console.info('reset success');
982 983 984
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
985 986 987 988 989 990
```

### seek<sup>8+</sup>

seek(timeMs: number, callback: AsyncCallback\<number>): void

W
wusongqing 已提交
991
通过回调方式跳转到指定播放位置,默认跳转到指定时间点的下一个关键帧。
992

Z
zengyawen 已提交
993 994
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
995
**参数:**
B
bird_j 已提交
996

Z
zengyawen 已提交
997 998 999 1000
| 参数名   | 类型     | 必填 | 说明                                 |
| -------- | -------- | ---- | ------------------------------------ |
| timeMs   | number   | 是   | 指定的跳转时间节点,单位毫秒(ms)。 |
| callback | function | 是   | 跳转到指定播放位置的回调方法。       |
1001

W
wusongqing 已提交
1002
**示例:**
1003 1004 1005

```js
videoPlayer.seek((seekTime, err) => {
A
tab  
abc12133 已提交
1006 1007 1008
    if (typeof (err) == 'undefined') {
        console.info('seek success!');
    } else {
1009 1010 1011 1012 1013 1014 1015 1016 1017
        console.info('seek fail!');
    }
});
```

### seek<sup>8+</sup>

seek(timeMs: number, mode:SeekMode, callback: AsyncCallback\<number>): void

W
wusongqing 已提交
1018
通过回调方式跳转到指定播放位置。
B
bird_j 已提交
1019

Z
zengyawen 已提交
1020 1021
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
1022
**参数:**
1023

Z
zengyawen 已提交
1024 1025 1026 1027 1028
| 参数名   | 类型                   | 必填 | 说明                                 |
| -------- | ---------------------- | ---- | ------------------------------------ |
| timeMs   | number                 | 是   | 指定的跳转时间节点,单位毫秒(ms)。 |
| mode     | [SeekMode](#seekmode8) | 是   | 跳转模式。                           |
| callback | function               | 是   | 跳转到指定播放位置的回调方法。       |
1029

W
wusongqing 已提交
1030
**示例:**
1031 1032 1033

```js
videoPlayer.seek((seekTime, seekMode, err) => {
A
tab  
abc12133 已提交
1034 1035 1036
    if (typeof (err) == 'undefined') {
        console.info('seek success!');
    } else {
1037 1038 1039 1040 1041 1042 1043 1044 1045
        console.info('seek fail!');
    }
});
```

### seek<sup>8+</sup>

seek(timeMs: number, mode?:SeekMode): Promise\<number>

W
wusongqing 已提交
1046
通过Promise方式跳转到指定播放位置,如果没有设置mode则跳转到指定时间点的下一个关键帧。
1047

Z
zengyawen 已提交
1048 1049
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
1050
**参数:**
B
bird_j 已提交
1051

Z
zengyawen 已提交
1052 1053 1054 1055
| 参数名 | 类型                   | 必填 | 说明                                 |
| ------ | ---------------------- | ---- | ------------------------------------ |
| timeMs | number                 | 是   | 指定的跳转时间节点,单位毫秒(ms)。 |
| mode   | [SeekMode](#seekmode8) | 否   | 跳转模式。                           |
1056

W
wusongqing 已提交
1057
**返回值:**
1058

W
wusongqing 已提交
1059
| 类型           | 说明                                |
1060
| -------------- | ----------------------------------- |
W
wusongqing 已提交
1061
| Promise\<void> | 跳转到指定播放位置的Promise返回值。 |
1062

W
wusongqing 已提交
1063
**示例:**
1064 1065

```js
1066
videoPlayer.seek(seekTime).then((seekDoneTime) => { // seekDoneTime表示seek完成后的时间点
1067
    console.info('seek success');
1068 1069 1070
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1071

1072
videoPlayer.seek(seekTime, seekMode).then((seekDoneTime) => {
1073
    console.info('seek success');
1074 1075 1076
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1077 1078 1079 1080 1081 1082
```

### setVolume<sup>8+</sup>

setVolume(vol: number, callback: AsyncCallback\<void>): void

W
wusongqing 已提交
1083
通过回调方式设置音量。
B
bird_j 已提交
1084

Z
zengyawen 已提交
1085 1086
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
1087
**参数:**
1088

W
wusongqing 已提交
1089
| 参数名   | 类型     | 必填 | 说明                                                         |
1090
| -------- | -------- | ---- | ------------------------------------------------------------ |
W
wusongqing 已提交
1091 1092
| vol      | number   | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
| callback | function | 是   | 设置音量的回调方法。                                         |
1093

W
wusongqing 已提交
1094
**示例:**
1095 1096 1097

```js
videoPlayer.setVolume((vol, err) => {
A
tab  
abc12133 已提交
1098 1099 1100
    if (typeof (err) == 'undefined') {
        console.info('setVolume success!');
    } else {
1101 1102 1103 1104 1105 1106 1107 1108 1109
        console.info('setVolume fail!');
    }
});
```

### setVolume<sup>8+</sup>

setVolume(vol: number): Promise\<void>

W
wusongqing 已提交
1110
通过Promise方式设置音量。
1111

Z
zengyawen 已提交
1112 1113
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
1114
**参数:**
B
bird_j 已提交
1115

W
wusongqing 已提交
1116
| 参数名 | 类型   | 必填 | 说明                                                         |
1117
| ------ | ------ | ---- | ------------------------------------------------------------ |
W
wusongqing 已提交
1118
| vol    | number | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
1119

W
wusongqing 已提交
1120
**返回值:**
1121

W
wusongqing 已提交
1122
| 类型           | 说明                      |
1123
| -------------- | ------------------------- |
W
wusongqing 已提交
1124
| Promise\<void> | 设置音量的Promise返回值。 |
1125

W
wusongqing 已提交
1126
**示例:**
1127 1128

```js
1129
videoPlayer.setVolume(vol).then() => {
1130
    console.info('setVolume success');
1131 1132 1133
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1134 1135 1136 1137 1138 1139
```

### release<sup>8+</sup>

release(callback: AsyncCallback\<void>): void

W
wusongqing 已提交
1140
通过回调方式释放视频资源。
B
bird_j 已提交
1141

Z
zengyawen 已提交
1142 1143
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
1144
**参数:**
1145

W
wusongqing 已提交
1146
| 参数名   | 类型     | 必填 | 说明                     |
1147
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
1148
| callback | function | 是   | 释放视频资源的回调方法。 |
1149

W
wusongqing 已提交
1150
**示例:**
1151 1152 1153

```js
videoPlayer.release((err) => {
A
tab  
abc12133 已提交
1154 1155 1156
    if (typeof (err) == 'undefined') {
        console.info('release success!');
    } else {
1157 1158 1159 1160 1161 1162 1163 1164 1165
        console.info('release fail!');
    }
});
```

### release<sup>8+</sup>

release(): Promise\<void>

W
wusongqing 已提交
1166
通过Promise方式释放视频资源。
B
bird_j 已提交
1167

Z
zengyawen 已提交
1168 1169
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
1170
**返回值:**
1171

W
wusongqing 已提交
1172
| 类型           | 说明                          |
1173
| -------------- | ----------------------------- |
W
wusongqing 已提交
1174
| Promise\<void> | 释放视频资源的Promise返回值。 |
1175

W
wusongqing 已提交
1176
**示例:**
1177 1178

```js
1179
videoPlayer.release().then() => {
1180
    console.info('release success');
1181 1182 1183
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1184 1185 1186 1187
```

### getTrackDescription<sup>8+</sup>

Z
zengyawen 已提交
1188
getTrackDescription(callback: AsyncCallback<Array\<MediaDescription>>): void
1189

W
wusongqing 已提交
1190
通过回调方式获取视频轨道信息。
1191

Z
zengyawen 已提交
1192 1193
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
1194
**参数:**
B
bird_j 已提交
1195

Z
zengyawen 已提交
1196 1197 1198
| 参数名   | 类型                                                         | 必填 | 说明                       |
| -------- | ------------------------------------------------------------ | ---- | -------------------------- |
| callback | AsyncCallback<Array<[MediaDescription](#mediadescription8)>> | 是   | 获取视频轨道信息回调方法。 |
1199

W
wusongqing 已提交
1200
**示例:**
1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223

```js
function printfDescription(obj) {
    for (let item in obj) {
        let property = obj[item];
        console.info('video key is ' + item);
        console.info('video value is ' + property);
    }
}

videoPlayer.getTrackDescription((error, arrlist) => {
    if (typeof (arrlist) != 'undefined') {
        for (let i = 0; i < arrlist.length; i++) {
            printfDescription(arrlist[i]);
        }
    } else {
        console.log(`video getTrackDescription fail, error:${error.message}`);
    }
});
```

### getTrackDescription<sup>8+</sup>

Z
zengyawen 已提交
1224
getTrackDescription(): Promise<Array\<MediaDescription>>
1225

W
wusongqing 已提交
1226
通过Promise方式获取视频轨道信息。
B
bird_j 已提交
1227

Z
zengyawen 已提交
1228 1229
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
1230
**返回值:**
1231

Z
zengyawen 已提交
1232 1233 1234
| 类型                                                   | 说明                            |
| ------------------------------------------------------ | ------------------------------- |
| Promise<Array<[MediaDescription](#mediadescription8)>> | 获取视频轨道信息Promise返回值。 |
1235

W
wusongqing 已提交
1236
**示例:**
1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247

```js
function printfDescription(obj) {
    for (let item in obj) {
        let property = obj[item];
        console.info('video key is ' + item);
        console.info('video value is ' + property);
    }
}

let arrayDescription;
1248
videoPlayer.getTrackDescription().then((arrlist) => {
1249 1250 1251 1252 1253
    if (typeof (arrlist) != 'undefined') {
        arrayDescription = arrlist;
    } else {
        console.log('video getTrackDescription fail');
    }
1254 1255 1256
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1257 1258 1259 1260 1261 1262 1263 1264 1265
for (let i = 0; i < arrayDescription.length; i++) {
    printfDescription(arrayDescription[i]);
}
```

### setSpeed<sup>8+</sup>

setSpeed(speed:number, callback: AsyncCallback\<number>): void

W
wusongqing 已提交
1266
通过回调方式设置播放速度。
1267

Z
zengyawen 已提交
1268 1269
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
1270
**参数:**
B
bird_j 已提交
1271

W
wusongqing 已提交
1272
| 参数名   | 类型     | 必填 | 说明                                                       |
1273
| -------- | -------- | ---- | ---------------------------------------------------------- |
W
wusongqing 已提交
1274 1275
| speed    | number   | 是   | 指定播放视频速度,具体见[PlaybackSpeed](#playbackspeed8)。 |
| callback | function | 是   | 设置播放速度的回调方法。                                   |
1276

W
wusongqing 已提交
1277
**示例:**
1278 1279 1280

```js
videoPlayer.setSpeed((speed:number, err) => {
A
tab  
abc12133 已提交
1281 1282 1283
    if (typeof (err) == 'undefined') {
        console.info('setSpeed success!');
    } else {
1284 1285 1286 1287 1288 1289 1290 1291 1292
        console.info('setSpeed fail!');
    }
});
```

### setSpeed<sup>8+</sup>

setSpeed(speed:number): Promise\<number>

W
wusongqing 已提交
1293
通过Promise方式设置播放速度。
B
bird_j 已提交
1294

Z
zengyawen 已提交
1295 1296
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
1297
**参数:**
1298

W
wusongqing 已提交
1299
| 参数名 | 类型   | 必填 | 说明                                                       |
1300
| ------ | ------ | ---- | ---------------------------------------------------------- |
W
wusongqing 已提交
1301
| speed  | number | 是   | 指定播放视频速度,具体见[PlaybackSpeed](#playbackspeed8)。 |
1302

Z
zengyawen 已提交
1303 1304 1305 1306 1307 1308
**返回值:**

| 类型             | 说明                      |
| ---------------- | ------------------------- |
| Promise\<number> | 通过Promise获取设置结果。 |

W
wusongqing 已提交
1309
**示例:**
1310 1311

```js
1312
videoPlayer.setSpeed(speed).then() => {
1313
    console.info('setSpeed success');
1314 1315 1316
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1317 1318 1319 1320 1321 1322
```

### on('playbackCompleted')<sup>8+</sup>

on(type: 'playbackCompleted', callback: Callback\<void>): void

W
wusongqing 已提交
1323
开始监听视频播放完成事件。
1324

Z
zengyawen 已提交
1325 1326
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
1327
**参数:**
B
bird_j 已提交
1328

W
wusongqing 已提交
1329
| 参数名   | 类型     | 必填 | 说明                                                        |
1330
| -------- | -------- | ---- | ----------------------------------------------------------- |
W
wusongqing 已提交
1331 1332
| type     | string   | 是   | 视频播放完成事件回调类型,支持的事件:'playbackCompleted'。 |
| callback | function | 是   | 视频播放完成事件回调方法。                                  |
1333

W
wusongqing 已提交
1334
**示例:**
1335 1336 1337

```js
videoPlayer.on('playbackCompleted', () => {
A
tab  
abc12133 已提交
1338
    console.info('playbackCompleted success!');
1339 1340 1341 1342 1343 1344 1345
});
```

### on('bufferingUpdate')<sup>8+</sup>

on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: number) => void): void

W
wusongqing 已提交
1346
开始监听视频缓存更新事件。
B
bird_j 已提交
1347

Z
zengyawen 已提交
1348 1349
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
1350
**参数:**
1351

W
wusongqing 已提交
1352
| 参数名   | 类型     | 必填 | 说明                                                         |
1353
| -------- | -------- | ---- | ------------------------------------------------------------ |
W
wusongqing 已提交
1354 1355
| type     | string   | 是   | 视频缓存事件回调类型,支持的事件:'bufferingUpdate'。        |
| callback | function | 是   | 视频缓存事件回调方法。<br>[BufferingInfoType](#bufferinginfotype8)为BUFFERING_PERCENT或CACHED_DURATION时,value值有效,否则固定为0。 |
1356

W
wusongqing 已提交
1357
**示例:**
1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369

```js
videoPlayer.on('bufferingUpdate', (infoType, value) => {
    console.log('video bufferingInfo type: ' + infoType);
    console.log('video bufferingInfo value: ' + value);
});
```

### on('startRenderFrame')<sup>8+</sup>

on(type: 'startRenderFrame', callback: Callback\<void>): void

W
wusongqing 已提交
1370
开始监听视频播放首帧送显上报事件。
1371

Z
zengyawen 已提交
1372 1373
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
1374
**参数:**
B
bird_j 已提交
1375

Z
zengyawen 已提交
1376 1377 1378 1379
| 参数名   | 类型            | 必填 | 说明                                                         |
| -------- | --------------- | ---- | ------------------------------------------------------------ |
| type     | string          | 是   | 视频播放首帧送显上报事件回调类型,支持的事件:'startRenderFrame'。 |
| callback | Callback\<void> | 是   | 视频播放首帧送显上报事件回调方法。                           |
1380

W
wusongqing 已提交
1381
**示例:**
1382 1383 1384

```js
videoPlayer.on('startRenderFrame', () => {
A
tab  
abc12133 已提交
1385
    console.info('startRenderFrame success!');
1386 1387 1388 1389 1390 1391 1392
});
```

### on('videoSizeChanged')<sup>8+</sup>

on(type: 'videoSizeChanged', callback: (width: number, height: number) => void): void

W
wusongqing 已提交
1393
开始监听视频播放宽高变化事件。
B
bird_j 已提交
1394

Z
zengyawen 已提交
1395 1396
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
1397
**参数:**
1398

W
wusongqing 已提交
1399
| 参数名   | 类型     | 必填 | 说明                                                         |
1400
| -------- | -------- | ---- | ------------------------------------------------------------ |
W
wusongqing 已提交
1401 1402
| type     | string   | 是   | 视频播放宽高变化事件回调类型,支持的事件:'videoSizeChanged'。 |
| callback | function | 是   | 视频播放宽高变化事件回调方法,width表示宽,height表示高。    |
1403

W
wusongqing 已提交
1404
**示例:**
1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416

```js
videoPlayer.on('videoSizeChanged', (width, height) => {
    console.log('video width is: ' + width);
    console.log('video height is: ' + height);
});
```

### on('error')<sup>8+</sup>

on(type: 'error', callback: ErrorCallback): void

W
wusongqing 已提交
1417
开始监听视频播放错误事件。
B
bird_j 已提交
1418

Z
zengyawen 已提交
1419 1420
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer

W
wusongqing 已提交
1421
**参数:**
1422

Z
zengyawen 已提交
1423 1424 1425 1426
| 参数名   | 类型          | 必填 | 说明                                                         |
| -------- | ------------- | ---- | ------------------------------------------------------------ |
| type     | string        | 是   | 播放错误事件回调类型,支持的事件包括:'error'。<br>- 'error':视频播放中发生错误,触发该事件。 |
| callback | ErrorCallback | 是   | 播放错误事件回调方法。                                       |
1427

W
wusongqing 已提交
1428
**示例:**
1429 1430

```js
W
wusongqing 已提交
1431
videoPlayer.on('error', (error) => {      // 设置'error'事件回调
A
tab  
abc12133 已提交
1432
    console.info(`video error called, errName is ${error.name}`);      // 打印错误类型名称
W
wusongqing 已提交
1433 1434
    console.info(`video error called, errCode is ${error.code}`);      // 打印错误码
    console.info(`video error called, errMessage is ${error.message}`);// 打印错误类型详细描述
1435
});
W
wusongqing 已提交
1436
videoPlayer.setVolume(3);  //设置volume为无效值,触发'error'事件
1437 1438 1439 1440
```

## VideoPlayState<sup>8+</sup>

W
wusongqing 已提交
1441
视频播放的状态机,可通过state属性获取当前状态。
1442

Z
zengyawen 已提交
1443 1444
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoPlayer。

W
wusongqing 已提交
1445 1446 1447 1448 1449 1450 1451 1452
| 名称     | 类型   | 描述           |
| -------- | ------ | -------------- |
| idle     | string | 视频播放空闲。 |
| prepared | string | 视频播放准备。 |
| playing  | string | 视频正在播放。 |
| paused   | string | 视频暂停播放。 |
| stopped  | string | 视频播放停止。 |
| error    | string | 错误状态。     |
1453 1454 1455

## SeekMode<sup>8+</sup>

W
wusongqing 已提交
1456
视频播放的Seek模式枚举,可通过seek方法作为参数传递下去。
1457

Z
zengyawen 已提交
1458 1459 1460 1461 1462 1463
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。

| 名称           | 值   | 描述                                                         |
| -------------- | ---- | ------------------------------------------------------------ |
| SEEK_NEXT_SYNC | 0    | 表示跳转到指定时间点的下一个关键帧,建议向后快进的时候用这个枚举值。 |
| SEEK_PREV_SYNC | 1    | 表示跳转到指定时间点的上一个关键帧,建议向前快进的时候用这个枚举值。 |
1464 1465 1466

## PlaybackSpeed<sup>8+</sup>

W
wusongqing 已提交
1467
视频播放的倍速枚举,可通过setSpeed方法作为参数传递下去。
1468

Z
zengyawen 已提交
1469 1470
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoPlayer。

W
wusongqing 已提交
1471 1472 1473 1474 1475 1476 1477
| 名称                 | 值   | 描述                           |
| -------------------- | ---- | ------------------------------ |
| SPEED_FORWARD_0_75_X | 0    | 表示视频播放正常播速的0.75倍。 |
| SPEED_FORWARD_1_00_X | 1    | 表示视频播放正常播速。         |
| SPEED_FORWARD_1_25_X | 2    | 表示视频播放正常播速的1.25倍。 |
| SPEED_FORWARD_1_75_X | 3    | 表示视频播放正常播速的1.75倍。 |
| SPEED_FORWARD_2_00_X | 4    | 表示视频播放正常播速的2.00倍。 |
1478

1479 1480
## MediaDescription<sup>8+</sup>

Z
zengyawen 已提交
1481
### [key : string] : Object
Z
zengyawen 已提交
1482

Z
zengyawen 已提交
1483 1484 1485
通过key-value方式获取媒体信息。

**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。
1486

W
wusongqing 已提交
1487
| 名称  | 类型   | 说明                                                         |
1488
| ----- | ------ | ------------------------------------------------------------ |
W
wusongqing 已提交
1489 1490
| key   | string | 通过key值获取对应的value。key值具体可见[MediaDescriptionKey](#mediadescriptionkey8)。 |
| value | any    | 对应key值得value。其类型可为任意类型,具体key对应value的类型可参考[MediaDescriptionKey](#mediadescriptionkey8)的描述信息。 |
1491

W
wusongqing 已提交
1492
**示例:**
1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503

```js
function printfItemDescription(obj, key) {
    let property = obj[key];
    console.info('audio key is ' + key);
    console.info('audio value is ' + property);
}

audioPlayer.getTrackDescription((error, arrlist) => {
    if (typeof (arrlist) != 'undefined') {
        for (let i = 0; i < arrlist.length; i++) {
W
wusongqing 已提交
1504
            printfItemDescription(arrlist[i], MD_KEY_TRACK_TYPE);  //打印出每条轨道MD_KEY_TRACK_TYPE的值
1505 1506 1507 1508 1509 1510
        }
    } else {
        console.log(`audio getTrackDescription fail, error:${error.message}`);
    }
});
```
Z
zengyawen 已提交
1511 1512 1513

## AudioRecorder

Z
zengyawen 已提交
1514
音频录制管理类,用于录制音频媒体。在调用AudioRecorder的方法前,需要先通过[createAudioRecorder()](#mediacreateaudiorecorder) 构建一个[AudioRecorder](#audiorecorder)实例。
Z
zengyawen 已提交
1515

W
wusongqing 已提交
1516
音频录制demo可参考:[音频录制开发指导](../../media/audio-recorder.md)
1517 1518

### prepare<a name=audiorecorder_prepare></a>
Z
zengyawen 已提交
1519 1520 1521

prepare(config: AudioRecorderConfig): void

W
wusongqing 已提交
1522
录音准备。
Z
zengyawen 已提交
1523

Z
zengyawen 已提交
1524 1525 1526 1527
**需要权限:** ohos.permission.MICROPHONE

**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder

W
wusongqing 已提交
1528
**参数:**
B
bird_j 已提交
1529

W
wusongqing 已提交
1530
| 参数名 | 类型                                        | 必填 | 说明                                                         |
Z
zengyawen 已提交
1531
| ------ | ------------------------------------------- | ---- | ------------------------------------------------------------ |
W
wusongqing 已提交
1532
| config | [AudioRecorderConfig](#audiorecorderconfig) | 是   | 配置录音的相关参数,包括音频输出URI、[编码格式](#audioencoder)、采样率、声道数、[输出格式](#audiooutputformat)等。 |
Z
zengyawen 已提交
1533

W
wusongqing 已提交
1534
**示例:**
Z
zengyawen 已提交
1535

1536
```js
Z
zengyawen 已提交
1537
let audioRecorderConfig = {
1538
    audioEncoder : media.AudioEncoder.AAC_LC,
Z
zengyawen 已提交
1539 1540 1541
    audioEncodeBitRate : 22050,
    audioSampleRate : 22050,
    numberOfChannels : 2,
1542
    format : media.AudioOutputFormat.AAC_ADTS,
Z
zengyawen 已提交
1543
    uri : 'fd://1',       // 文件需先由调用者创建,并给予适当的权限
1544
    location : { latitude : 30, longitude : 130},
Z
zengyawen 已提交
1545
}
W
wusongqing 已提交
1546
audioRecorder.on('prepare', () => {    //设置'prepare'事件回调
1547 1548
    console.log('prepare success');
});
B
bird_j 已提交
1549
audioRecorder.prepare(audioRecorderConfig);
Z
zengyawen 已提交
1550 1551 1552
```


1553
### start<a name=audiorecorder_start></a>
Z
zengyawen 已提交
1554 1555 1556

start(): void

W
wusongqing 已提交
1557
开始录制,需在[prepare](#audiorecorder_on)事件成功触发后,才能调用start方法。
B
bird_j 已提交
1558

Z
zengyawen 已提交
1559 1560
**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder

W
wusongqing 已提交
1561
**示例:**
Z
zengyawen 已提交
1562

1563
```js
W
wusongqing 已提交
1564
audioRecorder.on('start', () => {    //设置'start'事件回调
1565 1566 1567
    console.log('audio recorder start success');
});
audioRecorder.start();
Z
zengyawen 已提交
1568
```
1569 1570 1571 1572 1573

### pause<a name=audiorecorder_pause></a>

pause():void

W
wusongqing 已提交
1574
暂停录制,需要在[start](#audiorecorder_on)事件成功触发后,才能调用pause方法。
1575

Z
zengyawen 已提交
1576 1577
**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder

W
wusongqing 已提交
1578
**示例:**
1579 1580

```js
W
wusongqing 已提交
1581
audioRecorder.on('pause', () => {    //设置'pause'事件回调
1582 1583 1584 1585 1586 1587 1588 1589 1590
    console.log('audio recorder pause success');
});
audioRecorder.pause();
```

### resume<a name=audiorecorder_resume></a>

resume():void

Z
zengyawen 已提交
1591
恢复录制,需要在[pause](#audiorecorder_on)事件成功触发后,才能调用resume方法。
B
bird_j 已提交
1592

Z
zengyawen 已提交
1593 1594
**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder

W
wusongqing 已提交
1595
**示例:**
1596 1597

```js
W
wusongqing 已提交
1598
audioRecorder.on('resume', () => {    //设置'resume'事件回调
1599 1600 1601
    console.log('audio recorder resume success');
});
audioRecorder.resume();
Z
zengyawen 已提交
1602 1603
```

1604
### stop<a name=audiorecorder_stop></a>
Z
zengyawen 已提交
1605 1606 1607

stop(): void

W
wusongqing 已提交
1608
停止录音。
Z
zengyawen 已提交
1609

Z
zengyawen 已提交
1610 1611
**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder

W
wusongqing 已提交
1612
**示例:**
Z
zengyawen 已提交
1613

1614
```js
W
wusongqing 已提交
1615
audioRecorder.on('stop', () => {    //设置'stop'事件回调
1616 1617 1618
    console.log('audio recorder stop success');
});
audioRecorder.stop();
Z
zengyawen 已提交
1619 1620
```

1621
### release<a name=audiorecorder_release></a>
Z
zengyawen 已提交
1622 1623 1624

release(): void

W
wusongqing 已提交
1625
释放录音资源。
B
bird_j 已提交
1626

Z
zengyawen 已提交
1627 1628
**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder

W
wusongqing 已提交
1629
**示例:**
Z
zengyawen 已提交
1630

1631
```js
W
wusongqing 已提交
1632
audioRecorder.on('release', () => {    //设置'release'事件回调
B
bird_j 已提交
1633 1634
    console.log('audio recorder release success');
});
1635 1636
audioRecorder.release();
audioRecorder = undefined;
Z
zengyawen 已提交
1637 1638
```

1639
### reset<a name=audiorecorder_reset></a>
Z
zengyawen 已提交
1640 1641 1642

reset(): void

W
wusongqing 已提交
1643
重置录音。
Z
zengyawen 已提交
1644

W
wusongqing 已提交
1645
进行重置录音之前,需要先调用[stop()](#audiorecorder_stop)停止录音。重置录音之后,需要调用[prepare()](#audiorecorder_prepare)设置录音参数项,才能再次进行录音。
B
bird_j 已提交
1646

Z
zengyawen 已提交
1647 1648
**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder

W
wusongqing 已提交
1649
**示例:**
Z
zengyawen 已提交
1650

B
bird_j 已提交
1651
```js
W
wusongqing 已提交
1652
audioRecorder.on('reset', () => {    //设置'reset'事件回调
B
bird_j 已提交
1653 1654 1655
    console.log('audio recorder reset success');
});
audioRecorder.reset();
Z
zengyawen 已提交
1656 1657
```

B
bird_j 已提交
1658
### on('prepare' | 'start' | 'pause' | 'resume' | 'stop' | 'release' | 'reset')<a name=audiorecorder_on></a>
Z
zengyawen 已提交
1659

1660
on(type: 'prepare' | 'start' | 'pause' | 'resume' | 'stop' | 'release' | 'reset', callback: () => void): void
Z
zengyawen 已提交
1661

W
wusongqing 已提交
1662
开始订阅音频录制事件。
Z
zengyawen 已提交
1663

Z
zengyawen 已提交
1664 1665
**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder

W
wusongqing 已提交
1666
**参数:**
B
bird_j 已提交
1667

W
wusongqing 已提交
1668
| 参数名   | 类型     | 必填 | 说明                                                         |
Z
zengyawen 已提交
1669
| -------- | -------- | ---- | ------------------------------------------------------------ |
W
wusongqing 已提交
1670 1671
| 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)调用,音频重置为初始状态,触发该事件。 |
| callback | ()=>void | 是   | 录制事件回调方法。                                           |
Z
zengyawen 已提交
1672

W
wusongqing 已提交
1673
**示例:**
Z
zengyawen 已提交
1674

1675
```js
A
tab  
abc12133 已提交
1676
let audiorecorder = media.createAudioRecorder();                                  // 创建一个音频录制实例
1677 1678 1679 1680 1681 1682
let audioRecorderConfig = {
    audioEncoder : media.AudioEncoder.AAC_LC, ,
    audioEncodeBitRate : 22050,
    audioSampleRate : 22050,
    numberOfChannels : 2,
    format : media.AudioOutputFormat.AAC_ADTS,
Z
zengyawen 已提交
1683
    uri : 'fd://xx',                                                            // 文件需先由调用者创建,并给予适当的权限
1684 1685
    location : { latitude : 30, longitude : 130},
}
A
tab  
abc12133 已提交
1686 1687
audioRecorder.on('error', (error) => {                                             // 设置'error'事件回调
    console.info(`audio error called, errName is ${error.name}`);
1688 1689 1690
    console.info(`audio error called, errCode is ${error.code}`);
    console.info(`audio error called, errMessage is ${error.message}`);
});
A
tab  
abc12133 已提交
1691
audioRecorder.on('prepare', () => {                                              // 设置'prepare'事件回调
1692
    console.log('prepare success');
A
tab  
abc12133 已提交
1693
    audioRecorder.start();                                                       // 开始录制,并触发'start'事件回调
1694
});
A
tab  
abc12133 已提交
1695
audioRecorder.on('start', () => {                                                 // 设置'start'事件回调
1696 1697
    console.log('audio recorder start success');
});
A
tab  
abc12133 已提交
1698
audioRecorder.on('pause', () => {                                                 // 设置'pause'事件回调
1699 1700
    console.log('audio recorder pause success');
});
A
tab  
abc12133 已提交
1701
audioRecorder.on('resume', () => {                                                 // 设置'resume'事件回调
1702 1703
    console.log('audio recorder resume success');
});
A
tab  
abc12133 已提交
1704
audioRecorder.on('stop', () => {                                                 // 设置'stop'事件回调
1705 1706
    console.log('audio recorder stop success');
});
A
tab  
abc12133 已提交
1707
audioRecorder.on('release', () => {                                                 // 设置'release'事件回调
1708 1709
    console.log('audio recorder release success');
});
A
tab  
abc12133 已提交
1710
audioRecorder.on('reset', () => {                                                 // 设置'reset'事件回调
1711
    console.log('audio recorder reset success');
Z
zengyawen 已提交
1712
});
A
tab  
abc12133 已提交
1713
audioRecorder.prepare(audioRecorderConfig)                                       // 设置录制参数 ,并触发'prepare'事件回调
Z
zengyawen 已提交
1714 1715 1716 1717 1718 1719
```

### on('error')

on(type: 'error', callback: ErrorCallback): void

W
wusongqing 已提交
1720
开始订阅音频录制错误事件。
B
bird_j 已提交
1721

Z
zengyawen 已提交
1722 1723
**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder

W
wusongqing 已提交
1724
**参数:**
Z
zengyawen 已提交
1725

W
wusongqing 已提交
1726
| 参数名   | 类型          | 必填 | 说明                                                         |
Z
zengyawen 已提交
1727
| -------- | ------------- | ---- | ------------------------------------------------------------ |
W
wusongqing 已提交
1728 1729
| type     | string        | 是   | 录制错误事件回调类型'error'。<br/>-&nbsp;'error':音频录制过程中发生错误,触发该事件。 |
| callback | ErrorCallback | 是   | 录制错误事件回调方法。                                       |
Z
zengyawen 已提交
1730

W
wusongqing 已提交
1731
**示例:**
1732 1733

```js
A
tab  
abc12133 已提交
1734 1735
audioRecorder.on('error', (error) => {                                  // 设置'error'事件回调
    console.info(`audio error called, errName is ${error.name}`);       // 打印错误类型名称
W
wusongqing 已提交
1736 1737
    console.info(`audio error called, errCode is ${error.code}`);       // 打印错误码
    console.info(`audio error called, errMessage is ${error.message}`); // 打印错误类型详细描述
1738
});
A
tab  
abc12133 已提交
1739
audioRecorder.prepare();                                                  // prepare不设置参数,触发'error'事件
1740
```
Z
zengyawen 已提交
1741 1742 1743

## AudioRecorderConfig

W
wusongqing 已提交
1744
表示音频的录音配置。
Z
zengyawen 已提交
1745

Z
zengyawen 已提交
1746 1747
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.AudioRecorder。

W
wusongqing 已提交
1748
| 名称                  | 参数类型                                | 必填 | 说明                                                         |
1749
| --------------------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
W
wusongqing 已提交
1750 1751 1752 1753
| audioEncoder          | [AudioEncoder](#audioencoder)           | 否   | 音频编码格式,默认设置为AAC_LC。                             |
| audioEncodeBitRate    | number                                  | 否   | 音频编码比特率,默认值为48000。                              |
| audioSampleRate       | number                                  | 否   | 音频采集采样率,默认值为48000。                              |
| numberOfChannels      | number                                  | 否   | 音频采集声道数,默认值为2。                                  |
A
abc 已提交
1754
| format                | [AudioOutputFormat](#audiooutputformat) | 否   | 音频输出封装格式,默认设置为MPEG_4。                         |
1755 1756
| location              | [Location](#location)                   | 否   | 音频采集的地理位置。                                         |
| uri                   | string                                  | 是   | 音频输出URI:fd://xx&nbsp;(fd&nbsp;number)<br/>![zh-cn_image_0000001164217678](figures/zh-cn_image_url.png) <br/>文件需要由调用者创建,并赋予适当的权限。 |
Z
zengyawen 已提交
1757
| audioEncoderMime      | [CodecMimeType](#codecmimetype8)        | 否   | 音频编码格式。                                               |
Z
zengyawen 已提交
1758 1759


A
1  
abc12133 已提交
1760
## AudioEncoder<sup>(deprecated)</sup>
Z
zengyawen 已提交
1761

A
add dep  
abc12133 已提交
1762 1763 1764
> **说明:**
> 从 API Version 8 开始废弃,建议使用[CodecMimeType](#codecmimetype8)替代。

W
wusongqing 已提交
1765
表示音频编码格式的枚举。
Z
zengyawen 已提交
1766

Z
zengyawen 已提交
1767 1768
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.AudioRecorder。

W
wusongqing 已提交
1769
| 名称    | 默认值 | 说明                                                         |
B
bird_j 已提交
1770
| ------- | ------ | ------------------------------------------------------------ |
A
abc 已提交
1771 1772 1773
| DEFAULT | 0      | 默认编码格式。<br/>仅做接口定义,暂不支持使用。 |
| AMR_NB  | 1      | AMR-NB(Adaptive Multi Rate-Narrow Band Speech Codec) 编码格式。<br/>仅做接口定义,暂不支持使用。 |
| AMR_WB  | 2      | AMR-WB(Adaptive Multi Rate-Wide Band Speech Codec) 编码格式。<br/>仅做接口定义,暂不支持使用。 |
Z
zengyawen 已提交
1774
| AAC_LC  | 3      | AAC-LC(Advanced&nbsp;Audio&nbsp;Coding&nbsp;Low&nbsp;Complexity)编码格式。 |
A
abc 已提交
1775
| HE_AAC  | 4      | HE_AAC(High-Efficiency Advanced&nbsp;Audio&nbsp;Coding)编码格式。<br/>仅做接口定义,暂不支持使用。 |
Z
zengyawen 已提交
1776 1777


A
1  
abc12133 已提交
1778
## AudioOutputFormat<sup>(deprecated)</sup>
Z
zengyawen 已提交
1779

A
add dep  
abc12133 已提交
1780 1781 1782
> **说明:**
> 从 API Version 8 开始废弃,建议使用[ContainerFormatType ](#containerformattype8)替代。

W
wusongqing 已提交
1783
表示音频封装格式的枚举。
Z
zengyawen 已提交
1784

Z
zengyawen 已提交
1785 1786
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.AudioRecorder。

W
wusongqing 已提交
1787
| 名称     | 默认值 | 说明                                                         |
Z
zengyawen 已提交
1788
| -------- | ------ | ------------------------------------------------------------ |
A
abc 已提交
1789
| DEFAULT  | 0      | 默认封装格式。<br/>仅做接口定义,暂不支持使用。 |
Z
zengyawen 已提交
1790
| MPEG_4   | 2      | 封装为MPEG-4格式。                                           |
A
abc 已提交
1791 1792
| AMR_NB   | 3      | 封装为AMR_NB格式。<br/>仅做接口定义,暂不支持使用。 |
| AMR_WB   | 4      | 封装为AMR_WB格式。<br/>仅做接口定义,暂不支持使用。 |
Z
zengyawen 已提交
1793
| AAC_ADTS | 6      | 封装为ADTS(Audio&nbsp;Data&nbsp;Transport&nbsp;Stream)格式,是AAC音频的传输流格式。 |
1794

1795
## VideoRecorder<sup>9+</sup>
1796

1797
视频录制管理类,用于录制视频媒体。在调用VideoRecorder的方法前,需要先通过[createVideoRecorder()](#mediacreatevideorecorder9)构建一个[VideoRecorder](#videorecorder9)实例。
1798

W
wusongqing 已提交
1799
视频录制demo可参考:[视频录制开发指导](../../media/video-recorder.md)
1800

W
wusongqing 已提交
1801
### 属性
1802

Z
zengyawen 已提交
1803 1804 1805 1806
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoRecorder。

| 名称               | 类型                                   | 可读 | 可写 | 说明             |
| ------------------ | -------------------------------------- | ---- | ---- | ---------------- |
1807
| state<sup>8+</sup> | [VideoRecordState](#videorecordstate9) | 是   | 否   | 视频录制的状态。 |
1808

1809
### prepare<sup>9+</sup><a name=videorecorder_prepare1></a>
1810 1811 1812

prepare(config: VideoRecorderConfig, callback: AsyncCallback\<void>): void;

W
wusongqing 已提交
1813
异步方式进行视频录制的参数设置。通过注册回调函数获取返回值。
1814

A
1  
abc12133 已提交
1815
**需要权限:** ohos.permission.MICROPHONE
Z
zengyawen 已提交
1816 1817 1818

**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder

W
wusongqing 已提交
1819
**参数:**
B
bird_j 已提交
1820

1821 1822
| 参数名   | 类型                                         | 必填 | 说明                                |
| -------- | -------------------------------------------- | ---- | ----------------------------------- |
1823
| config   | [VideoRecorderConfig](#videorecorderconfig9) | 是   | 配置视频录制的相关参数。            |
1824
| callback | AsyncCallback\<void>                         | 是   | 异步视频录制prepare方法的回调方法。 |
1825

W
wusongqing 已提交
1826
**示例:**
1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845

```js
let videoProfile = {
    audioBitrate : 48000,
    audioChannels : 2,
    audioCodec : 'audio/mp4a-latm',
    audioSampleRate : 48000,
    fileFormat : 'mp4',
    videoBitrate : 48000,
    videoCodec : 'video/mp4v-es',
    videoFrameWidth : 640,
    videoFrameHeight : 480,
    videoFrameRate : 30
}

let videoConfig = {
    audioSourceType : 1,
    videoSourceType : 0,
    profile : videoProfile,
Z
zengyawen 已提交
1846
    url : 'fd://xx',   // 文件需先由调用者创建,并给予适当的权限
1847 1848 1849 1850 1851 1852 1853
    orientationHint : 0,
    location : { latitude : 30, longitude : 130 },
}

// asyncallback
let videoRecorder = null;
let events = require('events');
A
amr  
abc12133 已提交
1854
let eventEmitter = new events.EventEmitter();
1855 1856 1857 1858

eventEmitter.on('prepare', () => {
    videoRecorder.prepare(videoConfig, (err) => {
        if (typeof (err) == 'undefined') {
B
bird_j 已提交
1859
            console.info('prepare success');
1860
        } else {
B
bird_j 已提交
1861
            console.info('prepare failed and error is ' + err.message);
1862 1863 1864 1865 1866 1867
        }
    });
});

media.createVideoRecorder((err, recorder) => {
    if (typeof (err) == 'undefined' && typeof (recorder) != 'undefined') {
B
bird_j 已提交
1868 1869
        videoRecorder = recorder;
        console.info('createVideoRecorder success');
W
wusongqing 已提交
1870
        eventEmitter.emit('prepare');                                        // prepare事件触发
1871
    } else {
B
bird_j 已提交
1872
        console.info('createVideoRecorder failed and error is ' + err.message);
1873 1874 1875 1876
    }
});
```

1877
### prepare<sup>9+</sup><a name=videorecorder_prepare2></a>
1878 1879 1880

prepare(config: VideoRecorderConfig): Promise\<void>;

W
wusongqing 已提交
1881
异步方式进行视频录制的参数设置。通过Promise获取返回值。
B
bird_j 已提交
1882

Z
zengyawen 已提交
1883
**需要权限:** ohos.permission.MICROPHONE,ohos.permission.CAMERA
Z
zengyawen 已提交
1884 1885 1886

**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder

W
wusongqing 已提交
1887
**参数:**
1888

1889 1890
| 参数名 | 类型                                         | 必填 | 说明                     |
| ------ | -------------------------------------------- | ---- | ------------------------ |
1891
| config | [VideoRecorderConfig](#videorecorderconfig9) | 是   | 配置视频录制的相关参数。 |
1892

W
wusongqing 已提交
1893
**返回值:**
1894

W
wusongqing 已提交
1895
| 类型           | 说明                                     |
1896
| -------------- | ---------------------------------------- |
W
wusongqing 已提交
1897
| Promise\<void> | 异步视频录制prepare方法的Promise返回值。 |
1898

W
wusongqing 已提交
1899
**示例:**
1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918

```js
let videoProfile = {
    audioBitrate : 48000,
    audioChannels : 2,
    audioCodec : 'audio/mp4a-latm',
    audioSampleRate : 48000,
    fileFormat : 'mp4',
    videoBitrate : 48000,
    videoCodec : 'video/mp4v-es',
    videoFrameWidth : 640,
    videoFrameHeight : 480,
    videoFrameRate : 30
}

let videoConfig = {
    audioSourceType : 1,
    videoSourceType : 0,
    profile : videoProfile,
Z
zengyawen 已提交
1919
    url : 'fd://xx',   // 文件需先由调用者创建,并给予适当的权限
1920 1921 1922 1923 1924 1925
    orientationHint : 0,
    location : { latitude : 30, longitude : 130 },
}

// promise
let videoRecorder = null;
1926
media.createVideoRecorder().then((recorder) => {
1927 1928 1929 1930 1931 1932 1933 1934 1935 1936
    if (typeof (recorder) != 'undefined') {
        videoRecorder = recorder;
        console.info('createVideoRecorder success');
    } else {
        console.info('createVideoRecorder failed');
    }
}).catch((err) => {
    console.info('catch err error message is ' + err.message);
});

1937
videoRecorder.prepare(videoConfig).then(() => {
1938 1939 1940 1941 1942 1943
    console.info('prepare success');
}).catch((err) => {
    console.info('prepare failed and catch error is ' + err.message);
});
```

1944
### getInputSurface<sup>9+</sup>
1945 1946 1947

getInputSurface(callback: AsyncCallback\<string>): void;

W
wusongqing 已提交
1948
异步方式获得录制需要的surface。此surface提供给调用者,调用者从此surface中获取surfaceBuffer,填入相应的数据。
1949

W
wusongqing 已提交
1950
应当注意,填入的视频数据需要携带时间戳(单位ns),buffersize。时间戳的起始时间请以系统启动时间为基准。
1951

W
wusongqing 已提交
1952
只能在[prepare()](#videorecorder_prepare1)接口调用后调用。
1953

Z
zengyawen 已提交
1954 1955
**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder

W
wusongqing 已提交
1956
**参数:**
B
bird_j 已提交
1957

W
wusongqing 已提交
1958
| 参数名   | 类型                   | 必填 | 说明                        |
1959
| -------- | ---------------------- | ---- | --------------------------- |
W
wusongqing 已提交
1960
| callback | AsyncCallback\<string> | 是   | 异步获得surface的回调方法。 |
1961

W
wusongqing 已提交
1962
**示例:**
1963 1964 1965

```js
// asyncallback
A
tab  
abc12133 已提交
1966
let surfaceID = null;                                               // 传递给外界的surfaceID
B
bird_j 已提交
1967 1968 1969
videoRecorder.getInputSurface((err, surfaceId) => {
    if (typeof (err) == 'undefined') {
        console.info('getInputSurface success');
B
bird_j 已提交
1970
        surfaceID = surfaceId;
B
bird_j 已提交
1971 1972 1973
    } else {
        console.info('getInputSurface failed and error is ' + err.message);
    }
1974 1975 1976
});
```

1977
### getInputSurface<sup>9+</sup>
1978 1979 1980

getInputSurface(): Promise\<string>;

W
wusongqing 已提交
1981
 异步方式获得录制需要的surface。此surface提供给调用者,调用者从此surface中获取surfaceBuffer,填入相应的数据。
1982

W
wusongqing 已提交
1983
应当注意,填入的视频数据需要携带时间戳(单位ns),buffersize。时间戳的起始时间请以系统启动时间为基准。
1984

W
wusongqing 已提交
1985
只能在[prepare()](#videorecorder_prepare1)接口调用后调用。
B
bird_j 已提交
1986

Z
zengyawen 已提交
1987 1988
**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder

W
wusongqing 已提交
1989
**返回值:**
1990

W
wusongqing 已提交
1991
| 类型             | 说明                             |
1992
| ---------------- | -------------------------------- |
W
wusongqing 已提交
1993
| Promise\<string> | 异步获得surface的Promise返回值。 |
1994

W
wusongqing 已提交
1995
**示例:**
1996 1997 1998

```js
// promise
A
tab  
abc12133 已提交
1999
let surfaceID = null;                                               // 传递给外界的surfaceID
2000
videoRecorder.getInputSurface().then((surfaceId) => {
2001
    console.info('getInputSurface success');
B
bird_j 已提交
2002
    surfaceID = surfaceId;
2003 2004 2005 2006 2007
}).catch((err) => {
    console.info('getInputSurface failed and catch error is ' + err.message);
});
```

2008
### start<sup>9+</sup><a name=videorecorder_start1></a>
2009 2010 2011

start(callback: AsyncCallback\<void>): void;

W
wusongqing 已提交
2012
异步方式开始视频录制。通过注册回调函数获取返回值。
2013

Z
zengyawen 已提交
2014 2015 2016
[prepare()](#videorecorder_prepare1)[getInputSurface()](#getinputsurface8)后调用,需要依赖数据源先给surface传递数据。

**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
B
bird_j 已提交
2017

W
wusongqing 已提交
2018
**参数:**
2019

W
wusongqing 已提交
2020
| 参数名   | 类型                 | 必填 | 说明                         |
2021
| -------- | -------------------- | ---- | ---------------------------- |
W
wusongqing 已提交
2022
| callback | AsyncCallback\<void> | 是   | 异步开始视频录制的回调方法。 |
2023

W
wusongqing 已提交
2024
**示例:**
2025 2026 2027

```js
// asyncallback
B
bird_j 已提交
2028 2029 2030 2031 2032 2033
videoRecorder.start((err) => {
    if (typeof (err) == 'undefined') {
        console.info('start videorecorder success');
    } else {
        console.info('start videorecorder failed and error is ' + err.message);
    }
2034 2035 2036
});
```

2037
### start<sup>9+</sup><a name=videorecorder_start2></a>
2038 2039 2040

start(): Promise\<void>;

W
wusongqing 已提交
2041
异步方式开始视频录制。通过Promise获取返回值。
2042

Z
zengyawen 已提交
2043 2044 2045
[prepare()](#videorecorder_prepare1)[getInputSurface()](#getinputsurface8)后调用,需要依赖数据源先给surface传递数据。

**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
2046

W
wusongqing 已提交
2047
**返回值:**
B
bird_j 已提交
2048

W
wusongqing 已提交
2049
| 类型           | 说明                                  |
2050
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2051
| Promise\<void> | 异步开始视频录制方法的Promise返回值。 |
2052

W
wusongqing 已提交
2053
**示例:**
2054 2055 2056

```js
// promise
2057
videoRecorder.start().then(() => {
2058 2059 2060 2061 2062 2063
    console.info('start videorecorder success');
}).catch((err) => {
    console.info('start videorecorder failed and catch error is ' + err.message);
});
```

2064
### pause<sup>9+</sup><a name=videorecorder_pause1></a>
2065 2066 2067

pause(callback: AsyncCallback\<void>): void;

W
wusongqing 已提交
2068
异步方式暂停视频录制。通过注册回调函数获取返回值。
2069

W
wusongqing 已提交
2070
[start()](#videorecorder_start1)后调用。可以通过调用[resume()](#videorecorder_resume1)接口来恢复录制。
B
bird_j 已提交
2071

Z
zengyawen 已提交
2072 2073
**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder

W
wusongqing 已提交
2074
**参数:**
2075

W
wusongqing 已提交
2076
| 参数名   | 类型                 | 必填 | 说明                         |
2077
| -------- | -------------------- | ---- | ---------------------------- |
W
wusongqing 已提交
2078
| callback | AsyncCallback\<void> | 是   | 异步暂停视频录制的回调方法。 |
2079

W
wusongqing 已提交
2080
**示例:**
2081 2082 2083

```js
// asyncallback
B
bird_j 已提交
2084 2085 2086 2087 2088 2089
videoRecorder.pause((err) => {
    if (typeof (err) == 'undefined') {
        console.info('pause videorecorder success');
    } else {
        console.info('pause videorecorder failed and error is ' + err.message);
    }
2090 2091 2092
});
```

2093
### pause<sup>9+</sup><a name=videorecorder_pause2></a>
2094 2095 2096

pause(): Promise\<void>;

W
wusongqing 已提交
2097
异步方式暂停视频录制。通过Promise获取返回值。
2098

W
wusongqing 已提交
2099
[start()](#videorecorder_start1)后调用。可以通过调用[resume()](#videorecorder_resume1)接口来恢复录制。
2100

Z
zengyawen 已提交
2101 2102
**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder

W
wusongqing 已提交
2103
**返回值:**
B
bird_j 已提交
2104

W
wusongqing 已提交
2105
| 类型           | 说明                                  |
2106
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2107
| Promise\<void> | 异步暂停视频录制方法的Promise返回值。 |
2108

W
wusongqing 已提交
2109
**示例:**
2110 2111 2112

```js
// promise
2113
videoRecorder.pause().then(() => {
2114 2115 2116 2117 2118 2119
    console.info('pause videorecorder success');
}).catch((err) => {
    console.info('pause videorecorder failed and catch error is ' + err.message);
});
```

2120
### resume<sup>9+</sup><a name=videorecorder_resume1></a>
2121 2122 2123

resume(callback: AsyncCallback\<void>): void;

W
wusongqing 已提交
2124
异步方式恢复视频录制。通过注册回调函数获取返回值。
B
bird_j 已提交
2125

Z
zengyawen 已提交
2126 2127
**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder

W
wusongqing 已提交
2128
**参数:**
2129

W
wusongqing 已提交
2130
| 参数名   | 类型                 | 必填 | 说明                         |
2131
| -------- | -------------------- | ---- | ---------------------------- |
W
wusongqing 已提交
2132
| callback | AsyncCallback\<void> | 是   | 异步恢复视频录制的回调方法。 |
2133

W
wusongqing 已提交
2134
**示例:**
2135 2136 2137

```js
// asyncallback
B
bird_j 已提交
2138 2139 2140 2141 2142 2143
videoRecorder.resume((err) => {
    if (typeof (err) == 'undefined') {
        console.info('resume videorecorder success');
    } else {
        console.info('resume videorecorder failed and error is ' + err.message);
    }
2144 2145 2146
});
```

2147
### resume<sup>9+</sup><a name=videorecorder_resume2></a>
2148 2149 2150

resume(): Promise\<void>;

W
wusongqing 已提交
2151
异步方式恢复视频录制。通过Promise获取返回值。
2152

Z
zengyawen 已提交
2153 2154
**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder

W
wusongqing 已提交
2155
**返回值:**
B
bird_j 已提交
2156

W
wusongqing 已提交
2157
| 类型           | 说明                                  |
2158
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2159
| Promise\<void> | 异步恢复视频录制方法的Promise返回值。 |
2160

W
wusongqing 已提交
2161
**示例:**
2162 2163 2164

```js
// promise
2165
videoRecorder.resume().then(() => {
2166 2167 2168 2169 2170 2171
    console.info('resume videorecorder success');
}).catch((err) => {
    console.info('resume videorecorder failed and catch error is ' + err.message);
});
```

2172
### stop<sup>9+</sup><a name=videorecorder_stop1></a>
2173 2174 2175

stop(callback: AsyncCallback\<void>): void;

W
wusongqing 已提交
2176
异步方式停止视频录制。通过注册回调函数获取返回值。
2177

Z
zengyawen 已提交
2178 2179 2180
需要重新调用[prepare()](#videorecorder_prepare1)[getInputSurface()](#getinputsurface8)接口才能重新录制。

**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
B
bird_j 已提交
2181

W
wusongqing 已提交
2182
**参数:**
2183

W
wusongqing 已提交
2184
| 参数名   | 类型                 | 必填 | 说明                         |
2185
| -------- | -------------------- | ---- | ---------------------------- |
W
wusongqing 已提交
2186
| callback | AsyncCallback\<void> | 是   | 异步停止视频录制的回调方法。 |
2187

W
wusongqing 已提交
2188
**示例:**
2189 2190 2191

```js
// asyncallback
B
bird_j 已提交
2192 2193 2194 2195 2196 2197
videoRecorder.stop((err) => {
    if (typeof (err) == 'undefined') {
        console.info('stop videorecorder success');
    } else {
        console.info('stop videorecorder failed and error is ' + err.message);
    }
2198 2199 2200
});
```

2201
### stop<sup>9+</sup><a name=videorecorder_stop2></a>
2202 2203 2204

stop(): Promise\<void>;

W
wusongqing 已提交
2205
异步方式停止视频录制。通过Promise获取返回值。
2206

Z
zengyawen 已提交
2207 2208 2209
需要重新调用[prepare()](#videorecorder_prepare1)[getInputSurface()](#getinputsurface8)接口才能重新录制。

**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
2210

W
wusongqing 已提交
2211
**返回值:**
B
bird_j 已提交
2212

W
wusongqing 已提交
2213
| 类型           | 说明                                  |
2214
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2215
| Promise\<void> | 异步停止视频录制方法的Promise返回值。 |
2216

W
wusongqing 已提交
2217
**示例:**
2218 2219 2220

```js
// promise
2221
videoRecorder.stop().then(() => {
2222 2223 2224 2225 2226 2227
    console.info('stop videorecorder success');
}).catch((err) => {
    console.info('stop videorecorder failed and catch error is ' + err.message);
});
```

2228
### release<sup>9+</sup><a name=videorecorder_release1></a>
2229 2230 2231

release(callback: AsyncCallback\<void>): void;

W
wusongqing 已提交
2232
异步方式释放视频录制资源。通过注册回调函数获取返回值。
B
bird_j 已提交
2233

Z
zengyawen 已提交
2234 2235
**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder

W
wusongqing 已提交
2236
**参数:**
2237

W
wusongqing 已提交
2238
| 参数名   | 类型                 | 必填 | 说明                             |
2239
| -------- | -------------------- | ---- | -------------------------------- |
W
wusongqing 已提交
2240
| callback | AsyncCallback\<void> | 是   | 异步释放视频录制资源的回调方法。 |
2241

W
wusongqing 已提交
2242
**示例:**
2243 2244 2245

```js
// asyncallback
B
bird_j 已提交
2246 2247 2248 2249 2250 2251
videoRecorder.release((err) => {
    if (typeof (err) == 'undefined') {
        console.info('release videorecorder success');
    } else {
        console.info('release videorecorder failed and error is ' + err.message);
    }
2252 2253 2254
});
```

2255
### release<sup>9+</sup><a name=videorecorder_release2></a>
2256 2257 2258

release(): Promise\<void>;

W
wusongqing 已提交
2259
异步方式释放视频录制资源。通过Promise获取返回值。
B
bird_j 已提交
2260

Z
zengyawen 已提交
2261 2262
**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder

W
wusongqing 已提交
2263
**返回值:**
2264

W
wusongqing 已提交
2265
| 类型           | 说明                                      |
2266
| -------------- | ----------------------------------------- |
W
wusongqing 已提交
2267
| Promise\<void> | 异步释放视频录制资源方法的Promise返回值。 |
2268

W
wusongqing 已提交
2269
**示例:**
2270 2271 2272

```js
// promise
2273
videoRecorder.release().then(() => {
2274 2275 2276 2277 2278 2279
    console.info('release videorecorder success');
}).catch((err) => {
    console.info('release videorecorder failed and catch error is ' + err.message);
});
```

2280
### reset<sup>9+</sup><a name=videorecorder_reset1></a>
2281 2282 2283

reset(callback: AsyncCallback\<void>): void;

W
wusongqing 已提交
2284
异步方式重置视频录制。通过注册回调函数获取返回值。
2285

Z
zengyawen 已提交
2286 2287 2288
需要重新调用[prepare()](#videorecorder_prepare1)[getInputSurface()](#getinputsurface8)接口才能重新录制。

**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
2289

W
wusongqing 已提交
2290
**参数:**
B
bird_j 已提交
2291

W
wusongqing 已提交
2292
| 参数名   | 类型                 | 必填 | 说明                         |
2293
| -------- | -------------------- | ---- | ---------------------------- |
W
wusongqing 已提交
2294
| callback | AsyncCallback\<void> | 是   | 异步重置视频录制的回调方法。 |
2295

W
wusongqing 已提交
2296
**示例:**
2297 2298 2299

```js
// asyncallback
B
bird_j 已提交
2300 2301 2302 2303 2304 2305
videoRecorder.reset((err) => {
    if (typeof (err) == 'undefined') {
        console.info('reset videorecorder success');
    } else {
        console.info('reset videorecorder failed and error is ' + err.message);
    }
2306 2307 2308
});
```

2309
### reset<sup>9+</sup><a name=videorecorder_reset2></a>
2310 2311 2312

reset(): Promise\<void>;

W
wusongqing 已提交
2313
异步方式重置视频录制。通过Promise获取返回值。
2314

Z
zengyawen 已提交
2315 2316 2317
需要重新调用[prepare()](#videorecorder_prepare1)[getInputSurface()](#getinputsurface8)接口才能重新录制。

**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
B
bird_j 已提交
2318

W
wusongqing 已提交
2319
**返回值:**
2320

W
wusongqing 已提交
2321
| 类型           | 说明                                  |
2322
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2323
| Promise\<void> | 异步重置视频录制方法的Promise返回值。 |
2324

W
wusongqing 已提交
2325
**示例:**
2326 2327 2328

```js
// promise
2329
videoRecorder.reset().then(() => {
2330 2331 2332 2333 2334 2335
    console.info('reset videorecorder success');
}).catch((err) => {
    console.info('reset videorecorder failed and catch error is ' + err.message);
});
```

2336
### on('error')<sup>9+</sup>
2337 2338 2339

on(type: 'error', callback: ErrorCallback): void

W
wusongqing 已提交
2340
开始订阅视频录制错误事件。
2341

Z
zengyawen 已提交
2342 2343
**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder

W
wusongqing 已提交
2344
**参数:**
B
bird_j 已提交
2345

W
wusongqing 已提交
2346
| 参数名   | 类型          | 必填 | 说明                                                         |
2347
| -------- | ------------- | ---- | ------------------------------------------------------------ |
Z
zengyawen 已提交
2348
| type     | string        | 是   | 录制错误事件回调类型'error'。<br/>-&nbsp;'error':视频录制过程中发生错误,触发该事件。 |
W
wusongqing 已提交
2349
| callback | ErrorCallback | 是   | 录制错误事件回调方法。                                       |
2350

W
wusongqing 已提交
2351
**示例:**
2352 2353

```js
A
tab  
abc12133 已提交
2354 2355
videoRecorder.on('error', (error) => {                                  // 设置'error'事件回调
    console.info(`audio error called, errName is ${error.name}`);       // 打印错误类型名称
W
wusongqing 已提交
2356 2357
    console.info(`audio error called, errCode is ${error.code}`);       // 打印错误码
    console.info(`audio error called, errMessage is ${error.message}`); // 打印错误类型详细描述
2358
});
W
wusongqing 已提交
2359
// 当获取videoRecordState接口出错时通过此订阅事件上报
2360 2361
```

2362
## VideoRecordState<sup>9+</sup>
2363

W
wusongqing 已提交
2364
视频录制的状态机。可通过state属性获取当前状态。
2365

Z
zengyawen 已提交
2366 2367
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoRecorder。

W
wusongqing 已提交
2368 2369 2370 2371 2372 2373 2374 2375
| 名称     | 类型   | 描述                   |
| -------- | ------ | ---------------------- |
| idle     | string | 视频录制空闲。         |
| prepared | string | 视频录制参数设置完成。 |
| playing  | string | 视频正在录制。         |
| paused   | string | 视频暂停录制。         |
| stopped  | string | 视频录制停止。         |
| error    | string | 错误状态。             |
2376

2377
## VideoRecorderConfig<sup>9+</sup>
2378

W
wusongqing 已提交
2379
表示视频录制的参数设置。
2380

Z
zengyawen 已提交
2381 2382
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoRecorder。

Z
zengyawen 已提交
2383 2384
| 名称            | 参数类型                                       | 必填 | 说明                                                         |
| --------------- | ---------------------------------------------- | ---- | ------------------------------------------------------------ |
2385 2386 2387
| audioSourceType | [AudioSourceType](#audiosourcetype9)           | 是   | 视频录制的音频源类型。                                       |
| videoSourceType | [VideoSourceType](#videosourcetype9)           | 是   | 视频录制的视频源类型。                                       |
| profile         | [VideoRecorderProfile](#videorecorderprofile9) | 是   | 视频录制的profile。                                          |
Z
zengyawen 已提交
2388
| rotation        | number                                         | 否   | 录制视频的旋转角度。                                         |
2389
| location        | [Location](#location)                          | 否   | 录制视频的地理位置。                                         |
Z
zengyawen 已提交
2390
| url             | string                                         | 是   | 视频输出URL:fd://xx&nbsp;(fd&nbsp;number)<br/>![](figures/zh-cn_image_url.png) <br/>文件需要由调用者创建,并赋予适当的权限。 |
2391

2392
## AudioSourceType<sup>9+</sup>
2393

W
wusongqing 已提交
2394
表示视频录制中音频源类型的枚举。
2395

Z
zengyawen 已提交
2396 2397 2398 2399 2400 2401
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoRecorder。

| 名称                      | 值   | 说明                   |
| ------------------------- | ---- | ---------------------- |
| AUDIO_SOURCE_TYPE_DEFAULT | 0    | 默认的音频输入源类型。 |
| AUDIO_SOURCE_TYPE_MIC     | 1    | 表示MIC的音频输入源。  |
2402

2403
## VideoSourceType<sup>9+</sup>
2404

W
wusongqing 已提交
2405
表示视频录制中视频源类型的枚举。
2406

Z
zengyawen 已提交
2407 2408
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoRecorder。

W
wusongqing 已提交
2409 2410 2411 2412
| 名称                          | 值   | 说明                            |
| ----------------------------- | ---- | ------------------------------- |
| VIDEO_SOURCE_TYPE_SURFACE_YUV | 0    | 输入surface中携带的是raw data。 |
| VIDEO_SOURCE_TYPE_SURFACE_ES  | 1    | 输入surface中携带的是ES data。  |
2413

2414
## VideoRecorderProfile<sup>9+</sup>
2415

W
wusongqing 已提交
2416
视频录制的配置文件。
2417

Z
zengyawen 已提交
2418 2419
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoRecorder。

W
wusongqing 已提交
2420 2421 2422 2423
| 名称             | 参数类型                                     | 必填 | 说明             |
| ---------------- | -------------------------------------------- | ---- | ---------------- |
| audioBitrate     | number                                       | 是   | 音频编码比特率。 |
| audioChannels    | number                                       | 是   | 音频采集声道数。 |
Z
zengyawen 已提交
2424
| audioCodec       | [CodecMimeType](#codecmimetype8)             | 是   | 音频编码格式。   |
W
wusongqing 已提交
2425 2426
| audioSampleRate  | number                                       | 是   | 音频采样率。     |
| fileFormat       | [ContainerFormatType](#containerformattype8) | 是   | 文件的容器格式。 |
2427
| videoBitrate     | number                                       | 是   | 视频编码比特率。 |
Z
zengyawen 已提交
2428
| videoCodec       | [CodecMimeType](#codecmimetype8)             | 是   | 视频编码格式。   |
W
wusongqing 已提交
2429 2430
| videoFrameWidth  | number                                       | 是   | 录制视频帧的宽。 |
| videoFrameHeight | number                                       | 是   | 录制视频帧的高。 |
2431
| videoFrameRate   | number                                       | 是   | 录制视频帧率。   |
2432 2433 2434

## ContainerFormatType<sup>8+</sup>

W
wusongqing 已提交
2435
表示容器格式类型的枚举,缩写为CFT。
2436

Z
zengyawen 已提交
2437 2438
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。

W
wusongqing 已提交
2439 2440 2441 2442
| 名称        | 值    | 说明                  |
| ----------- | ----- | --------------------- |
| CFT_MPEG_4  | "mp4" | 视频的容器格式,MP4。 |
| CFT_MPEG_4A | "m4a" | 音频的容器格式,M4A。 |
2443

2444
## Location
2445

W
wusongqing 已提交
2446
视频录制的地理位置。
2447

Z
zengyawen 已提交
2448 2449
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。

W
wusongqing 已提交
2450 2451 2452 2453
| 名称      | 参数类型 | 必填 | 说明             |
| --------- | -------- | ---- | ---------------- |
| latitude  | number   | 是   | 地理位置的纬度。 |
| longitude | number   | 是   | 地理位置的经度。 |