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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

W
wusongqing 已提交
107
创建音频录制的实例来控制音频的录制。
108
一台设备只允许创建一个录制实例。
Z
zengyawen 已提交
109

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

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

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

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

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

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

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

异步方式创建视频录制实例。通过注册回调函数获取返回值。
129
一台设备只允许创建一个录制实例。
W
wusongqing 已提交
130

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

W
wusongqing 已提交
133 134
**参数:**

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

**示例:**

```js
Z
zengyawen 已提交
142 143 144
let videoRecorder

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

154
## media.createVideoRecorder<sup>9+</sup>
155

156
createVideoRecorder(): Promise<[VideoRecorder](#videorecorder9)>
157

W
wusongqing 已提交
158
异步方式创建视频录制实例。通过Promise获取返回值。
159
一台设备只允许创建一个录制实例。
Z
zengyawen 已提交
160

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

W
wusongqing 已提交
163
**返回值:**
164

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

W
wusongqing 已提交
169
**示例:**
170 171

```js
Z
zengyawen 已提交
172 173
let videoRecorder

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



188 189
## MediaErrorCode<sup>8+</sup>

Z
zengyawen 已提交
190 191 192
媒体服务错误类型枚举。

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

| 名称                       | 值   | 说明                                   |
| -------------------------- | ---- | -------------------------------------- |
| 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    | 表示在当前版本下,不支持此操作。       |
206 207 208

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

Z
zengyawen 已提交
209 210 211
媒体类型枚举。

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

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

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

Z
zengyawen 已提交
220 221 222
Codec MIME类型枚举。

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

Z
zengyawen 已提交
224 225 226 227 228 229 230
| 名称         | 值                    | 说明                     |
| ------------ | --------------------- | ------------------------ |
| 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类型。       |
231
| AUDIO_AAC    | "audio/mp4a-latm"     | 表示音频/mp4a-latm类型。 |
Z
zengyawen 已提交
232 233
| AUDIO_VORBIS | 'audio/vorbis'        | 表示音频/vorbis类型。    |
| AUDIO_FLAC   | 'audio/flac'          | 表示音频/flac类型。      |
234 235 236

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

Z
zengyawen 已提交
237 238 239
媒体信息描述枚举。

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

W
wusongqing 已提交
241
| 名称                     | 值              | 说明                                                         |
242
| ------------------------ | --------------- | ------------------------------------------------------------ |
W
wusongqing 已提交
243 244 245
| 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 已提交
246 247 248 249 250
| 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 已提交
251
| MD_KEY_AUD_CHANNEL_COUNT | "channel_count" | 表示声道数,其对应键值类型为number。                         |
Z
zengyawen 已提交
252
| MD_KEY_AUD_SAMPLE_RATE   | "sample_rate"   | 表示采样率,其对应键值类型为number,单位为赫兹(Hz)。       |
253 254 255

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

Z
zengyawen 已提交
256 257 258
缓存事件类型枚举。

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

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

Z
zengyawen 已提交
267
## AudioPlayer
Z
zengyawen 已提交
268

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

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

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

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

277 278
| 名称                            | 类型                                | 可读 | 可写 | 说明                                                         |
| ------------------------------- | ----------------------------------- | ---- | ---- | ------------------------------------------------------------ |
279 280
| src                             | string                              | 是   | 是   | 音频媒体URI,支持当前主流的视频格式(m4a、aac、mp3、ogg、wav)。<br>**支持路径示例**<br>1. fd类型播放:fd://xx<br>![](figures/zh-cn_image_url.png)<br>2. http网络播放: http://xx<br/>3. https网络播放: https://xx<br/>4. hls网络播放路径:http://xx或者https://xx<br/>**注意事项**<br>**需要权限:** ohos.permission.READ_MEDIA;如果需要使用网络素材,还需要申请ohos.permission.INTERNET。 |
| fdSrc<sup>9+</sup>              | [AVFileDescriptor](#interruptmode9) | 是   | 是   | 音频媒体文件描述,使用场景:应用中的音频资源被连续存储在同一个文件中。<br/>**使用示例**<br/>假设一个连续存储的音乐文件: <br/>音乐1(地址偏移:0,字节长度:100)<br/>音乐2(地址偏移:101,字节长度:50)<br/>音乐3(地址偏移:151,字节长度:150)<br/>1. 播放音乐1:AVFileDescriptor { fd = 资源句柄; offset = 0; lengt = 100; }<br/>2. 播放音乐2:AVFileDescriptor { fd = 资源句柄; offset = 101; length = 50; }<br/>3. 播放音乐3:AVFileDescriptor { fd = 资源句柄; offset = 151; length = 150; }<br/>假设是一个独立的音乐文件: 请使用src=fd://xx <br/>**注意事项**<br/>**需要权限:** ohos.permission.READ_MEDIA; |
281 282 283 284 285
| loop                            | boolean                             | 是   | 是   | 音频循环播放属性,设置为'true'表示循环播放。                 |
| audioInterruptMode<sup>9+</sup> | [InterruptMode](#interruptmode9)    | 是   | 是   | 音频焦点模型。                                               |
| currentTime                     | number                              | 是   | 否   | 音频的当前播放位置,单位为毫秒(ms)。                       |
| duration                        | number                              | 是   | 否   | 音频时长,单位为毫秒(ms)。                                 |
| state                           | [AudioState](#audiostate)           | 是   | 否   | 可以查询音频播放的状态,该状态不可作为调用play/pause/stop等状态切换的触发条件。 |
286
### play<a name=audioplayer_play></a>
Z
zengyawen 已提交
287

Z
zengyawen 已提交
288
play(): void
Z
zengyawen 已提交
289

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

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

W
wusongqing 已提交
294
**示例:**
Z
zengyawen 已提交
295

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

303
### pause<a name=audioplayer_pause></a>
Z
zengyawen 已提交
304

Z
zengyawen 已提交
305
pause(): void
Z
zengyawen 已提交
306

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

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

W
wusongqing 已提交
311
**示例:**
Z
zengyawen 已提交
312

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

320
### stop<a name=audioplayer_stop></a>
Z
zengyawen 已提交
321

Z
zengyawen 已提交
322
stop(): void
Z
zengyawen 已提交
323

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

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

W
wusongqing 已提交
328
**示例:**
Z
zengyawen 已提交
329

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

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

reset(): void

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

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

W
wusongqing 已提交
345
**示例:**
346 347

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

354
### seek<a name=audioplayer_seek></a>
Z
zengyawen 已提交
355

Z
zengyawen 已提交
356
seek(timeMs: number): void
Z
zengyawen 已提交
357

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

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

W
wusongqing 已提交
362
**参数:**
B
bird_j 已提交
363

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

W
wusongqing 已提交
368
**示例:**
Z
zengyawen 已提交
369

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

381
### setVolume<a name=audioplayer_setvolume></a>
Z
zengyawen 已提交
382

Z
zengyawen 已提交
383
setVolume(vol: number): void
Z
zengyawen 已提交
384

W
wusongqing 已提交
385
设置音量。
B
bird_j 已提交
386

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

W
wusongqing 已提交
389
**参数:**
Z
zengyawen 已提交
390

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

W
wusongqing 已提交
395
**示例:**
Z
zengyawen 已提交
396

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

404
### release<a name=audioplayer_release></a>
Z
zengyawen 已提交
405

406
release(): void
Z
zengyawen 已提交
407

W
wusongqing 已提交
408
释放音频资源。
B
bird_j 已提交
409

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

W
wusongqing 已提交
412
**示例:**
Z
zengyawen 已提交
413

414 415 416
```js
audioPlayer.release();
audioPlayer = undefined;
Z
zengyawen 已提交
417
```
Z
zengyawen 已提交
418

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

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

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

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

W
wusongqing 已提交
427
**参数:**
B
bird_j 已提交
428

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

W
wusongqing 已提交
433
**示例:**
Z
zengyawen 已提交
434

435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452
```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 已提交
453
```
454 455 456

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

Z
zengyawen 已提交
457
getTrackDescription(): Promise<Array\<MediaDescription>>
458

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

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

W
wusongqing 已提交
463
**返回值:**
464

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

W
wusongqing 已提交
469
**示例:**
470 471 472 473 474 475 476 477 478 479

```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);
    }
}

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

490 491 492
for (let i = 0; i < arrayDescription.length; i++) {
    printfDescription(arrayDescription[i]);
}
Z
zengyawen 已提交
493 494
```

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

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

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

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

W
wusongqing 已提交
503
**参数:**
B
bird_j 已提交
504

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

W
wusongqing 已提交
510
**示例:**
Z
zengyawen 已提交
511

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

Z
zengyawen 已提交
519
 ### on('play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange')<a name = audioplayer_on></a>
520 521 522

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

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

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

W
wusongqing 已提交
527
**参数:**
528

W
wusongqing 已提交
529
| 参数名   | 类型       | 必填 | 说明                                                         |
530
| -------- | ---------- | ---- | ------------------------------------------------------------ |
Z
zengyawen 已提交
531
| 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 已提交
532
| callback | () => void | 是   | 播放事件回调方法。                                           |
533

W
wusongqing 已提交
534
**示例:**
535 536

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

// 用户选择视频设置fd(本地播放)
let fdPath = 'fd://'
579 580
// 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';
581
fileIO.open(path).then(fdNumber) => {
Z
zengyawen 已提交
582
   fdPath = fdPath + '' + fdNumber;
583
   console.info('open fd success fd is' + fdPath);
Z
zengyawen 已提交
584 585
}, (err) => {
   console.info('open fd failed err is' + err);
586
}).catch((err) => {
Z
zengyawen 已提交
587 588 589
   console.info('open fd failed err is' + err);
});
audioPlayer.src = fdPath;  //设置src属性,并触发'dataLoad'事件回调
Z
zengyawen 已提交
590 591 592 593 594
```

### on('timeUpdate')

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

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

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

W
wusongqing 已提交
600
**参数:**
B
bird_j 已提交
601

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

W
wusongqing 已提交
607
**示例:**
Z
zengyawen 已提交
608

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

### on('error')

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

624
开始订阅音频播放错误事件,当上报error错误事件后,用户需处理error事件,退出播放操作。
B
bird_j 已提交
625

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

W
wusongqing 已提交
628
**参数:**
Z
zengyawen 已提交
629

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

W
wusongqing 已提交
635
**示例:**
Z
zengyawen 已提交
636

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

## AudioState
Z
zengyawen 已提交
647

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

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

652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672
| 名称               | 类型   | 描述                                           |
| ------------------ | ------ | ---------------------------------------------- |
| idle               | string | 音频播放空闲,dateload/reset成功后处于此状态。 |
| playing            | string | 音频正在播放,play成功后处于此状态。           |
| paused             | string | 音频暂停播放,pause成功后处于此状态。          |
| stopped            | string | 音频播放停止,stop/播放结束后处于此状态。      |
| error<sup>8+</sup> | string | 错误状态。                                     |

## AVFileDescriptor<sup>9+</sup>

音视频文件资源描述,一种特殊资源的播放方式,使用场景:应用中的音频资源被连续存储在同一个文件中,需要根据偏移量和长度进行播放。

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

**参数:**

| 参数名 | 类型   | 必填 | 说明                                                         |
| ------ | ------ | ---- | ------------------------------------------------------------ |
| fd     | number | 是   | 资源句柄,通过resourceManager.getRawFileDescriptor获取       |
| offset | number | 是   | 资源偏移量,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误 |
| length | number | 是   | 资源长度,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误 |
673

H
hwchenhongyu 已提交
674 675
## InterruptMode<sup>9+</sup>

676
音频焦点模式。
H
hwchenhongyu 已提交
677

678
**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
H
hwchenhongyu 已提交
679 680 681 682 683 684

| 名称                         | 默认值 | 描述       |
| ---------------------------- | ------ | ---------- |
| SHARE_MODE      | 0      | 共享焦点模式。 |
| INDEPENDENT_MODE| 1      | 独立焦点模式。     |

685 686
## VideoPlayer<sup>8+</sup>

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

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

Z
zengyawen 已提交
691
### 属性<a name=videoplayer_属性></a>
692

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

| 名称                     | 类型                               | 可读 | 可写 | 说明                                                         |
| ------------------------ | ---------------------------------- | ---- | ---- | ------------------------------------------------------------ |
697 698
| 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>**需要权限:** ohos.permission.READ_MEDIA;如果需要使用网络素材,还需要申请ohos.permission.INTERNET。 |
| fdSrc<sup>9+</sup> | [AVFileDescriptor](#interruptmode9) | 是 | 是 | 音频媒体文件描述,使用场景:应用中的音频资源被连续存储在同一个文件中。<br/>**使用示例**<br/>假设一个连续存储的音乐文件: <br/>音乐1(地址偏移:0,字节长度:100)<br/>音乐2(地址偏移:101,字节长度:50)<br/>音乐3(地址偏移:151,字节长度:150)<br/>1. 播放音乐1:AVFileDescriptor { fd = 资源句柄; offset = 0; lengt = 100; }<br/>2. 播放音乐2:AVFileDescriptor { fd = 资源句柄; offset = 101; length = 50; }<br/>3. 播放音乐3:AVFileDescriptor { fd = 资源句柄; offset = 151; length = 150; }<br/>假设是一个独立的音乐文件: 请使用src=fd://xx <br/>**注意事项**<br/>**需要权限:** ohos.permission.READ_MEDIA; |
Z
zengyawen 已提交
699
| loop<sup>8+</sup>        | boolean                            | 是   | 是   | 视频循环播放属性,设置为'true'表示循环播放。                 |
H
hwchenhongyu 已提交
700 701
| videoScaleType<sup>9+</sup>        | [VideoScaleType](#videoscaletype9)                   | 是   | 是   | 视频缩放模式。       |
| audioInterruptMode<sup>9+</sup>        | [InterruptMode](#interruptmode9)                   | 是   | 是   | 音频焦点模型。       |
702 703
| currentTime<sup>8+</sup> | number                             | 是   | 否   | 视频的当前播放位置,单位为毫秒(ms)。                       |
| duration<sup>8+</sup>    | number                             | 是   | 否   | 视频时长,单位为毫秒(ms),返回-1表示直播模式。             |
Z
zengyawen 已提交
704
| state<sup>8+</sup>       | [VideoPlayState](#videoplaystate8) | 是   | 否   | 视频播放的状态。                                             |
705 706
| width<sup>8+</sup>       | number                             | 是   | 否   | 视频宽,单位为像素(px)。                                   |
| height<sup>8+</sup>      | number                             | 是   | 否   | 视频高,单位为像素(px)。                                   |
707 708 709 710 711

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

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

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

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

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

W
wusongqing 已提交
718
**参数:**
719

W
wusongqing 已提交
720
| 参数名    | 类型     | 必填 | 说明                      |
721
| --------- | -------- | ---- | ------------------------- |
W
wusongqing 已提交
722 723
| surfaceId | string   | 是   | SurfaceId                 |
| callback  | function | 是   | 设置SurfaceId的回调方法。 |
724

W
wusongqing 已提交
725
**示例:**
726 727 728

```js
videoPlayer.setDisplaySurface(surfaceId, (err) => {
A
tab  
abc12133 已提交
729 730 731
    if (typeof (err) == 'undefined') {
        console.info('setDisplaySurface success!');
    } else {
732 733 734 735 736 737 738 739 740
        console.info('setDisplaySurface fail!');
    }
});
```

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

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

W
wusongqing 已提交
741
通过Promise方式设置SurfaceId。
742

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

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

W
wusongqing 已提交
747
**参数:**
B
bird_j 已提交
748

W
wusongqing 已提交
749
| 参数名    | 类型   | 必填 | 说明      |
750
| --------- | ------ | ---- | --------- |
W
wusongqing 已提交
751
| surfaceId | string | 是   | SurfaceId |
752

W
wusongqing 已提交
753
**返回值:**
754

Z
zengyawen 已提交
755 756 757
| 类型           | 说明                           |
| -------------- | ------------------------------ |
| Promise\<void> | 设置SurfaceId的Promise返回值。 |
758

W
wusongqing 已提交
759
**示例:**
760 761

```js
762
videoPlayer.setDisplaySurface(surfaceId).then(() => {
763
    console.info('setDisplaySurface success');
764 765 766
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
767 768 769 770 771 772
```

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

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

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

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

W
wusongqing 已提交
777
**参数:**
778

W
wusongqing 已提交
779
| 参数名   | 类型     | 必填 | 说明                     |
780
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
781
| callback | function | 是   | 准备播放视频的回调方法。 |
782

W
wusongqing 已提交
783
**示例:**
784 785 786

```js
videoPlayer.prepare((err) => {
A
tab  
abc12133 已提交
787 788 789
    if (typeof (err) == 'undefined') {
        console.info('prepare success!');
    } else {
790 791 792 793 794 795 796 797 798
        console.info('prepare fail!');
    }
});
```

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

prepare(): Promise\<void>

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

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

W
wusongqing 已提交
803
**返回值:**
B
bird_j 已提交
804

W
wusongqing 已提交
805
| 类型           | 说明                          |
806
| -------------- | ----------------------------- |
W
wusongqing 已提交
807
| Promise\<void> | 准备播放视频的Promise返回值。 |
808

W
wusongqing 已提交
809
**示例:**
810 811

```js
812
videoPlayer.prepare().then(() => {
813
    console.info('prepare success');
814 815 816
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
817 818 819 820 821 822
```

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

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

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

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

W
wusongqing 已提交
827
**参数:**
828

W
wusongqing 已提交
829
| 参数名   | 类型     | 必填 | 说明                     |
830
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
831
| callback | function | 是   | 开始播放视频的回调方法。 |
832

W
wusongqing 已提交
833
**示例:**
834 835 836

```js
videoPlayer.play((err) => {
A
tab  
abc12133 已提交
837 838 839
    if (typeof (err) == 'undefined') {
        console.info('play success!');
    } else {
840 841 842 843 844 845 846 847 848
        console.info('play fail!');
    }
});
```

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

play(): Promise\<void>;

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

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

W
wusongqing 已提交
853
**返回值:**
B
bird_j 已提交
854

W
wusongqing 已提交
855
| 类型           | 说明                          |
856
| -------------- | ----------------------------- |
W
wusongqing 已提交
857
| Promise\<void> | 开始播放视频的Promise返回值。 |
858

W
wusongqing 已提交
859
**示例:**
860 861

```js
862
videoPlayer.play().then(() => {
863
    console.info('play success');
864 865 866
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
867 868 869 870 871 872
```

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

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

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

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

W
wusongqing 已提交
877
**参数:**
878

W
wusongqing 已提交
879
| 参数名   | 类型     | 必填 | 说明                     |
880
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
881
| callback | function | 是   | 暂停播放视频的回调方法。 |
882

W
wusongqing 已提交
883
**示例:**
884 885 886

```js
videoPlayer.pause((err) => {
A
tab  
abc12133 已提交
887 888 889
    if (typeof (err) == 'undefined') {
        console.info('pause success!');
    } else {
890 891 892 893 894 895 896 897 898
        console.info('pause fail!');
    }
});
```

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

pause(): Promise\<void>

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

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

W
wusongqing 已提交
903
**返回值:**
B
bird_j 已提交
904

W
wusongqing 已提交
905
| 类型           | 说明                          |
906
| -------------- | ----------------------------- |
W
wusongqing 已提交
907
| Promise\<void> | 暂停播放视频的Promise返回值。 |
908

W
wusongqing 已提交
909
**示例:**
910 911

```js
912
videoPlayer.pause().then(() => {
913
    console.info('pause success');
914 915 916
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
917 918 919 920 921 922
```

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

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

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

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

W
wusongqing 已提交
927
**参数:**
928

W
wusongqing 已提交
929
| 参数名   | 类型     | 必填 | 说明                     |
930
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
931
| callback | function | 是   | 停止播放视频的回调方法。 |
932

W
wusongqing 已提交
933
**示例:**
934 935 936

```js
videoPlayer.stop((err) => {
A
tab  
abc12133 已提交
937 938 939
    if (typeof (err) == 'undefined') {
        console.info('stop success!');
    } else {
940 941 942 943 944 945 946 947 948
        console.info('stop fail!');
    }
});
```

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

stop(): Promise\<void>

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

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

W
wusongqing 已提交
953
**返回值:**
954

W
wusongqing 已提交
955
| 类型           | 说明                          |
956
| -------------- | ----------------------------- |
W
wusongqing 已提交
957
| Promise\<void> | 停止播放视频的Promise返回值。 |
958

W
wusongqing 已提交
959
**示例:**
960 961

```js
962
videoPlayer.stop().then(() => {
963
    console.info('stop success');
964 965 966
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
967 968 969 970 971 972
```

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

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

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

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

W
wusongqing 已提交
977
**参数:**
B
bird_j 已提交
978

W
wusongqing 已提交
979
| 参数名   | 类型     | 必填 | 说明                     |
980
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
981
| callback | function | 是   | 切换播放视频的回调方法。 |
982

W
wusongqing 已提交
983
**示例:**
984 985 986

```js
videoPlayer.reset((err) => {
A
tab  
abc12133 已提交
987 988 989
    if (typeof (err) == 'undefined') {
        console.info('reset success!');
    } else {
990 991 992 993 994 995 996 997 998
        console.info('reset fail!');
    }
});
```

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

reset(): Promise\<void>

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

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

W
wusongqing 已提交
1003
**返回值:**
1004

W
wusongqing 已提交
1005
| 类型           | 说明                          |
1006
| -------------- | ----------------------------- |
W
wusongqing 已提交
1007
| Promise\<void> | 切换播放视频的Promise返回值。 |
1008

W
wusongqing 已提交
1009
**示例:**
1010 1011

```js
1012
videoPlayer.reset().then(() => {
1013
    console.info('reset success');
1014 1015 1016
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1017 1018 1019 1020 1021 1022
```

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

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

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

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

W
wusongqing 已提交
1027
**参数:**
B
bird_j 已提交
1028

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

W
wusongqing 已提交
1034
**示例:**
1035 1036

```js
1037 1038
let seekTime = 5000;
videoPlayer.seek(seekTime, (err, result) => {
A
tab  
abc12133 已提交
1039 1040 1041
    if (typeof (err) == 'undefined') {
        console.info('seek success!');
    } else {
1042 1043 1044 1045 1046 1047 1048 1049 1050
        console.info('seek fail!');
    }
});
```

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

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

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

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

W
wusongqing 已提交
1055
**参数:**
1056

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

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

```js
1066 1067 1068 1069
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 已提交
1070 1071 1072
    if (typeof (err) == 'undefined') {
        console.info('seek success!');
    } else {
1073 1074 1075 1076 1077 1078 1079 1080 1081
        console.info('seek fail!');
    }
});
```

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

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

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

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

W
wusongqing 已提交
1086
**参数:**
B
bird_j 已提交
1087

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

W
wusongqing 已提交
1093
**返回值:**
1094

W
wusongqing 已提交
1095
| 类型           | 说明                                |
1096
| -------------- | ----------------------------------- |
W
wusongqing 已提交
1097
| Promise\<void> | 跳转到指定播放位置的Promise返回值。 |
1098

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

```js
1102
let seekTime = 5000;
1103
videoPlayer.seek(seekTime).then((seekDoneTime) => { // seekDoneTime表示seek完成后的时间点
1104
    console.info('seek success');
1105 1106 1107
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1108

1109
videoPlayer.seek(seekTime, seekMode).then((seekDoneTime) => {
1110
    console.info('seek success');
1111 1112 1113
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1114 1115 1116 1117 1118 1119
```

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

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

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

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

W
wusongqing 已提交
1124
**参数:**
1125

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

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

```js
1134 1135
let vol = 0.5;
videoPlayer.setVolume(vol, (err, result) => {
A
tab  
abc12133 已提交
1136 1137 1138
    if (typeof (err) == 'undefined') {
        console.info('setVolume success!');
    } else {
1139 1140 1141 1142 1143 1144 1145 1146 1147
        console.info('setVolume fail!');
    }
});
```

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

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

W
wusongqing 已提交
1148
通过Promise方式设置音量。
1149

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

W
wusongqing 已提交
1152
**参数:**
B
bird_j 已提交
1153

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

W
wusongqing 已提交
1158
**返回值:**
1159

W
wusongqing 已提交
1160
| 类型           | 说明                      |
1161
| -------------- | ------------------------- |
W
wusongqing 已提交
1162
| Promise\<void> | 设置音量的Promise返回值。 |
1163

W
wusongqing 已提交
1164
**示例:**
1165 1166

```js
1167
let vol = 0.5;
1168
videoPlayer.setVolume(vol).then() => {
1169
    console.info('setVolume success');
1170 1171 1172
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1173 1174 1175 1176 1177 1178
```

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

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

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

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

W
wusongqing 已提交
1183
**参数:**
1184

W
wusongqing 已提交
1185
| 参数名   | 类型     | 必填 | 说明                     |
1186
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
1187
| callback | function | 是   | 释放视频资源的回调方法。 |
1188

W
wusongqing 已提交
1189
**示例:**
1190 1191 1192

```js
videoPlayer.release((err) => {
A
tab  
abc12133 已提交
1193 1194 1195
    if (typeof (err) == 'undefined') {
        console.info('release success!');
    } else {
1196 1197 1198 1199 1200 1201 1202 1203 1204
        console.info('release fail!');
    }
});
```

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

release(): Promise\<void>

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

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

W
wusongqing 已提交
1209
**返回值:**
1210

W
wusongqing 已提交
1211
| 类型           | 说明                          |
1212
| -------------- | ----------------------------- |
W
wusongqing 已提交
1213
| Promise\<void> | 释放视频资源的Promise返回值。 |
1214

W
wusongqing 已提交
1215
**示例:**
1216 1217

```js
1218
videoPlayer.release().then() => {
1219
    console.info('release success');
1220 1221 1222
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1223 1224 1225 1226
```

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

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

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

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

W
wusongqing 已提交
1233
**参数:**
B
bird_j 已提交
1234

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

W
wusongqing 已提交
1239
**示例:**
1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262

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

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

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

W
wusongqing 已提交
1269
**返回值:**
1270

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

W
wusongqing 已提交
1275
**示例:**
1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286

```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;
1287
videoPlayer.getTrackDescription().then((arrlist) => {
1288 1289 1290 1291 1292
    if (typeof (arrlist) != 'undefined') {
        arrayDescription = arrlist;
    } else {
        console.log('video getTrackDescription fail');
    }
1293 1294 1295
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1296 1297 1298 1299 1300 1301 1302 1303 1304
for (let i = 0; i < arrayDescription.length; i++) {
    printfDescription(arrayDescription[i]);
}
```

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

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

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

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

W
wusongqing 已提交
1309
**参数:**
B
bird_j 已提交
1310

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

W
wusongqing 已提交
1316
**示例:**
1317 1318

```js
1319 1320 1321 1322
import media from '@ohos.multimedia.media'
let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X;

videoPlayer.setSpeed(speed, (err, result) => {
A
tab  
abc12133 已提交
1323 1324 1325
    if (typeof (err) == 'undefined') {
        console.info('setSpeed success!');
    } else {
1326 1327 1328 1329 1330 1331 1332 1333 1334
        console.info('setSpeed fail!');
    }
});
```

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

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

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

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

W
wusongqing 已提交
1339
**参数:**
1340

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

Z
zengyawen 已提交
1345 1346 1347 1348 1349 1350
**返回值:**

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

W
wusongqing 已提交
1351
**示例:**
1352 1353

```js
1354 1355 1356
import media from '@ohos.multimedia.media'
let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X;

1357
videoPlayer.setSpeed(speed).then() => {
1358
    console.info('setSpeed success');
1359 1360 1361
}).catch((error) => {
   console.info(`video catchCallback, error:${error.message}`);
});
1362 1363
```

1364 1365 1366 1367
### selectBitrate<sup>9+</sup>

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

1368
通过回调方式设置码率,通过[availableBitratesCollect](#on('availableBitratesCollect')<sup>9+</sup>)获取当前码流支持的Bitrate。
1369 1370 1371 1372 1373

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

**参数:**

1374 1375 1376 1377
| 参数名   | 类型                   | 必填 | 说明                                                       |
| -------- | ---------------------- | ---- | ---------------------------------------------------------- |
| bitrate  | number                 | 是   | 指定码率播放,用于hls多码率场景,单位为bps。               |
| callback | AsyncCallback\<number> | 是   | 设置播放码率的回调方法,返回设置的值表示成功,其他则失败。 |
1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395

**示例:**

```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>

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

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

**参数:**

1402 1403 1404
| 参数名  | 类型   | 必填 | 说明                                         |
| ------- | ------ | ---- | -------------------------------------------- |
| bitrate | number | 是   | 指定码率播放,用于hls多码率场景,单位为bps。 |
1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422

**返回值:**

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

**示例:**

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

1423 1424 1425 1426
### on('playbackCompleted')<sup>8+</sup>

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

1427
开始监听视频播放完成事件。
1428

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

W
wusongqing 已提交
1431
**参数:**
B
bird_j 已提交
1432

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

W
wusongqing 已提交
1438
**示例:**
1439 1440 1441

```js
videoPlayer.on('playbackCompleted', () => {
A
tab  
abc12133 已提交
1442
    console.info('playbackCompleted success!');
1443 1444 1445 1446 1447 1448 1449
});
```

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

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

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

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

W
wusongqing 已提交
1454
**参数:**
1455

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

W
wusongqing 已提交
1461
**示例:**
1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473

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

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

W
wusongqing 已提交
1478
**参数:**
B
bird_j 已提交
1479

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

W
wusongqing 已提交
1485
**示例:**
1486 1487 1488

```js
videoPlayer.on('startRenderFrame', () => {
A
tab  
abc12133 已提交
1489
    console.info('startRenderFrame success!');
1490 1491 1492 1493 1494 1495 1496
});
```

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

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

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

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

W
wusongqing 已提交
1501
**参数:**
1502

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

W
wusongqing 已提交
1508
**示例:**
1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520

```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

1521
开始监听视频播放错误事件,当上报error错误事件后,用户需处理error事件,退出播放操作。
B
bird_j 已提交
1522

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

W
wusongqing 已提交
1525
**参数:**
1526

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

W
wusongqing 已提交
1532
**示例:**
1533 1534

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

1543
### on('availableBitratesCollect')<sup>9+</sup>
1544

1545
on(type: 'availableBitratesCollect', callback: (bitrates: Array<number>) => void): void
1546 1547 1548 1549 1550 1551 1552 1553 1554

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

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

**参数:**

| 参数名   | 类型     | 必填 | 说明                                                         |
| -------- | -------- | ---- | ------------------------------------------------------------ |
1555 1556
| type     | string   | 是   | 视频播放码率上报事件回调类型,支持的事件:'availableBitratesCollect',只在开始播放时候上报一次 |
| callback | function | 是   | 视频播放码率事件回调方法,使用数组存放支持的码率。           |
1557 1558 1559 1560

**示例:**

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

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

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

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

W
wusongqing 已提交
1574 1575 1576 1577 1578 1579 1580 1581
| 名称     | 类型   | 描述           |
| -------- | ------ | -------------- |
| idle     | string | 视频播放空闲。 |
| prepared | string | 视频播放准备。 |
| playing  | string | 视频正在播放。 |
| paused   | string | 视频暂停播放。 |
| stopped  | string | 视频播放停止。 |
| error    | string | 错误状态。     |
1582 1583 1584

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

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

Z
zengyawen 已提交
1587 1588 1589 1590 1591 1592
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。

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

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

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

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

W
wusongqing 已提交
1600 1601 1602 1603 1604 1605 1606
| 名称                 | 值   | 描述                           |
| -------------------- | ---- | ------------------------------ |
| 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倍。 |
1607

H
hwchenhongyu 已提交
1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618
## VideoScaleType<sup>9+</sup>

枚举,视频缩放模式。

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

| 名称                         | 默认值 | 描述       |
| ---------------------------- | ------ | ---------- |
| VIDEO_SCALE_TYPE_FIT     | 0      | 视频拉伸至与窗口等大。 |
| VIDEO_SCALE_TYPE_FIT_CROP| 1      | 保持视频宽高比拉伸至填满窗口,内容可能会有裁剪。     |

1619 1620
## MediaDescription<sup>8+</sup>

Z
zengyawen 已提交
1621
### [key : string] : Object
Z
zengyawen 已提交
1622

Z
zengyawen 已提交
1623 1624 1625
通过key-value方式获取媒体信息。

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

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

W
wusongqing 已提交
1632
**示例:**
1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643

```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 已提交
1644
            printfItemDescription(arrlist[i], MD_KEY_TRACK_TYPE);  //打印出每条轨道MD_KEY_TRACK_TYPE的值
1645 1646 1647 1648 1649 1650
        }
    } else {
        console.log(`audio getTrackDescription fail, error:${error.message}`);
    }
});
```
Z
zengyawen 已提交
1651 1652 1653

## AudioRecorder

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

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

### prepare<a name=audiorecorder_prepare></a>
Z
zengyawen 已提交
1659 1660 1661

prepare(config: AudioRecorderConfig): void

W
wusongqing 已提交
1662
录音准备。
Z
zengyawen 已提交
1663

Z
zengyawen 已提交
1664 1665 1666 1667
**需要权限:** ohos.permission.MICROPHONE

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

W
wusongqing 已提交
1668
**参数:**
B
bird_j 已提交
1669

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

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

1676
```js
Z
zengyawen 已提交
1677
let audioRecorderConfig = {
1678
    audioEncoder : media.AudioEncoder.AAC_LC,
Z
zengyawen 已提交
1679 1680 1681
    audioEncodeBitRate : 22050,
    audioSampleRate : 22050,
    numberOfChannels : 2,
1682
    format : media.AudioOutputFormat.AAC_ADTS,
Z
zengyawen 已提交
1683
    uri : 'fd://1',       // 文件需先由调用者创建,并给予适当的权限
1684
    location : { latitude : 30, longitude : 130},
Z
zengyawen 已提交
1685
}
W
wusongqing 已提交
1686
audioRecorder.on('prepare', () => {    //设置'prepare'事件回调
1687 1688
    console.log('prepare success');
});
B
bird_j 已提交
1689
audioRecorder.prepare(audioRecorderConfig);
Z
zengyawen 已提交
1690 1691 1692
```


1693
### start<a name=audiorecorder_start></a>
Z
zengyawen 已提交
1694 1695 1696

start(): void

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

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

W
wusongqing 已提交
1701
**示例:**
Z
zengyawen 已提交
1702

1703
```js
W
wusongqing 已提交
1704
audioRecorder.on('start', () => {    //设置'start'事件回调
1705 1706 1707
    console.log('audio recorder start success');
});
audioRecorder.start();
Z
zengyawen 已提交
1708
```
1709 1710 1711 1712 1713

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

pause():void

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

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

W
wusongqing 已提交
1718
**示例:**
1719 1720

```js
W
wusongqing 已提交
1721
audioRecorder.on('pause', () => {    //设置'pause'事件回调
1722 1723 1724 1725 1726 1727 1728 1729 1730
    console.log('audio recorder pause success');
});
audioRecorder.pause();
```

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

resume():void

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

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

W
wusongqing 已提交
1735
**示例:**
1736 1737

```js
W
wusongqing 已提交
1738
audioRecorder.on('resume', () => {    //设置'resume'事件回调
1739 1740 1741
    console.log('audio recorder resume success');
});
audioRecorder.resume();
Z
zengyawen 已提交
1742 1743
```

1744
### stop<a name=audiorecorder_stop></a>
Z
zengyawen 已提交
1745 1746 1747

stop(): void

W
wusongqing 已提交
1748
停止录音。
Z
zengyawen 已提交
1749

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

W
wusongqing 已提交
1752
**示例:**
Z
zengyawen 已提交
1753

1754
```js
W
wusongqing 已提交
1755
audioRecorder.on('stop', () => {    //设置'stop'事件回调
1756 1757 1758
    console.log('audio recorder stop success');
});
audioRecorder.stop();
Z
zengyawen 已提交
1759 1760
```

1761
### release<a name=audiorecorder_release></a>
Z
zengyawen 已提交
1762 1763 1764

release(): void

W
wusongqing 已提交
1765
释放录音资源。
B
bird_j 已提交
1766

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

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

1771
```js
W
wusongqing 已提交
1772
audioRecorder.on('release', () => {    //设置'release'事件回调
B
bird_j 已提交
1773 1774
    console.log('audio recorder release success');
});
1775 1776
audioRecorder.release();
audioRecorder = undefined;
Z
zengyawen 已提交
1777 1778
```

1779
### reset<a name=audiorecorder_reset></a>
Z
zengyawen 已提交
1780 1781 1782

reset(): void

W
wusongqing 已提交
1783
重置录音。
Z
zengyawen 已提交
1784

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

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

W
wusongqing 已提交
1789
**示例:**
Z
zengyawen 已提交
1790

B
bird_j 已提交
1791
```js
W
wusongqing 已提交
1792
audioRecorder.on('reset', () => {    //设置'reset'事件回调
B
bird_j 已提交
1793 1794 1795
    console.log('audio recorder reset success');
});
audioRecorder.reset();
Z
zengyawen 已提交
1796 1797
```

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

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

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

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

W
wusongqing 已提交
1806
**参数:**
B
bird_j 已提交
1807

W
wusongqing 已提交
1808
| 参数名   | 类型     | 必填 | 说明                                                         |
Z
zengyawen 已提交
1809
| -------- | -------- | ---- | ------------------------------------------------------------ |
W
wusongqing 已提交
1810 1811
| 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 已提交
1812

W
wusongqing 已提交
1813
**示例:**
Z
zengyawen 已提交
1814

1815
```js
A
tab  
abc12133 已提交
1816
let audiorecorder = media.createAudioRecorder();                                  // 创建一个音频录制实例
1817 1818 1819 1820 1821 1822
let audioRecorderConfig = {
    audioEncoder : media.AudioEncoder.AAC_LC, ,
    audioEncodeBitRate : 22050,
    audioSampleRate : 22050,
    numberOfChannels : 2,
    format : media.AudioOutputFormat.AAC_ADTS,
Z
zengyawen 已提交
1823
    uri : 'fd://xx',                                                            // 文件需先由调用者创建,并给予适当的权限
1824 1825
    location : { latitude : 30, longitude : 130},
}
A
tab  
abc12133 已提交
1826 1827
audioRecorder.on('error', (error) => {                                             // 设置'error'事件回调
    console.info(`audio error called, errName is ${error.name}`);
1828 1829 1830
    console.info(`audio error called, errCode is ${error.code}`);
    console.info(`audio error called, errMessage is ${error.message}`);
});
A
tab  
abc12133 已提交
1831
audioRecorder.on('prepare', () => {                                              // 设置'prepare'事件回调
1832
    console.log('prepare success');
A
tab  
abc12133 已提交
1833
    audioRecorder.start();                                                       // 开始录制,并触发'start'事件回调
1834
});
A
tab  
abc12133 已提交
1835
audioRecorder.on('start', () => {                                                 // 设置'start'事件回调
1836 1837
    console.log('audio recorder start success');
});
A
tab  
abc12133 已提交
1838
audioRecorder.on('pause', () => {                                                 // 设置'pause'事件回调
1839 1840
    console.log('audio recorder pause success');
});
A
tab  
abc12133 已提交
1841
audioRecorder.on('resume', () => {                                                 // 设置'resume'事件回调
1842 1843
    console.log('audio recorder resume success');
});
A
tab  
abc12133 已提交
1844
audioRecorder.on('stop', () => {                                                 // 设置'stop'事件回调
1845 1846
    console.log('audio recorder stop success');
});
A
tab  
abc12133 已提交
1847
audioRecorder.on('release', () => {                                                 // 设置'release'事件回调
1848 1849
    console.log('audio recorder release success');
});
A
tab  
abc12133 已提交
1850
audioRecorder.on('reset', () => {                                                 // 设置'reset'事件回调
1851
    console.log('audio recorder reset success');
Z
zengyawen 已提交
1852
});
A
tab  
abc12133 已提交
1853
audioRecorder.prepare(audioRecorderConfig)                                       // 设置录制参数 ,并触发'prepare'事件回调
Z
zengyawen 已提交
1854 1855 1856 1857 1858 1859
```

### on('error')

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

1860
开始订阅音频录制错误事件,当上报error错误事件后,用户需处理error事件,退出录制操作。
B
bird_j 已提交
1861

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

W
wusongqing 已提交
1864
**参数:**
Z
zengyawen 已提交
1865

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

W
wusongqing 已提交
1871
**示例:**
1872 1873

```js
A
tab  
abc12133 已提交
1874 1875
audioRecorder.on('error', (error) => {                                  // 设置'error'事件回调
    console.info(`audio error called, errName is ${error.name}`);       // 打印错误类型名称
W
wusongqing 已提交
1876 1877
    console.info(`audio error called, errCode is ${error.code}`);       // 打印错误码
    console.info(`audio error called, errMessage is ${error.message}`); // 打印错误类型详细描述
1878
});
A
tab  
abc12133 已提交
1879
audioRecorder.prepare();                                                  // prepare不设置参数,触发'error'事件
1880
```
Z
zengyawen 已提交
1881 1882 1883

## AudioRecorderConfig

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

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

W
wusongqing 已提交
1888
| 名称                  | 参数类型                                | 必填 | 说明                                                         |
1889
| --------------------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
1890
| audioEncoder<sup>(deprecated)</sup>          | [AudioEncoder](#audioencoder)           | 否   | 音频编码格式,默认设置为AAC_LC。<br/>**说明:** 从API Version 8 开始废弃,建议使用audioEncoderMime替代。                             |
W
wusongqing 已提交
1891 1892 1893
| audioEncodeBitRate    | number                                  | 否   | 音频编码比特率,默认值为48000。                              |
| audioSampleRate       | number                                  | 否   | 音频采集采样率,默认值为48000。                              |
| numberOfChannels      | number                                  | 否   | 音频采集声道数,默认值为2。                                  |
1894
| format<sup>(deprecated)</sup>                | [AudioOutputFormat](#audiooutputformat) | 否   | 音频输出封装格式,默认设置为MPEG_4。<br/>**说明:** 从API Version 8 开始废弃,建议使用fileFormat替代。                         |
1895
| location              | [Location](#location)                   | 否   | 音频采集的地理位置。                                         |
1896 1897 1898
| 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 已提交
1899

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

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

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

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

W
wusongqing 已提交
1909
| 名称    | 默认值 | 说明                                                         |
B
bird_j 已提交
1910
| ------- | ------ | ------------------------------------------------------------ |
A
abc 已提交
1911 1912 1913
| 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 已提交
1914
| AAC_LC  | 3      | AAC-LC(Advanced&nbsp;Audio&nbsp;Coding&nbsp;Low&nbsp;Complexity)编码格式。 |
A
abc 已提交
1915
| HE_AAC  | 4      | HE_AAC(High-Efficiency Advanced&nbsp;Audio&nbsp;Coding)编码格式。<br/>仅做接口定义,暂不支持使用。 |
Z
zengyawen 已提交
1916 1917


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

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

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

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

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

1935
## VideoRecorder<sup>9+</sup>
1936

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

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

W
wusongqing 已提交
1941
### 属性
1942

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

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

1949
### prepare<sup>9+</sup><a name=videorecorder_prepare1></a>
1950 1951 1952

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

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

A
1  
abc12133 已提交
1955
**需要权限:** ohos.permission.MICROPHONE
Z
zengyawen 已提交
1956 1957 1958

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

W
wusongqing 已提交
1959
**参数:**
B
bird_j 已提交
1960

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

W
wusongqing 已提交
1966
**示例:**
1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985

```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 已提交
1986
    url : 'fd://xx',   // 文件需先由调用者创建,并给予适当的权限
1987 1988 1989 1990 1991 1992 1993
    orientationHint : 0,
    location : { latitude : 30, longitude : 130 },
}

// asyncallback
let videoRecorder = null;
let events = require('events');
A
amr  
abc12133 已提交
1994
let eventEmitter = new events.EventEmitter();
1995 1996 1997 1998

eventEmitter.on('prepare', () => {
    videoRecorder.prepare(videoConfig, (err) => {
        if (typeof (err) == 'undefined') {
B
bird_j 已提交
1999
            console.info('prepare success');
2000
        } else {
B
bird_j 已提交
2001
            console.info('prepare failed and error is ' + err.message);
2002 2003 2004 2005 2006 2007
        }
    });
});

media.createVideoRecorder((err, recorder) => {
    if (typeof (err) == 'undefined' && typeof (recorder) != 'undefined') {
B
bird_j 已提交
2008 2009
        videoRecorder = recorder;
        console.info('createVideoRecorder success');
W
wusongqing 已提交
2010
        eventEmitter.emit('prepare');                                        // prepare事件触发
2011
    } else {
B
bird_j 已提交
2012
        console.info('createVideoRecorder failed and error is ' + err.message);
2013 2014 2015 2016
    }
});
```

2017
### prepare<sup>9+</sup><a name=videorecorder_prepare2></a>
2018 2019 2020

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

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

Z
zengyawen 已提交
2023
**需要权限:** ohos.permission.MICROPHONE,ohos.permission.CAMERA
Z
zengyawen 已提交
2024 2025 2026

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

W
wusongqing 已提交
2027
**参数:**
2028

2029 2030
| 参数名 | 类型                                         | 必填 | 说明                     |
| ------ | -------------------------------------------- | ---- | ------------------------ |
2031
| config | [VideoRecorderConfig](#videorecorderconfig9) | 是   | 配置视频录制的相关参数。 |
2032

W
wusongqing 已提交
2033
**返回值:**
2034

W
wusongqing 已提交
2035
| 类型           | 说明                                     |
2036
| -------------- | ---------------------------------------- |
W
wusongqing 已提交
2037
| Promise\<void> | 异步视频录制prepare方法的Promise返回值。 |
2038

W
wusongqing 已提交
2039
**示例:**
2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058

```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 已提交
2059
    url : 'fd://xx',   // 文件需先由调用者创建,并给予适当的权限
2060 2061 2062 2063 2064 2065
    orientationHint : 0,
    location : { latitude : 30, longitude : 130 },
}

// promise
let videoRecorder = null;
2066
media.createVideoRecorder().then((recorder) => {
2067 2068 2069 2070 2071 2072 2073 2074 2075 2076
    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);
});

2077
videoRecorder.prepare(videoConfig).then(() => {
2078 2079 2080 2081 2082 2083
    console.info('prepare success');
}).catch((err) => {
    console.info('prepare failed and catch error is ' + err.message);
});
```

2084
### getInputSurface<sup>9+</sup>
2085 2086 2087

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

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

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

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

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

W
wusongqing 已提交
2096
**参数:**
B
bird_j 已提交
2097

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

W
wusongqing 已提交
2102
**示例:**
2103 2104 2105

```js
// asyncallback
A
tab  
abc12133 已提交
2106
let surfaceID = null;                                               // 传递给外界的surfaceID
B
bird_j 已提交
2107 2108 2109
videoRecorder.getInputSurface((err, surfaceId) => {
    if (typeof (err) == 'undefined') {
        console.info('getInputSurface success');
B
bird_j 已提交
2110
        surfaceID = surfaceId;
B
bird_j 已提交
2111 2112 2113
    } else {
        console.info('getInputSurface failed and error is ' + err.message);
    }
2114 2115 2116
});
```

2117
### getInputSurface<sup>9+</sup>
2118 2119 2120

getInputSurface(): Promise\<string>;

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

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

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

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

W
wusongqing 已提交
2129
**返回值:**
2130

W
wusongqing 已提交
2131
| 类型             | 说明                             |
2132
| ---------------- | -------------------------------- |
W
wusongqing 已提交
2133
| Promise\<string> | 异步获得surface的Promise返回值。 |
2134

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

```js
// promise
A
tab  
abc12133 已提交
2139
let surfaceID = null;                                               // 传递给外界的surfaceID
2140
videoRecorder.getInputSurface().then((surfaceId) => {
2141
    console.info('getInputSurface success');
B
bird_j 已提交
2142
    surfaceID = surfaceId;
2143 2144 2145 2146 2147
}).catch((err) => {
    console.info('getInputSurface failed and catch error is ' + err.message);
});
```

2148
### start<sup>9+</sup><a name=videorecorder_start1></a>
2149 2150 2151

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

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

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

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

W
wusongqing 已提交
2158
**参数:**
2159

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

W
wusongqing 已提交
2164
**示例:**
2165 2166 2167

```js
// asyncallback
B
bird_j 已提交
2168 2169 2170 2171 2172 2173
videoRecorder.start((err) => {
    if (typeof (err) == 'undefined') {
        console.info('start videorecorder success');
    } else {
        console.info('start videorecorder failed and error is ' + err.message);
    }
2174 2175 2176
});
```

2177
### start<sup>9+</sup><a name=videorecorder_start2></a>
2178 2179 2180

start(): Promise\<void>;

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

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

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

W
wusongqing 已提交
2187
**返回值:**
B
bird_j 已提交
2188

W
wusongqing 已提交
2189
| 类型           | 说明                                  |
2190
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2191
| Promise\<void> | 异步开始视频录制方法的Promise返回值。 |
2192

W
wusongqing 已提交
2193
**示例:**
2194 2195 2196

```js
// promise
2197
videoRecorder.start().then(() => {
2198 2199 2200 2201 2202 2203
    console.info('start videorecorder success');
}).catch((err) => {
    console.info('start videorecorder failed and catch error is ' + err.message);
});
```

2204
### pause<sup>9+</sup><a name=videorecorder_pause1></a>
2205 2206 2207

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

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

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

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

W
wusongqing 已提交
2214
**参数:**
2215

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

W
wusongqing 已提交
2220
**示例:**
2221 2222 2223

```js
// asyncallback
B
bird_j 已提交
2224 2225 2226 2227 2228 2229
videoRecorder.pause((err) => {
    if (typeof (err) == 'undefined') {
        console.info('pause videorecorder success');
    } else {
        console.info('pause videorecorder failed and error is ' + err.message);
    }
2230 2231 2232
});
```

2233
### pause<sup>9+</sup><a name=videorecorder_pause2></a>
2234 2235 2236

pause(): Promise\<void>;

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

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

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

W
wusongqing 已提交
2243
**返回值:**
B
bird_j 已提交
2244

W
wusongqing 已提交
2245
| 类型           | 说明                                  |
2246
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2247
| Promise\<void> | 异步暂停视频录制方法的Promise返回值。 |
2248

W
wusongqing 已提交
2249
**示例:**
2250 2251 2252

```js
// promise
2253
videoRecorder.pause().then(() => {
2254 2255 2256 2257 2258 2259
    console.info('pause videorecorder success');
}).catch((err) => {
    console.info('pause videorecorder failed and catch error is ' + err.message);
});
```

2260
### resume<sup>9+</sup><a name=videorecorder_resume1></a>
2261 2262 2263

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

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

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

W
wusongqing 已提交
2268
**参数:**
2269

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

W
wusongqing 已提交
2274
**示例:**
2275 2276 2277

```js
// asyncallback
B
bird_j 已提交
2278 2279 2280 2281 2282 2283
videoRecorder.resume((err) => {
    if (typeof (err) == 'undefined') {
        console.info('resume videorecorder success');
    } else {
        console.info('resume videorecorder failed and error is ' + err.message);
    }
2284 2285 2286
});
```

2287
### resume<sup>9+</sup><a name=videorecorder_resume2></a>
2288 2289 2290

resume(): Promise\<void>;

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

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

W
wusongqing 已提交
2295
**返回值:**
B
bird_j 已提交
2296

W
wusongqing 已提交
2297
| 类型           | 说明                                  |
2298
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2299
| Promise\<void> | 异步恢复视频录制方法的Promise返回值。 |
2300

W
wusongqing 已提交
2301
**示例:**
2302 2303 2304

```js
// promise
2305
videoRecorder.resume().then(() => {
2306 2307 2308 2309 2310 2311
    console.info('resume videorecorder success');
}).catch((err) => {
    console.info('resume videorecorder failed and catch error is ' + err.message);
});
```

2312
### stop<sup>9+</sup><a name=videorecorder_stop1></a>
2313 2314 2315

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

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

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

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

W
wusongqing 已提交
2322
**参数:**
2323

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

W
wusongqing 已提交
2328
**示例:**
2329 2330 2331

```js
// asyncallback
B
bird_j 已提交
2332 2333 2334 2335 2336 2337
videoRecorder.stop((err) => {
    if (typeof (err) == 'undefined') {
        console.info('stop videorecorder success');
    } else {
        console.info('stop videorecorder failed and error is ' + err.message);
    }
2338 2339 2340
});
```

2341
### stop<sup>9+</sup><a name=videorecorder_stop2></a>
2342 2343 2344

stop(): Promise\<void>;

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

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

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

W
wusongqing 已提交
2351
**返回值:**
B
bird_j 已提交
2352

W
wusongqing 已提交
2353
| 类型           | 说明                                  |
2354
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2355
| Promise\<void> | 异步停止视频录制方法的Promise返回值。 |
2356

W
wusongqing 已提交
2357
**示例:**
2358 2359 2360

```js
// promise
2361
videoRecorder.stop().then(() => {
2362 2363 2364 2365 2366 2367
    console.info('stop videorecorder success');
}).catch((err) => {
    console.info('stop videorecorder failed and catch error is ' + err.message);
});
```

2368
### release<sup>9+</sup><a name=videorecorder_release1></a>
2369 2370 2371

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

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

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

W
wusongqing 已提交
2376
**参数:**
2377

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

W
wusongqing 已提交
2382
**示例:**
2383 2384 2385

```js
// asyncallback
B
bird_j 已提交
2386 2387 2388 2389 2390 2391
videoRecorder.release((err) => {
    if (typeof (err) == 'undefined') {
        console.info('release videorecorder success');
    } else {
        console.info('release videorecorder failed and error is ' + err.message);
    }
2392 2393 2394
});
```

2395
### release<sup>9+</sup><a name=videorecorder_release2></a>
2396 2397 2398

release(): Promise\<void>;

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

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

W
wusongqing 已提交
2403
**返回值:**
2404

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

W
wusongqing 已提交
2409
**示例:**
2410 2411 2412

```js
// promise
2413
videoRecorder.release().then(() => {
2414 2415 2416 2417 2418 2419
    console.info('release videorecorder success');
}).catch((err) => {
    console.info('release videorecorder failed and catch error is ' + err.message);
});
```

2420
### reset<sup>9+</sup><a name=videorecorder_reset1></a>
2421 2422 2423

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

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

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

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

W
wusongqing 已提交
2430
**参数:**
B
bird_j 已提交
2431

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

W
wusongqing 已提交
2436
**示例:**
2437 2438 2439

```js
// asyncallback
B
bird_j 已提交
2440 2441 2442 2443 2444 2445
videoRecorder.reset((err) => {
    if (typeof (err) == 'undefined') {
        console.info('reset videorecorder success');
    } else {
        console.info('reset videorecorder failed and error is ' + err.message);
    }
2446 2447 2448
});
```

2449
### reset<sup>9+</sup><a name=videorecorder_reset2></a>
2450 2451 2452

reset(): Promise\<void>;

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

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

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

W
wusongqing 已提交
2459
**返回值:**
2460

W
wusongqing 已提交
2461
| 类型           | 说明                                  |
2462
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2463
| Promise\<void> | 异步重置视频录制方法的Promise返回值。 |
2464

W
wusongqing 已提交
2465
**示例:**
2466 2467 2468

```js
// promise
2469
videoRecorder.reset().then(() => {
2470 2471 2472 2473 2474 2475
    console.info('reset videorecorder success');
}).catch((err) => {
    console.info('reset videorecorder failed and catch error is ' + err.message);
});
```

2476
### on('error')<sup>9+</sup>
2477 2478 2479

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

2480
开始订阅视频录制错误事件,当上报error错误事件后,用户需处理error事件,退出录制操作。
2481

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

W
wusongqing 已提交
2484
**参数:**
B
bird_j 已提交
2485

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

W
wusongqing 已提交
2491
**示例:**
2492 2493

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

2502
## VideoRecordState<sup>9+</sup>
2503

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

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

W
wusongqing 已提交
2508 2509 2510 2511 2512 2513 2514 2515
| 名称     | 类型   | 描述                   |
| -------- | ------ | ---------------------- |
| idle     | string | 视频录制空闲。         |
| prepared | string | 视频录制参数设置完成。 |
| playing  | string | 视频正在录制。         |
| paused   | string | 视频暂停录制。         |
| stopped  | string | 视频录制停止。         |
| error    | string | 错误状态。             |
2516

2517
## VideoRecorderConfig<sup>9+</sup>
2518

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

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

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

2532
## AudioSourceType<sup>9+</sup>
2533

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

Z
zengyawen 已提交
2536 2537 2538 2539 2540 2541
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoRecorder。

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

2543
## VideoSourceType<sup>9+</sup>
2544

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

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

W
wusongqing 已提交
2549 2550 2551 2552
| 名称                          | 值   | 说明                            |
| ----------------------------- | ---- | ------------------------------- |
| VIDEO_SOURCE_TYPE_SURFACE_YUV | 0    | 输入surface中携带的是raw data。 |
| VIDEO_SOURCE_TYPE_SURFACE_ES  | 1    | 输入surface中携带的是ES data。  |
2553

2554
## VideoRecorderProfile<sup>9+</sup>
2555

W
wusongqing 已提交
2556
视频录制的配置文件。
2557

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

W
wusongqing 已提交
2560 2561 2562 2563
| 名称             | 参数类型                                     | 必填 | 说明             |
| ---------------- | -------------------------------------------- | ---- | ---------------- |
| audioBitrate     | number                                       | 是   | 音频编码比特率。 |
| audioChannels    | number                                       | 是   | 音频采集声道数。 |
Z
zengyawen 已提交
2564
| audioCodec       | [CodecMimeType](#codecmimetype8)             | 是   | 音频编码格式。   |
W
wusongqing 已提交
2565 2566
| audioSampleRate  | number                                       | 是   | 音频采样率。     |
| fileFormat       | [ContainerFormatType](#containerformattype8) | 是   | 文件的容器格式。 |
2567
| videoBitrate     | number                                       | 是   | 视频编码比特率。 |
Z
zengyawen 已提交
2568
| videoCodec       | [CodecMimeType](#codecmimetype8)             | 是   | 视频编码格式。   |
W
wusongqing 已提交
2569 2570
| videoFrameWidth  | number                                       | 是   | 录制视频帧的宽。 |
| videoFrameHeight | number                                       | 是   | 录制视频帧的高。 |
2571
| videoFrameRate   | number                                       | 是   | 录制视频帧率。   |
2572 2573 2574

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

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

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

W
wusongqing 已提交
2579 2580 2581 2582
| 名称        | 值    | 说明                  |
| ----------- | ----- | --------------------- |
| CFT_MPEG_4  | "mp4" | 视频的容器格式,MP4。 |
| CFT_MPEG_4A | "m4a" | 音频的容器格式,M4A。 |
2583

2584
## Location
2585

W
wusongqing 已提交
2586
视频录制的地理位置。
2587

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

W
wusongqing 已提交
2590 2591 2592 2593
| 名称      | 参数类型 | 必填 | 说明             |
| --------- | -------- | ---- | ---------------- |
| latitude  | number   | 是   | 地理位置的纬度。 |
| longitude | number   | 是   | 地理位置的经度。 |