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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

**示例:**

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

reset(): void

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

W
wusongqing 已提交
525
| 参数名   | 类型       | 必填 | 说明                                                         |
526
| -------- | ---------- | ---- | ------------------------------------------------------------ |
Z
zengyawen 已提交
527
| type     | string     | 是   | 播放事件回调类型,支持的事件包括:'play' \| 'pause' \| 'stop' \| 'reset' \| 'dataLoad' \| 'finish' \| 'volumeChange'。<br>- 'play':完成[play()](#audioplayer_play)调用,音频开始播放,触发该事件。<br>- 'pause':完成[pause()](#audioplayer_pause)调用,音频暂停播放,触发该事件。<br>- 'stop':完成[stop()](#audioplayer_stop)调用,音频停止播放,触发该事件。<br>- 'reset':完成[reset()](#audioplayer_reset)调用,播放器重置,触发该事件。<br>- 'dataLoad':完成音频数据加载后触发该事件,即src属性设置完成后触发该事件。<br>- 'finish':完成音频播放后触发该事件。<br>- 'volumeChange':完成[setVolume()](#audioplayer_setvolume)调用,播放音量改变后触发该事件。 |
W
wusongqing 已提交
528
| callback | () => void | 是   | 播放事件回调方法。                                           |
529

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

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

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

### on('timeUpdate')

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

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

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

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

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

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

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

### on('error')

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

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

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

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

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

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

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

## AudioState
Z
zengyawen 已提交
643

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

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

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

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

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

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

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

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

| 名称                     | 类型                               | 可读 | 可写 | 说明                                                         |
| ------------------------ | ---------------------------------- | ---- | ---- | ------------------------------------------------------------ |
668
| url<sup>8+</sup>         | string                             | 是   | 是   | 视频媒体URL,支持当前主流的视频格式(mp4、mpeg-ts、webm、mkv)。<br>**支持路径示例**<br>1. fd类型播放:fd://xx<br>![](figures/zh-cn_image_url.png)<br>2. http网络播放: http://xx<br/>3. https网络播放: https://xx<br/>4. hls网络播放路径:http://xx或者https://xx<br/>**注意事项**<br>使用媒体素材需要获取读权限,否则无法正常播放。 |
Z
zengyawen 已提交
669 670 671 672 673 674
| loop<sup>8+</sup>        | boolean                            | 是   | 是   | 视频循环播放属性,设置为'true'表示循环播放。                 |
| currentTime<sup>8+</sup> | number                             | 是   | 否   | 视频的当前播放位置。                                         |
| duration<sup>8+</sup>    | number                             | 是   | 否   | 视频时长,返回-1表示直播模式。                               |
| state<sup>8+</sup>       | [VideoPlayState](#videoplaystate8) | 是   | 否   | 视频播放的状态。                                             |
| width<sup>8+</sup>       | number                             | 是   | 否   | 视频宽。                                                     |
| height<sup>8+</sup>      | number                             | 是   | 否   | 视频高。                                                     |
675 676 677 678 679

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

prepare(): Promise\<void>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

play(): Promise\<void>;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pause(): Promise\<void>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

stop(): Promise\<void>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

reset(): Promise\<void>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

```js
1034 1035 1036 1037
import media from '@ohos.multimedia.media'
let seekTime = 5000;
let seekMode = media.SeekMode.SEEK_NEXT_SYNC;
videoPlayer.seek(seekTime, seekMode, (err, result) => {
A
tab  
abc12133 已提交
1038 1039 1040
    if (typeof (err) == 'undefined') {
        console.info('seek success!');
    } else {
1041 1042 1043 1044 1045 1046 1047 1048 1049
        console.info('seek fail!');
    }
});
```

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

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

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

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

W
wusongqing 已提交
1054
**参数:**
B
bird_j 已提交
1055

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

W
wusongqing 已提交
1061
**返回值:**
1062

W
wusongqing 已提交
1063
| 类型           | 说明                                |
1064
| -------------- | ----------------------------------- |
W
wusongqing 已提交
1065
| Promise\<void> | 跳转到指定播放位置的Promise返回值。 |
1066

W
wusongqing 已提交
1067
**示例:**
1068 1069

```js
1070
let seekTime = 5000;
1071
videoPlayer.seek(seekTime).then((seekDoneTime) => { // seekDoneTime表示seek完成后的时间点
1072
    console.info('seek success');
1073 1074 1075
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1076

1077
videoPlayer.seek(seekTime, seekMode).then((seekDoneTime) => {
1078
    console.info('seek success');
1079 1080 1081
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1082 1083 1084 1085 1086 1087
```

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

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

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

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

W
wusongqing 已提交
1092
**参数:**
1093

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

W
wusongqing 已提交
1099
**示例:**
1100 1101

```js
1102 1103
let vol = 0.5;
videoPlayer.setVolume(vol, (err, result) => {
A
tab  
abc12133 已提交
1104 1105 1106
    if (typeof (err) == 'undefined') {
        console.info('setVolume success!');
    } else {
1107 1108 1109 1110 1111 1112 1113 1114 1115
        console.info('setVolume fail!');
    }
});
```

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

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

W
wusongqing 已提交
1116
通过Promise方式设置音量。
1117

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

W
wusongqing 已提交
1120
**参数:**
B
bird_j 已提交
1121

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

W
wusongqing 已提交
1126
**返回值:**
1127

W
wusongqing 已提交
1128
| 类型           | 说明                      |
1129
| -------------- | ------------------------- |
W
wusongqing 已提交
1130
| Promise\<void> | 设置音量的Promise返回值。 |
1131

W
wusongqing 已提交
1132
**示例:**
1133 1134

```js
1135
let vol = 0.5;
1136
videoPlayer.setVolume(vol).then() => {
1137
    console.info('setVolume success');
1138 1139 1140
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1141 1142 1143 1144 1145 1146
```

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

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

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

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

W
wusongqing 已提交
1151
**参数:**
1152

W
wusongqing 已提交
1153
| 参数名   | 类型     | 必填 | 说明                     |
1154
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
1155
| callback | function | 是   | 释放视频资源的回调方法。 |
1156

W
wusongqing 已提交
1157
**示例:**
1158 1159 1160

```js
videoPlayer.release((err) => {
A
tab  
abc12133 已提交
1161 1162 1163
    if (typeof (err) == 'undefined') {
        console.info('release success!');
    } else {
1164 1165 1166 1167 1168 1169 1170 1171 1172
        console.info('release fail!');
    }
});
```

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

release(): Promise\<void>

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

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

W
wusongqing 已提交
1177
**返回值:**
1178

W
wusongqing 已提交
1179
| 类型           | 说明                          |
1180
| -------------- | ----------------------------- |
W
wusongqing 已提交
1181
| Promise\<void> | 释放视频资源的Promise返回值。 |
1182

W
wusongqing 已提交
1183
**示例:**
1184 1185

```js
1186
videoPlayer.release().then() => {
1187
    console.info('release success');
1188 1189 1190
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1191 1192 1193 1194
```

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

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

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

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

W
wusongqing 已提交
1201
**参数:**
B
bird_j 已提交
1202

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

W
wusongqing 已提交
1207
**示例:**
1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230

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

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

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

W
wusongqing 已提交
1237
**返回值:**
1238

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

W
wusongqing 已提交
1243
**示例:**
1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254

```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;
1255
videoPlayer.getTrackDescription().then((arrlist) => {
1256 1257 1258 1259 1260
    if (typeof (arrlist) != 'undefined') {
        arrayDescription = arrlist;
    } else {
        console.log('video getTrackDescription fail');
    }
1261 1262 1263
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1264 1265 1266 1267 1268 1269 1270 1271 1272
for (let i = 0; i < arrayDescription.length; i++) {
    printfDescription(arrayDescription[i]);
}
```

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

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

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

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

W
wusongqing 已提交
1277
**参数:**
B
bird_j 已提交
1278

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

W
wusongqing 已提交
1284
**示例:**
1285 1286

```js
1287 1288 1289 1290
import media from '@ohos.multimedia.media'
let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X;

videoPlayer.setSpeed(speed, (err, result) => {
A
tab  
abc12133 已提交
1291 1292 1293
    if (typeof (err) == 'undefined') {
        console.info('setSpeed success!');
    } else {
1294 1295 1296 1297 1298 1299 1300 1301 1302
        console.info('setSpeed fail!');
    }
});
```

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

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

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

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

W
wusongqing 已提交
1307
**参数:**
1308

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

Z
zengyawen 已提交
1313 1314 1315 1316 1317 1318
**返回值:**

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

W
wusongqing 已提交
1319
**示例:**
1320 1321

```js
1322 1323 1324
import media from '@ohos.multimedia.media'
let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X;

1325
videoPlayer.setSpeed(speed).then() => {
1326
    console.info('setSpeed success');
1327 1328 1329
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1330 1331
```

1332 1333 1334 1335
### selectBitrate<sup>9+</sup>

selectBitrate(bitrate:number, callback: AsyncCallback\<number>): void

1336
通过回调方式设置码率,通过[availableBitrateCollected](#on('availableBitrateCollected')<sup>9+</sup>)获取当前码流支持的Bitrate。
1337 1338 1339 1340 1341

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

**参数:**

1342 1343 1344 1345
| 参数名   | 类型                   | 必填 | 说明                                                       |
| -------- | ---------------------- | ---- | ---------------------------------------------------------- |
| bitrate  | number                 | 是   | 指定码率播放,用于hls多码率场景,单位为bps。               |
| callback | AsyncCallback\<number> | 是   | 设置播放码率的回调方法,返回设置的值表示成功,其他则失败。 |
1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369

**示例:**

```js
let bitrate = 1024000;
videoPlayer.selectBitrate(bitrate, (err, result) => {
    if (typeof (err) == 'undefined') {
        console.info('selectBitrate success!');
    } else {
        console.info('selectBitrate fail!');
    }
});
```

### selectBitrate<sup>9+</sup>

selectBitrate(bitrate:number): Promise\<number>

通过Promise方式设置码率,通过[availableBitrateCollected](#on('availableBitrateCollected')<sup>9+</sup>)获取当前码流支持的Bitrate。

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

**参数:**

1370 1371 1372
| 参数名  | 类型   | 必填 | 说明                                         |
| ------- | ------ | ---- | -------------------------------------------- |
| bitrate | number | 是   | 指定码率播放,用于hls多码率场景,单位为bps。 |
1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390

**返回值:**

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

**示例:**

```js
let bitrate = 1024000;
videoPlayer.selectBitrate(bitrate).then() => {
    console.info('selectBitrate success');
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
```

1391 1392 1393 1394
### on('playbackCompleted')<sup>8+</sup>

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

1395
开始监听视频播放完成事件。
1396

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

W
wusongqing 已提交
1399
**参数:**
B
bird_j 已提交
1400

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

W
wusongqing 已提交
1406
**示例:**
1407 1408 1409

```js
videoPlayer.on('playbackCompleted', () => {
A
tab  
abc12133 已提交
1410
    console.info('playbackCompleted success!');
1411 1412 1413 1414 1415 1416 1417
});
```

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

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

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

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

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

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

W
wusongqing 已提交
1429
**示例:**
1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441

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

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

W
wusongqing 已提交
1446
**参数:**
B
bird_j 已提交
1447

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

W
wusongqing 已提交
1453
**示例:**
1454 1455 1456

```js
videoPlayer.on('startRenderFrame', () => {
A
tab  
abc12133 已提交
1457
    console.info('startRenderFrame success!');
1458 1459 1460 1461 1462 1463 1464
});
```

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

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

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

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

W
wusongqing 已提交
1469
**参数:**
1470

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

W
wusongqing 已提交
1476
**示例:**
1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488

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

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

W
wusongqing 已提交
1493
**参数:**
1494

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

W
wusongqing 已提交
1500
**示例:**
1501 1502

```js
W
wusongqing 已提交
1503
videoPlayer.on('error', (error) => {      // 设置'error'事件回调
A
tab  
abc12133 已提交
1504
    console.info(`video error called, errName is ${error.name}`);      // 打印错误类型名称
W
wusongqing 已提交
1505 1506
    console.info(`video error called, errCode is ${error.code}`);      // 打印错误码
    console.info(`video error called, errMessage is ${error.message}`);// 打印错误类型详细描述
1507
});
W
wusongqing 已提交
1508
videoPlayer.setVolume(3);  //设置volume为无效值,触发'error'事件
1509 1510
```

1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523
### on('availableBitrateCollected')<sup>9+</sup>

on(type: 'availableBitrateCollected', callback: (bitrates: Array<number>) => void): void

开始监听视频播放码率上报事件。

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

**参数:**

| 参数名   | 类型     | 必填 | 说明                                                         |
| -------- | -------- | ---- | ------------------------------------------------------------ |
| type     | string   | 是   | 视频播放码率上报事件回调类型,支持的事件:'availableBitrateCollected',只在开始播放时候上报一次 |
1524
| callback | function | 是   | 视频播放码率事件回调方法,使用数组存放支持的码率。      |
1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535

**示例:**

```js
videoPlayer.on('availableBitrateCollected', (bitrates) => {
    for (let i = 0; i < bitrates.length; i++) {
        console.info('case availableBitrateCollected bitrates: '  + bitrates[i]);  //打印支持的码率
    }
});
```

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

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

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

W
wusongqing 已提交
1542 1543 1544 1545 1546 1547 1548 1549
| 名称     | 类型   | 描述           |
| -------- | ------ | -------------- |
| idle     | string | 视频播放空闲。 |
| prepared | string | 视频播放准备。 |
| playing  | string | 视频正在播放。 |
| paused   | string | 视频暂停播放。 |
| stopped  | string | 视频播放停止。 |
| error    | string | 错误状态。     |
1550 1551 1552

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

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

Z
zengyawen 已提交
1555 1556 1557 1558 1559 1560
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。

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

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

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

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

W
wusongqing 已提交
1568 1569 1570 1571 1572 1573 1574
| 名称                 | 值   | 描述                           |
| -------------------- | ---- | ------------------------------ |
| 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倍。 |
1575

1576 1577
## MediaDescription<sup>8+</sup>

Z
zengyawen 已提交
1578
### [key : string] : Object
Z
zengyawen 已提交
1579

Z
zengyawen 已提交
1580 1581 1582
通过key-value方式获取媒体信息。

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

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

W
wusongqing 已提交
1589
**示例:**
1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600

```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 已提交
1601
            printfItemDescription(arrlist[i], MD_KEY_TRACK_TYPE);  //打印出每条轨道MD_KEY_TRACK_TYPE的值
1602 1603 1604 1605 1606 1607
        }
    } else {
        console.log(`audio getTrackDescription fail, error:${error.message}`);
    }
});
```
Z
zengyawen 已提交
1608 1609 1610

## AudioRecorder

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

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

### prepare<a name=audiorecorder_prepare></a>
Z
zengyawen 已提交
1616 1617 1618

prepare(config: AudioRecorderConfig): void

W
wusongqing 已提交
1619
录音准备。
Z
zengyawen 已提交
1620

Z
zengyawen 已提交
1621 1622 1623 1624
**需要权限:** ohos.permission.MICROPHONE

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

W
wusongqing 已提交
1625
**参数:**
B
bird_j 已提交
1626

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

W
wusongqing 已提交
1631
**示例:**
Z
zengyawen 已提交
1632

1633
```js
Z
zengyawen 已提交
1634
let audioRecorderConfig = {
1635
    audioEncoder : media.AudioEncoder.AAC_LC,
Z
zengyawen 已提交
1636 1637 1638
    audioEncodeBitRate : 22050,
    audioSampleRate : 22050,
    numberOfChannels : 2,
1639
    format : media.AudioOutputFormat.AAC_ADTS,
Z
zengyawen 已提交
1640
    uri : 'fd://1',       // 文件需先由调用者创建,并给予适当的权限
1641
    location : { latitude : 30, longitude : 130},
Z
zengyawen 已提交
1642
}
W
wusongqing 已提交
1643
audioRecorder.on('prepare', () => {    //设置'prepare'事件回调
1644 1645
    console.log('prepare success');
});
B
bird_j 已提交
1646
audioRecorder.prepare(audioRecorderConfig);
Z
zengyawen 已提交
1647 1648 1649
```


1650
### start<a name=audiorecorder_start></a>
Z
zengyawen 已提交
1651 1652 1653

start(): void

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

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

W
wusongqing 已提交
1658
**示例:**
Z
zengyawen 已提交
1659

1660
```js
W
wusongqing 已提交
1661
audioRecorder.on('start', () => {    //设置'start'事件回调
1662 1663 1664
    console.log('audio recorder start success');
});
audioRecorder.start();
Z
zengyawen 已提交
1665
```
1666 1667 1668 1669 1670

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

pause():void

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

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

W
wusongqing 已提交
1675
**示例:**
1676 1677

```js
W
wusongqing 已提交
1678
audioRecorder.on('pause', () => {    //设置'pause'事件回调
1679 1680 1681 1682 1683 1684 1685 1686 1687
    console.log('audio recorder pause success');
});
audioRecorder.pause();
```

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

resume():void

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

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

W
wusongqing 已提交
1692
**示例:**
1693 1694

```js
W
wusongqing 已提交
1695
audioRecorder.on('resume', () => {    //设置'resume'事件回调
1696 1697 1698
    console.log('audio recorder resume success');
});
audioRecorder.resume();
Z
zengyawen 已提交
1699 1700
```

1701
### stop<a name=audiorecorder_stop></a>
Z
zengyawen 已提交
1702 1703 1704

stop(): void

W
wusongqing 已提交
1705
停止录音。
Z
zengyawen 已提交
1706

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

W
wusongqing 已提交
1709
**示例:**
Z
zengyawen 已提交
1710

1711
```js
W
wusongqing 已提交
1712
audioRecorder.on('stop', () => {    //设置'stop'事件回调
1713 1714 1715
    console.log('audio recorder stop success');
});
audioRecorder.stop();
Z
zengyawen 已提交
1716 1717
```

1718
### release<a name=audiorecorder_release></a>
Z
zengyawen 已提交
1719 1720 1721

release(): void

W
wusongqing 已提交
1722
释放录音资源。
B
bird_j 已提交
1723

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

W
wusongqing 已提交
1726
**示例:**
Z
zengyawen 已提交
1727

1728
```js
W
wusongqing 已提交
1729
audioRecorder.on('release', () => {    //设置'release'事件回调
B
bird_j 已提交
1730 1731
    console.log('audio recorder release success');
});
1732 1733
audioRecorder.release();
audioRecorder = undefined;
Z
zengyawen 已提交
1734 1735
```

1736
### reset<a name=audiorecorder_reset></a>
Z
zengyawen 已提交
1737 1738 1739

reset(): void

W
wusongqing 已提交
1740
重置录音。
Z
zengyawen 已提交
1741

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

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

W
wusongqing 已提交
1746
**示例:**
Z
zengyawen 已提交
1747

B
bird_j 已提交
1748
```js
W
wusongqing 已提交
1749
audioRecorder.on('reset', () => {    //设置'reset'事件回调
B
bird_j 已提交
1750 1751 1752
    console.log('audio recorder reset success');
});
audioRecorder.reset();
Z
zengyawen 已提交
1753 1754
```

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

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

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

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

W
wusongqing 已提交
1763
**参数:**
B
bird_j 已提交
1764

W
wusongqing 已提交
1765
| 参数名   | 类型     | 必填 | 说明                                                         |
Z
zengyawen 已提交
1766
| -------- | -------- | ---- | ------------------------------------------------------------ |
W
wusongqing 已提交
1767 1768
| 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 已提交
1769

W
wusongqing 已提交
1770
**示例:**
Z
zengyawen 已提交
1771

1772
```js
A
tab  
abc12133 已提交
1773
let audiorecorder = media.createAudioRecorder();                                  // 创建一个音频录制实例
1774 1775 1776 1777 1778 1779
let audioRecorderConfig = {
    audioEncoder : media.AudioEncoder.AAC_LC, ,
    audioEncodeBitRate : 22050,
    audioSampleRate : 22050,
    numberOfChannels : 2,
    format : media.AudioOutputFormat.AAC_ADTS,
Z
zengyawen 已提交
1780
    uri : 'fd://xx',                                                            // 文件需先由调用者创建,并给予适当的权限
1781 1782
    location : { latitude : 30, longitude : 130},
}
A
tab  
abc12133 已提交
1783 1784
audioRecorder.on('error', (error) => {                                             // 设置'error'事件回调
    console.info(`audio error called, errName is ${error.name}`);
1785 1786 1787
    console.info(`audio error called, errCode is ${error.code}`);
    console.info(`audio error called, errMessage is ${error.message}`);
});
A
tab  
abc12133 已提交
1788
audioRecorder.on('prepare', () => {                                              // 设置'prepare'事件回调
1789
    console.log('prepare success');
A
tab  
abc12133 已提交
1790
    audioRecorder.start();                                                       // 开始录制,并触发'start'事件回调
1791
});
A
tab  
abc12133 已提交
1792
audioRecorder.on('start', () => {                                                 // 设置'start'事件回调
1793 1794
    console.log('audio recorder start success');
});
A
tab  
abc12133 已提交
1795
audioRecorder.on('pause', () => {                                                 // 设置'pause'事件回调
1796 1797
    console.log('audio recorder pause success');
});
A
tab  
abc12133 已提交
1798
audioRecorder.on('resume', () => {                                                 // 设置'resume'事件回调
1799 1800
    console.log('audio recorder resume success');
});
A
tab  
abc12133 已提交
1801
audioRecorder.on('stop', () => {                                                 // 设置'stop'事件回调
1802 1803
    console.log('audio recorder stop success');
});
A
tab  
abc12133 已提交
1804
audioRecorder.on('release', () => {                                                 // 设置'release'事件回调
1805 1806
    console.log('audio recorder release success');
});
A
tab  
abc12133 已提交
1807
audioRecorder.on('reset', () => {                                                 // 设置'reset'事件回调
1808
    console.log('audio recorder reset success');
Z
zengyawen 已提交
1809
});
A
tab  
abc12133 已提交
1810
audioRecorder.prepare(audioRecorderConfig)                                       // 设置录制参数 ,并触发'prepare'事件回调
Z
zengyawen 已提交
1811 1812 1813 1814 1815 1816
```

### on('error')

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

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

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

W
wusongqing 已提交
1821
**参数:**
Z
zengyawen 已提交
1822

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

W
wusongqing 已提交
1828
**示例:**
1829 1830

```js
A
tab  
abc12133 已提交
1831 1832
audioRecorder.on('error', (error) => {                                  // 设置'error'事件回调
    console.info(`audio error called, errName is ${error.name}`);       // 打印错误类型名称
W
wusongqing 已提交
1833 1834
    console.info(`audio error called, errCode is ${error.code}`);       // 打印错误码
    console.info(`audio error called, errMessage is ${error.message}`); // 打印错误类型详细描述
1835
});
A
tab  
abc12133 已提交
1836
audioRecorder.prepare();                                                  // prepare不设置参数,触发'error'事件
1837
```
Z
zengyawen 已提交
1838 1839 1840

## AudioRecorderConfig

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

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

W
wusongqing 已提交
1845
| 名称                  | 参数类型                                | 必填 | 说明                                                         |
1846
| --------------------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
1847
| audioEncoder<sup>(deprecated)</sup>          | [AudioEncoder](#audioencoder)           | 否   | 音频编码格式,默认设置为AAC_LC。<br/>**说明:** 从API Version 8 开始废弃,建议使用audioEncoderMime替代。                             |
W
wusongqing 已提交
1848 1849 1850
| audioEncodeBitRate    | number                                  | 否   | 音频编码比特率,默认值为48000。                              |
| audioSampleRate       | number                                  | 否   | 音频采集采样率,默认值为48000。                              |
| numberOfChannels      | number                                  | 否   | 音频采集声道数,默认值为2。                                  |
1851
| format<sup>(deprecated)</sup>                | [AudioOutputFormat](#audiooutputformat) | 否   | 音频输出封装格式,默认设置为MPEG_4。<br/>**说明:** 从API Version 8 开始废弃,建议使用fileFormat替代。                         |
1852
| location              | [Location](#location)                   | 否   | 音频采集的地理位置。                                         |
1853 1854 1855
| uri                   | string                                  | 是   | 音频输出URI:fd://xx&nbsp;(fd&nbsp;number)<br/>![](figures/zh-cn_image_url.png) <br/>文件需要由调用者创建,并赋予适当的权限。 |
| audioEncoderMime<sup>8+</sup>      | [CodecMimeType](#codecmimetype8)        | 否   | 音频编码格式。           |
| fileFormat<sup>8+</sup>      | [ContainerFormatType](#containerformattype8)        | 否   | 音频编码格式。         |
Z
zengyawen 已提交
1856

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

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

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

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

W
wusongqing 已提交
1866
| 名称    | 默认值 | 说明                                                         |
B
bird_j 已提交
1867
| ------- | ------ | ------------------------------------------------------------ |
A
abc 已提交
1868 1869 1870
| 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 已提交
1871
| AAC_LC  | 3      | AAC-LC(Advanced&nbsp;Audio&nbsp;Coding&nbsp;Low&nbsp;Complexity)编码格式。 |
A
abc 已提交
1872
| HE_AAC  | 4      | HE_AAC(High-Efficiency Advanced&nbsp;Audio&nbsp;Coding)编码格式。<br/>仅做接口定义,暂不支持使用。 |
Z
zengyawen 已提交
1873 1874


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

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

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

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

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

1892
## VideoRecorder<sup>9+</sup>
1893

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

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

W
wusongqing 已提交
1898
### 属性
1899

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

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

1906
### prepare<sup>9+</sup><a name=videorecorder_prepare1></a>
1907 1908 1909

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

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

A
1  
abc12133 已提交
1912
**需要权限:** ohos.permission.MICROPHONE
Z
zengyawen 已提交
1913 1914 1915

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

W
wusongqing 已提交
1916
**参数:**
B
bird_j 已提交
1917

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

W
wusongqing 已提交
1923
**示例:**
1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942

```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 已提交
1943
    url : 'fd://xx',   // 文件需先由调用者创建,并给予适当的权限
1944 1945 1946 1947 1948 1949 1950
    orientationHint : 0,
    location : { latitude : 30, longitude : 130 },
}

// asyncallback
let videoRecorder = null;
let events = require('events');
A
amr  
abc12133 已提交
1951
let eventEmitter = new events.EventEmitter();
1952 1953 1954 1955

eventEmitter.on('prepare', () => {
    videoRecorder.prepare(videoConfig, (err) => {
        if (typeof (err) == 'undefined') {
B
bird_j 已提交
1956
            console.info('prepare success');
1957
        } else {
B
bird_j 已提交
1958
            console.info('prepare failed and error is ' + err.message);
1959 1960 1961 1962 1963 1964
        }
    });
});

media.createVideoRecorder((err, recorder) => {
    if (typeof (err) == 'undefined' && typeof (recorder) != 'undefined') {
B
bird_j 已提交
1965 1966
        videoRecorder = recorder;
        console.info('createVideoRecorder success');
W
wusongqing 已提交
1967
        eventEmitter.emit('prepare');                                        // prepare事件触发
1968
    } else {
B
bird_j 已提交
1969
        console.info('createVideoRecorder failed and error is ' + err.message);
1970 1971 1972 1973
    }
});
```

1974
### prepare<sup>9+</sup><a name=videorecorder_prepare2></a>
1975 1976 1977

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

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

Z
zengyawen 已提交
1980
**需要权限:** ohos.permission.MICROPHONE,ohos.permission.CAMERA
Z
zengyawen 已提交
1981 1982 1983

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

W
wusongqing 已提交
1984
**参数:**
1985

1986 1987
| 参数名 | 类型                                         | 必填 | 说明                     |
| ------ | -------------------------------------------- | ---- | ------------------------ |
1988
| config | [VideoRecorderConfig](#videorecorderconfig9) | 是   | 配置视频录制的相关参数。 |
1989

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

W
wusongqing 已提交
1992
| 类型           | 说明                                     |
1993
| -------------- | ---------------------------------------- |
W
wusongqing 已提交
1994
| Promise\<void> | 异步视频录制prepare方法的Promise返回值。 |
1995

W
wusongqing 已提交
1996
**示例:**
1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015

```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 已提交
2016
    url : 'fd://xx',   // 文件需先由调用者创建,并给予适当的权限
2017 2018 2019 2020 2021 2022
    orientationHint : 0,
    location : { latitude : 30, longitude : 130 },
}

// promise
let videoRecorder = null;
2023
media.createVideoRecorder().then((recorder) => {
2024 2025 2026 2027 2028 2029 2030 2031 2032 2033
    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);
});

2034
videoRecorder.prepare(videoConfig).then(() => {
2035 2036 2037 2038 2039 2040
    console.info('prepare success');
}).catch((err) => {
    console.info('prepare failed and catch error is ' + err.message);
});
```

2041
### getInputSurface<sup>9+</sup>
2042 2043 2044

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

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

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

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

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

W
wusongqing 已提交
2053
**参数:**
B
bird_j 已提交
2054

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

W
wusongqing 已提交
2059
**示例:**
2060 2061 2062

```js
// asyncallback
A
tab  
abc12133 已提交
2063
let surfaceID = null;                                               // 传递给外界的surfaceID
B
bird_j 已提交
2064 2065 2066
videoRecorder.getInputSurface((err, surfaceId) => {
    if (typeof (err) == 'undefined') {
        console.info('getInputSurface success');
B
bird_j 已提交
2067
        surfaceID = surfaceId;
B
bird_j 已提交
2068 2069 2070
    } else {
        console.info('getInputSurface failed and error is ' + err.message);
    }
2071 2072 2073
});
```

2074
### getInputSurface<sup>9+</sup>
2075 2076 2077

getInputSurface(): Promise\<string>;

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

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

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

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

W
wusongqing 已提交
2086
**返回值:**
2087

W
wusongqing 已提交
2088
| 类型             | 说明                             |
2089
| ---------------- | -------------------------------- |
W
wusongqing 已提交
2090
| Promise\<string> | 异步获得surface的Promise返回值。 |
2091

W
wusongqing 已提交
2092
**示例:**
2093 2094 2095

```js
// promise
A
tab  
abc12133 已提交
2096
let surfaceID = null;                                               // 传递给外界的surfaceID
2097
videoRecorder.getInputSurface().then((surfaceId) => {
2098
    console.info('getInputSurface success');
B
bird_j 已提交
2099
    surfaceID = surfaceId;
2100 2101 2102 2103 2104
}).catch((err) => {
    console.info('getInputSurface failed and catch error is ' + err.message);
});
```

2105
### start<sup>9+</sup><a name=videorecorder_start1></a>
2106 2107 2108

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

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

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

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

W
wusongqing 已提交
2115
**参数:**
2116

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

W
wusongqing 已提交
2121
**示例:**
2122 2123 2124

```js
// asyncallback
B
bird_j 已提交
2125 2126 2127 2128 2129 2130
videoRecorder.start((err) => {
    if (typeof (err) == 'undefined') {
        console.info('start videorecorder success');
    } else {
        console.info('start videorecorder failed and error is ' + err.message);
    }
2131 2132 2133
});
```

2134
### start<sup>9+</sup><a name=videorecorder_start2></a>
2135 2136 2137

start(): Promise\<void>;

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

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

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

W
wusongqing 已提交
2144
**返回值:**
B
bird_j 已提交
2145

W
wusongqing 已提交
2146
| 类型           | 说明                                  |
2147
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2148
| Promise\<void> | 异步开始视频录制方法的Promise返回值。 |
2149

W
wusongqing 已提交
2150
**示例:**
2151 2152 2153

```js
// promise
2154
videoRecorder.start().then(() => {
2155 2156 2157 2158 2159 2160
    console.info('start videorecorder success');
}).catch((err) => {
    console.info('start videorecorder failed and catch error is ' + err.message);
});
```

2161
### pause<sup>9+</sup><a name=videorecorder_pause1></a>
2162 2163 2164

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

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

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

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

W
wusongqing 已提交
2171
**参数:**
2172

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

W
wusongqing 已提交
2177
**示例:**
2178 2179 2180

```js
// asyncallback
B
bird_j 已提交
2181 2182 2183 2184 2185 2186
videoRecorder.pause((err) => {
    if (typeof (err) == 'undefined') {
        console.info('pause videorecorder success');
    } else {
        console.info('pause videorecorder failed and error is ' + err.message);
    }
2187 2188 2189
});
```

2190
### pause<sup>9+</sup><a name=videorecorder_pause2></a>
2191 2192 2193

pause(): Promise\<void>;

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

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

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

W
wusongqing 已提交
2200
**返回值:**
B
bird_j 已提交
2201

W
wusongqing 已提交
2202
| 类型           | 说明                                  |
2203
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2204
| Promise\<void> | 异步暂停视频录制方法的Promise返回值。 |
2205

W
wusongqing 已提交
2206
**示例:**
2207 2208 2209

```js
// promise
2210
videoRecorder.pause().then(() => {
2211 2212 2213 2214 2215 2216
    console.info('pause videorecorder success');
}).catch((err) => {
    console.info('pause videorecorder failed and catch error is ' + err.message);
});
```

2217
### resume<sup>9+</sup><a name=videorecorder_resume1></a>
2218 2219 2220

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

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

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

W
wusongqing 已提交
2225
**参数:**
2226

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

W
wusongqing 已提交
2231
**示例:**
2232 2233 2234

```js
// asyncallback
B
bird_j 已提交
2235 2236 2237 2238 2239 2240
videoRecorder.resume((err) => {
    if (typeof (err) == 'undefined') {
        console.info('resume videorecorder success');
    } else {
        console.info('resume videorecorder failed and error is ' + err.message);
    }
2241 2242 2243
});
```

2244
### resume<sup>9+</sup><a name=videorecorder_resume2></a>
2245 2246 2247

resume(): Promise\<void>;

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

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

W
wusongqing 已提交
2252
**返回值:**
B
bird_j 已提交
2253

W
wusongqing 已提交
2254
| 类型           | 说明                                  |
2255
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2256
| Promise\<void> | 异步恢复视频录制方法的Promise返回值。 |
2257

W
wusongqing 已提交
2258
**示例:**
2259 2260 2261

```js
// promise
2262
videoRecorder.resume().then(() => {
2263 2264 2265 2266 2267 2268
    console.info('resume videorecorder success');
}).catch((err) => {
    console.info('resume videorecorder failed and catch error is ' + err.message);
});
```

2269
### stop<sup>9+</sup><a name=videorecorder_stop1></a>
2270 2271 2272

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

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

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

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

W
wusongqing 已提交
2279
**参数:**
2280

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

W
wusongqing 已提交
2285
**示例:**
2286 2287 2288

```js
// asyncallback
B
bird_j 已提交
2289 2290 2291 2292 2293 2294
videoRecorder.stop((err) => {
    if (typeof (err) == 'undefined') {
        console.info('stop videorecorder success');
    } else {
        console.info('stop videorecorder failed and error is ' + err.message);
    }
2295 2296 2297
});
```

2298
### stop<sup>9+</sup><a name=videorecorder_stop2></a>
2299 2300 2301

stop(): Promise\<void>;

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

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

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

W
wusongqing 已提交
2308
**返回值:**
B
bird_j 已提交
2309

W
wusongqing 已提交
2310
| 类型           | 说明                                  |
2311
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2312
| Promise\<void> | 异步停止视频录制方法的Promise返回值。 |
2313

W
wusongqing 已提交
2314
**示例:**
2315 2316 2317

```js
// promise
2318
videoRecorder.stop().then(() => {
2319 2320 2321 2322 2323 2324
    console.info('stop videorecorder success');
}).catch((err) => {
    console.info('stop videorecorder failed and catch error is ' + err.message);
});
```

2325
### release<sup>9+</sup><a name=videorecorder_release1></a>
2326 2327 2328

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

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

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

W
wusongqing 已提交
2333
**参数:**
2334

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

W
wusongqing 已提交
2339
**示例:**
2340 2341 2342

```js
// asyncallback
B
bird_j 已提交
2343 2344 2345 2346 2347 2348
videoRecorder.release((err) => {
    if (typeof (err) == 'undefined') {
        console.info('release videorecorder success');
    } else {
        console.info('release videorecorder failed and error is ' + err.message);
    }
2349 2350 2351
});
```

2352
### release<sup>9+</sup><a name=videorecorder_release2></a>
2353 2354 2355

release(): Promise\<void>;

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

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

W
wusongqing 已提交
2360
**返回值:**
2361

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

W
wusongqing 已提交
2366
**示例:**
2367 2368 2369

```js
// promise
2370
videoRecorder.release().then(() => {
2371 2372 2373 2374 2375 2376
    console.info('release videorecorder success');
}).catch((err) => {
    console.info('release videorecorder failed and catch error is ' + err.message);
});
```

2377
### reset<sup>9+</sup><a name=videorecorder_reset1></a>
2378 2379 2380

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

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

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

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

W
wusongqing 已提交
2387
**参数:**
B
bird_j 已提交
2388

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

W
wusongqing 已提交
2393
**示例:**
2394 2395 2396

```js
// asyncallback
B
bird_j 已提交
2397 2398 2399 2400 2401 2402
videoRecorder.reset((err) => {
    if (typeof (err) == 'undefined') {
        console.info('reset videorecorder success');
    } else {
        console.info('reset videorecorder failed and error is ' + err.message);
    }
2403 2404 2405
});
```

2406
### reset<sup>9+</sup><a name=videorecorder_reset2></a>
2407 2408 2409

reset(): Promise\<void>;

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

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

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

W
wusongqing 已提交
2416
**返回值:**
2417

W
wusongqing 已提交
2418
| 类型           | 说明                                  |
2419
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2420
| Promise\<void> | 异步重置视频录制方法的Promise返回值。 |
2421

W
wusongqing 已提交
2422
**示例:**
2423 2424 2425

```js
// promise
2426
videoRecorder.reset().then(() => {
2427 2428 2429 2430 2431 2432
    console.info('reset videorecorder success');
}).catch((err) => {
    console.info('reset videorecorder failed and catch error is ' + err.message);
});
```

2433
### on('error')<sup>9+</sup>
2434 2435 2436

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

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

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

W
wusongqing 已提交
2441
**参数:**
B
bird_j 已提交
2442

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

W
wusongqing 已提交
2448
**示例:**
2449 2450

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

2459
## VideoRecordState<sup>9+</sup>
2460

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

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

W
wusongqing 已提交
2465 2466 2467 2468 2469 2470 2471 2472
| 名称     | 类型   | 描述                   |
| -------- | ------ | ---------------------- |
| idle     | string | 视频录制空闲。         |
| prepared | string | 视频录制参数设置完成。 |
| playing  | string | 视频正在录制。         |
| paused   | string | 视频暂停录制。         |
| stopped  | string | 视频录制停止。         |
| error    | string | 错误状态。             |
2473

2474
## VideoRecorderConfig<sup>9+</sup>
2475

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

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

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

2489
## AudioSourceType<sup>9+</sup>
2490

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

Z
zengyawen 已提交
2493 2494 2495 2496 2497 2498
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoRecorder。

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

2500
## VideoSourceType<sup>9+</sup>
2501

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

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

W
wusongqing 已提交
2506 2507 2508 2509
| 名称                          | 值   | 说明                            |
| ----------------------------- | ---- | ------------------------------- |
| VIDEO_SOURCE_TYPE_SURFACE_YUV | 0    | 输入surface中携带的是raw data。 |
| VIDEO_SOURCE_TYPE_SURFACE_ES  | 1    | 输入surface中携带的是ES data。  |
2510

2511
## VideoRecorderProfile<sup>9+</sup>
2512

W
wusongqing 已提交
2513
视频录制的配置文件。
2514

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

W
wusongqing 已提交
2517 2518 2519 2520
| 名称             | 参数类型                                     | 必填 | 说明             |
| ---------------- | -------------------------------------------- | ---- | ---------------- |
| audioBitrate     | number                                       | 是   | 音频编码比特率。 |
| audioChannels    | number                                       | 是   | 音频采集声道数。 |
Z
zengyawen 已提交
2521
| audioCodec       | [CodecMimeType](#codecmimetype8)             | 是   | 音频编码格式。   |
W
wusongqing 已提交
2522 2523
| audioSampleRate  | number                                       | 是   | 音频采样率。     |
| fileFormat       | [ContainerFormatType](#containerformattype8) | 是   | 文件的容器格式。 |
2524
| videoBitrate     | number                                       | 是   | 视频编码比特率。 |
Z
zengyawen 已提交
2525
| videoCodec       | [CodecMimeType](#codecmimetype8)             | 是   | 视频编码格式。   |
W
wusongqing 已提交
2526 2527
| videoFrameWidth  | number                                       | 是   | 录制视频帧的宽。 |
| videoFrameHeight | number                                       | 是   | 录制视频帧的高。 |
2528
| videoFrameRate   | number                                       | 是   | 录制视频帧率。   |
2529 2530 2531

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

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

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

W
wusongqing 已提交
2536 2537 2538 2539
| 名称        | 值    | 说明                  |
| ----------- | ----- | --------------------- |
| CFT_MPEG_4  | "mp4" | 视频的容器格式,MP4。 |
| CFT_MPEG_4A | "m4a" | 音频的容器格式,M4A。 |
2540

2541
## Location
2542

W
wusongqing 已提交
2543
视频录制的地理位置。
2544

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

W
wusongqing 已提交
2547 2548 2549 2550
| 名称      | 参数类型 | 必填 | 说明             |
| --------- | -------- | ---- | ---------------- |
| latitude  | number   | 是   | 地理位置的纬度。 |
| longitude | number   | 是   | 地理位置的经度。 |