js-apis-media.md 92.4 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
| -------- | ------------------------------------------- | ---- | ------------------------------ |
55
| callback | AsyncCallback<[VideoPlayer](#videoplayer8)> | 是   | 回调函数。异步返回VideoPlayer实例,可用于管理和播放视频媒体。 |
56

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

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

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

## 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
| ------------------------------------- | ----------------------------------- |
84
| Promise<[VideoPlayer](#videoplayer8)> | Promise对象。异步返回VideoPlayer实例,可用于管理和播放视频媒体。 |
85

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

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

91
media.createVideoPlayer().then((video) => {
92
   if (video != null) {
93 94 95 96 97
       videoPlayer = video;
       console.info('video createVideoPlayer success');
   } else {
       console.info('video createVideoPlayer fail');
   }
98
}).catch((error) => {
B
bmeangel 已提交
99
   console.info(`video catchCallback, error:${error}`);
100
});
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)> | 是   | 回调函数。异步返回VideoRecorder实例,可用于录制视频媒体。 |
W
wusongqing 已提交
138 139 140 141

**示例:**

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

media.createVideoRecorder((error, video) => {
145
   if (video != null) {
146
       videoRecorder = video;
Z
zengyawen 已提交
147
       console.info('video createVideoRecorder success');
148
   } else {
B
bmeangel 已提交
149
       console.info(`video createVideoRecorder fail, error:${error}`);
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对象。异步返回VideoRecorder实例,可用于录制视频媒体。 |
168

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

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

174
media.createVideoRecorder().then((video) => {
175
    if (video != null) {
176
       videoRecorder = video;
Z
zengyawen 已提交
177
       console.info('video createVideoRecorder success');
178
   } else {
Z
zengyawen 已提交
179
       console.info('video createVideoRecorder fail');
180
   }
181
}).catch((error) => {
B
bmeangel 已提交
182
   console.info(`video catchCallback, error:${error}`);
183
});
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
Codec MIME类型枚举。

222
**系统能力:** 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

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

277 278
| 名称                            | 类型                                                   | 可读 | 可写 | 说明                                                         |
| ------------------------------- | ------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
279
| src                             | string                                                 | 是   | 是   | 音频媒体URI,支持当前主流的音频格式(m4a、aac、mp3、ogg、wav)。<br>**支持路径示例**<br>1. fd类型播放:fd://xx<br>![](figures/zh-cn_image_url.png)<br>2. http网络播放: http://xx<br/>3. https网络播放: https://xx<br/>4. hls网络播放路径:http://xx或者https://xx<br/>**需要权限:** ohos.permission.READ_MEDIA 或 ohos.permission.INTERNET。 |
280 281 282 283 284 285
| fdSrc<sup>9+</sup>              | [AVFileDescriptor](#avfiledescriptor9)                 | 是   | 是   | 音频媒体文件描述,使用场景:应用中的音频资源被连续存储在同一个文件中。<br/>**使用示例**<br/>假设一个连续存储的音乐文件: <br/>音乐1(地址偏移:0,字节长度:100)<br/>音乐2(地址偏移:101,字节长度:50)<br/>音乐3(地址偏移:151,字节长度:150)<br/>1. 播放音乐1:AVFileDescriptor { fd = 资源句柄; offset = 0; length = 100; }<br/>2. 播放音乐2:AVFileDescriptor { fd = 资源句柄; offset = 101; length = 50; }<br/>3. 播放音乐3:AVFileDescriptor { fd = 资源句柄; offset = 151; length = 150; }<br/>假设是一个独立的音乐文件: 请使用src=fd://xx <br/> |
| loop                            | boolean                                                | 是   | 是   | 音频循环播放属性,设置为'true'表示循环播放。                 |
| audioInterruptMode<sup>9+</sup> | [audio.InterruptMode](js-apis-audio.md#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
    if (seekDoneTime == null) {
373 374 375 376
        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
```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);
    }
}

444
audioPlayer.getTrackDescription((error,  ) => {
445
    if (arrlist != null) {
446 447 448 449
        for (let i = 0; i < arrlist.length; i++) {
            printfDescription(arrlist[i]);
        }
    } else {
B
bmeangel 已提交
450
        console.log(`audio getTrackDescription fail, error:${error}`);
451 452
    }
});
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

```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);
    }
}
479
let arrayDescription = null
480
audioPlayer.getTrackDescription().then((arrlist) => {
481
    if (arrlist != null) {
482 483 484 485
        arrayDescription = arrlist;
    } else {
        console.log('audio getTrackDescription fail');
    }
486
}).catch((error) => {
B
bmeangel 已提交
487
   console.info(`audio catchCallback, error:${error}`);
488 489
});

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
537 538
import fileio from '@ohos.fileio'

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

// 用户选择视频设置fd(本地播放)
578
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 582
fileio.open(path).then((fdValue) => {
   fdPath = fdPath + '' + fdValue;
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

596
开始订阅音频播放时间更新事件。
Z
zengyawen 已提交
597

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

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

W
wusongqing 已提交
602
| 参数名   | 类型              | 必填 | 说明                                                         |
603
| -------- | ----------------- | ---- | ------------------------------------------------------------ |
604 605
| type     | string            | 是   | 播放事件回调类型,支持的事件包括:'timeUpdate'。<br>- 'timeUpdate':音频播放时间戳更新,开始播放后自动触发该事件。 |
| callback | Callback\<number> | 是   | 播放事件回调方法。回调方法入参为更新后的时间戳。             |
Z
zengyawen 已提交
606

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

609
```js
610 611 612
audioPlayer.on('timeUpdate', (newTime) => {    //设置'timeUpdate'事件回调
    if (newTime == null) {
        console.info('audio timeUpadate fail');
613 614
        return;
    }
615
    console.log('audio timeUpadate success. seekDoneTime: ' + newTime);
Z
zengyawen 已提交
616
});
617
audioPlayer.play();    //开始播放后,自动触发时间戳更新事件
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'事件回调
B
bmeangel 已提交
639
    console.info(`audio error called, error: ${error}`); 
Z
zengyawen 已提交
640
});
W
wusongqing 已提交
641
audioPlayer.setVolume(3);  //设置volume为无效值,触发'error'事件
Z
zengyawen 已提交
642 643 644
```

## AudioState
Z
zengyawen 已提交
645

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

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

650 651 652 653 654 655 656
| 名称    | 类型   | 描述                                           |
| ------- | ------ | ---------------------------------------------- |
| idle    | string | 音频播放空闲,dataload/reset成功后处于此状态。 |
| playing | string | 音频正在播放,play成功后处于此状态。           |
| paused  | string | 音频暂停播放,pause成功后处于此状态。          |
| stopped | string | 音频播放停止,stop/播放结束后处于此状态。      |
| error   | string | 错误状态。                                     |
657 658 659 660 661

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

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

662
**系统能力:** SystemCapability.Multimedia.Media.Core
663

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

670 671
## VideoPlayer<sup>8+</sup>

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

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

Z
zengyawen 已提交
676
### 属性<a name=videoplayer_属性></a>
677

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

| 名称                     | 类型                               | 可读 | 可写 | 说明                                                         |
| ------------------------ | ---------------------------------- | ---- | ---- | ------------------------------------------------------------ |
682
| 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/> |
683
| fdSrc<sup>9+</sup> | [AVFileDescriptor](#avfiledescriptor9) | 是 | 是 | 视频媒体文件描述,使用场景:应用中的视频资源被连续存储在同一个文件中。<br/>**使用示例**<br/>假设一个连续存储的音乐文件: <br/>视频1(地址偏移:0,字节长度:100)<br/>视频2(地址偏移:101,字节长度:50)<br/>视频3(地址偏移:151,字节长度:150)<br/>1. 播放视频1:AVFileDescriptor { fd = 资源句柄; offset = 0; length = 100; }<br/>2. 播放视频2:AVFileDescriptor { fd = 资源句柄; offset = 101; length = 50; }<br/>3. 播放视频3:AVFileDescriptor { fd = 资源句柄; offset = 151; length = 150; }<br/>假设是一个独立的视频文件: 请使用src=fd://xx <br/> |
Z
zengyawen 已提交
684
| loop<sup>8+</sup>        | boolean                            | 是   | 是   | 视频循环播放属性,设置为'true'表示循环播放。                 |
H
hwchenhongyu 已提交
685
| videoScaleType<sup>9+</sup>        | [VideoScaleType](#videoscaletype9)                   | 是   | 是   | 视频缩放模式。       |
686
| audioInterruptMode<sup>9+</sup>        | [audio.InterruptMode](js-apis-audio.md#interruptmode9)  | 是   | 是   | 音频焦点模型。       |
687 688
| currentTime<sup>8+</sup> | number                             | 是   | 否   | 视频的当前播放位置,单位为毫秒(ms)。                       |
| duration<sup>8+</sup>    | number                             | 是   | 否   | 视频时长,单位为毫秒(ms),返回-1表示直播模式。             |
Z
zengyawen 已提交
689
| state<sup>8+</sup>       | [VideoPlayState](#videoplaystate8) | 是   | 否   | 视频播放的状态。                                             |
690 691
| width<sup>8+</sup>       | number                             | 是   | 否   | 视频宽,单位为像素(px)。                                   |
| height<sup>8+</sup>      | number                             | 是   | 否   | 视频高,单位为像素(px)。                                   |
692 693 694 695 696

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

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

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

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

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

W
wusongqing 已提交
703
**参数:**
704

W
wusongqing 已提交
705
| 参数名    | 类型     | 必填 | 说明                      |
706
| --------- | -------- | ---- | ------------------------- |
W
wusongqing 已提交
707 708
| surfaceId | string   | 是   | SurfaceId                 |
| callback  | function | 是   | 设置SurfaceId的回调方法。 |
709

W
wusongqing 已提交
710
**示例:**
711 712

```js
713
let surfaceId = null;
714
videoPlayer.setDisplaySurface(surfaceId, (err) => {
715
    if (err == null) {
A
tab  
abc12133 已提交
716 717
        console.info('setDisplaySurface success!');
    } else {
718 719 720 721 722 723 724 725 726
        console.info('setDisplaySurface fail!');
    }
});
```

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

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

W
wusongqing 已提交
727
通过Promise方式设置SurfaceId。
728

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

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

W
wusongqing 已提交
733
**参数:**
B
bird_j 已提交
734

W
wusongqing 已提交
735
| 参数名    | 类型   | 必填 | 说明      |
736
| --------- | ------ | ---- | --------- |
W
wusongqing 已提交
737
| surfaceId | string | 是   | SurfaceId |
738

W
wusongqing 已提交
739
**返回值:**
740

Z
zengyawen 已提交
741 742 743
| 类型           | 说明                           |
| -------------- | ------------------------------ |
| Promise\<void> | 设置SurfaceId的Promise返回值。 |
744

W
wusongqing 已提交
745
**示例:**
746 747

```js
748
let surfaceId = null;
749
videoPlayer.setDisplaySurface(surfaceId).then(() => {
750
    console.info('setDisplaySurface success');
751
}).catch((error) => {
B
bmeangel 已提交
752
   console.info(`video catchCallback, error:${error}`);
753
});
754 755 756 757 758 759
```

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

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

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

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

W
wusongqing 已提交
764
**参数:**
765

W
wusongqing 已提交
766
| 参数名   | 类型     | 必填 | 说明                     |
767
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
768
| callback | function | 是   | 准备播放视频的回调方法。 |
769

W
wusongqing 已提交
770
**示例:**
771 772 773

```js
videoPlayer.prepare((err) => {
774
    if (err == null) {
A
tab  
abc12133 已提交
775 776
        console.info('prepare success!');
    } else {
777 778 779 780 781 782 783 784 785
        console.info('prepare fail!');
    }
});
```

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

prepare(): Promise\<void>

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

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

W
wusongqing 已提交
790
**返回值:**
B
bird_j 已提交
791

W
wusongqing 已提交
792
| 类型           | 说明                          |
793
| -------------- | ----------------------------- |
W
wusongqing 已提交
794
| Promise\<void> | 准备播放视频的Promise返回值。 |
795

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

```js
799
videoPlayer.prepare().then(() => {
800
    console.info('prepare success');
801
}).catch((error) => {
B
bmeangel 已提交
802
   console.info(`video catchCallback, error:${error}`);
803
});
804 805 806 807 808 809
```

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

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

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

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

W
wusongqing 已提交
814
**参数:**
815

W
wusongqing 已提交
816
| 参数名   | 类型     | 必填 | 说明                     |
817
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
818
| callback | function | 是   | 开始播放视频的回调方法。 |
819

W
wusongqing 已提交
820
**示例:**
821 822 823

```js
videoPlayer.play((err) => {
824
    if (err == null) {
A
tab  
abc12133 已提交
825 826
        console.info('play success!');
    } else {
827 828 829 830 831 832 833 834 835
        console.info('play fail!');
    }
});
```

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

play(): Promise\<void>;

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

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

W
wusongqing 已提交
840
**返回值:**
B
bird_j 已提交
841

W
wusongqing 已提交
842
| 类型           | 说明                          |
843
| -------------- | ----------------------------- |
W
wusongqing 已提交
844
| Promise\<void> | 开始播放视频的Promise返回值。 |
845

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

```js
849
videoPlayer.play().then(() => {
850
    console.info('play success');
851
}).catch((error) => {
B
bmeangel 已提交
852
   console.info(`video catchCallback, error:${error}`);
853
});
854 855 856 857 858 859
```

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

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

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

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

W
wusongqing 已提交
864
**参数:**
865

W
wusongqing 已提交
866
| 参数名   | 类型     | 必填 | 说明                     |
867
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
868
| callback | function | 是   | 暂停播放视频的回调方法。 |
869

W
wusongqing 已提交
870
**示例:**
871 872 873

```js
videoPlayer.pause((err) => {
874
    if (err == null) {
A
tab  
abc12133 已提交
875 876
        console.info('pause success!');
    } else {
877 878 879 880 881 882 883 884 885
        console.info('pause fail!');
    }
});
```

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

pause(): Promise\<void>

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

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

W
wusongqing 已提交
890
**返回值:**
B
bird_j 已提交
891

W
wusongqing 已提交
892
| 类型           | 说明                          |
893
| -------------- | ----------------------------- |
W
wusongqing 已提交
894
| Promise\<void> | 暂停播放视频的Promise返回值。 |
895

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

```js
899
videoPlayer.pause().then(() => {
900
    console.info('pause success');
901
}).catch((error) => {
B
bmeangel 已提交
902
   console.info(`video catchCallback, error:${error}`);
903
});
904 905 906 907 908 909
```

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

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

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

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

W
wusongqing 已提交
914
**参数:**
915

W
wusongqing 已提交
916
| 参数名   | 类型     | 必填 | 说明                     |
917
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
918
| callback | function | 是   | 停止播放视频的回调方法。 |
919

W
wusongqing 已提交
920
**示例:**
921 922 923

```js
videoPlayer.stop((err) => {
924
    if (err == null) {
A
tab  
abc12133 已提交
925 926
        console.info('stop success!');
    } else {
927 928 929 930 931 932 933 934 935
        console.info('stop fail!');
    }
});
```

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

stop(): Promise\<void>

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

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

W
wusongqing 已提交
940
**返回值:**
941

W
wusongqing 已提交
942
| 类型           | 说明                          |
943
| -------------- | ----------------------------- |
W
wusongqing 已提交
944
| Promise\<void> | 停止播放视频的Promise返回值。 |
945

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

```js
949
videoPlayer.stop().then(() => {
950
    console.info('stop success');
951
}).catch((error) => {
B
bmeangel 已提交
952
   console.info(`video catchCallback, error:${error}`);
953
});
954 955 956 957 958 959
```

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

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

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

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

W
wusongqing 已提交
964
**参数:**
B
bird_j 已提交
965

W
wusongqing 已提交
966
| 参数名   | 类型     | 必填 | 说明                     |
967
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
968
| callback | function | 是   | 切换播放视频的回调方法。 |
969

W
wusongqing 已提交
970
**示例:**
971 972 973

```js
videoPlayer.reset((err) => {
974
    if (err == null) {
A
tab  
abc12133 已提交
975 976
        console.info('reset success!');
    } else {
977 978 979 980 981 982 983 984 985
        console.info('reset fail!');
    }
});
```

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

reset(): Promise\<void>

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

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

W
wusongqing 已提交
990
**返回值:**
991

W
wusongqing 已提交
992
| 类型           | 说明                          |
993
| -------------- | ----------------------------- |
W
wusongqing 已提交
994
| Promise\<void> | 切换播放视频的Promise返回值。 |
995

W
wusongqing 已提交
996
**示例:**
997 998

```js
999
videoPlayer.reset().then(() => {
1000
    console.info('reset success');
1001
}).catch((error) => {
B
bmeangel 已提交
1002
   console.info(`video catchCallback, error:${error}`);
1003
});
1004 1005 1006 1007 1008 1009
```

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

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

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

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

W
wusongqing 已提交
1014
**参数:**
B
bird_j 已提交
1015

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

W
wusongqing 已提交
1021
**示例:**
1022 1023

```js
1024 1025
let seekTime = 5000;
videoPlayer.seek(seekTime, (err, result) => {
1026
    if (err == null) {
A
tab  
abc12133 已提交
1027 1028
        console.info('seek success!');
    } else {
1029 1030 1031 1032 1033 1034 1035 1036 1037
        console.info('seek fail!');
    }
});
```

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

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

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

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

W
wusongqing 已提交
1042
**参数:**
1043

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

W
wusongqing 已提交
1050
**示例:**
1051 1052

```js
1053 1054
import media from '@ohos.multimedia.media'
let seekTime = 5000;
1055
videoPlayer.seek(seekTime, media.SeekMode.SEEK_NEXT_SYNC, (err, result) => {
1056
    if (err == null) {
A
tab  
abc12133 已提交
1057 1058
        console.info('seek success!');
    } else {
1059 1060 1061 1062 1063 1064 1065 1066 1067
        console.info('seek fail!');
    }
});
```

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

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

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

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

W
wusongqing 已提交
1072
**参数:**
B
bird_j 已提交
1073

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

W
wusongqing 已提交
1079
**返回值:**
1080

W
wusongqing 已提交
1081
| 类型           | 说明                                |
1082
| -------------- | ----------------------------------- |
W
wusongqing 已提交
1083
| Promise\<void> | 跳转到指定播放位置的Promise返回值。 |
1084

W
wusongqing 已提交
1085
**示例:**
1086 1087

```js
1088
import media from '@ohos.multimedia.media'
1089
let seekTime = 5000;
1090
videoPlayer.seek(seekTime).then((seekDoneTime) => { // seekDoneTime表示seek完成后的时间点
1091
    console.info('seek success');
1092
}).catch((error) => {
B
bmeangel 已提交
1093
   console.info(`video catchCallback, error:${error}`);
1094
});
1095

1096
videoPlayer.seek(seekTime, media.SeekMode.SEEK_NEXT_SYNC).then((seekDoneTime) => {
1097
    console.info('seek success');
1098
}).catch((error) => {
B
bmeangel 已提交
1099
   console.info(`video catchCallback, error:${error}`);
1100
});
1101 1102 1103 1104 1105 1106
```

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

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

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

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

W
wusongqing 已提交
1111
**参数:**
1112

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

W
wusongqing 已提交
1118
**示例:**
1119 1120

```js
1121 1122
let vol = 0.5;
videoPlayer.setVolume(vol, (err, result) => {
1123
    if (err == null) {
A
tab  
abc12133 已提交
1124 1125
        console.info('setVolume success!');
    } else {
1126 1127 1128 1129 1130 1131 1132 1133 1134
        console.info('setVolume fail!');
    }
});
```

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

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

W
wusongqing 已提交
1135
通过Promise方式设置音量。
1136

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

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

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

W
wusongqing 已提交
1145
**返回值:**
1146

W
wusongqing 已提交
1147
| 类型           | 说明                      |
1148
| -------------- | ------------------------- |
W
wusongqing 已提交
1149
| Promise\<void> | 设置音量的Promise返回值。 |
1150

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

```js
1154
let vol = 0.5;
1155
videoPlayer.setVolume(vol).then(() => {
1156
    console.info('setVolume success');
1157
}).catch((error) => {
B
bmeangel 已提交
1158
   console.info(`video catchCallback, error:${error}`);
1159
});
1160 1161 1162 1163 1164 1165
```

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

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

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

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

W
wusongqing 已提交
1170
**参数:**
1171

W
wusongqing 已提交
1172
| 参数名   | 类型     | 必填 | 说明                     |
1173
| -------- | -------- | ---- | ------------------------ |
W
wusongqing 已提交
1174
| callback | function | 是   | 释放视频资源的回调方法。 |
1175

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

```js
videoPlayer.release((err) => {
1180
    if (err == null) {
A
tab  
abc12133 已提交
1181 1182
        console.info('release success!');
    } else {
1183 1184 1185 1186 1187 1188 1189 1190 1191
        console.info('release fail!');
    }
});
```

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

release(): Promise\<void>

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

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

W
wusongqing 已提交
1196
**返回值:**
1197

W
wusongqing 已提交
1198
| 类型           | 说明                          |
1199
| -------------- | ----------------------------- |
W
wusongqing 已提交
1200
| Promise\<void> | 释放视频资源的Promise返回值。 |
1201

W
wusongqing 已提交
1202
**示例:**
1203 1204

```js
1205
videoPlayer.release().then(() => {
1206
    console.info('release success');
1207
}).catch((error) => {
B
bmeangel 已提交
1208
   console.info(`video catchCallback, error:${error}`);
1209
});
1210 1211 1212 1213
```

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

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

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

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

W
wusongqing 已提交
1220
**参数:**
B
bird_j 已提交
1221

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

W
wusongqing 已提交
1226
**示例:**
1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237

```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) => {
1238
    if ((arrlist) != null) {
1239 1240 1241 1242
        for (let i = 0; i < arrlist.length; i++) {
            printfDescription(arrlist[i]);
        }
    } else {
B
bmeangel 已提交
1243
        console.log(`video getTrackDescription fail, error:${error}`);
1244 1245 1246 1247 1248 1249
    }
});
```

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

Z
zengyawen 已提交
1250
getTrackDescription(): Promise<Array\<MediaDescription>>
1251

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

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

W
wusongqing 已提交
1256
**返回值:**
1257

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

W
wusongqing 已提交
1262
**示例:**
1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273

```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;
1274
videoPlayer.getTrackDescription().then((arrlist) => {
1275
    if (arrlist != null) {
1276 1277 1278 1279
        arrayDescription = arrlist;
    } else {
        console.log('video getTrackDescription fail');
    }
1280
}).catch((error) => {
B
bmeangel 已提交
1281
   console.info(`video catchCallback, error:${error}`);
1282
});
1283 1284 1285 1286 1287 1288 1289 1290 1291
for (let i = 0; i < arrayDescription.length; i++) {
    printfDescription(arrayDescription[i]);
}
```

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

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

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

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

W
wusongqing 已提交
1296
**参数:**
B
bird_j 已提交
1297

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

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

```js
1306 1307 1308 1309
import media from '@ohos.multimedia.media'
let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X;

videoPlayer.setSpeed(speed, (err, result) => {
1310
    if (err == null) {
A
tab  
abc12133 已提交
1311 1312
        console.info('setSpeed success!');
    } else {
1313 1314 1315 1316 1317 1318 1319 1320 1321
        console.info('setSpeed fail!');
    }
});
```

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

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

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

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

W
wusongqing 已提交
1326
**参数:**
1327

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

Z
zengyawen 已提交
1332 1333 1334 1335 1336 1337
**返回值:**

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

W
wusongqing 已提交
1338
**示例:**
1339 1340

```js
1341 1342 1343
import media from '@ohos.multimedia.media'
let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X;

1344
videoPlayer.setSpeed(speed).then(() => {
1345
    console.info('setSpeed success');
1346
}).catch((error) => {
B
bmeangel 已提交
1347
   console.info(`video catchCallback, error:${error}`);
1348
});
1349 1350
```

1351 1352 1353 1354
### selectBitrate<sup>9+</sup>

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

1355
通过回调方式设置码率,通过[availableBitratesCollect](#onavailablebitratescollect9)获取当前码流支持的Bitrate。
1356 1357 1358 1359 1360

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

**参数:**

1361 1362 1363 1364
| 参数名   | 类型                   | 必填 | 说明                                                       |
| -------- | ---------------------- | ---- | ---------------------------------------------------------- |
| bitrate  | number                 | 是   | 指定码率播放,用于hls多码率场景,单位为bps。               |
| callback | AsyncCallback\<number> | 是   | 设置播放码率的回调方法,返回设置的值表示成功,其他则失败。 |
1365 1366 1367 1368 1369 1370

**示例:**

```js
let bitrate = 1024000;
videoPlayer.selectBitrate(bitrate, (err, result) => {
1371
    if (err == null) {
1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382
        console.info('selectBitrate success!');
    } else {
        console.info('selectBitrate fail!');
    }
});
```

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

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

1383
通过Promise方式设置码率,通过[availableBitratesCollect](#onavailablebitratescollect9)获取当前码流支持的Bitrate。
1384 1385 1386 1387 1388

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

**参数:**

1389 1390 1391
| 参数名  | 类型   | 必填 | 说明                                         |
| ------- | ------ | ---- | -------------------------------------------- |
| bitrate | number | 是   | 指定码率播放,用于hls多码率场景,单位为bps。 |
1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402

**返回值:**

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

**示例:**

```js
let bitrate = 1024000;
1403
videoPlayer.selectBitrate(bitrate).then(() => {
1404 1405
    console.info('selectBitrate success');
}).catch((error) => {
B
bmeangel 已提交
1406
   console.info(`video catchCallback, error:${error}`);
1407 1408 1409
});
```

1410 1411 1412 1413
### on('playbackCompleted')<sup>8+</sup>

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

1414
开始监听视频播放完成事件。
1415

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

W
wusongqing 已提交
1418
**参数:**
B
bird_j 已提交
1419

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

W
wusongqing 已提交
1425
**示例:**
1426 1427 1428

```js
videoPlayer.on('playbackCompleted', () => {
A
tab  
abc12133 已提交
1429
    console.info('playbackCompleted success!');
1430 1431 1432 1433 1434 1435 1436
});
```

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

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

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

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

W
wusongqing 已提交
1441
**参数:**
1442

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

W
wusongqing 已提交
1448
**示例:**
1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460

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

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

W
wusongqing 已提交
1465
**参数:**
B
bird_j 已提交
1466

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

W
wusongqing 已提交
1472
**示例:**
1473 1474 1475

```js
videoPlayer.on('startRenderFrame', () => {
A
tab  
abc12133 已提交
1476
    console.info('startRenderFrame success!');
1477 1478 1479 1480 1481 1482 1483
});
```

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

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

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

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

W
wusongqing 已提交
1488
**参数:**
1489

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

W
wusongqing 已提交
1495
**示例:**
1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507

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

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

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

W
wusongqing 已提交
1512
**参数:**
1513

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

W
wusongqing 已提交
1519
**示例:**
1520 1521

```js
W
wusongqing 已提交
1522
videoPlayer.on('error', (error) => {      // 设置'error'事件回调
B
bmeangel 已提交
1523
    console.info(`video error called, error: ${error}`);
1524
});
1525
videoPlayer.url = 'fd://error';  //设置错误的播放地址,触发'error'事件
1526 1527
```

1528
### on('availableBitratesCollect')<sup>9+</sup>
1529

1530
on(type: 'availableBitratesCollect', callback: (bitrates: Array\<number>) => void): void
1531 1532 1533 1534 1535 1536 1537 1538 1539

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

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

**参数:**

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

**示例:**

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

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

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

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

W
wusongqing 已提交
1559 1560 1561 1562 1563 1564 1565 1566
| 名称     | 类型   | 描述           |
| -------- | ------ | -------------- |
| idle     | string | 视频播放空闲。 |
| prepared | string | 视频播放准备。 |
| playing  | string | 视频正在播放。 |
| paused   | string | 视频暂停播放。 |
| stopped  | string | 视频播放停止。 |
| error    | string | 错误状态。     |
1567 1568 1569

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

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

1572
**系统能力:** SystemCapability.Multimedia.Media.Core
Z
zengyawen 已提交
1573 1574 1575 1576 1577

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

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

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

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

W
wusongqing 已提交
1585 1586 1587 1588 1589 1590 1591
| 名称                 | 值   | 描述                           |
| -------------------- | ---- | ------------------------------ |
| 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倍。 |
1592

H
hwchenhongyu 已提交
1593 1594 1595 1596
## VideoScaleType<sup>9+</sup>

枚举,视频缩放模式。

1597
**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
H
hwchenhongyu 已提交
1598 1599 1600 1601 1602 1603

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

1604 1605
## MediaDescription<sup>8+</sup>

Z
zengyawen 已提交
1606 1607
通过key-value方式获取媒体信息。

1608
**系统能力:** SystemCapability.Multimedia.Media.Core
1609

W
wusongqing 已提交
1610
**示例:**
1611 1612

```js
1613
import media from '@ohos.multimedia.media'
1614 1615
function printfItemDescription(obj, key) {
    let property = obj[key];
1616 1617
    console.info('audio key is ' + key); // 通过key值获取对应的value。key值具体可见[MediaDescriptionKey]
    console.info('audio value is ' + property); //对应key值得value。其类型可为任意类型,具体key对应value的类型可参考[MediaDescriptionKey]
1618
}
1619
let audioPlayer = media.createAudioPlayer();
1620
audioPlayer.getTrackDescription((error, arrlist) => {
1621
    if (arrlist != null) {
1622
        for (let i = 0; i < arrlist.length; i++) {
1623
            printfItemDescription(arrlist[i], media.MediaDescriptionKey.MD_KEY_TRACK_TYPE);  //打印出每条轨道MD_KEY_TRACK_TYPE的值
1624 1625
        }
    } else {
B
bmeangel 已提交
1626
        console.log(`audio getTrackDescription fail, error:${error}`);
1627 1628 1629
    }
});
```
Z
zengyawen 已提交
1630 1631 1632

## AudioRecorder

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

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

### prepare<a name=audiorecorder_prepare></a>
Z
zengyawen 已提交
1638 1639 1640

prepare(config: AudioRecorderConfig): void

W
wusongqing 已提交
1641
录音准备。
Z
zengyawen 已提交
1642

Z
zengyawen 已提交
1643 1644 1645 1646
**需要权限:** ohos.permission.MICROPHONE

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

W
wusongqing 已提交
1647
**参数:**
B
bird_j 已提交
1648

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

W
wusongqing 已提交
1653
**示例:**
Z
zengyawen 已提交
1654

1655
```js
Z
zengyawen 已提交
1656
let audioRecorderConfig = {
1657
    audioEncoder : media.AudioEncoder.AAC_LC,
Z
zengyawen 已提交
1658 1659 1660
    audioEncodeBitRate : 22050,
    audioSampleRate : 22050,
    numberOfChannels : 2,
1661
    format : media.AudioOutputFormat.AAC_ADTS,
Z
zengyawen 已提交
1662
    uri : 'fd://1',       // 文件需先由调用者创建,并给予适当的权限
1663
    location : { latitude : 30, longitude : 130},
Z
zengyawen 已提交
1664
}
W
wusongqing 已提交
1665
audioRecorder.on('prepare', () => {    //设置'prepare'事件回调
1666 1667
    console.log('prepare success');
});
B
bird_j 已提交
1668
audioRecorder.prepare(audioRecorderConfig);
Z
zengyawen 已提交
1669 1670 1671
```


1672
### start<a name=audiorecorder_start></a>
Z
zengyawen 已提交
1673 1674 1675

start(): void

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

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

W
wusongqing 已提交
1680
**示例:**
Z
zengyawen 已提交
1681

1682
```js
W
wusongqing 已提交
1683
audioRecorder.on('start', () => {    //设置'start'事件回调
1684 1685 1686
    console.log('audio recorder start success');
});
audioRecorder.start();
Z
zengyawen 已提交
1687
```
1688 1689 1690 1691 1692

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

pause():void

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

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

W
wusongqing 已提交
1697
**示例:**
1698 1699

```js
W
wusongqing 已提交
1700
audioRecorder.on('pause', () => {    //设置'pause'事件回调
1701 1702 1703 1704 1705 1706 1707 1708 1709
    console.log('audio recorder pause success');
});
audioRecorder.pause();
```

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

resume():void

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

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

W
wusongqing 已提交
1714
**示例:**
1715 1716

```js
W
wusongqing 已提交
1717
audioRecorder.on('resume', () => {    //设置'resume'事件回调
1718 1719 1720
    console.log('audio recorder resume success');
});
audioRecorder.resume();
Z
zengyawen 已提交
1721 1722
```

1723
### stop<a name=audiorecorder_stop></a>
Z
zengyawen 已提交
1724 1725 1726

stop(): void

W
wusongqing 已提交
1727
停止录音。
Z
zengyawen 已提交
1728

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

W
wusongqing 已提交
1731
**示例:**
Z
zengyawen 已提交
1732

1733
```js
W
wusongqing 已提交
1734
audioRecorder.on('stop', () => {    //设置'stop'事件回调
1735 1736 1737
    console.log('audio recorder stop success');
});
audioRecorder.stop();
Z
zengyawen 已提交
1738 1739
```

1740
### release<a name=audiorecorder_release></a>
Z
zengyawen 已提交
1741 1742 1743

release(): void

W
wusongqing 已提交
1744
释放录音资源。
B
bird_j 已提交
1745

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

W
wusongqing 已提交
1748
**示例:**
Z
zengyawen 已提交
1749

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

1758
### reset<a name=audiorecorder_reset></a>
Z
zengyawen 已提交
1759 1760 1761

reset(): void

W
wusongqing 已提交
1762
重置录音。
Z
zengyawen 已提交
1763

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

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

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

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

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

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

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

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

W
wusongqing 已提交
1785
**参数:**
B
bird_j 已提交
1786

W
wusongqing 已提交
1787
| 参数名   | 类型     | 必填 | 说明                                                         |
Z
zengyawen 已提交
1788
| -------- | -------- | ---- | ------------------------------------------------------------ |
W
wusongqing 已提交
1789 1790
| 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 已提交
1791

W
wusongqing 已提交
1792
**示例:**
Z
zengyawen 已提交
1793

1794
```js
1795
let audioRecorder = media.createAudioRecorder();                                  // 创建一个音频录制实例
1796 1797 1798 1799 1800 1801
let audioRecorderConfig = {
    audioEncoder : media.AudioEncoder.AAC_LC, ,
    audioEncodeBitRate : 22050,
    audioSampleRate : 22050,
    numberOfChannels : 2,
    format : media.AudioOutputFormat.AAC_ADTS,
Z
zengyawen 已提交
1802
    uri : 'fd://xx',                                                            // 文件需先由调用者创建,并给予适当的权限
1803 1804
    location : { latitude : 30, longitude : 130},
}
A
tab  
abc12133 已提交
1805
audioRecorder.on('error', (error) => {                                             // 设置'error'事件回调
B
bmeangel 已提交
1806
    console.info(`audio error called, error: ${error}`);
1807
});
A
tab  
abc12133 已提交
1808
audioRecorder.on('prepare', () => {                                              // 设置'prepare'事件回调
1809
    console.log('prepare success');
A
tab  
abc12133 已提交
1810
    audioRecorder.start();                                                       // 开始录制,并触发'start'事件回调
1811
});
A
tab  
abc12133 已提交
1812
audioRecorder.on('start', () => {                                                 // 设置'start'事件回调
1813 1814
    console.log('audio recorder start success');
});
A
tab  
abc12133 已提交
1815
audioRecorder.on('pause', () => {                                                 // 设置'pause'事件回调
1816 1817
    console.log('audio recorder pause success');
});
A
tab  
abc12133 已提交
1818
audioRecorder.on('resume', () => {                                                 // 设置'resume'事件回调
1819 1820
    console.log('audio recorder resume success');
});
A
tab  
abc12133 已提交
1821
audioRecorder.on('stop', () => {                                                 // 设置'stop'事件回调
1822 1823
    console.log('audio recorder stop success');
});
A
tab  
abc12133 已提交
1824
audioRecorder.on('release', () => {                                                 // 设置'release'事件回调
1825 1826
    console.log('audio recorder release success');
});
A
tab  
abc12133 已提交
1827
audioRecorder.on('reset', () => {                                                 // 设置'reset'事件回调
1828
    console.log('audio recorder reset success');
Z
zengyawen 已提交
1829
});
A
tab  
abc12133 已提交
1830
audioRecorder.prepare(audioRecorderConfig)                                       // 设置录制参数 ,并触发'prepare'事件回调
Z
zengyawen 已提交
1831 1832 1833 1834 1835 1836
```

### on('error')

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

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

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

W
wusongqing 已提交
1841
**参数:**
Z
zengyawen 已提交
1842

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

W
wusongqing 已提交
1848
**示例:**
1849 1850

```js
1851 1852 1853 1854 1855 1856 1857 1858 1859
let audioRecorderConfig = {
    audioEncoder : media.AudioEncoder.AAC_LC, ,
    audioEncodeBitRate : 22050,
    audioSampleRate : 22050,
    numberOfChannels : 2,
    format : media.AudioOutputFormat.AAC_ADTS,
    uri : 'fd://xx',                                                     // 文件需先由调用者创建,并给予适当的权限
    location : { latitude : 30, longitude : 130},
}
A
tab  
abc12133 已提交
1860
audioRecorder.on('error', (error) => {                                  // 设置'error'事件回调
B
bmeangel 已提交
1861
    console.info(`audio error called, error: ${error}`); 
1862
});
1863
audioRecorder.prepare(audioRecorderConfig);                            // prepare不设置参数,触发'error'事件
1864
```
Z
zengyawen 已提交
1865 1866 1867

## AudioRecorderConfig

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

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

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

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

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

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

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

W
wusongqing 已提交
1893
| 名称    | 默认值 | 说明                                                         |
B
bird_j 已提交
1894
| ------- | ------ | ------------------------------------------------------------ |
A
abc 已提交
1895 1896 1897
| 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 已提交
1898
| AAC_LC  | 3      | AAC-LC(Advanced&nbsp;Audio&nbsp;Coding&nbsp;Low&nbsp;Complexity)编码格式。 |
A
abc 已提交
1899
| HE_AAC  | 4      | HE_AAC(High-Efficiency Advanced&nbsp;Audio&nbsp;Coding)编码格式。<br/>仅做接口定义,暂不支持使用。 |
Z
zengyawen 已提交
1900 1901


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

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

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

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

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

1919
## VideoRecorder<sup>9+</sup>
1920

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

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

W
wusongqing 已提交
1925
### 属性
1926

1927
**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
Z
zengyawen 已提交
1928 1929 1930

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

1933
### prepare<sup>9+</sup><a name=videorecorder_prepare1></a>
1934 1935 1936

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

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

A
1  
abc12133 已提交
1939
**需要权限:** ohos.permission.MICROPHONE
Z
zengyawen 已提交
1940 1941 1942

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

W
wusongqing 已提交
1943
**参数:**
B
bird_j 已提交
1944

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

W
wusongqing 已提交
1950
**示例:**
1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969

```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 已提交
1970
    url : 'fd://xx',   // 文件需先由调用者创建,并给予适当的权限
1971 1972 1973 1974 1975 1976 1977
    orientationHint : 0,
    location : { latitude : 30, longitude : 130 },
}

// asyncallback
let videoRecorder = null;
let events = require('events');
A
amr  
abc12133 已提交
1978
let eventEmitter = new events.EventEmitter();
1979 1980 1981

eventEmitter.on('prepare', () => {
    videoRecorder.prepare(videoConfig, (err) => {
1982
        if (err == null) {
B
bird_j 已提交
1983
            console.info('prepare success');
1984
        } else {
B
bird_j 已提交
1985
            console.info('prepare failed and error is ' + err.message);
1986 1987 1988 1989 1990
        }
    });
});

media.createVideoRecorder((err, recorder) => {
1991
    if (err == null && recorder != null) {
B
bird_j 已提交
1992 1993
        videoRecorder = recorder;
        console.info('createVideoRecorder success');
W
wusongqing 已提交
1994
        eventEmitter.emit('prepare');                                        // prepare事件触发
1995
    } else {
B
bird_j 已提交
1996
        console.info('createVideoRecorder failed and error is ' + err.message);
1997 1998 1999 2000
    }
});
```

2001
### prepare<sup>9+</sup><a name=videorecorder_prepare2></a>
2002 2003 2004

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

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

2007
**需要权限:** ohos.permission.MICROPHONE
Z
zengyawen 已提交
2008 2009 2010

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

W
wusongqing 已提交
2011
**参数:**
2012

2013 2014
| 参数名 | 类型                                         | 必填 | 说明                     |
| ------ | -------------------------------------------- | ---- | ------------------------ |
2015
| config | [VideoRecorderConfig](#videorecorderconfig9) | 是   | 配置视频录制的相关参数。 |
2016

W
wusongqing 已提交
2017
**返回值:**
2018

W
wusongqing 已提交
2019
| 类型           | 说明                                     |
2020
| -------------- | ---------------------------------------- |
W
wusongqing 已提交
2021
| Promise\<void> | 异步视频录制prepare方法的Promise返回值。 |
2022

W
wusongqing 已提交
2023
**示例:**
2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042

```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 已提交
2043
    url : 'fd://xx',   // 文件需先由调用者创建,并给予适当的权限
2044 2045 2046 2047 2048 2049
    orientationHint : 0,
    location : { latitude : 30, longitude : 130 },
}

// promise
let videoRecorder = null;
2050
media.createVideoRecorder().then((recorder) => {
2051
    if (recorder != null) {
2052 2053
        videoRecorder = recorder;
        console.info('createVideoRecorder success');
2054 2055 2056 2057 2058
        videoRecorder.prepare(videoConfig).then(() => {
            console.info('prepare success');
        }).catch((err) => {
            console.info('prepare failed and catch error is ' + err.message);
        });
2059 2060 2061 2062 2063 2064 2065 2066
    } else {
        console.info('createVideoRecorder failed');
    }
}).catch((err) => {
    console.info('catch err error message is ' + err.message);
});
```

2067
### getInputSurface<sup>9+</sup>
2068 2069 2070

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

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

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

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

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

W
wusongqing 已提交
2079
**参数:**
B
bird_j 已提交
2080

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

W
wusongqing 已提交
2085
**示例:**
2086 2087 2088

```js
// asyncallback
A
tab  
abc12133 已提交
2089
let surfaceID = null;                                               // 传递给外界的surfaceID
B
bird_j 已提交
2090
videoRecorder.getInputSurface((err, surfaceId) => {
2091
    if (err == null) {
B
bird_j 已提交
2092
        console.info('getInputSurface success');
B
bird_j 已提交
2093
        surfaceID = surfaceId;
B
bird_j 已提交
2094 2095 2096
    } else {
        console.info('getInputSurface failed and error is ' + err.message);
    }
2097 2098 2099
});
```

2100
### getInputSurface<sup>9+</sup>
2101 2102 2103

getInputSurface(): Promise\<string>;

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

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

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

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

W
wusongqing 已提交
2112
**返回值:**
2113

W
wusongqing 已提交
2114
| 类型             | 说明                             |
2115
| ---------------- | -------------------------------- |
W
wusongqing 已提交
2116
| Promise\<string> | 异步获得surface的Promise返回值。 |
2117

W
wusongqing 已提交
2118
**示例:**
2119 2120 2121

```js
// promise
A
tab  
abc12133 已提交
2122
let surfaceID = null;                                               // 传递给外界的surfaceID
2123
videoRecorder.getInputSurface().then((surfaceId) => {
2124
    console.info('getInputSurface success');
B
bird_j 已提交
2125
    surfaceID = surfaceId;
2126 2127 2128 2129 2130
}).catch((err) => {
    console.info('getInputSurface failed and catch error is ' + err.message);
});
```

2131
### start<sup>9+</sup><a name=videorecorder_start1></a>
2132 2133 2134

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

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

2137
[prepare()](#videorecorder_prepare1)[getInputSurface()](#getinputsurface9)后调用,需要依赖数据源先给surface传递数据。
Z
zengyawen 已提交
2138 2139

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

W
wusongqing 已提交
2141
**参数:**
2142

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

W
wusongqing 已提交
2147
**示例:**
2148 2149 2150

```js
// asyncallback
B
bird_j 已提交
2151
videoRecorder.start((err) => {
2152
    if (err == null) {
B
bird_j 已提交
2153 2154 2155 2156
        console.info('start videorecorder success');
    } else {
        console.info('start videorecorder failed and error is ' + err.message);
    }
2157 2158 2159
});
```

2160
### start<sup>9+</sup><a name=videorecorder_start2></a>
2161 2162 2163

start(): Promise\<void>;

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

2166
[prepare()](#videorecorder_prepare1)[getInputSurface()](#getinputsurface9)后调用,需要依赖数据源先给surface传递数据。
Z
zengyawen 已提交
2167 2168

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

W
wusongqing 已提交
2170
**返回值:**
B
bird_j 已提交
2171

W
wusongqing 已提交
2172
| 类型           | 说明                                  |
2173
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2174
| Promise\<void> | 异步开始视频录制方法的Promise返回值。 |
2175

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

```js
// promise
2180
videoRecorder.start().then(() => {
2181 2182 2183 2184 2185 2186
    console.info('start videorecorder success');
}).catch((err) => {
    console.info('start videorecorder failed and catch error is ' + err.message);
});
```

2187
### pause<sup>9+</sup><a name=videorecorder_pause1></a>
2188 2189 2190

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

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

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

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

W
wusongqing 已提交
2197
**参数:**
2198

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

W
wusongqing 已提交
2203
**示例:**
2204 2205 2206

```js
// asyncallback
B
bird_j 已提交
2207
videoRecorder.pause((err) => {
2208
    if (err == null) {
B
bird_j 已提交
2209 2210 2211 2212
        console.info('pause videorecorder success');
    } else {
        console.info('pause videorecorder failed and error is ' + err.message);
    }
2213 2214 2215
});
```

2216
### pause<sup>9+</sup><a name=videorecorder_pause2></a>
2217 2218 2219

pause(): Promise\<void>;

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

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

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

W
wusongqing 已提交
2226
**返回值:**
B
bird_j 已提交
2227

W
wusongqing 已提交
2228
| 类型           | 说明                                  |
2229
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2230
| Promise\<void> | 异步暂停视频录制方法的Promise返回值。 |
2231

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

```js
// promise
2236
videoRecorder.pause().then(() => {
2237 2238 2239 2240 2241 2242
    console.info('pause videorecorder success');
}).catch((err) => {
    console.info('pause videorecorder failed and catch error is ' + err.message);
});
```

2243
### resume<sup>9+</sup><a name=videorecorder_resume1></a>
2244 2245 2246

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

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

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

W
wusongqing 已提交
2251
**参数:**
2252

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

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

```js
// asyncallback
B
bird_j 已提交
2261
videoRecorder.resume((err) => {
2262
    if (err == null) {
B
bird_j 已提交
2263 2264 2265 2266
        console.info('resume videorecorder success');
    } else {
        console.info('resume videorecorder failed and error is ' + err.message);
    }
2267 2268 2269
});
```

2270
### resume<sup>9+</sup><a name=videorecorder_resume2></a>
2271 2272 2273

resume(): Promise\<void>;

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

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

W
wusongqing 已提交
2278
**返回值:**
B
bird_j 已提交
2279

W
wusongqing 已提交
2280
| 类型           | 说明                                  |
2281
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2282
| Promise\<void> | 异步恢复视频录制方法的Promise返回值。 |
2283

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

```js
// promise
2288
videoRecorder.resume().then(() => {
2289 2290 2291 2292 2293 2294
    console.info('resume videorecorder success');
}).catch((err) => {
    console.info('resume videorecorder failed and catch error is ' + err.message);
});
```

2295
### stop<sup>9+</sup><a name=videorecorder_stop1></a>
2296 2297 2298

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

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

2301
需要重新调用[prepare()](#videorecorder_prepare1)[getInputSurface()](#getinputsurface9)接口才能重新录制。
Z
zengyawen 已提交
2302 2303

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

W
wusongqing 已提交
2305
**参数:**
2306

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

W
wusongqing 已提交
2311
**示例:**
2312 2313 2314

```js
// asyncallback
B
bird_j 已提交
2315
videoRecorder.stop((err) => {
2316
    if (err == null) {
B
bird_j 已提交
2317 2318 2319 2320
        console.info('stop videorecorder success');
    } else {
        console.info('stop videorecorder failed and error is ' + err.message);
    }
2321 2322 2323
});
```

2324
### stop<sup>9+</sup><a name=videorecorder_stop2></a>
2325 2326 2327

stop(): Promise\<void>;

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

2330
需要重新调用[prepare()](#videorecorder_prepare1)[getInputSurface()](#getinputsurface9)接口才能重新录制。
Z
zengyawen 已提交
2331 2332

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

W
wusongqing 已提交
2334
**返回值:**
B
bird_j 已提交
2335

W
wusongqing 已提交
2336
| 类型           | 说明                                  |
2337
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2338
| Promise\<void> | 异步停止视频录制方法的Promise返回值。 |
2339

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

```js
// promise
2344
videoRecorder.stop().then(() => {
2345 2346 2347 2348 2349 2350
    console.info('stop videorecorder success');
}).catch((err) => {
    console.info('stop videorecorder failed and catch error is ' + err.message);
});
```

2351
### release<sup>9+</sup><a name=videorecorder_release1></a>
2352 2353 2354

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

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

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

W
wusongqing 已提交
2359
**参数:**
2360

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

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

```js
// asyncallback
B
bird_j 已提交
2369
videoRecorder.release((err) => {
2370
    if (err == null) {
B
bird_j 已提交
2371 2372 2373 2374
        console.info('release videorecorder success');
    } else {
        console.info('release videorecorder failed and error is ' + err.message);
    }
2375 2376 2377
});
```

2378
### release<sup>9+</sup><a name=videorecorder_release2></a>
2379 2380 2381

release(): Promise\<void>;

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

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

W
wusongqing 已提交
2386
**返回值:**
2387

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

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

```js
// promise
2396
videoRecorder.release().then(() => {
2397 2398 2399 2400 2401 2402
    console.info('release videorecorder success');
}).catch((err) => {
    console.info('release videorecorder failed and catch error is ' + err.message);
});
```

2403
### reset<sup>9+</sup><a name=videorecorder_reset1></a>
2404 2405 2406

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

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

2409
需要重新调用[prepare()](#videorecorder_prepare1)[getInputSurface()](#getinputsurface9)接口才能重新录制。
Z
zengyawen 已提交
2410 2411

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

W
wusongqing 已提交
2413
**参数:**
B
bird_j 已提交
2414

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

W
wusongqing 已提交
2419
**示例:**
2420 2421 2422

```js
// asyncallback
B
bird_j 已提交
2423
videoRecorder.reset((err) => {
2424
    if (err == null) {
B
bird_j 已提交
2425 2426 2427 2428
        console.info('reset videorecorder success');
    } else {
        console.info('reset videorecorder failed and error is ' + err.message);
    }
2429 2430 2431
});
```

2432
### reset<sup>9+</sup><a name=videorecorder_reset2></a>
2433 2434 2435

reset(): Promise\<void>;

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

2438
需要重新调用[prepare()](#videorecorder_prepare1)[getInputSurface()](#getinputsurface9)接口才能重新录制。
Z
zengyawen 已提交
2439 2440

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

W
wusongqing 已提交
2442
**返回值:**
2443

W
wusongqing 已提交
2444
| 类型           | 说明                                  |
2445
| -------------- | ------------------------------------- |
W
wusongqing 已提交
2446
| Promise\<void> | 异步重置视频录制方法的Promise返回值。 |
2447

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

```js
// promise
2452
videoRecorder.reset().then(() => {
2453 2454 2455 2456 2457 2458
    console.info('reset videorecorder success');
}).catch((err) => {
    console.info('reset videorecorder failed and catch error is ' + err.message);
});
```

2459
### on('error')<sup>9+</sup>
2460 2461 2462

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

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

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

W
wusongqing 已提交
2467
**参数:**
B
bird_j 已提交
2468

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

W
wusongqing 已提交
2474
**示例:**
2475 2476

```js
A
tab  
abc12133 已提交
2477
videoRecorder.on('error', (error) => {                                  // 设置'error'事件回调
B
bmeangel 已提交
2478
    console.info(`audio error called, error: ${error}`); 
2479
}
W
wusongqing 已提交
2480
// 当获取videoRecordState接口出错时通过此订阅事件上报
2481
});
2482 2483
```

2484
## VideoRecordState<sup>9+</sup>
2485

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

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

W
wusongqing 已提交
2490 2491 2492 2493 2494 2495 2496 2497
| 名称     | 类型   | 描述                   |
| -------- | ------ | ---------------------- |
| idle     | string | 视频录制空闲。         |
| prepared | string | 视频录制参数设置完成。 |
| playing  | string | 视频正在录制。         |
| paused   | string | 视频暂停录制。         |
| stopped  | string | 视频录制停止。         |
| error    | string | 错误状态。             |
2498

2499
## VideoRecorderConfig<sup>9+</sup>
2500

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

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

Z
zengyawen 已提交
2505 2506
| 名称            | 参数类型                                       | 必填 | 说明                                                         |
| --------------- | ---------------------------------------------- | ---- | ------------------------------------------------------------ |
2507 2508 2509
| audioSourceType | [AudioSourceType](#audiosourcetype9)           | 是   | 视频录制的音频源类型。                                       |
| videoSourceType | [VideoSourceType](#videosourcetype9)           | 是   | 视频录制的视频源类型。                                       |
| profile         | [VideoRecorderProfile](#videorecorderprofile9) | 是   | 视频录制的profile。                                          |
Z
zengyawen 已提交
2510
| rotation        | number                                         | 否   | 录制视频的旋转角度。                                         |
2511
| location        | [Location](#location)                          | 否   | 录制视频的地理位置。                                         |
2512
| url             | string                                         | 是   | 视频输出URL:fd://xx&nbsp;(fd&nbsp;number)<br/>![](figures/zh-cn_image_url.png)|
2513

2514
## AudioSourceType<sup>9+</sup>
2515

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

2518
**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder
Z
zengyawen 已提交
2519 2520 2521 2522 2523

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

2525
## VideoSourceType<sup>9+</sup>
2526

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

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

W
wusongqing 已提交
2531 2532 2533 2534
| 名称                          | 值   | 说明                            |
| ----------------------------- | ---- | ------------------------------- |
| VIDEO_SOURCE_TYPE_SURFACE_YUV | 0    | 输入surface中携带的是raw data。 |
| VIDEO_SOURCE_TYPE_SURFACE_ES  | 1    | 输入surface中携带的是ES data。  |
2535

2536
## VideoRecorderProfile<sup>9+</sup>
2537

W
wusongqing 已提交
2538
视频录制的配置文件。
2539

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

W
wusongqing 已提交
2542 2543 2544 2545
| 名称             | 参数类型                                     | 必填 | 说明             |
| ---------------- | -------------------------------------------- | ---- | ---------------- |
| audioBitrate     | number                                       | 是   | 音频编码比特率。 |
| audioChannels    | number                                       | 是   | 音频采集声道数。 |
Z
zengyawen 已提交
2546
| audioCodec       | [CodecMimeType](#codecmimetype8)             | 是   | 音频编码格式。   |
W
wusongqing 已提交
2547 2548
| audioSampleRate  | number                                       | 是   | 音频采样率。     |
| fileFormat       | [ContainerFormatType](#containerformattype8) | 是   | 文件的容器格式。 |
2549
| videoBitrate     | number                                       | 是   | 视频编码比特率。 |
Z
zengyawen 已提交
2550
| videoCodec       | [CodecMimeType](#codecmimetype8)             | 是   | 视频编码格式。   |
W
wusongqing 已提交
2551 2552
| videoFrameWidth  | number                                       | 是   | 录制视频帧的宽。 |
| videoFrameHeight | number                                       | 是   | 录制视频帧的高。 |
2553
| videoFrameRate   | number                                       | 是   | 录制视频帧率。   |
2554 2555 2556

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

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

2559
**系统能力:** SystemCapability.Multimedia.Media.Core
Z
zengyawen 已提交
2560

W
wusongqing 已提交
2561 2562 2563 2564
| 名称        | 值    | 说明                  |
| ----------- | ----- | --------------------- |
| CFT_MPEG_4  | "mp4" | 视频的容器格式,MP4。 |
| CFT_MPEG_4A | "m4a" | 音频的容器格式,M4A。 |
2565

2566
## Location
2567

W
wusongqing 已提交
2568
视频录制的地理位置。
2569

2570
**系统能力:** SystemCapability.Multimedia.Media.Core
Z
zengyawen 已提交
2571

W
wusongqing 已提交
2572 2573 2574 2575
| 名称      | 参数类型 | 必填 | 说明             |
| --------- | -------- | ---- | ---------------- |
| latitude  | number   | 是   | 地理位置的纬度。 |
| longitude | number   | 是   | 地理位置的经度。 |