js-apis-media.md 86.5 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
A
amr  
abc12133 已提交
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

Z
zengyawen 已提交
286
开始播放音频资源,需在[dataLoad](#audioplayer_on)事件成功触发后,才能调用play方法。
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

W
wusongqing 已提交
419
通过回调方式获取音频轨道信息。
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

W
wusongqing 已提交
455
通过Promise方式获取音频轨道信息。
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 575

// 用户选择视频设置fd(本地播放)
let fdPath = 'fd://'
let path = 'data/accounts/account_0/appdata/ohos.xxx.xxx.xxx/01.mp3';
576
fileIO.open(path).then(fdNumber) => {
Z
zengyawen 已提交
577 578 579 580
   fdPath = fdPath + '' + fdNumber;
   console.info('open fd sucess fd is' + fdPath);
}, (err) => {
   console.info('open fd failed err is' + err);
581
}).catch((err) => {
Z
zengyawen 已提交
582 583 584
   console.info('open fd failed err is' + err);
});
audioPlayer.src = fdPath;  //设置src属性,并触发'dataLoad'事件回调
Z
zengyawen 已提交
585 586 587 588 589
```

### on('timeUpdate')

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

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

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

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

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

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

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

### on('error')

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

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

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

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

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

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

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

## AudioState
Z
zengyawen 已提交
642

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

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

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

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

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

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

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

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

| 名称                     | 类型                               | 可读 | 可写 | 说明                                                         |
| ------------------------ | ---------------------------------- | ---- | ---- | ------------------------------------------------------------ |
Z
zengyawen 已提交
667
| 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 已提交
668 669 670 671 672 673
| 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                             | 是   | 否   | 视频高。                                                     |
674 675 676 677 678

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

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

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

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

W
wusongqing 已提交
683
**参数:**
684

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

W
wusongqing 已提交
690
**示例:**
691 692 693

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

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

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

W
wusongqing 已提交
706
通过Promise方式设置SurfaceId。
707

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

W
wusongqing 已提交
710
**参数:**
B
bird_j 已提交
711

W
wusongqing 已提交
712
| 参数名    | 类型   | 必填 | 说明      |
713
| --------- | ------ | ---- | --------- |
W
wusongqing 已提交
714
| surfaceId | string | 是   | SurfaceId |
715

W
wusongqing 已提交
716
**返回值:**
717

W
wusongqing 已提交
718
| 类型          | 说明                           |
719
| ------------- | ------------------------------ |
W
wusongqing 已提交
720
| Promise<void> | 设置SurfaceId的Promise返回值。 |
721

W
wusongqing 已提交
722
**示例:**
723 724

```js
725
videoPlayer.setDisplaySurface(surfaceId).then(() => {
726
    console.info('setDisplaySurface success');
727 728 729
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
730 731 732 733 734 735
```

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

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

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

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

W
wusongqing 已提交
740
**参数:**
741

W
wusongqing 已提交
742
| 参数名   | 类型     | 必填 | 说明                     |
743
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
744
| callback | function | 是   | 准备播放视频的回调方法。 |
745

W
wusongqing 已提交
746
**示例:**
747 748 749

```js
videoPlayer.prepare((err) => {
A
tab  
abc12133 已提交
750 751 752
    if (typeof (err) == 'undefined') {
        console.info('prepare success!');
    } else {
753 754 755 756 757 758 759 760 761
        console.info('prepare fail!');
    }
});
```

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

prepare(): Promise\<void>

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

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

W
wusongqing 已提交
766
**返回值:**
B
bird_j 已提交
767

W
wusongqing 已提交
768
| 类型           | 说明                          |
769
| -------------- | ----------------------------- |
W
wusongqing 已提交
770
| Promise\<void> | 准备播放视频的Promise返回值。 |
771

W
wusongqing 已提交
772
**示例:**
773 774

```js
775
videoPlayer.prepare().then(() => {
776
    console.info('prepare success');
777 778 779
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
780 781 782 783 784 785
```

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

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

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

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

W
wusongqing 已提交
790
**参数:**
791

W
wusongqing 已提交
792
| 参数名   | 类型     | 必填 | 说明                     |
793
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
794
| callback | function | 是   | 开始播放视频的回调方法。 |
795

W
wusongqing 已提交
796
**示例:**
797 798 799

```js
videoPlayer.play((err) => {
A
tab  
abc12133 已提交
800 801 802
    if (typeof (err) == 'undefined') {
        console.info('play success!');
    } else {
803 804 805 806 807 808 809 810 811
        console.info('play fail!');
    }
});
```

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

play(): Promise\<void>;

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

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

W
wusongqing 已提交
816
**返回值:**
B
bird_j 已提交
817

W
wusongqing 已提交
818
| 类型           | 说明                          |
819
| -------------- | ----------------------------- |
W
wusongqing 已提交
820
| Promise\<void> | 开始播放视频的Promise返回值。 |
821

W
wusongqing 已提交
822
**示例:**
823 824

```js
825
videoPlayer.play().then(() => {
826
    console.info('play success');
827 828 829
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
830 831 832 833 834 835
```

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

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

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

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

W
wusongqing 已提交
840
**参数:**
841

W
wusongqing 已提交
842
| 参数名   | 类型     | 必填 | 说明                     |
843
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
844
| callback | function | 是   | 暂停播放视频的回调方法。 |
845

W
wusongqing 已提交
846
**示例:**
847 848 849

```js
videoPlayer.pause((err) => {
A
tab  
abc12133 已提交
850 851 852
    if (typeof (err) == 'undefined') {
        console.info('pause success!');
    } else {
853 854 855 856 857 858 859 860 861
        console.info('pause fail!');
    }
});
```

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

pause(): Promise\<void>

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

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

W
wusongqing 已提交
866
**返回值:**
B
bird_j 已提交
867

W
wusongqing 已提交
868
| 类型           | 说明                          |
869
| -------------- | ----------------------------- |
W
wusongqing 已提交
870
| Promise\<void> | 暂停播放视频的Promise返回值。 |
871

W
wusongqing 已提交
872
**示例:**
873 874

```js
875
videoPlayer.pause().then(() => {
876
    console.info('pause success');
877 878 879
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
880 881 882 883 884 885
```

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

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

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

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

W
wusongqing 已提交
890
**参数:**
891

W
wusongqing 已提交
892
| 参数名   | 类型     | 必填 | 说明                     |
893
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
894
| callback | function | 是   | 停止播放视频的回调方法。 |
895

W
wusongqing 已提交
896
**示例:**
897 898 899

```js
videoPlayer.stop((err) => {
A
tab  
abc12133 已提交
900 901 902
    if (typeof (err) == 'undefined') {
        console.info('stop success!');
    } else {
903 904 905 906 907 908 909 910 911
        console.info('stop fail!');
    }
});
```

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

stop(): Promise\<void>

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

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

W
wusongqing 已提交
916
**返回值:**
917

W
wusongqing 已提交
918
| 类型           | 说明                          |
919
| -------------- | ----------------------------- |
W
wusongqing 已提交
920
| Promise\<void> | 停止播放视频的Promise返回值。 |
921

W
wusongqing 已提交
922
**示例:**
923 924

```js
925
videoPlayer.stop().then(() => {
926
    console.info('stop success');
927 928 929
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
930 931 932 933 934 935
```

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

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

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

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

W
wusongqing 已提交
940
**参数:**
B
bird_j 已提交
941

W
wusongqing 已提交
942
| 参数名   | 类型     | 必填 | 说明                     |
943
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
944
| callback | function | 是   | 切换播放视频的回调方法。 |
945

W
wusongqing 已提交
946
**示例:**
947 948 949

```js
videoPlayer.reset((err) => {
A
tab  
abc12133 已提交
950 951 952
    if (typeof (err) == 'undefined') {
        console.info('reset success!');
    } else {
953 954 955 956 957 958 959 960 961
        console.info('reset fail!');
    }
});
```

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

reset(): Promise\<void>

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

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

W
wusongqing 已提交
966
**返回值:**
967

W
wusongqing 已提交
968
| 类型           | 说明                          |
969
| -------------- | ----------------------------- |
W
wusongqing 已提交
970
| Promise\<void> | 切换播放视频的Promise返回值。 |
971

W
wusongqing 已提交
972
**示例:**
973 974

```js
975
videoPlayer.reset().then(() => {
976
    console.info('reset success');
977 978 979
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
980 981 982 983 984 985
```

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

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

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

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

W
wusongqing 已提交
990
**参数:**
B
bird_j 已提交
991

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

W
wusongqing 已提交
997
**示例:**
998 999 1000

```js
videoPlayer.seek((seekTime, err) => {
A
tab  
abc12133 已提交
1001 1002 1003
    if (typeof (err) == 'undefined') {
        console.info('seek success!');
    } else {
1004 1005 1006 1007 1008 1009 1010 1011 1012
        console.info('seek fail!');
    }
});
```

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

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

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

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

W
wusongqing 已提交
1017
**参数:**
1018

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

W
wusongqing 已提交
1025
**示例:**
1026 1027 1028

```js
videoPlayer.seek((seekTime, seekMode, err) => {
A
tab  
abc12133 已提交
1029 1030 1031
    if (typeof (err) == 'undefined') {
        console.info('seek success!');
    } else {
1032 1033 1034 1035 1036 1037 1038 1039 1040
        console.info('seek fail!');
    }
});
```

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

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

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

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

W
wusongqing 已提交
1045
**参数:**
B
bird_j 已提交
1046

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

W
wusongqing 已提交
1052
**返回值:**
1053

W
wusongqing 已提交
1054
| 类型           | 说明                                |
1055
| -------------- | ----------------------------------- |
W
wusongqing 已提交
1056
| Promise\<void> | 跳转到指定播放位置的Promise返回值。 |
1057

W
wusongqing 已提交
1058
**示例:**
1059 1060

```js
1061
videoPlayer.seek(seekTime).then((seekDoneTime) => { // seekDoneTime表示seek完成后的时间点
1062
    console.info('seek success');
1063 1064 1065
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1066

1067
videoPlayer.seek(seekTime, seekMode).then((seekDoneTime) => {
1068
    console.info('seek success');
1069 1070 1071
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1072 1073 1074 1075 1076 1077
```

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

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

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

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

W
wusongqing 已提交
1082
**参数:**
1083

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

W
wusongqing 已提交
1089
**示例:**
1090 1091 1092

```js
videoPlayer.setVolume((vol, err) => {
A
tab  
abc12133 已提交
1093 1094 1095
    if (typeof (err) == 'undefined') {
        console.info('setVolume success!');
    } else {
1096 1097 1098 1099 1100 1101 1102 1103 1104
        console.info('setVolume fail!');
    }
});
```

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

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

W
wusongqing 已提交
1105
通过Promise方式设置音量。
1106

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

W
wusongqing 已提交
1109
**参数:**
B
bird_j 已提交
1110

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

W
wusongqing 已提交
1115
**返回值:**
1116

W
wusongqing 已提交
1117
| 类型           | 说明                      |
1118
| -------------- | ------------------------- |
W
wusongqing 已提交
1119
| Promise\<void> | 设置音量的Promise返回值。 |
1120

W
wusongqing 已提交
1121
**示例:**
1122 1123

```js
1124
videoPlayer.setVolume(vol).then() => {
1125
    console.info('setVolume success');
1126 1127 1128
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1129 1130 1131 1132 1133 1134
```

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

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

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

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

W
wusongqing 已提交
1139
**参数:**
1140

W
wusongqing 已提交
1141
| 参数名   | 类型     | 必填 | 说明                     |
1142
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
1143
| callback | function | 是   | 释放视频资源的回调方法。 |
1144

W
wusongqing 已提交
1145
**示例:**
1146 1147 1148

```js
videoPlayer.release((err) => {
A
tab  
abc12133 已提交
1149 1150 1151
    if (typeof (err) == 'undefined') {
        console.info('release success!');
    } else {
1152 1153 1154 1155 1156 1157 1158 1159 1160
        console.info('release fail!');
    }
});
```

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

release(): Promise\<void>

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

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

W
wusongqing 已提交
1165
**返回值:**
1166

W
wusongqing 已提交
1167
| 类型           | 说明                          |
1168
| -------------- | ----------------------------- |
W
wusongqing 已提交
1169
| Promise\<void> | 释放视频资源的Promise返回值。 |
1170

W
wusongqing 已提交
1171
**示例:**
1172 1173

```js
1174
videoPlayer.release().then() => {
1175
    console.info('release success');
1176 1177 1178
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1179 1180 1181 1182
```

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

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

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

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

W
wusongqing 已提交
1189
**参数:**
B
bird_j 已提交
1190

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

W
wusongqing 已提交
1195
**示例:**
1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218

```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 已提交
1219
getTrackDescription(): Promise<Array\<MediaDescription>>
1220

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

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

W
wusongqing 已提交
1225
**返回值:**
1226

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

W
wusongqing 已提交
1231
**示例:**
1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242

```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;
1243
videoPlayer.getTrackDescription().then((arrlist) => {
1244 1245 1246 1247 1248
    if (typeof (arrlist) != 'undefined') {
        arrayDescription = arrlist;
    } else {
        console.log('video getTrackDescription fail');
    }
1249 1250 1251
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1252 1253 1254 1255 1256 1257 1258 1259 1260
for (let i = 0; i < arrayDescription.length; i++) {
    printfDescription(arrayDescription[i]);
}
```

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

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

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

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

W
wusongqing 已提交
1265
**参数:**
B
bird_j 已提交
1266

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

W
wusongqing 已提交
1272
**示例:**
1273 1274 1275

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

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

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

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

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

W
wusongqing 已提交
1292
**参数:**
1293

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

Z
zengyawen 已提交
1298 1299 1300 1301 1302 1303
**返回值:**

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

W
wusongqing 已提交
1304
**示例:**
1305 1306

```js
1307
videoPlayer.setSpeed(speed).then() => {
1308
    console.info('setSpeed success');
1309 1310 1311
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1312 1313 1314 1315 1316 1317
```

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

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

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

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

W
wusongqing 已提交
1322
**参数:**
B
bird_j 已提交
1323

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

W
wusongqing 已提交
1329
**示例:**
1330 1331 1332

```js
videoPlayer.on('playbackCompleted', () => {
A
tab  
abc12133 已提交
1333
    console.info('playbackCompleted success!');
1334 1335 1336 1337 1338 1339 1340
});
```

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

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

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

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

W
wusongqing 已提交
1345
**参数:**
1346

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

W
wusongqing 已提交
1352
**示例:**
1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364

```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 已提交
1365
开始监听视频播放首帧送显上报事件。
1366

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

W
wusongqing 已提交
1369
**参数:**
B
bird_j 已提交
1370

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

W
wusongqing 已提交
1376
**示例:**
1377 1378 1379

```js
videoPlayer.on('startRenderFrame', () => {
A
tab  
abc12133 已提交
1380
    console.info('startRenderFrame success!');
1381 1382 1383 1384 1385 1386 1387
});
```

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

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

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

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

W
wusongqing 已提交
1392
**参数:**
1393

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

W
wusongqing 已提交
1399
**示例:**
1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411

```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 已提交
1412
开始监听视频播放错误事件。
B
bird_j 已提交
1413

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

W
wusongqing 已提交
1416
**参数:**
1417

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

W
wusongqing 已提交
1423
**示例:**
1424 1425

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

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

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

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

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

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

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

Z
zengyawen 已提交
1453 1454 1455 1456 1457 1458
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。

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

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

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

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

W
wusongqing 已提交
1466 1467 1468 1469 1470 1471 1472
| 名称                 | 值   | 描述                           |
| -------------------- | ---- | ------------------------------ |
| 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倍。 |
1473

1474 1475
## MediaDescription<sup>8+</sup>

Z
zengyawen 已提交
1476
### [key : string] : Object
Z
zengyawen 已提交
1477

Z
zengyawen 已提交
1478 1479 1480
通过key-value方式获取媒体信息。

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

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

W
wusongqing 已提交
1487
**示例:**
1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498

```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 已提交
1499
            printfItemDescription(arrlist[i], MD_KEY_TRACK_TYPE);  //打印出每条轨道MD_KEY_TRACK_TYPE的值
1500 1501 1502 1503 1504 1505
        }
    } else {
        console.log(`audio getTrackDescription fail, error:${error.message}`);
    }
});
```
Z
zengyawen 已提交
1506 1507 1508

## AudioRecorder

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

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

### prepare<a name=audiorecorder_prepare></a>
Z
zengyawen 已提交
1514 1515 1516

prepare(config: AudioRecorderConfig): void

W
wusongqing 已提交
1517
录音准备。
Z
zengyawen 已提交
1518

Z
zengyawen 已提交
1519 1520 1521 1522
**需要权限:** ohos.permission.MICROPHONE

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

W
wusongqing 已提交
1523
**参数:**
B
bird_j 已提交
1524

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

W
wusongqing 已提交
1529
**示例:**
Z
zengyawen 已提交
1530

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


1548
### start<a name=audiorecorder_start></a>
Z
zengyawen 已提交
1549 1550 1551

start(): void

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

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

W
wusongqing 已提交
1556
**示例:**
Z
zengyawen 已提交
1557

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

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

pause():void

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

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

W
wusongqing 已提交
1573
**示例:**
1574 1575

```js
W
wusongqing 已提交
1576
audioRecorder.on('pause', () => {    //设置'pause'事件回调
1577 1578 1579 1580 1581 1582 1583 1584 1585
    console.log('audio recorder pause success');
});
audioRecorder.pause();
```

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

resume():void

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

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

W
wusongqing 已提交
1590
**示例:**
1591 1592

```js
W
wusongqing 已提交
1593
audioRecorder.on('resume', () => {    //设置'resume'事件回调
1594 1595 1596
    console.log('audio recorder resume success');
});
audioRecorder.resume();
Z
zengyawen 已提交
1597 1598
```

1599
### stop<a name=audiorecorder_stop></a>
Z
zengyawen 已提交
1600 1601 1602

stop(): void

W
wusongqing 已提交
1603
停止录音。
Z
zengyawen 已提交
1604

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

W
wusongqing 已提交
1607
**示例:**
Z
zengyawen 已提交
1608

1609
```js
W
wusongqing 已提交
1610
audioRecorder.on('stop', () => {    //设置'stop'事件回调
1611 1612 1613
    console.log('audio recorder stop success');
});
audioRecorder.stop();
Z
zengyawen 已提交
1614 1615
```

1616
### release<a name=audiorecorder_release></a>
Z
zengyawen 已提交
1617 1618 1619

release(): void

W
wusongqing 已提交
1620
释放录音资源。
B
bird_j 已提交
1621

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

W
wusongqing 已提交
1624
**示例:**
Z
zengyawen 已提交
1625

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

1634
### reset<a name=audiorecorder_reset></a>
Z
zengyawen 已提交
1635 1636 1637

reset(): void

W
wusongqing 已提交
1638
重置录音。
Z
zengyawen 已提交
1639

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

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

W
wusongqing 已提交
1644
**示例:**
Z
zengyawen 已提交
1645

B
bird_j 已提交
1646
```js
W
wusongqing 已提交
1647
audioRecorder.on('reset', () => {    //设置'reset'事件回调
B
bird_j 已提交
1648 1649 1650
    console.log('audio recorder reset success');
});
audioRecorder.reset();
Z
zengyawen 已提交
1651 1652
```

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

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

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

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

W
wusongqing 已提交
1661
**参数:**
B
bird_j 已提交
1662

W
wusongqing 已提交
1663
| 参数名   | 类型     | 必填 | 说明                                                         |
Z
zengyawen 已提交
1664
| -------- | -------- | ---- | ------------------------------------------------------------ |
W
wusongqing 已提交
1665 1666
| 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 已提交
1667

W
wusongqing 已提交
1668
**示例:**
Z
zengyawen 已提交
1669

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

### on('error')

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

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

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

W
wusongqing 已提交
1719
**参数:**
Z
zengyawen 已提交
1720

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

W
wusongqing 已提交
1726
**示例:**
1727 1728

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

## AudioRecorderConfig

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

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

W
wusongqing 已提交
1743
| 名称                  | 参数类型                                | 必填 | 说明                                                         |
1744
| --------------------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
W
wusongqing 已提交
1745 1746 1747 1748
| audioEncoder          | [AudioEncoder](#audioencoder)           | 否   | 音频编码格式,默认设置为AAC_LC。                             |
| audioEncodeBitRate    | number                                  | 否   | 音频编码比特率,默认值为48000。                              |
| audioSampleRate       | number                                  | 否   | 音频采集采样率,默认值为48000。                              |
| numberOfChannels      | number                                  | 否   | 音频采集声道数,默认值为2。                                  |
A
abc 已提交
1749
| format                | [AudioOutputFormat](#audiooutputformat) | 否   | 音频输出封装格式,默认设置为MPEG_4。                         |
1750 1751
| 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 已提交
1752
| audioEncoderMime      | [CodecMimeType](#codecmimetype8)        | 否   | 音频编码格式。                                               |
Z
zengyawen 已提交
1753 1754


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

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

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

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

W
wusongqing 已提交
1764
| 名称    | 默认值 | 说明                                                         |
B
bird_j 已提交
1765
| ------- | ------ | ------------------------------------------------------------ |
A
abc 已提交
1766 1767 1768
| 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 已提交
1769
| AAC_LC  | 3      | AAC-LC(Advanced&nbsp;Audio&nbsp;Coding&nbsp;Low&nbsp;Complexity)编码格式。 |
A
abc 已提交
1770
| HE_AAC  | 4      | HE_AAC(High-Efficiency Advanced&nbsp;Audio&nbsp;Coding)编码格式。<br/>仅做接口定义,暂不支持使用。 |
Z
zengyawen 已提交
1771 1772


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

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

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

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

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

1790
## VideoRecorder<sup>9+</sup>
1791

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

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

W
wusongqing 已提交
1796
### 属性
1797

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

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

1804
### prepare<sup>9+</sup><a name=videorecorder_prepare1></a>
1805 1806 1807

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

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

A
1  
abc12133 已提交
1810
**需要权限:** ohos.permission.MICROPHONE
Z
zengyawen 已提交
1811 1812 1813

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

W
wusongqing 已提交
1814
**参数:**
B
bird_j 已提交
1815

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

W
wusongqing 已提交
1821
**示例:**
1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840

```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 已提交
1841
    url : 'fd://xx',   // 文件需先由调用者创建,并给予适当的权限
1842 1843 1844 1845 1846 1847 1848
    orientationHint : 0,
    location : { latitude : 30, longitude : 130 },
}

// asyncallback
let videoRecorder = null;
let events = require('events');
A
amr  
abc12133 已提交
1849
let eventEmitter = new events.EventEmitter();
1850 1851 1852 1853

eventEmitter.on('prepare', () => {
    videoRecorder.prepare(videoConfig, (err) => {
        if (typeof (err) == 'undefined') {
B
bird_j 已提交
1854
            console.info('prepare success');
1855
        } else {
B
bird_j 已提交
1856
            console.info('prepare failed and error is ' + err.message);
1857 1858 1859 1860 1861 1862
        }
    });
});

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

1872
### prepare<sup>9+</sup><a name=videorecorder_prepare2></a>
1873 1874 1875

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

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

Z
zengyawen 已提交
1878
**需要权限:** ohos.permission.MICROPHONE,ohos.permission.CAMERA
Z
zengyawen 已提交
1879 1880 1881

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

W
wusongqing 已提交
1882
**参数:**
1883

1884 1885
| 参数名 | 类型                                         | 必填 | 说明                     |
| ------ | -------------------------------------------- | ---- | ------------------------ |
1886
| config | [VideoRecorderConfig](#videorecorderconfig9) | 是   | 配置视频录制的相关参数。 |
1887

W
wusongqing 已提交
1888
**返回值:**
1889

W
wusongqing 已提交
1890
| 类型           | 说明                                     |
1891
| -------------- | ---------------------------------------- |
W
wusongqing 已提交
1892
| Promise\<void> | 异步视频录制prepare方法的Promise返回值。 |
1893

W
wusongqing 已提交
1894
**示例:**
1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913

```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 已提交
1914
    url : 'fd://xx',   // 文件需先由调用者创建,并给予适当的权限
1915 1916 1917 1918 1919 1920
    orientationHint : 0,
    location : { latitude : 30, longitude : 130 },
}

// promise
let videoRecorder = null;
1921
media.createVideoRecorder().then((recorder) => {
1922 1923 1924 1925 1926 1927 1928 1929 1930 1931
    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);
});

1932
videoRecorder.prepare(videoConfig).then(() => {
1933 1934 1935 1936 1937 1938
    console.info('prepare success');
}).catch((err) => {
    console.info('prepare failed and catch error is ' + err.message);
});
```

1939
### getInputSurface<sup>9+</sup>
1940 1941 1942

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

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

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

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

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

W
wusongqing 已提交
1951
**参数:**
B
bird_j 已提交
1952

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

W
wusongqing 已提交
1957
**示例:**
1958 1959 1960

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

1972
### getInputSurface<sup>9+</sup>
1973 1974 1975

getInputSurface(): Promise\<string>;

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

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

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

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

W
wusongqing 已提交
1984
**返回值:**
1985

W
wusongqing 已提交
1986
| 类型             | 说明                             |
1987
| ---------------- | -------------------------------- |
W
wusongqing 已提交
1988
| Promise\<string> | 异步获得surface的Promise返回值。 |
1989

W
wusongqing 已提交
1990
**示例:**
1991 1992 1993

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

2003
### start<sup>9+</sup><a name=videorecorder_start1></a>
2004 2005 2006

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

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

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

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

W
wusongqing 已提交
2013
**参数:**
2014

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

W
wusongqing 已提交
2019
**示例:**
2020 2021 2022

```js
// asyncallback
B
bird_j 已提交
2023 2024 2025 2026 2027 2028
videoRecorder.start((err) => {
    if (typeof (err) == 'undefined') {
        console.info('start videorecorder success');
    } else {
        console.info('start videorecorder failed and error is ' + err.message);
    }
2029 2030 2031
});
```

2032
### start<sup>9+</sup><a name=videorecorder_start2></a>
2033 2034 2035

start(): Promise\<void>;

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

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

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

W
wusongqing 已提交
2042
**返回值:**
B
bird_j 已提交
2043

W
wusongqing 已提交
2044
| 类型           | 说明                                  |
2045
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2046
| Promise\<void> | 异步开始视频录制方法的Promise返回值。 |
2047

W
wusongqing 已提交
2048
**示例:**
2049 2050 2051

```js
// promise
2052
videoRecorder.start().then(() => {
2053 2054 2055 2056 2057 2058
    console.info('start videorecorder success');
}).catch((err) => {
    console.info('start videorecorder failed and catch error is ' + err.message);
});
```

2059
### pause<sup>9+</sup><a name=videorecorder_pause1></a>
2060 2061 2062

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

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

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

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

W
wusongqing 已提交
2069
**参数:**
2070

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

W
wusongqing 已提交
2075
**示例:**
2076 2077 2078

```js
// asyncallback
B
bird_j 已提交
2079 2080 2081 2082 2083 2084
videoRecorder.pause((err) => {
    if (typeof (err) == 'undefined') {
        console.info('pause videorecorder success');
    } else {
        console.info('pause videorecorder failed and error is ' + err.message);
    }
2085 2086 2087
});
```

2088
### pause<sup>9+</sup><a name=videorecorder_pause2></a>
2089 2090 2091

pause(): Promise\<void>;

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

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

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

W
wusongqing 已提交
2098
**返回值:**
B
bird_j 已提交
2099

W
wusongqing 已提交
2100
| 类型           | 说明                                  |
2101
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2102
| Promise\<void> | 异步暂停视频录制方法的Promise返回值。 |
2103

W
wusongqing 已提交
2104
**示例:**
2105 2106 2107

```js
// promise
2108
videoRecorder.pause().then(() => {
2109 2110 2111 2112 2113 2114
    console.info('pause videorecorder success');
}).catch((err) => {
    console.info('pause videorecorder failed and catch error is ' + err.message);
});
```

2115
### resume<sup>9+</sup><a name=videorecorder_resume1></a>
2116 2117 2118

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

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

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

W
wusongqing 已提交
2123
**参数:**
2124

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

W
wusongqing 已提交
2129
**示例:**
2130 2131 2132

```js
// asyncallback
B
bird_j 已提交
2133 2134 2135 2136 2137 2138
videoRecorder.resume((err) => {
    if (typeof (err) == 'undefined') {
        console.info('resume videorecorder success');
    } else {
        console.info('resume videorecorder failed and error is ' + err.message);
    }
2139 2140 2141
});
```

2142
### resume<sup>9+</sup><a name=videorecorder_resume2></a>
2143 2144 2145

resume(): Promise\<void>;

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

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

W
wusongqing 已提交
2150
**返回值:**
B
bird_j 已提交
2151

W
wusongqing 已提交
2152
| 类型           | 说明                                  |
2153
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2154
| Promise\<void> | 异步恢复视频录制方法的Promise返回值。 |
2155

W
wusongqing 已提交
2156
**示例:**
2157 2158 2159

```js
// promise
2160
videoRecorder.resume().then(() => {
2161 2162 2163 2164 2165 2166
    console.info('resume videorecorder success');
}).catch((err) => {
    console.info('resume videorecorder failed and catch error is ' + err.message);
});
```

2167
### stop<sup>9+</sup><a name=videorecorder_stop1></a>
2168 2169 2170

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

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

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

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

W
wusongqing 已提交
2177
**参数:**
2178

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

W
wusongqing 已提交
2183
**示例:**
2184 2185 2186

```js
// asyncallback
B
bird_j 已提交
2187 2188 2189 2190 2191 2192
videoRecorder.stop((err) => {
    if (typeof (err) == 'undefined') {
        console.info('stop videorecorder success');
    } else {
        console.info('stop videorecorder failed and error is ' + err.message);
    }
2193 2194 2195
});
```

2196
### stop<sup>9+</sup><a name=videorecorder_stop2></a>
2197 2198 2199

stop(): Promise\<void>;

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

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

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

W
wusongqing 已提交
2206
**返回值:**
B
bird_j 已提交
2207

W
wusongqing 已提交
2208
| 类型           | 说明                                  |
2209
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2210
| Promise\<void> | 异步停止视频录制方法的Promise返回值。 |
2211

W
wusongqing 已提交
2212
**示例:**
2213 2214 2215

```js
// promise
2216
videoRecorder.stop().then(() => {
2217 2218 2219 2220 2221 2222
    console.info('stop videorecorder success');
}).catch((err) => {
    console.info('stop videorecorder failed and catch error is ' + err.message);
});
```

2223
### release<sup>9+</sup><a name=videorecorder_release1></a>
2224 2225 2226

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

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

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

W
wusongqing 已提交
2231
**参数:**
2232

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

W
wusongqing 已提交
2237
**示例:**
2238 2239 2240

```js
// asyncallback
B
bird_j 已提交
2241 2242 2243 2244 2245 2246
videoRecorder.release((err) => {
    if (typeof (err) == 'undefined') {
        console.info('release videorecorder success');
    } else {
        console.info('release videorecorder failed and error is ' + err.message);
    }
2247 2248 2249
});
```

2250
### release<sup>9+</sup><a name=videorecorder_release2></a>
2251 2252 2253

release(): Promise\<void>;

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

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

W
wusongqing 已提交
2258
**返回值:**
2259

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

W
wusongqing 已提交
2264
**示例:**
2265 2266 2267

```js
// promise
2268
videoRecorder.release().then(() => {
2269 2270 2271 2272 2273 2274
    console.info('release videorecorder success');
}).catch((err) => {
    console.info('release videorecorder failed and catch error is ' + err.message);
});
```

2275
### reset<sup>9+</sup><a name=videorecorder_reset1></a>
2276 2277 2278

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

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

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

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

W
wusongqing 已提交
2285
**参数:**
B
bird_j 已提交
2286

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

W
wusongqing 已提交
2291
**示例:**
2292 2293 2294

```js
// asyncallback
B
bird_j 已提交
2295 2296 2297 2298 2299 2300
videoRecorder.reset((err) => {
    if (typeof (err) == 'undefined') {
        console.info('reset videorecorder success');
    } else {
        console.info('reset videorecorder failed and error is ' + err.message);
    }
2301 2302 2303
});
```

2304
### reset<sup>9+</sup><a name=videorecorder_reset2></a>
2305 2306 2307

reset(): Promise\<void>;

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

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

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

W
wusongqing 已提交
2314
**返回值:**
2315

W
wusongqing 已提交
2316
| 类型           | 说明                                  |
2317
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2318
| Promise\<void> | 异步重置视频录制方法的Promise返回值。 |
2319

W
wusongqing 已提交
2320
**示例:**
2321 2322 2323

```js
// promise
2324
videoRecorder.reset().then(() => {
2325 2326 2327 2328 2329 2330
    console.info('reset videorecorder success');
}).catch((err) => {
    console.info('reset videorecorder failed and catch error is ' + err.message);
});
```

2331
### on('error')<sup>9+</sup>
2332 2333 2334

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

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

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

W
wusongqing 已提交
2339
**参数:**
B
bird_j 已提交
2340

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

W
wusongqing 已提交
2346
**示例:**
2347 2348

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

2357
## VideoRecordState<sup>9+</sup>
2358

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

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

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

2372
## VideoRecorderConfig<sup>9+</sup>
2373

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

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

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

2387
## AudioSourceType<sup>9+</sup>
2388

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

Z
zengyawen 已提交
2391 2392 2393 2394 2395 2396
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoRecorder。

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

2398
## VideoSourceType<sup>9+</sup>
2399

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

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

W
wusongqing 已提交
2404 2405 2406 2407
| 名称                          | 值   | 说明                            |
| ----------------------------- | ---- | ------------------------------- |
| VIDEO_SOURCE_TYPE_SURFACE_YUV | 0    | 输入surface中携带的是raw data。 |
| VIDEO_SOURCE_TYPE_SURFACE_ES  | 1    | 输入surface中携带的是ES data。  |
2408

2409
## VideoRecorderProfile<sup>9+</sup>
2410

W
wusongqing 已提交
2411
视频录制的配置文件。
2412

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

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

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

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

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

W
wusongqing 已提交
2434 2435 2436 2437
| 名称        | 值    | 说明                  |
| ----------- | ----- | --------------------- |
| CFT_MPEG_4  | "mp4" | 视频的容器格式,MP4。 |
| CFT_MPEG_4A | "m4a" | 音频的容器格式,M4A。 |
2438

2439
## Location
2440

W
wusongqing 已提交
2441
视频录制的地理位置。
2442

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

W
wusongqing 已提交
2445 2446 2447 2448
| 名称      | 参数类型 | 必填 | 说明             |
| --------- | -------- | ---- | ---------------- |
| latitude  | number   | 是   | 地理位置的纬度。 |
| longitude | number   | 是   | 地理位置的经度。 |