1# @ohos.multimedia.media (媒体服务)
2
3> **说明:**
4> 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
5
6媒体子系统为开发者提供一套简单且易于理解的接口,使得开发者能够方便接入系统并使用系统的媒体资源。
7
8媒体子系统包含了音视频相关媒体业务,提供以下常用功能:
9
10- 音视频播放([AVPlayer](#avplayer9)<sup>9+</sup>)
11
12- 音视频录制([AVRecorder](#avrecorder9)<sup>9+</sup>)
13
14- 视频转码([AVTranscoder](#avtranscoder12)<sup>12+</sup>)
15
16- 获取音视频元数据([AVMetadataExtractor](#avmetadataextractor11)<sup>11+</sup>)
17
18- 获取视频缩略图([AVImageGenerator](#avimagegenerator12)<sup>12+</sup>)
19
20## 导入模块
21
22```ts
23import { media } from '@kit.MediaKit';
24```
25
26## media.createAVPlayer<sup>9+</sup>
27
28createAVPlayer(callback: AsyncCallback\<AVPlayer>): void
29
30异步方式创建音视频播放实例,通过注册回调函数获取返回值。
31
32> **说明:**
33>
34> - 推荐单个应用创建的音视频播放实例(即音频、视频、音视频三类相加)不超过16个。<!--Del-->
35> - 可创建的音视频播放实例数量依赖于设备芯片的支持情况,如芯片支持创建的数量少于上述情况,请以芯片规格为准。如RK3568推荐单个应用创建6个以内的音视频播放实例。<!--DelEnd-->
36
37**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
38
39**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
40
41**参数:**
42
43| 参数名   | 类型                                  | 必填 | 说明                                                         |
44| -------- | ------------------------------------- | ---- | ------------------------------------------------------------ |
45| callback | AsyncCallback\<[AVPlayer](#avplayer9)> | 是   | 回调函数。异步返回AVPlayer实例,失败时返回null。可用于音视频播放。 |
46
47**错误码:**
48
49以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
50
51| 错误码ID | 错误信息                       |
52| -------- | ------------------------------ |
53| 5400101  | No memory. Return by callback. |
54
55**示例:**
56
57```ts
58import { BusinessError } from '@kit.BasicServicesKit';
59
60let avPlayer: media.AVPlayer;
61media.createAVPlayer((error: BusinessError, video: media.AVPlayer) => {
62  if (video != null) {
63    avPlayer = video;
64    console.info('Succeeded in creating AVPlayer');
65  } else {
66    console.error(`Failed to create AVPlayer, error message:${error.message}`);
67  }
68});
69```
70
71## media.createAVPlayer<sup>9+</sup>
72
73createAVPlayer(): Promise\<AVPlayer>
74
75异步方式创建音视频播放实例,通过Promise获取返回值。
76
77> **说明:**
78>
79> - 推荐单个应用创建的音视频播放实例(即音频、视频、音视频三类相加)不超过16个。<!--Del-->
80> - 可创建的音视频播放实例数量依赖于设备芯片的支持情况,如芯片支持创建的数量少于上述情况,请以芯片规格为准。如RK3568推荐单个应用创建6个以内的音视频播放实例。<!--DelEnd-->
81
82**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
83
84**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
85
86**返回值:**
87
88| 类型                            | 说明                                                         |
89| ------------------------------- | ------------------------------------------------------------ |
90| Promise\<[AVPlayer](#avplayer9)> | Promise对象。异步返回AVPlayer实例,失败时返回null。可用于音视频播放。 |
91
92**错误码:**
93
94以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
95
96| 错误码ID | 错误信息                      |
97| -------- | ----------------------------- |
98| 5400101  | No memory. Return by promise. |
99
100**示例:**
101
102```ts
103import { BusinessError } from '@kit.BasicServicesKit';
104
105let avPlayer: media.AVPlayer;
106media.createAVPlayer().then((video: media.AVPlayer) => {
107  if (video != null) {
108    avPlayer = video;
109    console.info('Succeeded in creating AVPlayer');
110  } else {
111    console.error('Failed to create AVPlayer');
112  }
113}).catch((error: BusinessError) => {
114  console.error(`Failed to create AVPlayer, error message:${error.message}`);
115});
116```
117
118## media.createAVRecorder<sup>9+</sup>
119
120createAVRecorder(callback: AsyncCallback\<AVRecorder>): void
121
122异步方式创建音视频录制实例。通过注册回调函数获取返回值。
123
124> **说明:**
125>
126> - 可创建的音视频录制实例不能超过2个。
127> - 由于设备共用音频通路,一个设备仅能有一个实例进行音频录制。创建第二个实例录制音频时,将会因为音频通路冲突导致创建失败。
128
129**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
130
131**参数:**
132
133| 参数名   | 类型                                       | 必填 | 说明                                                         |
134| -------- | ------------------------------------------ | ---- | ------------------------------------------------------------ |
135| callback | AsyncCallback\<[AVRecorder](#avrecorder9)> | 是   | 回调函数。异步返回AVRecorder实例,失败时返回null。可用于录制音视频媒体。 |
136
137**错误码:**
138
139以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
140
141| 错误码ID | 错误信息                       |
142| -------- | ------------------------------ |
143| 5400101  | No memory. Return by callback. |
144
145**示例:**
146
147```ts
148import { BusinessError } from '@kit.BasicServicesKit';
149let avRecorder: media.AVRecorder;
150
151media.createAVRecorder((error: BusinessError, recorder: media.AVRecorder) => {
152  if (recorder != null) {
153    avRecorder = recorder;
154    console.info('Succeeded in creating AVRecorder');
155  } else {
156    console.error(`Failed to create AVRecorder, error message:${error.message}`);
157  }
158});
159```
160
161## media.createAVRecorder<sup>9+</sup>
162
163createAVRecorder(): Promise\<AVRecorder>
164
165异步方式创建音视频录制实例。通过Promise获取返回值。
166
167> **说明:**
168>
169> - 可创建的音视频录制实例不能超过2个。
170> - 由于设备共用音频通路,一个设备仅能有一个实例进行音频录制。创建第二个实例录制音频时,将会因为音频通路冲突导致创建失败。
171
172**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
173
174**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
175
176**返回值:**
177
178| 类型                                 | 说明                                                         |
179| ------------------------------------ | ------------------------------------------------------------ |
180| Promise\<[AVRecorder](#avrecorder9)> | Promise对象。异步返回AVRecorder实例,失败时返回null。可用于录制音视频媒体。 |
181
182**错误码:**
183
184以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
185
186| 错误码ID | 错误信息                      |
187| -------- | ----------------------------- |
188| 5400101  | No memory. Return by promise. |
189
190**示例:**
191
192```ts
193import { BusinessError } from '@kit.BasicServicesKit';
194
195let avRecorder: media.AVRecorder;
196media.createAVRecorder().then((recorder: media.AVRecorder) => {
197  if (recorder != null) {
198    avRecorder = recorder;
199    console.info('Succeeded in creating AVRecorder');
200  } else {
201    console.error('Failed to create AVRecorder');
202  }
203}).catch((error: BusinessError) => {
204  console.error(`Failed to create AVRecorder, error message:${error.message}`);
205});
206```
207
208## media.createAVTranscoder<sup>12+</sup>
209
210createAVTranscoder(): Promise\<AVTranscoder>
211
212异步方式创建视频转码实例,通过Promise获取返回值。
213
214> **说明:**
215
216> 可创建的视频转码实例不能超过2个。
217
218**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
219
220**返回值:**
221
222| 类型                            | 说明                                                         |
223| ------------------------------- | ------------------------------------------------------------ |
224| Promise\<[AVTranscoder](#avtranscoder12)> | Promise对象。异步返回AVTranscoder实例,失败时返回null。可用于视频转码。 |
225
226**错误码:**
227
228以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
229
230| 错误码ID | 错误信息                      |
231| -------- | ----------------------------- |
232| 5400101  | No memory. Return by promise. |
233
234**示例:**
235
236```ts
237import { BusinessError } from '@kit.BasicServicesKit';
238
239let avTranscoder: media.AVTranscoder;
240media.createAVTranscoder().then((transcoder: media.AVTranscoder) => {
241  if (transcoder != null) {
242    avTranscoder = transcoder;
243    console.info('Succeeded in creating AVTranscoder');
244  } else {
245    console.error('Failed to create AVTranscoder');
246  }
247}).catch((error: BusinessError) => {
248  console.error(`Failed to create AVTranscoder, error message:${error.message}`);
249});
250```
251
252## media.createAVMetadataExtractor<sup>11+</sup>
253
254createAVMetadataExtractor(callback: AsyncCallback\<AVMetadataExtractor>): void
255
256异步方式创建AVMetadataExtractor实例,通过注册回调函数获取返回值。
257
258**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
259
260**参数:**
261
262| 参数名   | 类型                                  | 必填 | 说明                                                         |
263| -------- | ------------------------------------- | ---- | ------------------------------------------------------------ |
264| callback | AsyncCallback\<[AVMetadataExtractor](#avmetadataextractor11)> | 是   | 回调函数。当创建AVMetadataExtractor实例成功,err为undefined,data为获取到的AVMetadataExtractor实例,否则为错误对象。 |
265
266**错误码:**
267
268以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
269
270| 错误码ID | 错误信息                       |
271| -------- | ------------------------------ |
272| 5400101  | No memory. Returned by callback. |
273
274**示例:**
275
276```ts
277import { BusinessError } from '@kit.BasicServicesKit';
278
279let avMetadataExtractor: media.AVMetadataExtractor;
280media.createAVMetadataExtractor((error: BusinessError, extractor: media.AVMetadataExtractor) => {
281  if (extractor != null) {
282    avMetadataExtractor = extractor;
283    console.info('Succeeded in creating AVMetadataExtractor');
284  } else {
285    console.error(`Failed to create AVMetadataExtractor, error message:${error.message}`);
286  }
287});
288```
289
290## media.createAVMetadataExtractor<sup>11+</sup>
291
292createAVMetadataExtractor(): Promise\<AVMetadataExtractor>
293
294异步方式创建AVMetadataExtractor实例,通过Promise获取返回值。
295
296**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
297
298**错误码:**
299
300以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
301
302| 错误码ID | 错误信息                       |
303| -------- | ------------------------------ |
304| 5400101  | No memory. Returned by promise. |
305
306**示例:**
307
308```ts
309import { BusinessError } from '@kit.BasicServicesKit';
310
311let avMetadataExtractor: media.AVMetadataExtractor;
312media.createAVMetadataExtractor().then((extractor: media.AVMetadataExtractor) => {
313  if (extractor != null) {
314    avMetadataExtractor = extractor;
315    console.info('Succeeded in creating AVMetadataExtractor');
316  } else {
317    console.error(`Failed to create AVMetadataExtractor`);
318  }
319}).catch((error: BusinessError) => {
320  console.error(`Failed to create AVMetadataExtractor, error message:${error.message}`);
321});
322```
323
324## media.createSoundPool<sup>10+</sup>
325
326createSoundPool(maxStreams: number, audioRenderInfo: audio.AudioRendererInfo, callback: AsyncCallback\<SoundPool>): void
327
328创建音频池实例,使用callback方式异步获取返回值。
329
330**系统能力:** SystemCapability.Multimedia.Media.SoundPool
331
332**参数:**
333
334| 参数名   | 类型                                            | 必填 | 说明                                                         |
335| -------- | ----------------------------------------------- | ---- | ------------------------------------------------------------ |
336| maxStreams | number | 是   | soundPool实例的最大播放的流数 |
337| audioRenderInfo | [audio.AudioRendererInfo](../apis-audio-kit/js-apis-audio.md#audiorendererinfo8)  | 是   | 音频播放参数信息。其中audioRenderInfo中的参数usage取值为STREAM_USAGE_UNKNOWN,STREAM_USAGE_MUSIC,STREAM_USAGE_MOVIE,STREAM_USAGE_AUDIOBOOK时,SoundPool播放短音时为混音模式,不会打断其他音频播放。 |
338| callback | AsyncCallback<[SoundPool](js-apis-inner-multimedia-soundPool.md)> | 是   | 回调函数。异步返回SoundPool实例,失败时返回null。用于音频池实例的加载播放功能。 |
339
340**错误码:**
341
342以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
343
344| 错误码ID | 错误信息                       |
345| -------- | ------------------------------ |
346| 5400101  | No memory. Return by callback. |
347
348**示例:**
349
350```js
351import { audio } from '@kit.AudioKit';
352
353let soundPool: media.SoundPool;
354let audioRendererInfo: audio.AudioRendererInfo = {
355  usage : audio.StreamUsage.STREAM_USAGE_MUSIC,
356  rendererFlags : 0
357}
358
359media.createSoundPool(5, audioRendererInfo, (error, soundPool_: media.SoundPool) => {
360  if (error) {
361    console.error(`Failed to createSoundPool`)
362    return;
363  } else {
364    soundPool = soundPool_;
365    console.info(`Succeeded in createSoundPool`)
366  }
367});
368```
369
370## media.createSoundPool<sup>10+</sup>
371
372createSoundPool(maxStreams: number, audioRenderInfo: audio.AudioRendererInfo): Promise\<SoundPool>
373
374创建音频池实例,通过Promise获取返回值。
375
376**系统能力:** SystemCapability.Multimedia.Media.SoundPool
377
378**参数:**
379
380| 参数名   | 类型                                            | 必填 | 说明                                                         |
381| -------- | ----------------------------------------------- | ---- | ------------------------------------------------------------ |
382| maxStreams | number | 是   | soundPool实例的最大播放的流数 |
383| audioRenderInfo | [audio.AudioRendererInfo](../apis-audio-kit/js-apis-audio.md#audiorendererinfo8)  | 是   | 音频播放参数信息 |
384
385**返回值:**
386
387| 类型                                      | 说明                                                         |
388| ----------------------------------------- | ------------------------------------------------------------ |
389| Promise<[SoundPool](js-apis-inner-multimedia-soundPool.md)> | Promise对象。异步返回SoundPool实例,失败时返回null。用于音频池实例的加载播放功能。 |
390
391**错误码:**
392
393以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
394
395| 错误码ID | 错误信息                      |
396| -------- | ----------------------------- |
397| 5400101  | No memory. Return by promise. |
398
399**示例:**
400
401```js
402import { audio } from '@kit.AudioKit';
403import { BusinessError } from '@kit.BasicServicesKit';
404
405let soundPool: media.SoundPool;
406let audioRendererInfo: audio.AudioRendererInfo = {
407  usage : audio.StreamUsage.STREAM_USAGE_MUSIC,
408  rendererFlags : 0
409}
410
411media.createSoundPool(5, audioRendererInfo).then((soundpool_: media.SoundPool) => {
412  if (soundpool_ != null) {
413    soundPool = soundpool_;
414    console.info('Succceeded in creating SoundPool');
415  } else {
416    console.error('Failed to create SoundPool');
417  }
418}, (error: BusinessError) => {
419  console.error(`soundpool catchCallback, error message:${error.message}`);
420});
421```
422
423## media.createAVScreenCaptureRecorder<sup>12+</sup>
424
425createAVScreenCaptureRecorder(): Promise\<AVScreenCaptureRecorder>
426
427创建屏幕录制实例,通过Promise获取返回值。
428
429**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
430
431**返回值:**
432
433| 类型                                                         | 说明                                                         |
434| ------------------------------------------------------------ | ------------------------------------------------------------ |
435| Promise\<[AVScreenCaptureRecorder](#avscreencapturerecorder12)> | Promise对象。异步返回AVScreenCaptureRecorder实例,失败时返回null。可用于进行屏幕录制。 |
436
437**错误码:**
438
439| 错误码ID | 错误信息                       |
440| -------- | ------------------------------ |
441| 5400101  | No memory. Return by promise. |
442
443**示例:**
444
445```ts
446import { BusinessError } from '@kit.BasicServicesKit';
447
448let avScreenCaptureRecorder: media.AVScreenCaptureRecorder;
449media.createAVScreenCaptureRecorder().then((captureRecorder: media.AVScreenCaptureRecorder) => {
450  if (captureRecorder != null) {
451    avScreenCaptureRecorder = captureRecorder;
452    console.info('Succeeded in createAVScreenCaptureRecorder');
453  } else {
454    console.error('Failed to createAVScreenCaptureRecorder');
455  }
456}).catch((error: BusinessError) => {
457  console.error(`createAVScreenCaptureRecorder catchCallback, error message:${error.message}`);
458});
459```
460
461## AVErrorCode<sup>9+</sup>
462
463[媒体错误码](errorcode-media.md)类型枚举
464
465**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
466
467**系统能力:** SystemCapability.Multimedia.Media.Core
468
469| 名称                                  | 值      | 说明                                 |
470| :------------------------------------ | ------- | ------------------------------------ |
471| AVERR_OK                              | 0       | 表示操作成功。                       |
472| AVERR_NO_PERMISSION                   | 201     | 表示无权限执行此操作。               |
473| AVERR_INVALID_PARAMETER               | 401     | 表示传入入参无效。                   |
474| AVERR_UNSUPPORT_CAPABILITY            | 801     | 表示当前版本不支持该API能力。        |
475| AVERR_NO_MEMORY                       | 5400101 | 表示系统内存不足或服务数量达到上限。 |
476| AVERR_OPERATE_NOT_PERMIT              | 5400102 | 表示当前状态不允许或无权执行此操作。 |
477| AVERR_IO                              | 5400103 | 表示数据流异常信息。                 |
478| AVERR_TIMEOUT                         | 5400104 | 表示系统或网络响应超时。             |
479| AVERR_SERVICE_DIED                    | 5400105 | 表示服务进程死亡。                   |
480| AVERR_UNSUPPORT_FORMAT                | 5400106 | 表示不支持当前媒体资源的格式。       |
481| AVERR_AUDIO_INTERRUPTED<sup>11+</sup> | 5400107 | 表示音频焦点被抢占                   |
482
483## MediaType<sup>8+</sup>
484
485媒体类型枚举。
486
487**系统能力:** SystemCapability.Multimedia.Media.Core
488
489| 名称           | 值                    | 说明                 |
490| -------------- | --------------------- | ------------------- |
491| MEDIA_TYPE_AUD | 0                     | 表示音频。 <br> **原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。           |
492| MEDIA_TYPE_VID | 1                     | 表示视频。  <br> **原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。          |
493| MEDIA_TYPE_SUBTITLE<sup>12+</sup> | 2    | 表示字幕。 <br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
494
495## CodecMimeType<sup>8+</sup>
496
497Codec MIME类型枚举。
498
499**系统能力:** SystemCapability.Multimedia.Media.Core
500
501| 名称         | 值                    | 说明                     |
502| ------------ | --------------------- | ------------------------ |
503| VIDEO_H263   | 'video/h263'          | 表示视频/h263类型。      |
504| VIDEO_AVC    | 'video/avc'           | 表示视频/avc类型。       |
505| VIDEO_MPEG2  | 'video/mpeg2'         | 表示视频/mpeg2类型。     |
506| VIDEO_MPEG4  | 'video/mp4v-es'         | 表示视频/mpeg4类型。     |
507| VIDEO_VP8    | 'video/x-vnd.on2.vp8' | 表示视频/vp8类型。       |
508| VIDEO_HEVC<sup>11+</sup>   | 'video/hevc'          | 表示视频/H265类型。|
509| AUDIO_AAC    | 'audio/mp4a-latm'     | 表示音频/mp4a-latm类型。 <br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
510| AUDIO_VORBIS | 'audio/vorbis'        | 表示音频/vorbis类型。    |
511| AUDIO_FLAC   | 'audio/flac'          | 表示音频/flac类型。      |
512| AUDIO_MP3<sup>12+</sup>   | 'audio/mpeg'          | 表示音频/mpeg类型。      |
513| AUDIO_G711MU<sup>12+</sup>   | 'audio/g711mu'     | 表示音频/G711-mulaw类型。 |
514
515## MediaDescriptionKey<sup>8+</sup>
516
517媒体信息描述枚举。
518
519**系统能力:** SystemCapability.Multimedia.Media.Core
520
521| 名称                     | 值              | 说明                                                         |
522| ------------------------ | --------------- | ------------------------------------------------------------ |
523| MD_KEY_TRACK_INDEX       | 'track_index'   | 表示轨道序号,其对应键值类型为number。 <br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
524| MD_KEY_TRACK_TYPE        | 'track_type'    | 表示轨道类型,其对应键值类型为number,参考[MediaType](#mediatype8)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
525| MD_KEY_CODEC_MIME        | 'codec_mime'    | 表示codec_mime类型,其对应键值类型为string。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
526| MD_KEY_DURATION          | 'duration'      | 表示媒体时长,其对应键值类型为number,单位为毫秒(ms)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
527| MD_KEY_BITRATE           | 'bitrate'       | 表示比特率,其对应键值类型为number,单位为比特率(bps)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
528| MD_KEY_WIDTH             | 'width'         | 表示视频宽度,其对应键值类型为number,单位为像素(px)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
529| MD_KEY_HEIGHT            | 'height'        | 表示视频高度,其对应键值类型为number,单位为像素(px)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
530| MD_KEY_FRAME_RATE        | 'frame_rate'    | 表示视频帧率,其对应键值类型为number,单位为每100秒的帧数。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
531| MD_KEY_AUD_CHANNEL_COUNT | 'channel_count' | 表示声道数,其对应键值类型为number。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
532| MD_KEY_AUD_SAMPLE_RATE   | 'sample_rate'   | 表示采样率,其对应键值类型为number,单位为赫兹(Hz)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
533| MD_KEY_AUD_SAMPLE_DEPTH<sup>12+</sup>  | 'sample_depth'  | 表示位深,其对应键值类型为number,单位为位(bit)。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
534| MD_KEY_TRACK_NAME<sup>12+</sup>  | 'track_name'  | 表示track名称,其对应键值类型为string。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
535| MD_KEY_HDR_TYPE<sup>12+</sup>  | 'hdr_type'  | 表示视频轨类型,其对应键值类型为string。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
536
537## PlaybackInfoKey<sup>12+</sup>
538
539播放信息描述枚举。
540
541**系统能力:** SystemCapability.Multimedia.Media.Core
542
543| 名称                     | 值              | 说明                                                         |
544| ------------------------ | --------------- | ------------------------------------------------------------ |
545| SERVER_IP_ADDRESS        | 'server_ip_address'    | 表示服务器IP地址,其对应键值类型为string。  |
546| AVG_DOWNLOAD_RATE        | 'average_download_rate'| 表示平均下载速率,其对应键值类型为number,单位为比特率(bps)。 |
547| DOWNLOAD_RATE            | 'download_rate'        | 表示1s的下载速率,其对应键值类型为number,单位为比特率(bps)。|
548| IS_DOWNLOADING           | 'is_downloading'       | 表示下载状态,1表示在下载状态,0表示非下载状态(下载完成),其对应键值类型为number。|
549| BUFFER_DURATION          | 'buffer_duration'      | 表示缓存数据的可播放时长,其对应键值类型为number,单位为秒(s)。|
550
551## BufferingInfoType<sup>8+</sup>
552
553缓存事件类型枚举。
554
555**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
556
557**系统能力:** SystemCapability.Multimedia.Media.Core
558
559| 名称              | 值   | 说明                             |
560| ----------------- | ---- | -------------------------------- |
561| BUFFERING_START   | 1    | 表示开始缓存。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                   |
562| BUFFERING_END     | 2    | 表示结束缓存。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                   |
563| BUFFERING_PERCENT | 3    | 表示缓存百分比。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                 |
564| CACHED_DURATION   | 4    | 表示缓存时长,单位为毫秒(ms)。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。  |
565
566## StateChangeReason<sup>9+</sup>
567
568表示播放或录制实例状态机切换原因的枚举,伴随state一起上报。
569
570**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
571
572**系统能力:** SystemCapability.Multimedia.Media.Core
573
574| 名称       | 值   | 说明                                                         |
575| ---------- | ---- | ------------------------------------------------------------ |
576| USER       | 1    | 表示用户行为造成的状态切换,由用户或客户端主动调用接口产生。 |
577| BACKGROUND | 2    | 表示后台系统行为造成的状态切换,比如应用未注册播控中心权限,退到后台时被系统强制暂停或停止。 |
578
579## AVPlayer<sup>9+</sup>
580
581播放管理类,用于管理和播放媒体资源。在调用AVPlayer的方法前,需要先通过[createAVPlayer()](#mediacreateavplayer9)构建一个AVPlayer实例。
582
583Audio/Video播放demo可参考:[音频播放开发指导](../../media/media/using-avplayer-for-playback.md)、[视频播放开发指导](../../media/media/video-playback.md)。
584
585> **说明:**
586>
587> 在使用AVPlayer实例的方法时,建议开发者注册相关回调,主动获取当前状态变化。
588> - [on('stateChange')](#onstatechange9):监听播放状态机AVPlayerState切换。
589> - [on('error')](#onerror9):监听错误事件。
590
591### 属性
592
593**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
594
595| 名称                                                | 类型                                                         | 只读 | 可选 | 说明                                                         |
596| --------------------------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
597| url<sup>9+</sup>                                    | string                                                       | 否   | 是   | 媒体URL,只允许在**idle**状态下设置。<br/>支持的视频格式(mp4、mpeg-ts、mkv)。<br>支持的音频格式(m4a、aac、mp3、ogg、wav、flac、amr)。<br/>**支持路径示例**:<br>1. fd类型播放:fd://xx。<br>![](figures/zh-cn_image_url.png)<br>2. http网络播放: http\://xx。<br/>3. https网络播放: https\://xx。<br/>4. hls网络播放路径:http\://xx或者https\://xx。<br>**说明:**<br>- 设置网络播放路径,需[声明权限](../../security/AccessToken/declare-permissions.md):[ohos.permission.INTERNET](../../security/AccessToken/permissions-for-all.md#ohospermissioninternet),相关错误码: [201](../errorcode-universal.md)。<br>- 从API version 11开始不支持webm。<br> - 将资源句柄(fd)传递给 AVPlayer 实例之后,请不要通过该资源句柄做其他读写操作,包括但不限于将同一个资源句柄传递给多个 AVPlayer / AVMetadataExtractor / AVImageGenerator / AVTranscoder。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致媒体播放器数据获取异常。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
598| fdSrc<sup>9+</sup>                                  | [AVFileDescriptor](#avfiledescriptor9)                       | 否   | 是   | 媒体文件描述,只允许在**idle**状态下设置。<br/>使用场景:应用中的媒体资源被连续存储在同一个文件中。<br/>支持的视频格式(mp4、mpeg-ts、mkv)。<br>支持的音频格式(m4a、aac、mp3、ogg、wav、flac、amr)。<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>**说明:**<br>从API version 11开始不支持webm。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
599| dataSrc<sup>10+</sup>                               | [AVDataSrcDescriptor](#avdatasrcdescriptor10)                | 否   | 是   | 流式媒体资源描述,只允许在**idle**状态下设置。<br/>使用场景:应用播放从远端下载到本地的文件,在应用未下载完整音视频资源时,提前播放已获取的资源文件。<br/>支持的视频格式(mp4、mpeg-ts、mkv)。<br>支持的音频格式(m4a、aac、mp3、ogg、wav、flac、amr)。<br/>**使用示例**:<br/>假设用户正在从远端服务器获取音视频媒体文件,希望下载到本地的同时播放已经下载好的部分: <br/>1.用户需要获取媒体文件的总大小size(单位为字节),获取不到时设置为-1。<br/>2.用户需要实现回调函数func用于填写数据,如果size = -1,则func形式为:func(buffer: ArrayBuffer, length: number),此时播放器只会按照顺序获取数据;否则func形式为:func(buffer: ArrayBuffer, length: number, pos: number),播放器会按需跳转并获取数据。<br/>3.用户设置AVDataSrcDescriptor {fileSize = size, callback = func}。<br/>**注意事项**:<br/>如果播放的是mp4/m4a格式用户需要保证moov字段(媒体信息字段)在mdat字段(媒体数据字段)之前,或者moov之前的字段小于10M,否则会导致解析失败无法播放。<br>**说明:**<br>从API version 11开始不支持webm。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
600| surfaceId<sup>9+</sup>                              | string                                                       | 否   | 是   | 视频窗口ID,默认无窗口。<br/>支持在**initialized**状态下设置。<br/>支持在**prepared**/**playing**/**paused**/**completed**/**stopped**状态下重新设置,重新设置时确保已经在**initialized**状态下进行设置,否则重新设置失败,重新设置后视频播放在新的窗口渲染。<br/>使用场景:视频播放的窗口渲染,纯音频播放不用设置。<br/>**使用示例**:<br/>[通过XComponent创建surfaceId](../apis-arkui/arkui-ts/ts-basic-components-xcomponent.md#getxcomponentsurfaceid)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
601| loop<sup>9+</sup>                                   | boolean                                                      | 否   | 否   | 视频循环播放属性,默认'false',设置为'true'表示循环播放,动态属性。<br/>只允许在**prepared**/**playing**/**paused**/**completed**状态下设置。<br/>直播场景不支持loop设置。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
602| videoScaleType<sup>9+</sup>                         | [VideoScaleType](#videoscaletype9)                           | 否   | 是   | 视频缩放模式,默认VIDEO_SCALE_TYPE_FIT,动态属性。<br/>只允许在**prepared**/**playing**/**paused**/**completed**状态下设置。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
603| audioInterruptMode<sup>9+</sup>                     | [audio.InterruptMode](../apis-audio-kit/js-apis-audio.md#interruptmode9)       | 否   | 是   | 音频焦点模型,默认SHARE_MODE,动态属性。<br/>只允许在**prepared**/**playing**/**paused**/**completed**状态下设置。<br/>在第一次调用[play()](#play9)之前设置, 以便此后中断模式生效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
604| audioRendererInfo<sup>10+</sup>                     | [audio.AudioRendererInfo](../apis-audio-kit/js-apis-audio.md#audiorendererinfo8) | 否   | 是   | 设置音频渲染信息。若媒体源包含视频,则usage默认值为STREAM_USAGE_MOVIE,否则usage默认值为STREAM_USAGE_MUSIC。rendererFlags默认值为0。若默认usage不满足需求,则须主动配置[audio.AudioRendererInfo](../apis-audio-kit/js-apis-audio.md#audiorendererinfo8)。<br/>只允许在**initialized**状态下设置。<br/>在第一次调用[prepare()](#prepare9)之前设置,以便音频渲染器信息在之后生效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
605| audioEffectMode<sup>10+</sup>                       | [audio.AudioEffectMode](../apis-audio-kit/js-apis-audio.md#audioeffectmode10)  | 否   | 是   | 设置音频音效模式,默认值为EFFECT_DEFAULT,动态属性。audioRendererInfo的usage变动时会恢复为默认值,只允许在**prepared**/**playing**/**paused**/**completed**状态下设置。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
606| state<sup>9+</sup>                                  | [AVPlayerState](#avplayerstate9)                             | 是   | 否   | 音视频播放的状态,全状态有效,可查询参数。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                  |
607| currentTime<sup>9+</sup>                            | number                                                       | 是   | 否   | 视频的当前播放位置,单位为毫秒(ms),可查询参数。<br/>返回为(-1)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。<br/>直播场景默认返回(-1)。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
608| duration<sup>9+</sup> | number                                                       | 是   | 否   | 视频时长,单位为毫秒(ms),可查询参数。<br/>返回为(-1)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。<br/>直播场景默认返回(-1)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
609| width<sup>9+</sup>                                  | number                                                       | 是   | 否   | 视频宽,单位为像素(px),可查询参数。<br/>返回为(0)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
610| height<sup>9+</sup>                                 | number                                                       | 是   | 否   | 视频高,单位为像素(px),可查询参数。<br/>返回为(0)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
611
612### on('stateChange')<sup>9+</sup>
613
614on(type: 'stateChange', callback: OnAVPlayerStateChangeHandle): void
615
616监听播放状态机AVPlayerState切换的事件。
617
618**原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。
619
620**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
621
622**参数:**
623
624| 参数名   | 类型     | 必填 | 说明                                                         |
625| -------- | -------- | ---- | ------------------------------------------------------------ |
626| type     | string   | 是   | 状态机切换事件回调类型,支持的事件:'stateChange',用户操作和系统都会触发此事件。 |
627| callback | [OnAVPlayerStateChangeHandle](#onavplayerstatechangehandle12) | 是   | 状态机切换事件回调方法。 |
628
629**示例:**
630
631```ts
632avPlayer.on('stateChange', async (state: string, reason: media.StateChangeReason) => {
633  switch (state) {
634    case 'idle':
635      console.info('state idle called');
636      break;
637    case 'initialized':
638      console.info('initialized prepared called');
639      break;
640    case 'prepared':
641      console.info('state prepared called');
642      break;
643    case 'playing':
644      console.info('state playing called');
645      break;
646    case 'paused':
647      console.info('state paused called');
648      break;
649    case 'completed':
650      console.info('state completed called');
651      break;
652    case 'stopped':
653      console.info('state stopped called');
654      break;
655    case 'released':
656      console.info('state released called');
657      break;
658    case 'error':
659      console.info('state error called');
660      break;
661    default:
662      console.info('unknown state :' + state);
663      break;
664  }
665})
666```
667
668### off('stateChange')<sup>9+</sup>
669
670off(type: 'stateChange', callback?: OnAVPlayerStateChangeHandle): void
671
672取消监听播放状态机[AVPlayerState](#avplayerstate9)切换的事件。
673
674**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
675
676**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
677
678**参数:**
679
680| 参数名 | 类型   | 必填 | 说明                                                  |
681| ------ | ------ | ---- | ----------------------------------------------------- |
682| type   | string | 是   | 状态机切换事件回调类型,取消注册的事件:'stateChange' |
683| callback   | [OnAVPlayerStateChangeHandle](#onavplayerstatechangehandle12) | 否   | 状态机切换事件回调方法。<br/>从API version 12开始支持此参数。 |
684
685**示例:**
686
687```ts
688avPlayer.off('stateChange')
689```
690
691### on('error')<sup>9+</sup>
692
693on(type: 'error', callback: ErrorCallback): void
694
695监听[AVPlayer](#avplayer9)的错误事件,该事件仅用于错误提示,不需要用户停止播控动作。如果此时[AVPlayerState](#avplayerstate9)也切至error状态,用户需要通过[reset()](#reset9)或者[release()](#release9)退出播放操作。
696
697**原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。
698
699**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
700
701**参数:**
702
703| 参数名   | 类型     | 必填 | 说明                                                         |
704| -------- | -------- | ---- | ------------------------------------------------------------ |
705| type     | string   | 是   | 错误事件回调类型,支持的事件:'error',用户操作和系统都会触发此事件。 |
706| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 错误事件回调方法,使用播放器的过程中发生错误,会提供错误码ID和错误信息。 |
707
708**错误码:**
709
710以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
711
712| 错误码ID | 错误信息              |
713| -------- | --------------------- |
714| 201      | Permission denied     |
715| 401      | The parameter check failed. |
716| 801      | Capability not supported. |
717| 5400101  | No memory. |
718| 5400102  | Operation not allowed.|
719| 5400103  | I/O error             |
720| 5400104  | Time out              |
721| 5400105  | Service died.         |
722| 5400106  | Unsupport format.     |
723
724**示例:**
725
726```ts
727import { BusinessError } from '@kit.BasicServicesKit';
728
729avPlayer.on('error', (error: BusinessError) => {
730  console.info('error happened,and error message is :' + error.message)
731  console.info('error happened,and error code is :' + error.code)
732})
733```
734
735### off('error')<sup>9+</sup>
736
737off(type: 'error', callback?: ErrorCallback): void
738
739取消监听播放的错误事件。
740
741**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
742
743**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
744
745**参数:**
746
747| 参数名 | 类型   | 必填 | 说明                                      |
748| ------ | ------ | ---- | ----------------------------------------- |
749| type   | string | 是   | 错误事件回调类型,取消注册的事件:'error' |
750| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否   | 错误事件回调方法,使用播放器的过程中发生错误,会提供错误码ID和错误信息。<br/>从API version 12开始支持此参数。 |
751
752**示例:**
753
754```ts
755avPlayer.off('error')
756```
757
758### setMediaSource<sup>12+</sup>
759
760setMediaSource(src:MediaSource, strategy?: PlaybackStrategy): Promise\<void>
761
762流媒体预下载资源设置,下载url对应的流媒体数据,并暂存在内存中。[视频播放开发指导](../../media/media/video-playback.md)。通过Promise获取返回值。
763
764**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
765
766**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
767
768**参数:**
769
770| 参数名   | 类型     | 必填 | 说明                 |
771| -------- | -------- | ---- | -------------------- |
772| src | [MediaSource](#mediasource12) | 是   | 流媒体预下载媒体来源。 |
773| strategy | [PlaybackStrategy](#playbackstrategy12) | 否   | 流媒体预下载播放策略。 |
774
775**返回值:**
776
777| 类型           | 说明                                       |
778| -------------- | ------------------------------------------ |
779| Promise\<void> | Promise对象。无返回结果的Promise对象。 |
780
781**错误码:**
782
783以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
784
785| 错误码ID | 错误信息                                  |
786| -------- | ----------------------------------------- |
787| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.      |
788| 5400102  | Operation not allowed. Return by promise. |
789
790**示例:**
791
792```ts
793import { media } from '@kit.MediaKit';
794
795let player = await media.createAVPlayer();
796let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"};
797let mediaSource : media.MediaSource = media.createMediaSourceWithUrl("http://xxx",  headers);
798let playStrategy : media.PlaybackStrategy = {preferredWidth: 1, preferredHeight: 2, preferredBufferDuration: 3, preferredHdr: false};
799player.setMediaSource(mediaSource, playStrategy);
800```
801
802### setPlaybackStrategy<sup>12+</sup>
803
804setPlaybackStrategy(strategy: PlaybackStrategy): Promise\<void>
805
806设置播放策略,只能在initialized状态下调用。
807
808**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
809
810**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
811
812**参数:**
813
814| 参数名   | 类型     | 必填 | 说明                 |
815| -------- | -------- | ---- | -------------------- |
816| strategy | [PlaybackStrategy](#playbackstrategy12) | 是   | 播放策略。 |
817
818**返回值:**
819
820| 类型           | 说明                                  |
821| -------------- | ------------------------------------ |
822| Promise\<void> | Promise对象。无返回结果的Promise对象。 |
823
824**错误码:**
825
826以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
827
828| 错误码ID | 错误信息                                  |
829| -------- | ----------------------------------------- |
830| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed. |
831| 5400102  | Operation not allowed. Return by promise. |
832
833**示例:**
834
835```ts
836import { media } from '@kit.MediaKit';
837
838let player = await media.createAVPlayer();
839let fileDescriptor = await context.resourceManager.getRawFd('xxx.mp4')
840player.fdSrc = fileDescriptor
841let playStrategy : media.PlaybackStrategy = {preferredWidth: 1, preferredHeight: 2, preferredBufferDuration: 3,
842  preferredHdr: false, mutedMediaType: media.MediaType.MEDIA_TYPE_AUD};
843player.setPlaybackStrategy(playStrategy);
844```
845
846### prepare<sup>9+</sup>
847
848prepare(callback: AsyncCallback\<void>): void
849
850准备播放音频/视频,需在[stateChange](#onstatechange9)事件成功触发至initialized状态后,才能调用。使用callback方式异步获取返回值。
851
852**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
853
854**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
855
856**参数:**
857
858| 参数名   | 类型     | 必填 | 说明                 |
859| -------- | -------- | ---- | -------------------- |
860| callback | AsyncCallback\<void> | 是   | 准备播放的回调方法。 |
861
862**错误码:**
863
864以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
865
866| 错误码ID | 错误信息                                   |
867| -------- | ------------------------------------------ |
868| 5400102  | Operation not allowed. Return by callback. |
869| 5400106  | Unsupport format. Return by callback.      |
870
871**示例:**
872
873```ts
874import { BusinessError } from '@kit.BasicServicesKit';
875
876avPlayer.prepare((err: BusinessError) => {
877  if (err) {
878    console.error('Failed to prepare,error message is :' + err.message)
879  } else {
880    console.info('Succeeded in preparing');
881  }
882})
883```
884
885### prepare<sup>9+</sup>
886
887prepare(): Promise\<void>
888
889准备播放音频/视频,需在[stateChange](#onstatechange9)事件成功触发至initialized状态后,才能调用。通过Promise获取返回值。
890
891**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
892
893**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
894
895**返回值:**
896
897| 类型           | 说明                      |
898| -------------- | ------------------------- |
899| Promise\<void> | 准备播放的Promise返回值。 |
900
901**错误码:**
902
903以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
904
905| 错误码ID | 错误信息                                  |
906| -------- | ----------------------------------------- |
907| 5400102  | Operation not allowed. Return by promise. |
908| 5400106  | Unsupport format. Return by promise.      |
909
910**示例:**
911
912```ts
913import { BusinessError } from '@kit.BasicServicesKit';
914
915avPlayer.prepare().then(() => {
916  console.info('Succeeded in preparing');
917}, (err: BusinessError) => {
918  console.error('Failed to prepare,error message is :' + err.message)
919})
920```
921
922### setMediaMuted<sup>12+</sup>
923
924setMediaMuted(mediaType: MediaType,  muted: boolean ): Promise\<void>
925
926设置音频静音/取消音频静音。只能在prepared/playing/paused/completed状态下调用。仅支持设置mediaType为音频格式。
927
928**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
929
930**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
931
932**参数:**
933
934| 参数名   | 类型     | 必填 | 说明                 |
935| -------- | -------- | ---- | -------------------- |
936| mediaType | [MediaType](#mediatype8) | 是   | 播放策略。 |
937| muted | boolean | 是   | 是否静音播放。 |
938
939**返回值:**
940
941| 类型           | 说明                      |
942| -------------- | ------------------------- |
943| Promise\<void> | 准备播放的Promise返回值。 |
944
945**错误码:**
946
947以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
948
949| 错误码ID | 错误信息 |
950| -------- | ----------------------------------------- |
951| 401 | The parameter check failed. Return by promise. |
952| 5400102 | Operation not allowed. Return by promise. |
953
954**示例:**
955
956```ts
957import { BusinessError } from '@kit.BasicServicesKit';
958
959avPlayer.prepare().then(() => {
960  console.info('Succeeded in preparing');
961  avPlayer.setMediaMuted(media.MediaType.MEDIA_TYPE_AUD, true)
962}, (err: BusinessError) => {
963  console.error('Failed to prepare,error message is :' + err.message)
964})
965```
966
967### play<sup>9+</sup>
968
969play(callback: AsyncCallback\<void>): void
970
971开始播放音视频资源,只能在prepared/paused/completed状态调用。使用callback方式异步获取返回值。
972
973**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
974
975**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
976
977**参数:**
978
979| 参数名   | 类型     | 必填 | 说明                 |
980| -------- | -------- | ---- | -------------------- |
981| callback | AsyncCallback\<void> | 是   | 开始播放的回调方法。 |
982
983**错误码:**
984
985以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
986
987| 错误码ID | 错误信息                                   |
988| -------- | ------------------------------------------ |
989| 5400102  | Operation not allowed. Return by callback. |
990
991**示例:**
992
993```ts
994import { BusinessError } from '@kit.BasicServicesKit';
995
996avPlayer.play((err: BusinessError) => {
997  if (err) {
998    console.error('Failed to play,error message is :' + err.message)
999  } else {
1000    console.info('Succeeded in playing');
1001  }
1002})
1003```
1004
1005### play<sup>9+</sup>
1006
1007play(): Promise\<void>
1008
1009开始播放音视频资源,只能在prepared/paused/completed状态调用。通过Promise获取返回值。
1010
1011**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1012
1013**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1014
1015**返回值:**
1016
1017| 类型           | 说明                      |
1018| -------------- | ------------------------- |
1019| Promise\<void> | 开始播放的Promise返回值。 |
1020
1021**错误码:**
1022
1023以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1024
1025| 错误码ID | 错误信息                                  |
1026| -------- | ----------------------------------------- |
1027| 5400102  | Operation not allowed. Return by promise. |
1028
1029**示例:**
1030
1031```ts
1032import { BusinessError } from '@kit.BasicServicesKit';
1033
1034avPlayer.play().then(() => {
1035  console.info('Succeeded in playing');
1036}, (err: BusinessError) => {
1037  console.error('Failed to play,error message is :' + err.message)
1038})
1039```
1040
1041### pause<sup>9+</sup>
1042
1043pause(callback: AsyncCallback\<void>): void
1044
1045暂停播放音视频资源,只能在playing状态调用。使用callback方式异步获取返回值。
1046
1047**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1048
1049**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1050
1051**参数:**
1052
1053| 参数名   | 类型     | 必填 | 说明                 |
1054| -------- | -------- | ---- | -------------------- |
1055| callback | AsyncCallback\<void> | 是   | 暂停播放的回调方法。 |
1056
1057**错误码:**
1058
1059以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1060
1061| 错误码ID | 错误信息                                   |
1062| -------- | ------------------------------------------ |
1063| 5400102  | Operation not allowed. Return by callback. |
1064
1065**示例:**
1066
1067```ts
1068import { BusinessError } from '@kit.BasicServicesKit';
1069
1070avPlayer.pause((err: BusinessError) => {
1071  if (err) {
1072    console.error('Failed to pause,error message is :' + err.message)
1073  } else {
1074    console.info('Succeeded in pausing');
1075  }
1076})
1077```
1078
1079### pause<sup>9+</sup>
1080
1081pause(): Promise\<void>
1082
1083暂停播放音视频资源,只能在playing状态调用。通过Promise获取返回值。
1084
1085**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1086
1087**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1088
1089**返回值:**
1090
1091| 类型           | 说明                      |
1092| -------------- | ------------------------- |
1093| Promise\<void> | 暂停播放的Promise返回值。 |
1094
1095**错误码:**
1096
1097以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1098
1099| 错误码ID | 错误信息                                  |
1100| -------- | ----------------------------------------- |
1101| 5400102  | Operation not allowed. Return by promise. |
1102
1103**示例:**
1104
1105```ts
1106import { BusinessError } from '@kit.BasicServicesKit';
1107
1108avPlayer.pause().then(() => {
1109  console.info('Succeeded in pausing');
1110}, (err: BusinessError) => {
1111  console.error('Failed to pause,error message is :' + err.message)
1112})
1113```
1114
1115### stop<sup>9+</sup>
1116
1117stop(callback: AsyncCallback\<void>): void
1118
1119停止播放音视频资源,只能在prepared/playing/paused/completed状态调用。使用callback方式异步获取返回值。
1120
1121**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1122
1123**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1124
1125**参数:**
1126
1127| 参数名   | 类型     | 必填 | 说明                 |
1128| -------- | -------- | ---- | -------------------- |
1129| callback | AsyncCallback\<void> | 是   | 停止播放的回调方法。 |
1130
1131**错误码:**
1132
1133以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1134
1135| 错误码ID | 错误信息                                   |
1136| -------- | ------------------------------------------ |
1137| 5400102  | Operation not allowed. Return by callback. |
1138
1139**示例:**
1140
1141```ts
1142import { BusinessError } from '@kit.BasicServicesKit';
1143
1144avPlayer.stop((err: BusinessError) => {
1145  if (err) {
1146    console.error('Failed to stop,error message is :' + err.message)
1147  } else {
1148    console.info('Succeeded in stopping');
1149  }
1150})
1151```
1152
1153### stop<sup>9+</sup>
1154
1155stop(): Promise\<void>
1156
1157停止播放音视频资源,只能在prepared/playing/paused/completed状态调用。通过Promise获取返回值。
1158
1159**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1160
1161**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1162
1163**返回值:**
1164
1165| 类型           | 说明                      |
1166| -------------- | ------------------------- |
1167| Promise\<void> | 停止播放的Promise返回值。 |
1168
1169**错误码:**
1170
1171以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1172
1173| 错误码ID | 错误信息                                  |
1174| -------- | ----------------------------------------- |
1175| 5400102  | Operation not allowed. Return by promise. |
1176
1177**示例:**
1178
1179```ts
1180import { BusinessError } from '@kit.BasicServicesKit';
1181
1182avPlayer.stop().then(() => {
1183  console.info('Succeeded in stopping');
1184}, (err: BusinessError) => {
1185  console.error('Failed to stop,error message is :' + err.message)
1186})
1187```
1188
1189### reset<sup>9+</sup>
1190
1191reset(callback: AsyncCallback\<void>): void
1192
1193重置播放,只能在initialized/prepared/playing/paused/completed/stopped/error状态调用。使用callback方式异步获取返回值。
1194
1195**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1196
1197**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1198
1199**参数:**
1200
1201| 参数名   | 类型     | 必填 | 说明                 |
1202| -------- | -------- | ---- | -------------------- |
1203| callback | AsyncCallback\<void> | 是   | 重置播放的回调方法。 |
1204
1205**错误码:**
1206
1207以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1208
1209| 错误码ID | 错误信息                                   |
1210| -------- | ------------------------------------------ |
1211| 5400102  | Operation not allowed. Return by callback. |
1212
1213**示例:**
1214
1215```ts
1216import { BusinessError } from '@kit.BasicServicesKit';
1217
1218avPlayer.reset((err: BusinessError) => {
1219  if (err) {
1220    console.error('Failed to reset,error message is :' + err.message)
1221  } else {
1222    console.info('Succeeded in resetting');
1223  }
1224})
1225```
1226
1227### reset<sup>9+</sup>
1228
1229reset(): Promise\<void>
1230
1231重置播放,只能在initialized/prepared/playing/paused/completed/stopped/error状态调用。通过Promise获取返回值。
1232
1233**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1234
1235**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1236
1237**返回值:**
1238
1239| 类型           | 说明                      |
1240| -------------- | ------------------------- |
1241| Promise\<void> | 重置播放的Promise返回值。 |
1242
1243**错误码:**
1244
1245以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1246
1247| 错误码ID | 错误信息                                  |
1248| -------- | ----------------------------------------- |
1249| 5400102  | Operation not allowed. Return by promise. |
1250
1251**示例:**
1252
1253```ts
1254import { BusinessError } from '@kit.BasicServicesKit';
1255
1256avPlayer.reset().then(() => {
1257  console.info('Succeeded in resetting');
1258}, (err: BusinessError) => {
1259  console.error('Failed to reset,error message is :' + err.message)
1260})
1261```
1262
1263### release<sup>9+</sup>
1264
1265release(callback: AsyncCallback\<void>): void
1266
1267销毁播放资源,除released状态外,均可以调用。使用callback方式异步获取返回值。
1268
1269**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1270
1271**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1272
1273**参数:**
1274
1275| 参数名   | 类型     | 必填 | 说明                 |
1276| -------- | -------- | ---- | -------------------- |
1277| callback | AsyncCallback\<void> | 是   | 销毁播放的回调方法。 |
1278
1279**错误码:**
1280
1281以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1282
1283| 错误码ID | 错误信息                                   |
1284| -------- | ------------------------------------------ |
1285| 5400102  | Operation not allowed. Return by callback. |
1286
1287**示例:**
1288
1289```ts
1290import { BusinessError } from '@kit.BasicServicesKit';
1291
1292avPlayer.release((err: BusinessError) => {
1293  if (err) {
1294    console.error('Failed to release,error message is :' + err.message)
1295  } else {
1296    console.info('Succeeded in releasing');
1297  }
1298})
1299```
1300
1301### release<sup>9+</sup>
1302
1303release(): Promise\<void>
1304
1305销毁播放资源,除released状态,都可以调用。通过Promise获取返回值。
1306
1307**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1308
1309**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1310
1311**返回值:**
1312
1313| 类型           | 说明                      |
1314| -------------- | ------------------------- |
1315| Promise\<void> | 销毁播放的Promise返回值。 |
1316
1317**错误码:**
1318
1319以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1320
1321| 错误码ID | 错误信息                                  |
1322| -------- | ----------------------------------------- |
1323| 5400102  | Operation not allowed. Return by promise. |
1324
1325**示例:**
1326
1327```ts
1328import { BusinessError } from '@kit.BasicServicesKit';
1329
1330avPlayer.release().then(() => {
1331  console.info('Succeeded in releasing');
1332}, (err: BusinessError) => {
1333  console.error('Failed to release,error message is :' + err.message)
1334})
1335```
1336
1337### getTrackDescription<sup>9+</sup>
1338
1339getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void
1340
1341获取音视频轨道信息,可以在prepared/playing/paused状态调用。获取所有音视轨道信息,应在数据加载回调后调用。使用callback方式异步获取返回值。
1342
1343**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1344
1345**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1346
1347**参数:**
1348
1349| 参数名   | 类型                                                         | 必填 | 说明                                         |
1350| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------- |
1351| callback | AsyncCallback<Array<[MediaDescription](#mediadescription8)>> | 是   | 回调函数,当获取音频轨道信息成功,err为undefined,data为获取到的MediaDescription数组;否则为错误对象。|
1352
1353**错误码:**
1354
1355以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1356
1357| 错误码ID | 错误信息                                   |
1358| -------- | ------------------------------------------ |
1359| 5400102  | Operation not allowed. Return by callback. |
1360
1361**示例:**
1362
1363```ts
1364import { BusinessError } from '@kit.BasicServicesKit';
1365
1366avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => {
1367  if ((arrList) != null) {
1368    console.info('Succeeded in doing getTrackDescription');
1369  } else {
1370    console.error(`Failed to do getTrackDescription, error:${error}`);
1371  }
1372});
1373```
1374
1375### getTrackDescription<sup>9+</sup>
1376
1377getTrackDescription(): Promise\<Array\<MediaDescription>>
1378
1379获取音视频轨道信息,可以在prepared/playing/paused状态调用。通过Promise获取返回值。
1380
1381**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1382
1383**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1384
1385**返回值:**
1386
1387| 类型                                                   | 说明                                              |
1388| ------------------------------------------------------ | ------------------------------------------------- |
1389| Promise<Array<[MediaDescription](#mediadescription8)>> | Promise对象,返回音视频轨道信息MediaDescription数组。 |
1390
1391**错误码:**
1392
1393以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1394
1395| 错误码ID | 错误信息                                  |
1396| -------- | ----------------------------------------- |
1397| 5400102  | Operation not allowed. Return by promise. |
1398
1399**示例:**
1400
1401```ts
1402import { BusinessError } from '@kit.BasicServicesKit';
1403
1404avPlayer.getTrackDescription().then((arrList: Array<media.MediaDescription>) => {
1405  console.info('Succeeded in getting TrackDescription');
1406}).catch((error: BusinessError) => {
1407  console.error(`Failed to get TrackDescription, error:${error}`);
1408});
1409```
1410
1411### getSelectedTracks<sup>12+</sup>
1412
1413getSelectedTracks(): Promise\<Array\<number>>
1414
1415获取已选择的音视频轨道索引,可以在prepared/playing/paused状态调用。通过Promise获取返回值。
1416
1417**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1418
1419**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1420
1421**返回值:**
1422
1423| 类型                                                   | 说明                                              |
1424| ------------------------------------------------------ | ------------------------------------------------- |
1425| Promise<Array<[number]>> | Promise对象,返回已选择音视频轨道索引数组。 |
1426
1427**错误码:**
1428
1429以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1430
1431| 错误码ID | 错误信息                                  |
1432| -------- | ----------------------------------------- |
1433| 5400102  | Operation not allowed. |
1434
1435**示例:**
1436
1437```ts
1438import { BusinessError } from '@kit.BasicServicesKit';
1439
1440avPlayer.getSelectedTracks().then((arrList: Array<number>) => {
1441  console.info('Succeeded in getting SelectedTracks');
1442}).catch((error: BusinessError) => {
1443  console.error(`Failed to get SelectedTracks, error:${error}`);
1444});
1445```
1446
1447### getPlaybackInfo<sup>12+</sup>
1448
1449getPlaybackInfo(): Promise\<PlaybackInfo>
1450
1451获取播放过程信息,可以在prepared/playing/paused状态调用。通过Promise获取返回值。
1452
1453**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1454
1455**返回值:**
1456
1457| 类型                                                   | 说明                                              |
1458| ------------------------------------------------------ | ------------------------------------------------- |
1459| Promise<[PlaybackInfo](#playbackinfo12)> | Promise对象,返回播放器信息PlaybackInfo。 |
1460
1461**示例:**
1462
1463```ts
1464import { BusinessError } from '@kit.BasicServicesKit';
1465import { media } from '@kit.MediaKit';
1466
1467let avPlayer: media.AVPlayer | undefined = undefined;
1468let playbackInfo: media.PlaybackInfo | undefined = undefined;
1469media.createAVPlayer(async (err: BusinessError, player: media.AVPlayer) => {
1470  if (player != null) {
1471    avPlayer = player;
1472    console.info(`Succeeded in creating AVPlayer`);
1473    if (avPlayer) {
1474      try {
1475        playbackInfo = await avPlayer.getPlaybackInfo();
1476        console.info(`AVPlayer getPlaybackInfo = ${JSON.stringify(playbackInfo)}`); // 打印整个PlaybackInfo的值
1477      } catch (error) {
1478        console.error(`error = ${error}`);
1479      }
1480    }
1481  } else {
1482    console.error(`Failed to create AVPlayer, error message:${err.message}`);
1483  }
1484});
1485```
1486
1487### selectTrack<sup>12+</sup>
1488
1489selectTrack(index: number, mode?: SwitchMode): Promise\<void>
1490
1491使用AVPlayer播放多音轨视频时选择指定音轨播放,通过Promise获取返回值。
1492
1493**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1494
1495**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1496
1497**参数:**
1498
1499| 参数名   | 类型     | 必填 | 说明                 |
1500| -------- | -------- | ---- | -------------------- |
1501| index | number | 是   | 多音轨轨道索引,来自[MediaDescription](#mediadescription8)。 |
1502| mode   | [SwitchMode](#switchmode12) | 否   | 切换视频轨模式,默认为SMOOTH模式,仅支持DASH协议,**仅在视频资源播放时设置**。 |
1503
1504**返回值:**
1505
1506| 类型           | 说明                      |
1507| -------------- | ------------------------- |
1508| Promise\<void> | 选择曲目完成的Promise返回值。 |
1509
1510**错误码:**
1511
1512以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
1513
1514| 错误码ID | 错误信息                                  |
1515| -------- | ----------------------------------------- |
1516| 401      | The parameter check failed. Return by promise.       |
1517| 5400102  | Operation not allowed. Return by promise. |
1518
1519**示例:**
1520
1521```ts
1522import { BusinessError } from '@kit.BasicServicesKit';
1523import { media } from '@kit.MediaKit';
1524
1525let avPlayer: media.AVPlayer = await media.createAVPlayer();
1526let audioTrackIndex: Object = 0;
1527avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => {
1528  if (arrList != null) {
1529    for (let i = 0; i < arrList.length; i++) {
1530      if (i != 0) {
1531        // 获取音频轨道列表
1532        audioTrackIndex = arrList[i][media.MediaDescriptionKey.MD_KEY_TRACK_INDEX];
1533      }
1534    }
1535  } else {
1536    console.error(`Failed to get TrackDescription, error:${error}`);
1537  }
1538});
1539
1540// 选择其中一个音频轨道
1541avPlayer.selectTrack(parseInt(audioTrackIndex.toString()));
1542```
1543
1544### deselectTrack<sup>12+</sup>
1545
1546deselectTrack(index: number): Promise\<void>
1547
1548使用AVPlayer播放多音轨视频时取消指定音轨播放,通过Promise获取返回值。
1549
1550**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1551
1552**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1553
1554**参数:**
1555
1556| 参数名   | 类型     | 必填 | 说明                 |
1557| -------- | -------- | ---- | -------------------- |
1558| index | number | 是   | 多音轨轨道索引,来自[MediaDescription](#mediadescription8)。 |
1559
1560**返回值:**
1561
1562| 类型           | 说明                      |
1563| -------------- | ------------------------- |
1564| Promise\<void> | 取消选择曲目完成的Promise返回值。 |
1565
1566**错误码:**
1567
1568以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
1569
1570| 错误码ID | 错误信息                                  |
1571| -------- | ----------------------------------------- |
1572| 401      | The parameter check failed. Return by promise.       |
1573| 5400102  | Operation not allowed. Return by promise. |
1574
1575**示例:**
1576
1577```ts
1578import { BusinessError } from '@kit.BasicServicesKit';
1579import { media } from '@kit.MediaKit';
1580
1581let avPlayer: media.AVPlayer = await media.createAVPlayer();
1582let audioTrackIndex: Object = 0;
1583avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => {
1584  if (arrList != null) {
1585    for (let i = 0; i < arrList.length; i++) {
1586      if (i != 0) {
1587        // 获取音频轨道列表
1588        audioTrackIndex = arrList[i][media.MediaDescriptionKey.MD_KEY_TRACK_INDEX];
1589      }
1590    }
1591  } else {
1592    console.error(`Failed to get TrackDescription, error:${error}`);
1593  }
1594});
1595
1596// 选择其中一个音频轨道
1597avPlayer.selectTrack(parseInt(audioTrackIndex.toString()));
1598// 取消选择上次选中的音频轨道,并恢复到默认音频轨道。
1599avPlayer.deselectTrack(parseInt(audioTrackIndex.toString()));
1600```
1601
1602### setDecryptionConfig<sup>11+</sup>
1603
1604setDecryptionConfig(mediaKeySession: drm.MediaKeySession, secureVideoPath: boolean): void
1605
1606设置解密配置。当收到[mediaKeySystemInfoUpdate事件](#onmediakeysysteminfoupdate11)时,需根据事件上报的信息创建相关配置并设置解密配置,否则无法播放。
1607
1608**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1609
1610**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1611
1612**参数:**
1613
1614| 参数名   | 类型                                                         | 必填 | 说明                                         |
1615| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------- |
1616| mediaKeySession | [drm.MediaKeySession](../apis-drm-kit/js-apis-drm.md#mediakeysession) | 是   | 解密会话 |
1617| secureVideoPath | boolean | 是 | 安全视频通路,true表示选择安全视频通路,false表示选择非安全视频通路 |
1618
1619**错误码:**
1620
1621以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1622
1623| 错误码ID | 错误信息                                  |
1624| -------- | ----------------------------------------- |
1625| 401  | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1626
1627**示例:**
1628
1629关于drm模块的示例具体可见[js-apis-drm.md](../apis-drm-kit/js-apis-drm.md)。
1630```ts
1631import { drm } from '@kit.DrmKit';
1632
1633// 创建MediaKeySystem系统
1634let keySystem:drm.MediaKeySystem = drm.createMediaKeySystem('com.clearplay.drm');
1635// 创建MediaKeySession解密会话
1636let keySession:drm.MediaKeySession = keySystem.createMediaKeySession(drm.ContentProtectionLevel.CONTENT_PROTECTION_LEVEL_SW_CRYPTO);
1637// 生成许可证请求、设置许可证响应等
1638// 安全视频通路标志
1639let secureVideoPath:boolean = false;
1640// 设置解密配置
1641avPlayer.setDecryptionConfig(keySession, secureVideoPath);
1642```
1643
1644### getMediaKeySystemInfos<sup>11+</sup>
1645
1646getMediaKeySystemInfos(): Array\<drm.MediaKeySystemInfo>
1647
1648获取当前播放的媒体资源的MediaKeySystemInfo。需要在[mediaKeySystemInfoUpdate事件](#onmediakeysysteminfoupdate11)触发成功后才能调用。
1649
1650**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1651
1652**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1653
1654**返回值:**
1655
1656| 类型                                                   | 说明                                              |
1657| ------------------------------------------------------ | ------------------------------------------------- |
1658|  Array<[drm.MediaKeySystemInfo](../apis-drm-kit/js-apis-drm.md#mediakeysysteminfo)> | MediaKeySystemInfo数组,MediaKeySystemInfo具有uuid和pssh两个属性。 |
1659
1660**示例:**
1661
1662```ts
1663import { drm } from '@kit.DrmKit';
1664
1665const infos = avPlayer.getMediaKeySystemInfos();
1666console.info('GetMediaKeySystemInfos count: ' + infos.length);
1667for (let i = 0; i < infos.length; i++) {
1668  console.info('GetMediaKeySystemInfos uuid: ' + infos[i]["uuid"]);
1669  console.info('GetMediaKeySystemInfos pssh: ' + infos[i]["pssh"]);
1670}
1671```
1672
1673### seek<sup>9+</sup>
1674
1675seek(timeMs: number, mode?:SeekMode): void
1676
1677跳转到指定播放位置,只能在prepared/playing/paused/completed状态调用,可以通过[seekDone事件](#onseekdone9)确认是否生效。
1678注:直播场景不支持seek。
1679
1680**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1681
1682**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1683
1684**参数:**
1685
1686| 参数名 | 类型                   | 必填 | 说明                                                         |
1687| ------ | ---------------------- | ---- | ------------------------------------------------------------ |
1688| timeMs | number                 | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, [duration](#属性)]。 |
1689| mode   | [SeekMode](#seekmode8) | 否   | 基于视频I帧的跳转模式,默认为SEEK_PREV_SYNC模式,**仅在视频资源播放时设置**。 |
1690
1691**示例:**
1692
1693```ts
1694let seekTime: number = 1000
1695avPlayer.seek(seekTime, media.SeekMode.SEEK_PREV_SYNC)
1696```
1697
1698### on('seekDone')<sup>9+</sup>
1699
1700on(type: 'seekDone', callback: Callback\<number>): void
1701
1702监听seek生效的事件。
1703
1704**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1705
1706**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1707
1708**参数:**
1709
1710| 参数名   | 类型     | 必填 | 说明                                                         |
1711| -------- | -------- | ---- | ------------------------------------------------------------ |
1712| type     | string   | 是   | seek生效的事件回调类型,支持的事件:'seekDone',每次调用seek后都会回调此事件。 |
1713| callback | Callback\<number> | 是   | 回调函数。seek生效的事件回调方法,只会上报用户请求的time位置。<br/>**视频播放:**[SeekMode](#seekmode8)会造成实际跳转位置与用户设置产生偏差,精准位置需要通过currentTime获取,事件回调的time仅代表完成用户某一次请求。 |
1714
1715**示例:**
1716
1717```ts
1718avPlayer.on('seekDone', (seekDoneTime:number) => {
1719  console.info('seekDone called,and seek time is:' + seekDoneTime)
1720})
1721```
1722
1723### off('seekDone')<sup>9+</sup>
1724
1725off(type: 'seekDone', callback?: Callback\<number>): void
1726
1727取消监听seek生效的事件。
1728
1729**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1730
1731**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1732
1733**参数:**
1734
1735| 参数名 | 类型   | 必填 | 说明                                                 |
1736| ------ | ------ | ---- | ---------------------------------------------------- |
1737| type   | string | 是   | seek生效的事件回调类型,取消注册的事件:'seekDone'。 |
1738| callback | Callback\<number> | 否   | 回调函数。seek生效的事件回调方法,只会上报用户请求的time位置。<br/>**视频播放:**[SeekMode](#seekmode8)会造成实际跳转位置与用户设置产生偏差,精准位置需要通过currentTime获取,事件回调的time仅代表完成用户某一次请求。<br/>从API version 12开始支持此参数。 |
1739
1740**示例:**
1741
1742```ts
1743avPlayer.off('seekDone')
1744```
1745
1746### setSpeed<sup>9+</sup>
1747
1748setSpeed(speed: PlaybackSpeed): void
1749
1750设置倍速模式,只能在prepared/playing/paused/completed状态调用,可以通过[speedDone事件](#onspeeddone9)确认是否生效。
1751注:直播场景不支持setSpeed。
1752
1753**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1754
1755**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1756
1757**参数:**
1758
1759| 参数名 | 类型                             | 必填 | 说明               |
1760| ------ | -------------------------------- | ---- | ------------------ |
1761| speed  | [PlaybackSpeed](#playbackspeed8) | 是   | 指定播放倍速模式。 |
1762
1763**示例:**
1764
1765```ts
1766avPlayer.setSpeed(media.PlaybackSpeed.SPEED_FORWARD_2_00_X)
1767```
1768
1769### on('speedDone')<sup>9+</sup>
1770
1771on(type: 'speedDone', callback: Callback\<number>): void
1772
1773监听setSpeed生效的事件
1774
1775**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1776
1777**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1778
1779**参数:**
1780
1781| 参数名   | 类型     | 必填 | 说明                                                         |
1782| -------- | -------- | ---- | ------------------------------------------------------------ |
1783| type     | string   | 是   | setSpeed生效的事件回调类型,支持的事件:'speedDone',每次调用setSpeed后都会回调此事件。 |
1784| callback | Callback\<number> | 是   | 回调函数。当setSpeed成功,上报生效的倍速模式,具体见[PlaybackSpeed](#playbackspeed8)。 |
1785
1786**示例:**
1787
1788```ts
1789avPlayer.on('speedDone', (speed:number) => {
1790  console.info('speedDone called,and speed value is:' + speed)
1791})
1792```
1793
1794### off('speedDone')<sup>9+</sup>
1795
1796off(type: 'speedDone', callback?: Callback\<number>): void
1797
1798取消监听setSpeed生效的事件。
1799
1800**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1801
1802**参数:**
1803
1804| 参数名 | 类型   | 必填 | 说明                                                      |
1805| ------ | ------ | ---- | --------------------------------------------------------- |
1806| type   | string | 是   | setSpeed生效的事件回调类型,取消注册的事件:'speedDone'。 |
1807| callback | Callback\<number> | 否   | 回调函数。当setSpeed成功,上报生效的倍速模式,具体见[PlaybackSpeed](#playbackspeed8)。<br/>从API version 12开始支持此参数。 |
1808
1809**示例:**
1810
1811```ts
1812avPlayer.off('speedDone')
1813```
1814
1815### setBitrate<sup>9+</sup>
1816
1817setBitrate(bitrate: number): void
1818
1819选择要播放的指定比特率,仅对**HLS协议网络流**有效,默认情况下,播放器会根据网络连接速度选择合适的比特率,只能在prepared/playing/paused/completed状态调用,可以通过[bitrateDone](#onbitratedone9)事件确认是否生效。
1820
1821**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1822
1823**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1824
1825**参数:**
1826
1827| 参数名  | 类型   | 必填 | 说明                                                         |
1828| ------- | ------ | ---- | ------------------------------------------------------------ |
1829| bitrate | number | 是   | 指定比特率,可以通过[availableBitrates](#onavailablebitrates9)事件获得当前HLS协议流可用的比特率,如果用户指定的比特率不在此列表中,则播放器将从可用比特率列表中选择最小和最接近的比特率。如果通过availableBitrates事件获得的比特率列表长度为0,则不支持指定比特率,也不会产生bitrateDone回调。 |
1830
1831**示例:**
1832
1833```ts
1834let bitrate: number = 96000
1835avPlayer.setBitrate(bitrate)
1836```
1837
1838### on('bitrateDone')<sup>9+</sup>
1839
1840on(type: 'bitrateDone', callback: Callback\<number>): void
1841
1842监听setBitrate生效的事件。
1843
1844**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1845
1846**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1847
1848**参数:**
1849
1850| 参数名   | 类型     | 必填 | 说明                                                         |
1851| -------- | -------- | ---- | ------------------------------------------------------------ |
1852| type     | string   | 是   | setBitrate生效的事件回调类型,支持的事件:'bitrateDone',每次调用setBitrate后都会回调此事件。 |
1853| callback | Callback\<number> | 是   | setBitrate生效的事件回调方法,上报生效的比特率。             |
1854
1855**示例:**
1856
1857```ts
1858avPlayer.on('bitrateDone', (bitrate:number) => {
1859  console.info('bitrateDone called,and bitrate value is:' + bitrate)
1860})
1861```
1862
1863### off('bitrateDone')<sup>9+</sup>
1864
1865off(type: 'bitrateDone', callback?: Callback\<number>): void
1866
1867取消监听setBitrate生效的事件。
1868
1869**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1870
1871**参数:**
1872
1873| 参数名 | 类型   | 必填 | 说明                                                         |
1874| ------ | ------ | ---- | ------------------------------------------------------------ |
1875| type   | string | 是   | setBitrate生效的事件回调类型,取消注册的事件:'bitrateDone'。 |
1876| callback | Callback\<number> | 否   | setBitrate生效的事件回调方法,上报生效的比特率。<br/>从API version 12开始支持此参数。             |
1877
1878**示例:**
1879
1880```ts
1881avPlayer.off('bitrateDone')
1882```
1883
1884### on('availableBitrates')<sup>9+</sup>
1885
1886on(type: 'availableBitrates', callback: Callback\<Array\<number>>): void
1887
1888监听HLS协议流可用的比特率列表,只会在切换prepared状态后上报。
1889
1890**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1891
1892**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1893
1894**参数:**
1895
1896| 参数名   | 类型     | 必填 | 说明                                                         |
1897| -------- | -------- | ---- | ------------------------------------------------------------ |
1898| type     | string   | 是   | HLS协议可用比特率上报事件回调类型,支持的事件:'availableBitrates',只会在prepared之后上报一次。 |
1899| callback | Callback\<Array\<number>> | 是   | HLS协议可用比特率上报事件回调方法,使用数组存放支持的比特率。如果数组长度为0,则不支持指定比特率。 |
1900
1901**示例:**
1902
1903```ts
1904avPlayer.on('availableBitrates', (bitrates: Array<number>) => {
1905  console.info('availableBitrates called,and availableBitrates length is:' + bitrates.length)
1906})
1907```
1908
1909### off('availableBitrates')<sup>9+</sup>
1910
1911off(type: 'availableBitrates', callback?: Callback\<Array\<number>>): void
1912
1913取消监听HLS协议流可用的比特率列表,调用[prepare](#prepare9)后,上报此事件。
1914
1915**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1916
1917**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1918
1919**参数:**
1920
1921| 参数名 | 类型   | 必填 | 说明                                                         |
1922| ------ | ------ | ---- | ------------------------------------------------------------ |
1923| type   | string | 是   | HLS协议可用比特率上报事件回调类型,取消注册的事件:'availableBitrates'。 |
1924| callback | Callback\<Array\<number>> | 否   | HLS协议可用比特率上报事件回调方法,使用数组存放支持的比特率。如果数组长度为0,则不支持指定比特率。<br/>从API version 12开始支持此参数。 |
1925
1926**示例:**
1927
1928```ts
1929avPlayer.off('availableBitrates')
1930```
1931
1932
1933### on('mediaKeySystemInfoUpdate')<sup>11+</sup>
1934
1935on(type: 'mediaKeySystemInfoUpdate', callback: Callback\<Array\<drm.MediaKeySystemInfo>>): void
1936
1937监听mediaKeySystemInfoUpdate事件。
1938
1939**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1940
1941**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1942
1943**参数:**
1944
1945| 参数名   | 类型     | 必填 | 说明                                                         |
1946| -------- | -------- | ---- | ------------------------------------------------------------ |
1947| type     | string   | 是   | 版权保护信息更新上报事件回调类型,支持的事件:'mediaKeySystemInfoUpdate',当播放内容的版权保护信息更新时上报事件。 |
1948| callback | Callback\<Array\<drm.[MediaKeySystemInfo](../apis-drm-kit/js-apis-drm.md#mediakeysysteminfo)>> | 是   | 版权保护信息更新上报事件回调方法,上报MediaKeySystemInfo数组。 |
1949
1950**示例:**
1951
1952```ts
1953import { drm } from '@kit.DrmKit';
1954
1955avPlayer.on('mediaKeySystemInfoUpdate', (mediaKeySystemInfo: Array<drm.MediaKeySystemInfo>) => {
1956    for (let i = 0; i < mediaKeySystemInfo.length; i++) {
1957      console.info('mediaKeySystemInfoUpdate happened uuid: ' + mediaKeySystemInfo[i]["uuid"]);
1958      console.info('mediaKeySystemInfoUpdate happened pssh: ' + mediaKeySystemInfo[i]["pssh"]);
1959    }
1960})
1961```
1962
1963### off('mediaKeySystemInfoUpdate')<sup>11+</sup>
1964
1965off(type: 'mediaKeySystemInfoUpdate', callback?: Callback\<Array\<drm.MediaKeySystemInfo>>): void;
1966
1967取消监听mediaKeySystemInfoUpdate事件。
1968
1969**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1970
1971**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1972
1973**参数:**
1974
1975| 参数名 | 类型   | 必填 | 说明                                                         |
1976| ------ | ------ | ---- | ------------------------------------------------------------ |
1977| type   | string | 是   | 版权保护信息更新上报事件回调类型,取消注册的事件:'mediaKeySystemInfoUpdate'。 |
1978| callback | Callback\<Array\<drm.[MediaKeySystemInfo](../apis-drm-kit/js-apis-drm.md#mediakeysysteminfo)>> | 否   | 版权保护信息更新上报事件回调方法,上报版权保护信息数组。如填写该参数,则仅取消注册此回调方法,否则取消注册mediaKeySystemInfoUpdate事件的所有回调方法。 |
1979
1980**示例:**
1981
1982```ts
1983avPlayer.off('mediaKeySystemInfoUpdate')
1984```
1985
1986### setVolume<sup>9+</sup>
1987
1988setVolume(volume: number): void
1989
1990设置媒体播放音量,只能在prepared/playing/paused/completed状态调用,可以通过[volumeChange事件](#onvolumechange9)确认是否生效。
1991
1992**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1993
1994**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1995
1996**参数:**
1997
1998| 参数名 | 类型   | 必填 | 说明                                                         |
1999| ------ | ------ | ---- | ------------------------------------------------------------ |
2000| volume | number | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
2001
2002**示例:**
2003
2004```ts
2005let volume: number = 1.0
2006avPlayer.setVolume(volume)
2007```
2008
2009### on('volumeChange')<sup>9+</sup>
2010
2011on(type: 'volumeChange', callback: Callback\<number>): void
2012
2013监听setVolume生效的事件。
2014
2015**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2016
2017**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2018
2019**参数:**
2020
2021| 参数名   | 类型     | 必填 | 说明                                                         |
2022| -------- | -------- | ---- | ------------------------------------------------------------ |
2023| type     | string   | 是   | setVolume生效的事件回调类型,支持的事件:'volumeChange',每次调用setVolume后都会回调此事件。 |
2024| callback | Callback\<number> | 是   | setVolume生效的事件回调方法,上报生效的媒体音量。            |
2025
2026**示例:**
2027
2028```ts
2029avPlayer.on('volumeChange', (vol: number) => {
2030  console.info('volumeChange called,and new volume is :' + vol)
2031})
2032```
2033
2034### off('volumeChange')<sup>9+</sup>
2035
2036off(type: 'volumeChange', callback?: Callback\<number>): void
2037
2038取消监听setVolume生效的事件。
2039
2040**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2041
2042**参数:**
2043
2044| 参数名 | 类型   | 必填 | 说明                                                         |
2045| ------ | ------ | ---- | ------------------------------------------------------------ |
2046| type   | string | 是   | setVolume生效的事件回调类型,取消注册的事件:'volumeChange'。 |
2047| callback | Callback\<number> | 否   | setVolume生效的事件回调方法,上报生效的媒体音量。<br/>从API version 12开始支持此参数。            |
2048
2049**示例:**
2050
2051```ts
2052avPlayer.off('volumeChange')
2053```
2054
2055### on('endOfStream')<sup>9+</sup>
2056
2057on(type: 'endOfStream', callback: Callback\<void>): void
2058
2059监听资源播放至结尾的事件;如果用户设置[loop](#属性)=true,播放会跳转至开头重播;如果用户没有设置loop,会通过[stateChange](#onstatechange9)上报completed状态。
2060
2061**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2062
2063**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2064
2065**参数:**
2066
2067| 参数名   | 类型     | 必填 | 说明                                                         |
2068| -------- | -------- | ---- | ------------------------------------------------------------ |
2069| type     | string   | 是   | 资源播放至结尾的事件回调类型,支持的事件:'endOfStream',当播放至结尾时会上报此事件。 |
2070| callback | Callback\<void> | 是   | 资源播放至结尾的事件回调方法。                               |
2071
2072**示例:**
2073
2074```ts
2075avPlayer.on('endOfStream', () => {
2076  console.info('endOfStream called')
2077})
2078```
2079
2080### off('endOfStream')<sup>9+</sup>
2081
2082off(type: 'endOfStream', callback?: Callback\<void>): void
2083
2084取消监听资源播放至结尾的事件。
2085
2086**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2087
2088**参数:**
2089
2090| 参数名 | 类型   | 必填 | 说明                                                         |
2091| ------ | ------ | ---- | ------------------------------------------------------------ |
2092| type   | string | 是   | 资源播放至结尾的事件回调类型,取消注册的事件:'endOfStream'。 |
2093| callback | Callback\<void> | 否   | 资源播放至结尾的事件回调方法。<br/>从API version 12开始支持此参数。                               |
2094
2095**示例:**
2096
2097```ts
2098avPlayer.off('endOfStream')
2099```
2100
2101### on('timeUpdate')<sup>9+</sup>
2102
2103on(type: 'timeUpdate', callback: Callback\<number>): void
2104
2105监听资源播放当前时间,单位为毫秒(ms),用于刷新进度条当前位置,默认间隔100ms时间上报,因用户操作(seek)产生的时间变化会立刻上报。
2106
2107注:直播场景不支持timeUpdate上报。
2108
2109**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
2110
2111**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2112
2113**参数:**
2114
2115| 参数名   | 类型     | 必填 | 说明                                           |
2116| -------- | -------- | ---- | ---------------------------------------------- |
2117| type     | string   | 是   | 时间更新的回调类型,支持的事件:'timeUpdate'。 |
2118| callback | Callback\<number> | 是   | 回调函数。返回当前时间。                                     |
2119
2120**示例:**
2121
2122```ts
2123avPlayer.on('timeUpdate', (time:number) => {
2124  console.info('timeUpdate called,and new time is :' + time)
2125})
2126```
2127
2128### off('timeUpdate')<sup>9+</sup>
2129
2130off(type: 'timeUpdate', callback?: Callback\<number>): void
2131
2132取消监听资源播放当前时间。
2133
2134**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
2135
2136**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2137
2138**参数:**
2139
2140| 参数名 | 类型   | 必填 | 说明                                               |
2141| ------ | ------ | ---- | -------------------------------------------------- |
2142| type   | string | 是   | 时间更新的回调类型,取消注册的事件:'timeUpdate'。 |
2143| callback | Callback\<number> | 否   | 回调函数。返回当前时间。<br/>从API version 12开始支持此参数。             |
2144
2145**示例:**
2146
2147```ts
2148avPlayer.off('timeUpdate')
2149```
2150
2151### on('durationUpdate')<sup>9+</sup>
2152
2153
2154on(type: 'durationUpdate', callback: Callback\<number>): void
2155
2156监听资源播放资源的时长,单位为毫秒(ms),用于刷新进度条长度,默认只在prepared上报一次,同时允许一些特殊码流刷新多次时长。
2157注:直播场景不支持durationUpdate上报。
2158
2159**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2160
2161**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2162
2163**参数:**
2164
2165| 参数名   | 类型     | 必填 | 说明                                               |
2166| -------- | -------- | ---- | -------------------------------------------------- |
2167| type     | string   | 是   | 时长更新的回调类型,支持的事件:'durationUpdate'。 |
2168| callback | Callback\<number> | 是   | 回调函数。返回资源时长。        |
2169
2170**示例:**
2171
2172```ts
2173avPlayer.on('durationUpdate', (duration: number) => {
2174  console.info('durationUpdate called,new duration is :' + duration)
2175})
2176```
2177
2178### off('durationUpdate')<sup>9+</sup>
2179
2180off(type: 'durationUpdate', callback?: Callback\<number>): void
2181
2182取消监听资源播放资源的时长。
2183
2184**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2185
2186**参数:**
2187
2188| 参数名 | 类型   | 必填 | 说明                                                   |
2189| ------ | ------ | ---- | ------------------------------------------------------ |
2190| type   | string | 是   | 时长更新的回调类型,取消注册的事件:'durationUpdate'。 |
2191| callback | Callback\<number> | 否   | 回调函数。返回资源时长。<br/>从API version 12开始支持此参数。        |
2192
2193**示例:**
2194
2195```ts
2196avPlayer.off('durationUpdate')
2197```
2198
2199### on('bufferingUpdate')<sup>9+</sup>
2200
2201on(type: 'bufferingUpdate', callback: OnBufferingUpdateHandler): void
2202
2203订阅音视频缓存更新事件,仅网络播放支持该订阅事件。
2204
2205**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2206
2207**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2208
2209**参数:**
2210
2211| 参数名   | 类型     | 必填 | 说明                                                         |
2212| -------- | -------- | ---- | ------------------------------------------------------------ |
2213| type     | string   | 是   | 播放缓存事件回调类型,支持的事件:'bufferingUpdate'。        |
2214| callback | [OnBufferingUpdateHandler](#onbufferingupdatehandler12) | 是   | 播放缓存事件回调方法。 |
2215
2216**示例:**
2217
2218```ts
2219avPlayer.on('bufferingUpdate', (infoType: media.BufferingInfoType, value: number) => {
2220  console.info('bufferingUpdate called,and infoType value is:' + infoType + ', value is :' + value)
2221})
2222```
2223
2224### off('bufferingUpdate')<sup>9+</sup>
2225
2226off(type: 'bufferingUpdate', callback?: OnBufferingUpdateHandler): void
2227
2228取消监听音视频缓存更新事件。
2229
2230**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2231
2232**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2233
2234**参数:**
2235
2236| 参数名 | 类型   | 必填 | 说明                                                      |
2237| ------ | ------ | ---- | --------------------------------------------------------- |
2238| type   | string | 是   | 播放缓存事件回调类型,取消注册的事件:'bufferingUpdate'。 |
2239| callback | [OnBufferingUpdateHandler](#onbufferingupdatehandler12) | 否   | 播放缓存事件回调方法。 |
2240
2241**示例:**
2242
2243```ts
2244avPlayer.off('bufferingUpdate')
2245```
2246
2247### on('startRenderFrame')<sup>9+</sup>
2248
2249on(type: 'startRenderFrame', callback: Callback\<void>): void
2250
2251订阅视频播放开始首帧渲染的更新事件,仅视频播放支持该订阅事件,该事件仅代表播放服务将第一帧画面送显示模块,实际效果依赖显示服务渲染性能。
2252
2253**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2254
2255**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2256
2257**参数:**
2258
2259| 参数名   | 类型     | 必填 | 说明                                                         |
2260| -------- | -------- | ---- | ------------------------------------------------------------ |
2261| type     | string   | 是   | 视频播放开始首帧渲染事件回调类型,支持的事件:'startRenderFrame'。 |
2262| callback | Callback\<void> | 是   | 视频播放开始首帧渲染事件回调方法。                           |
2263
2264**示例:**
2265
2266```ts
2267avPlayer.on('startRenderFrame', () => {
2268  console.info('startRenderFrame called')
2269})
2270```
2271
2272### off('startRenderFrame')<sup>9+</sup>
2273
2274off(type: 'startRenderFrame', callback?: Callback\<void>): void
2275
2276取消监听视频播放开始首帧渲染的更新事件。
2277
2278**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2279
2280**参数:**
2281
2282| 参数名 | 类型   | 必填 | 说明                                                         |
2283| ------ | ------ | ---- | ------------------------------------------------------------ |
2284| type   | string | 是   | 视频播放开始首帧渲染事件回调类型,取消注册的事件:'startRenderFrame'。 |
2285| callback | Callback\<void> | 否   | 视频播放开始首帧渲染事件回调方法。<br/>从API version 12开始支持此参数。                   |
2286
2287**示例:**
2288
2289```ts
2290avPlayer.off('startRenderFrame')
2291```
2292
2293### on('videoSizeChange')<sup>9+</sup>
2294
2295on(type: 'videoSizeChange', callback: OnVideoSizeChangeHandler): void
2296
2297监听视频播放宽高变化事件,仅视频播放支持该订阅事件,默认只在prepared状态上报一次,但HLS协议码流会在切换分辨率时上报。
2298
2299**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2300
2301**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2302
2303**参数:**
2304
2305| 参数名   | 类型     | 必填 | 说明                                                         |
2306| -------- | -------- | ---- | ------------------------------------------------------------ |
2307| type     | string   | 是   | 视频播放宽高变化事件回调类型,支持的事件:'videoSizeChange'。 |
2308| callback | [OnVideoSizeChangeHandler](#onvideosizechangehandler12) | 是   | 视频播放宽高变化事件回调方法。    |
2309
2310**示例:**
2311
2312```ts
2313avPlayer.on('videoSizeChange', (width: number, height: number) => {
2314  console.info('videoSizeChange called,and width is:' + width + ', height is :' + height)
2315})
2316```
2317
2318### off('videoSizeChange')<sup>9+</sup>
2319
2320off(type: 'videoSizeChange', callback?: OnVideoSizeChangeHandler): void
2321
2322取消监听视频播放宽高变化事件。
2323
2324**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2325
2326**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2327
2328**参数:**
2329
2330| 参数名 | 类型   | 必填 | 说明                                                         |
2331| ------ | ------ | ---- | ------------------------------------------------------------ |
2332| type   | string | 是   | 视频播放宽高变化事件回调类型,取消注册的事件:'videoSizeChange'。 |
2333| callback | [OnVideoSizeChangeHandler](#onvideosizechangehandler12) | 否   | 视频播放宽高变化事件回调方法。<br/>从API version 12开始支持此参数。    |
2334
2335**示例:**
2336
2337```ts
2338avPlayer.off('videoSizeChange')
2339```
2340
2341### on('audioInterrupt')<sup>9+</sup>
2342
2343on(type: 'audioInterrupt', callback: Callback\<audio.InterruptEvent>): void
2344
2345监听音频焦点变化事件,多个音视频资源同时播放时,会根据音频焦点模型[audio.InterruptMode](../apis-audio-kit/js-apis-audio.md#interruptmode9)触发此事件。应用需根据不同焦点变化事件作相应处理。具体可参考[处理音频焦点事件](../../media/audio/audio-playback-concurrency.md)。
2346
2347**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2348
2349**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2350
2351**参数:**
2352
2353| 参数名   | 类型                                                         | 必填 | 说明                                                     |
2354| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------------------- |
2355| type     | string                                                       | 是   | 音频焦点变化事件回调类型,支持的事件:'audioInterrupt'。 |
2356| callback | Callback\<[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)> | 是   | 音频焦点变化事件回调方法。                           |
2357
2358**示例:**
2359
2360```ts
2361import { audio } from '@kit.AudioKit';
2362
2363avPlayer.on('audioInterrupt', (info: audio.InterruptEvent) => {
2364  console.info('audioInterrupt called,and InterruptEvent info is:' + info)
2365})
2366```
2367
2368### off('audioInterrupt')<sup>9+</sup>
2369
2370off(type: 'audioInterrupt', callback?: Callback<audio.InterruptEvent>): void
2371
2372取消监听音频焦点变化事件。
2373
2374**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2375
2376**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2377
2378**参数:**
2379
2380| 参数名 | 类型   | 必填 | 说明                                                         |
2381| ------ | ------ | ---- | ------------------------------------------------------------ |
2382| type   | string | 是   | 音频焦点变化事件回调类型,取消注册的事件:'audioInterrupt'。 |
2383| callback | Callback\<[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)> | 否   | 音频焦点变化事件回调方法。<br/>从API version 12开始支持此参数。             |
2384
2385**示例:**
2386
2387```ts
2388avPlayer.off('audioInterrupt')
2389```
2390
2391### on('audioOutputDeviceChangeWithInfo')<sup>11+</sup>
2392
2393on(type: 'audioOutputDeviceChangeWithInfo', callback: Callback\<audio.AudioStreamDeviceChangeInfo>): void
2394
2395订阅监听音频流输出设备变化及原因,使用callback方式返回结果。
2396
2397在订阅此监听时,建议参考[响应音频流输出设备变更](../../media/audio/audio-output-device-change.md)自行实现设备连接或者断开时的播放器行为。
2398
2399**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2400
2401**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2402
2403**参数:**
2404
2405| 参数名   | 类型                       | 必填 | 说明                                        |
2406| :------- | :------------------------- | :--- | :------------------------------------------ |
2407| type     | string                     | 是   | 事件回调类型,支持的事件为:'outputDeviceChangeWithInfo'。 |
2408| callback | Callback\<[audio.AudioStreamDeviceChangeInfo](../apis-audio-kit/js-apis-audio.md#audiostreamdevicechangeinfo11)> | 是   | 回调函数,返回当前音频流的输出设备描述信息及变化原因。 |
2409
2410**错误码:**
2411
2412| 错误码ID | 错误信息                                   |
2413| -------- | ------------------------------------------ |
2414| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.       |
2415
2416**示例:**
2417
2418```ts
2419import { audio } from '@kit.AudioKit';
2420
2421avPlayer.on('audioOutputDeviceChangeWithInfo', (data: audio.AudioStreamDeviceChangeInfo) => {
2422  console.info(`${JSON.stringify(data)}`);
2423});
2424```
2425
2426### off('audioOutputDeviceChangeWithInfo')<sup>11+</sup>
2427
2428off(type: 'audioOutputDeviceChangeWithInfo', callback?: Callback\<audio.AudioStreamDeviceChangeInfo>): void
2429
2430取消订阅监听音频流输出设备变化及原因,使用callback方式返回结果。
2431
2432**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2433
2434**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2435
2436**参数:**
2437
2438| 参数名   | 类型                       | 必填 | 说明                                        |
2439| :------- | :------------------------- | :--- | :------------------------------------------ |
2440| type     | string                     | 是   | 事件回调类型,支持的事件为:'outputDeviceChange'。 |
2441| callback | Callback\<[audio.AudioStreamDeviceChangeInfo](../apis-audio-kit/js-apis-audio.md#audiostreamdevicechangeinfo11)> | 否   | 回调函数,返回当前音频流的输出设备描述信息及变化原因。 |
2442
2443**错误码:**
2444
2445| 错误码ID | 错误信息                                   |
2446| -------- | ------------------------------------------ |
2447| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.      |
2448
2449**示例:**
2450
2451```ts
2452avPlayer.off('audioOutputDeviceChangeWithInfo');
2453```
2454
2455### addSubtitleFromFd<sup>12+</sup>
2456
2457addSubtitleFromFd(fd: number, offset?: number, length?: number): Promise\<void>
2458
2459依据fd为视频添加外挂字幕,当前仅支持与视频资源同时设置(在avplayer设置fdSrc视频资源后设置外挂字幕)。使用Promise方式返回结果。
2460
2461**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2462
2463**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2464
2465**参数:**
2466
2467| 参数名 | 类型                   | 必填 | 说明                                                         |
2468| ------ | ---------------------- | ---- | ------------------------------------------------------------ |
2469| fd | number   | 是   | 资源句柄,通过[resourceManager.getRawFd](../apis-localization-kit/js-apis-resource-manager.md#getrawfd9)获取。 |
2470| offset | number | 否   | 资源偏移量,需要基于预置资源的信息输入,非法值会造成字幕频资源解析错误。 |
2471| length | number | 否   | 资源长度,默认值为文件中从偏移量开始的剩余字节,需要基于预置资源的信息输入,非法值会造成字幕频资源解析错误。 |
2472
2473**返回值:**
2474
2475| 类型           | 说明                                       |
2476| -------------- | ------------------------------------------ |
2477| Promise\<void> | 添加外挂字幕addSubtitleFromFd方法的Promise返回值。 |
2478
2479**错误码:**
2480
2481| 错误码ID | 错误信息                                   |
2482| -------- | ------------------------------------------ |
2483| 401      | The parameter check failed. Return by promise. |
2484| 5400102  | Operation not allowed. Return by promise. |
2485
2486**示例:**
2487
2488```ts
2489import { media } from '@kit.MediaKit'
2490
2491let context = getContext(this) as common.UIAbilityContext
2492let fileDescriptor = await context.resourceManager.getRawFd('xxx.srt')
2493
2494avPlayer.addSubtitleFromFd(fileDescriptor.fd, fileDescriptor.offset, fileDescriptor.length)
2495```
2496
2497### addSubtitleFromUrl<sup>12+</sup>
2498
2499addSubtitleFromUrl(url: string): Promise\<void>
2500
2501依据url为视频添加外挂字幕,当前仅支持与视频资源同时设置(在avplayer设置fdSrc视频资源后设置外挂字幕)。使用Promise方式返回结果。
2502
2503**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2504
2505**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2506
2507**参数:**
2508
2509| 参数名 | 类型   | 必填 | 说明                                                         |
2510| ------ | ------ | ---- | ------------------------------------------------------------ |
2511| url    | string | 是   | 外挂字幕文件地址。 |
2512
2513**返回值:**
2514
2515| 类型           | 说明                                       |
2516| -------------- | ------------------------------------------ |
2517| Promise\<void> | 添加外挂字幕addSubtitleFromUrl方法的Promise返回值。 |
2518
2519**错误码:**
2520
2521| 错误码ID | 错误信息                                   |
2522| -------- | ------------------------------------------ |
2523| 401      | The parameter check failed. Return by promise. |
2524| 5400102  | Operation not allowed. Return by promise. |
2525
2526**示例:**
2527
2528```ts
2529import { media } from '@kit.MediaKit'
2530
2531let fdUrl:string = 'http://xxx.xxx.xxx/xx/index.srt'
2532
2533let avPlayer: media.AVPlayer = await media.createAVPlayer()
2534avPlayer.addSubtitleFromUrl(fdUrl)
2535```
2536
2537### on('subtitleUpdate')<sup>12+</sup>
2538
2539on(type: 'subtitleUpdate', callback: Callback\<SubtitleInfo>): void
2540
2541订阅获取外挂字幕的事件,当有外挂字幕时,会通过订阅的回调方法通知用户。用户只能订阅一个外挂字幕事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
2542
2543**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2544
2545**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2546
2547**参数:**
2548
2549| 参数名   | 类型     | 必填 | 说明                                                         |
2550| -------- | -------- | ---- | ------------------------------------------------------------ |
2551| type | string | 是   | 事件回调类型,支持的事件为:'subtitleUpdate'。 |
2552| callback | function | 是   | 外挂字幕事件回调方法。 |
2553
2554**示例:**
2555
2556```ts
2557avPlayer.on('subtitleUpdate', async (info: media.SubtitleInfo) => {
2558  if (info) {
2559    let text = (!info.text) ? '' : info.text
2560    let startTime = (!info.startTime) ? 0 : info.startTime
2561    let duration = (!info.duration) ? 0 : info.duration
2562    console.info('subtitleUpdate info: text=' + text + ' startTime=' + startTime +' duration=' + duration)
2563  } else {
2564    console.info('subtitleUpdate info is null')
2565  }
2566})
2567```
2568
2569### off('subtitleUpdate')<sup>12+</sup>
2570
2571off(type: 'subtitleUpdate', callback?: Callback\<SubtitleInfo>): void
2572
2573取消订阅获取外挂字幕的事件。
2574
2575**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2576
2577**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2578
2579**参数:**
2580
2581| 参数名   | 类型     | 必填 | 说明                                                         |
2582| -------- | -------- | ---- | ------------------------------------------------------------ |
2583| type | string | 是   | 事件回调类型,支持的事件为:'subtitleUpdate'。 |
2584| callback | function | 否   | 取消外挂字幕事件的回调方法。 |
2585
2586**示例:**
2587
2588```ts
2589avPlayer.off('subtitleUpdate')
2590```
2591
2592### on('trackChange')<sup>12+</sup>
2593
2594on(type: 'trackChange', callback: OnTrackChangeHandler): void
2595
2596订阅获取轨道变更的事件,当播放的轨道变更时,会通过订阅的回调方法通知用户。用户只能订阅一个轨道变更事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
2597
2598**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2599
2600**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2601
2602**参数:**
2603
2604| 参数名   | 类型     | 必填 | 说明                                                         |
2605| -------- | -------- | ---- | ------------------------------------------------------------ |
2606| type | string | 是   | 事件回调类型,支持的事件为:'trackChange'。 |
2607| callback | [OnTrackChangeHandler](#ontrackchangehandler12) | 是   | 轨道变更事件回调方法。 |
2608
2609**示例:**
2610
2611```ts
2612avPlayer.on('trackChange', (index: number, isSelect: boolean) => {
2613  console.info('trackChange info: index=' + index + ' isSelect=' + isSelect)
2614})
2615```
2616
2617### off('trackChange')<sup>12+</sup>
2618
2619off(type: 'trackChange', callback?: OnTrackChangeHandler): void
2620
2621取消订阅获取轨道变更的事件。
2622
2623**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2624
2625**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2626
2627**参数:**
2628
2629| 参数名   | 类型     | 必填 | 说明                                                         |
2630| -------- | -------- | ---- | ------------------------------------------------------------ |
2631| type | string | 是   | 事件回调类型,支持的事件为:'trackChange'。 |
2632| callback | [OnTrackChangeHandler](#ontrackchangehandler12) | 否   | 取消轨道变更事件的回调方法。 |
2633
2634**示例:**
2635
2636```ts
2637avPlayer.off('trackChange')
2638```
2639
2640### on('trackInfoUpdate')<sup>12+</sup>
2641
2642on(type: 'trackInfoUpdate', callback: Callback\<Array\<MediaDescription>>): void
2643
2644订阅获取轨道信息更新的事件,当播放的轨道有更新时,会通过订阅的回调方法通知用户。用户只能订阅一个轨道变更事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
2645
2646**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2647
2648**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2649
2650**参数:**
2651
2652| 参数名   | 类型     | 必填 | 说明                                                         |
2653| -------- | -------- | ---- | ------------------------------------------------------------ |
2654| type | string | 是   | 事件回调类型,支持的事件为:'trackInfoUpdate'。 |
2655| callback | Callback\<Array\<[MediaDescription](#mediadescription8)>> | 是   | 轨道信息更新事件回调方法。 |
2656
2657**示例:**
2658
2659```ts
2660avPlayer.on('trackInfoUpdate', (info: Array<media.MediaDescription>) => {
2661  if (info) {
2662    for (let i = 0; i < info.length; i++) {
2663      let propertyIndex: Object = info[i][media.MediaDescriptionKey.MD_KEY_TRACK_INDEX];
2664      let propertyType: Object = info[i][media.MediaDescriptionKey.MD_KEY_TRACK_TYPE];
2665      console.info('track info: index=' + propertyIndex + ' tracktype=' + propertyType)
2666    }
2667  } else {
2668    console.info('track info is null')
2669  }
2670})
2671```
2672
2673### off('trackInfoUpdate')<sup>12+</sup>
2674
2675off(type: 'trackInfoUpdate', callback?: Callback\<Array\<MediaDescription>>): void
2676
2677取消订阅获取轨道变更的事件。
2678
2679**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2680
2681**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2682
2683**参数:**
2684
2685| 参数名   | 类型     | 必填 | 说明                                                         |
2686| -------- | -------- | ---- | ------------------------------------------------------------ |
2687| type | string | 是   | 事件回调类型,支持的事件为:'trackInfoUpdate'。 |
2688| callback | Callback\<Array\<[MediaDescription](#mediadescription8)>> | 否   | 取消轨道信息更新事件的回调方法。 |
2689
2690**示例:**
2691
2692```ts
2693avPlayer.off('trackInfoUpdate')
2694```
2695
2696### on('amplitudeUpdate')<sup>13+</sup>
2697
2698on(type: 'amplitudeUpdate', callback: Callback\<Array\<number>>): void
2699
2700订阅音频最大电平值,音频资源播放时定时上报。
2701
2702**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。
2703
2704**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2705
2706**参数:**
2707
2708| 参数名   | 类型     | 必填 | 说明                                                         |
2709| -------- | -------- | ---- | ------------------------------------------------------------ |
2710| type     | string   | 是   | 事件回调类型,支持的事件为:'amplitudeUpdate'。 |
2711| callback | Callback\<Array\<number>> | 是   | 音频最大电平值更新事件回调方法。 |
2712
2713**示例:**
2714
2715```ts
2716avPlayer.on('amplitudeUpdate', (value: Array<number>) => {
2717  console.info('amplitudeUpdate called,and amplitudeUpdate = ${value}')
2718})
2719```
2720
2721### off('amplitudeUpdate')<sup>13+</sup>
2722
2723off(type: 'amplitudeUpdate', callback?: Callback\<Array\<number>>): void
2724
2725取消订阅获取音频最大电平值事件。
2726
2727**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。
2728
2729**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2730
2731**参数:**
2732
2733| 参数名 | 类型   | 必填 | 说明                                                         |
2734| ------ | ------ | ---- | ------------------------------------------------------------ |
2735| type   | string | 是   | 事件回调类型,支持的事件为:'amplitudeUpdate'。 |
2736| callback | Callback\<Array\<number>> | 否   | 取消音频最大电平值更新事件回调方法。 |
2737
2738**示例:**
2739
2740```ts
2741avPlayer.off('amplitudeUpdate')
2742```
2743
2744## AVPlayerState<sup>9+</sup>
2745
2746type AVPlayerState = 'idle' | 'initialized' | 'prepared' | 'playing' | 'paused' | 'completed' | 'stopped' | 'released' | 'error'
2747
2748[AVPlayer](#avplayer9)的状态机,可通过state属性主动获取当前状态,也可通过监听[stateChange](#onstatechange9)事件上报当前状态,状态机之间的切换规则,可参考[音频播放开发指导](../../media/media/using-avplayer-for-playback.md)。
2749
2750**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
2751
2752**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2753
2754|              类型               | 说明                                                         |
2755| :-----------------------------: | :----------------------------------------------------------- |
2756|              'idle'               | 闲置状态,AVPlayer刚被创建[createAVPlayer()](#mediacreateavplayer9)或者调用了[reset()](#reset9)方法之后,进入Idle状态。<br/>首次创建[createAVPlayer()](#mediacreateavplayer9),所有属性都为默认值。<br/>调用[reset()](#reset9)方法,url<sup>9+</sup> 或 fdSrc<sup>9+</sup>或dataSrc<sup>10+</sup>属性及loop属性会被重置,其他用户设置的属性将被保留。 |
2757|           'initialized'           | 资源初始化,在Idle 状态设置 url<sup>9+</sup> 或 fdSrc<sup>9+</sup>属性,AVPlayer会进入initialized状态,此时可以配置窗口、音频等静态属性。 |
2758|            'prepared'             | 已准备状态,在initialized状态调用[prepare()](#prepare9)方法,AVPlayer会进入prepared状态,此时播放引擎的资源已准备就绪。 |
2759|             'playing'             | 正在播放状态,在prepared/paused/completed状态调用[play()](#play9)方法,AVPlayer会进入playing状态。 |
2760|             'paused'              | 暂停状态,在playing状态调用pause方法,AVPlayer会进入paused状态。 |
2761|            'completed'            | 播放至结尾状态,当媒体资源播放至结尾时,如果用户未设置循环播放(loop = true),AVPlayer会进入completed状态,此时调用[play()](#play9)会进入playing状态和重播,调用[stop()](#stop9)会进入stopped状态。 |
2762|             'stopped'             | 停止状态,在prepared/playing/paused/completed状态调用[stop()](#stop9)方法,AVPlayer会进入stopped状态,此时播放引擎只会保留属性,但会释放内存资源,可以调用[prepare()](#prepare9)重新准备,也可以调用[reset()](#reset9)重置,或者调用[release()](#release9)彻底销毁。 |
2763|            'released'             | 销毁状态,销毁与当前AVPlayer关联的播放引擎,无法再进行状态转换,调用[release()](#release9)方法后,会进入released状态,结束流程。 |
2764| 'error' | 错误状态,当**播放引擎**发生**不可逆的错误**(详见[媒体错误码](errorcode-media.md)),则会转换至当前状态,可以调用[reset()](#reset9)重置,也可以调用[release()](#release9)销毁重建。<br/>**注意:** 区分error状态和 [on('error')](#onerror9) :<br/>1、进入error状态时,会触发on('error')监听事件,可以通过on('error')事件获取详细错误信息;<br/>2、处于error状态时,播放服务进入不可播控的状态,要求客户端设计容错机制,使用[reset()](#reset9)重置或者[release()](#release9)销毁重建;<br/>3、如果客户端收到on('error'),但未进入error状态:<br/>原因1:客户端未按状态机调用API或传入参数错误,被AVPlayer拦截提醒,需要客户端调整代码逻辑;<br/>原因2:播放过程发现码流问题,导致容器、解码短暂异常,不影响连续播放和播控操作的,不需要客户端设计容错机制。 |
2765
2766## OnTrackChangeHandler<sup>12+</sup>
2767
2768type OnTrackChangeHandler = (index: number, isSelected: boolean) => void
2769
2770track变更事件回调方法。
2771
2772**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2773
2774**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2775
2776| 参数名   | 类型   | 必填 | 说明                                                         |
2777| ------ | ------ | ------ | ---------------------------------------------------------- |
2778| index  | number | 是 | 当前选中的track索引。     |
2779| isSelected | boolean | 是 | 当前索引的选中状态。 |
2780
2781## OnAVPlayerStateChangeHandle<sup>12+</sup>
2782
2783type OnAVPlayerStateChangeHandle = (state: AVPlayerState, reason: StateChangeReason) => void
2784
2785状态机切换事件回调方法。
2786
2787**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2788
2789**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2790
2791| 参数名   | 类型   | 必填 | 说明                                                         |
2792| ------ | ------ | ------ | ---------------------------------------------------------- |
2793| state  | [AVPlayerState](#avplayerstate9) | 是 | 当前播放状态。     |
2794| reason | [StateChangeReason](#statechangereason9) | 是 | 当前播放状态的切换原因。 |
2795
2796## OnBufferingUpdateHandler<sup>12+</sup>
2797
2798type OnBufferingUpdateHandler = (infoType: BufferingInfoType, value: number) => void
2799
2800播放缓存事件回调方法。
2801
2802**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2803
2804**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2805
2806| 参数名   | 类型   | 必填 | 说明                                                         |
2807| ------ | ------ | ------ | ------------------------------------------------------------ |
2808| infoType  | [BufferingInfoType](#bufferinginfotype8) | 是 | 缓存时间类型。     |
2809| value | number | 是 | value值固定为0。 |
2810
2811## OnVideoSizeChangeHandler<sup>12+</sup>
2812
2813type OnVideoSizeChangeHandler = (width: number, height: number) => void
2814
2815视频播放宽高变化事件回调方法。
2816
2817**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2818
2819**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2820
2821| 参数名   | 类型   | 必填 | 说明                                                         |
2822| ------ | ------ | ------ | ------------------------------------------------------------ |
2823| width  | number | 是 | 视频宽度。     |
2824| height | number | 是 | 视频高度。 |
2825
2826## AVFileDescriptor<sup>9+</sup>
2827
2828音视频文件资源描述,一种特殊资源的播放方式,使用场景:应用中的音频资源被连续存储在同一个文件中,需要根据偏移量和长度进行播放。
2829
2830**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
2831
2832**系统能力:** SystemCapability.Multimedia.Media.Core
2833
2834| 名称   | 类型   | 必填 | 说明                                                         |
2835| ------ | ------ | ---- | ------------------------------------------------------------ |
2836| fd     | number | 是   | 资源句柄,通过[resourceManager.getRawFd](../apis-localization-kit/js-apis-resource-manager.md#getrawfd9)获取,也可以通过[fs.open](../apis-core-file-kit/js-apis-file-fs.md#fsopen)获取。    |
2837| offset | number | 否   | 资源偏移量,默认值为0,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 |
2838| length | number | 否   | 资源长度,默认值为文件中从偏移量开始的剩余字节,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 |
2839
2840## AVDataSrcDescriptor<sup>10+</sup>
2841
2842音视频文件资源描述,用于DataSource播放方式,使用场景:应用在未获取完整音视频资源时,允许用户创建播放实例并开始播放,达到提前播放的目的。
2843
2844**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
2845
2846**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2847
2848| 名称   | 类型   | 必填 | 说明                                                         |
2849| ------ | ------ | ---- | ------------------------------------------------------------ |
2850| fileSize     | number | 是   | 待播放文件大小(字节),-1代表大小未知。如果fileSize设置为-1, 播放模式类似于直播,不能进行seek及setSpeed操作,不能设置loop属性,因此不能重新播放。 |
2851| callback | (buffer: ArrayBuffer, length: number, pos?: number) => number | 是   | 用户设置的回调函数,用于填写数据。<br>- 函数列式:callback: (buffer: ArrayBuffer, length: number, pos?:number) => number;<br>- buffer,ArrayBuffer类型,表示被填写的内存,必选。<br>- length,number类型,表示被填写内存的最大长度,必选。<br>- pos,number类型,表示填写的数据在资源文件中的位置,可选,当fileSize设置为-1时,该参数禁止被使用。 <br>- 返回值,number类型,返回要填充数据的长度。 |
2852
2853## SubtitleInfo<sup>12+</sup>
2854
2855外挂字幕信息,使用场景:订阅外挂字幕事件,回调返回外挂字幕详细信息。
2856
2857**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2858
2859**系统能力:** SystemCapability.Multimedia.Media.Core
2860
2861| 名称   | 类型   | 必填 | 说明                                                         |
2862| ------ | ------ | ---- | ------------------------------------------------------------ |
2863| text | string | 否  | 字幕文本信息。 |
2864| startTime | number | 否  | 显示当前字幕文本的开始时间(单位:毫秒)。 |
2865| duration | number | 否 | 显示当前字幕文本的持续时间(单位:毫秒)。 |
2866
2867## SeekMode<sup>8+</sup>
2868
2869视频播放的Seek模式枚举,可通过seek方法作为参数传递下去。
2870
2871**系统能力:** SystemCapability.Multimedia.Media.Core
2872
2873| 名称           | 值   | 说明                                                         |
2874| -------------- | ---- | ------------------------------------------------------------ |
2875| SEEK_NEXT_SYNC | 0    | 表示跳转到指定时间点的下一个关键帧,建议向后快进的时候用这个枚举值。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
2876| SEEK_PREV_SYNC | 1    | 表示跳转到指定时间点的上一个关键帧,建议向前快进的时候用这个枚举值。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
2877| SEEK_CLOSEST<sup>12+</sup> | 2    | 表示跳转到距离指定时间点最近的帧,建议精准跳转进度的时候用这个枚举值。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2878
2879## SwitchMode<sup>12+</sup>
2880
2881视频播放的selectTrack模式枚举,可通过selectTrack方法作为参数传递下去,当前仅DASH协议视频轨支持该扩展参数。
2882
2883**系统能力:** SystemCapability.Multimedia.Media.Core
2884
2885| 名称           | 值   | 说明                                                         |
2886| -------------- | ---- | ------------------------------------------------------------ |
2887| SMOOTH | 0    | 表示切换后视频平滑播放,该模式切换存在延迟,不会立即生效。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2888| SEGMENT | 1    | 表示切换后从当前分片开始位置播放,该模式立即切换,会有重复播放。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2889| CLOSEST | 2    | 表示从距离当前播放时间点最近的帧开始播放,该模式立即切换,切换后会卡住3到5s,然后恢复播放。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2890
2891## PlaybackSpeed<sup>8+</sup>
2892
2893视频播放的倍速枚举,可通过setSpeed方法作为参数传递下去。
2894
2895**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2896
2897**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
2898
2899| 名称                 | 值   | 说明                           |
2900| -------------------- | ---- | ------------------------------ |
2901| SPEED_FORWARD_0_75_X | 0    | 表示视频播放正常播速的0.75倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2902| SPEED_FORWARD_1_00_X | 1    | 表示视频播放正常播速。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。         |
2903| SPEED_FORWARD_1_25_X | 2    | 表示视频播放正常播速的1.25倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2904| SPEED_FORWARD_1_75_X | 3    | 表示视频播放正常播速的1.75倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2905| SPEED_FORWARD_2_00_X | 4    | 表示视频播放正常播速的2.00倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2906| SPEED_FORWARD_0_50_X<sup>12+</sup> | 5    | 表示视频播放正常播速的0.50倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2907| SPEED_FORWARD_1_50_X<sup>12+</sup> | 6    | 表示视频播放正常播速的1.50倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2908| SPEED_FORWARD_0_25_X<sup>12+</sup> | 8    | 表示视频播放正常播速的0.25倍。 |
2909| SPEED_FORWARD_0_125_X<sup>12+</sup> | 9    | 表示视频播放正常播速的0.125倍。 |
2910
2911## VideoScaleType<sup>9+</sup>
2912
2913枚举,视频缩放模式。
2914
2915**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2916
2917**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
2918
2919| 名称                      | 值   | 说明                                             |
2920| ------------------------- | ---- | ------------------------------------------------ |
2921| VIDEO_SCALE_TYPE_FIT      | 0    | 默认比例类型,视频拉伸至与窗口等大。              |
2922| VIDEO_SCALE_TYPE_FIT_CROP | 1    | 保持视频宽高比拉伸至填满窗口,内容可能会有裁剪。 |
2923
2924## MediaDescription<sup>8+</sup>
2925
2926通过key-value方式获取媒体信息。
2927
2928**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
2929
2930**系统能力:** SystemCapability.Multimedia.Media.Core
2931
2932| 名称          | 类型   | 必填 | 说明                                                         |
2933| ------------- | ------ | ---- | ------------------------------------------------------------ |
2934| [key: string] | Object | 是   | 该键值对支持的key取值范围,请参考[MediaDescriptionKey](#mediadescriptionkey8);每个key值的Object类型和范围,请参考[MediaDescriptionKey](#mediadescriptionkey8)对应Key值的说明 |
2935
2936**示例:**
2937
2938```ts
2939import { BusinessError } from '@kit.BasicServicesKit';
2940import { media } from '@kit.MediaKit';
2941
2942function printfItemDescription(obj: media.MediaDescription, key: string) {
2943  let property: Object = obj[key];
2944  console.info('audio key is ' + key); // 通过key值获取对应的value。key值具体可见[MediaDescriptionKey]
2945  console.info('audio value is ' + property); //对应key值得value。其类型可为任意类型,具体key对应value的类型可参考[MediaDescriptionKey]
2946}
2947
2948let avPlayer: media.AVPlayer | undefined = undefined;
2949media.createAVPlayer((err: BusinessError, player: media.AVPlayer) => {
2950  if(player != null) {
2951    avPlayer = player;
2952    console.info(`Succeeded in creating AVPlayer`);
2953    avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => {
2954      if (arrList != null) {
2955        for (let i = 0; i < arrList.length; i++) {
2956          printfItemDescription(arrList[i], media.MediaDescriptionKey.MD_KEY_TRACK_TYPE);  //打印出每条轨道MD_KEY_TRACK_TYPE的值
2957        }
2958      } else {
2959        console.error(`Failed to get TrackDescription, error:${error}`);
2960      }
2961    });
2962  } else {
2963    console.error(`Failed to create AVPlayer, error message:${err.message}`);
2964  }
2965});
2966```
2967
2968## PlaybackInfo<sup>12+</sup>
2969
2970通过key-value方式获取播放信息。
2971
2972**系统能力:** SystemCapability.Multimedia.Media.Core
2973
2974| 名称          | 类型   | 必填 | 说明                                                         |
2975| ------------- | ------ | ---- | ------------------------------------------------------------ |
2976| [key: string] | Object | 是   | 该键值对支持的key取值范围,请参考[PlaybackInfoKey](#playbackinfokey12);每个key值的Object类型和范围,请参考[PlaybackInfoKey](#playbackinfokey12)对应Key值的说明。 |
2977
2978**示例:**
2979
2980```ts
2981import { BusinessError } from '@kit.BasicServicesKit';
2982import { media } from '@kit.MediaKit';
2983
2984function printfPlaybackInfo(obj: media.PlaybackInfo, key: string) {
2985  let property: Object = obj[key];
2986  console.info('key is ' + key); // 通过key值获取对应的value。key值具体可见[PlaybackInfoKey]
2987  console.info('value is ' + property); //对应key值得value。其类型可为任意类型,具体key对应value的类型可参考[PlaybackInfoKey]
2988}
2989
2990let avPlayer: media.AVPlayer | undefined = undefined;
2991let playbackInfo: media.PlaybackInfo | undefined = undefined;
2992media.createAVPlayer(async (err: BusinessError, player: media.AVPlayer) => {
2993  if (player != null) {
2994    avPlayer = player;
2995    console.info(`Succeeded in creating AVPlayer`);
2996    if (avPlayer) {
2997      try {
2998        playbackInfo = await avPlayer.getPlaybackInfo();
2999        console.info(`AVPlayer getPlaybackInfo = ${JSON.stringify(playbackInfo)}`); // 打印整个PlaybackInfo的值
3000        printfPlaybackInfo(playbackInfo, media.PlaybackInfoKey.SERVER_IP_ADDRESS); // 打印ip的值
3001      } catch (error) {
3002        console.error(`error = ${error}`);
3003      }
3004    }
3005  } else {
3006    console.error(`Failed to create AVPlayer, error message:${err.message}`);
3007  }
3008});
3009```
3010
3011## AVRecorder<sup>9+</sup>
3012
3013音视频录制管理类,用于音视频媒体录制。在调用AVRecorder的方法前,需要先通过[createAVRecorder()](#mediacreateavrecorder9)构建一个AVRecorder实例。
3014
3015音视频录制demo可参考:[音频录制开发指导](../../media/media/using-avrecorder-for-recording.md)、[视频录制开发指导](../../media/media/video-recording.md)。
3016
3017> **说明:**
3018>
3019> 使用相机进行视频录制时,需要与相机模块配合,相机模块接口的使用详情见[相机管理](../apis-camera-kit/js-apis-camera.md)。
3020
3021### 属性
3022
3023**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3024
3025| 名称    | 类型                                 | 只读 | 可选 | 说明               |
3026| ------- | ------------------------------------ | ---- | ---- | ------------------ |
3027| state9+ | [AVRecorderState](#avrecorderstate9) | 是   | 否   | 音视频录制的状态。<br>**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
3028
3029### prepare<sup>9+</sup>
3030
3031prepare(config: AVRecorderConfig, callback: AsyncCallback\<void>): void
3032
3033异步方式进行音视频录制的参数设置。通过注册回调函数获取返回值。
3034
3035**需要权限:** ohos.permission.MICROPHONE
3036
3037不涉及音频录制时,可以不需要获取ohos.permission.MICROPHONE权限。
3038
3039使用相机视频录制还需要与相机模块配合,相机模块接口的使用详情见[相机管理](../apis-camera-kit/js-apis-camera.md)。
3040
3041**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3042
3043**参数:**
3044
3045| 参数名   | 类型                                   | 必填 | 说明                                  |
3046| -------- | -------------------------------------- | ---- | ------------------------------------- |
3047| config   | [AVRecorderConfig](#avrecorderconfig9) | 是   | 配置音视频录制的相关参数。            |
3048| callback | AsyncCallback\<void>                   | 是   | 回调函数。当prepare方法成功,err为undefined,否则为错误对象。 |
3049
3050**错误码:**
3051
3052以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3053
3054| 错误码ID | 错误信息                                |
3055| -------- | --------------------------------------- |
3056| 201      | Permission denied. Return by callback.  |
3057| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.    |
3058| 5400102  | Operate not permit. Return by callback. |
3059| 5400105  | Service died. Return by callback.       |
3060
3061**示例:**
3062
3063```ts
3064import { BusinessError } from '@kit.BasicServicesKit';
3065
3066// 配置参数以实际硬件设备支持的范围为准
3067let avRecorderProfile: media.AVRecorderProfile = {
3068  audioBitrate : 48000,
3069  audioChannels : 2,
3070  audioCodec : media.CodecMimeType.AUDIO_AAC,
3071  audioSampleRate : 48000,
3072  fileFormat : media.ContainerFormatType.CFT_MPEG_4,
3073  videoBitrate : 2000000,
3074  videoCodec : media.CodecMimeType.VIDEO_AVC,
3075  videoFrameWidth : 640,
3076  videoFrameHeight : 480,
3077  videoFrameRate : 30
3078}
3079let avRecorderConfig: media.AVRecorderConfig = {
3080  audioSourceType : media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC,
3081  videoSourceType : media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV,
3082  profile : avRecorderProfile,
3083  url : 'fd://', // 文件需先由调用者创建,赋予读写权限,将文件fd传给此参数,eg.fd://45
3084  rotation : 0, // 合理值0、90、180、270,非合理值prepare接口将报错
3085  location : { latitude : 30, longitude : 130 }
3086}
3087
3088avRecorder.prepare(avRecorderConfig, (err: BusinessError) => {
3089  if (err) {
3090    console.error('Failed to prepare and error is ' + err.message);
3091  } else {
3092    console.info('Succeeded in preparing');
3093  }
3094})
3095```
3096
3097### prepare<sup>9+</sup>
3098
3099prepare(config: AVRecorderConfig): Promise\<void>
3100
3101异步方式进行音视频录制的参数设置。通过Promise获取返回值。
3102
3103**需要权限:** ohos.permission.MICROPHONE
3104
3105不涉及音频录制时,可以不需要获ohos.permission.MICROPHONE权限。
3106
3107使用相机视频录制还需要与相机模块配合,相机模块接口的使用详情见[相机管理](../apis-camera-kit/js-apis-camera.md)。
3108
3109**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
3110
3111**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3112
3113**参数:**
3114
3115| 参数名 | 类型                                   | 必填 | 说明                       |
3116| ------ | -------------------------------------- | ---- | -------------------------- |
3117| config | [AVRecorderConfig](#avrecorderconfig9) | 是   | 配置音视频录制的相关参数。 |
3118
3119**返回值:**
3120
3121| 类型           | 说明                                       |
3122| -------------- | ------------------------------------------ |
3123| Promise\<void> | 异步音视频录制prepare方法的Promise返回值。 |
3124
3125**错误码:**
3126
3127以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3128
3129| 错误码ID | 错误信息                               |
3130| -------- | -------------------------------------- |
3131| 201      | Permission denied. Return by promise.  |
3132| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.    |
3133| 5400102  | Operate not permit. Return by promise. |
3134| 5400105  | Service died. Return by promise.       |
3135
3136**示例:**
3137
3138```ts
3139import { BusinessError } from '@kit.BasicServicesKit';
3140
3141// 配置参数以实际硬件设备支持的范围为准
3142let avRecorderProfile: media.AVRecorderProfile = {
3143  audioBitrate : 48000,
3144  audioChannels : 2,
3145  audioCodec : media.CodecMimeType.AUDIO_AAC,
3146  audioSampleRate : 48000,
3147  fileFormat : media.ContainerFormatType.CFT_MPEG_4,
3148  videoBitrate : 2000000,
3149  videoCodec : media.CodecMimeType.VIDEO_AVC,
3150  videoFrameWidth : 640,
3151  videoFrameHeight : 480,
3152  videoFrameRate : 30
3153}
3154let avRecorderConfig: media.AVRecorderConfig = {
3155  audioSourceType : media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC,
3156  videoSourceType : media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV,
3157  profile : avRecorderProfile,
3158  url : 'fd://',  // 文件需先由调用者创建,赋予读写权限,将文件fd传给此参数,eg.fd://45
3159  rotation : 0, // 合理值0、90、180、270,非合理值prepare接口报错
3160  location : { latitude : 30, longitude : 130 }
3161}
3162
3163avRecorder.prepare(avRecorderConfig).then(() => {
3164  console.info('Succeeded in preparing');
3165}).catch((err: BusinessError) => {
3166  console.error('Failed to prepare and catch error is ' + err.message);
3167});
3168```
3169
3170### getInputSurface<sup>9+</sup>
3171
3172getInputSurface(callback: AsyncCallback\<string>): void
3173
3174异步方式获得录制需要的surface。通过注册回调函数获取返回值。此surface提供给调用者,调用者从此surface中获取surfaceBuffer,填入相应的视频数据。
3175
3176应当注意,填入的视频数据需要携带时间戳(单位ns)和buffersize。时间戳的起始时间请以系统启动时间为基准。
3177
3178需在[prepare()](#prepare9-2)事件成功触发后,才能调用getInputSurface()方法。
3179
3180**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3181
3182**参数:**
3183
3184| 参数名   | 类型                   | 必填 | 说明                        |
3185| -------- | ---------------------- | ---- | --------------------------- |
3186| callback | AsyncCallback\<string> | 是   | 回调函数。当获取surface成功,err为undefined,data为获取到的surfaceId,否则为错误对象。 |
3187
3188**错误码:**
3189
3190以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
3191
3192| 错误码ID | 错误信息                                |
3193| -------- | --------------------------------------- |
3194| 5400102  | Operate not permit. Return by callback. |
3195| 5400103  | IO error. Return by callback.           |
3196| 5400105  | Service died. Return by callback.       |
3197
3198**示例:**
3199
3200```ts
3201import { BusinessError } from '@kit.BasicServicesKit';
3202let surfaceID: string; // 该surfaceID用于传递给相机接口创造videoOutput
3203
3204avRecorder.getInputSurface((err: BusinessError, surfaceId: string) => {
3205  if (err) {
3206    console.error('Failed to do getInputSurface and error is ' + err.message);
3207  } else {
3208    console.info('Succeeded in doing getInputSurface');
3209    surfaceID = surfaceId;
3210  }
3211});
3212
3213```
3214
3215### getInputSurface<sup>9+</sup>
3216
3217getInputSurface(): Promise\<string>
3218
3219异步方式获得录制需要的surface。通过Promise获取返回值。此surface提供给调用者,调用者从此surface中获取surfaceBuffer,填入相应的视频数据。
3220
3221应当注意,填入的视频数据需要携带时间戳(单位ns)和buffersize。时间戳的起始时间请以系统启动时间为基准。
3222
3223需在[prepare()](#prepare9-3)事件成功触发后,才能调用getInputSurface方法。
3224
3225**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3226
3227**返回值:**
3228
3229| 类型             | 说明                             |
3230| ---------------- | -------------------------------- |
3231| Promise\<string> | 异步获得surface的Promise返回值。 |
3232
3233**错误码:**
3234
3235以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
3236
3237| 错误码ID | 错误信息                               |
3238| -------- | -------------------------------------- |
3239| 5400102  | Operate not permit. Return by promise. |
3240| 5400103  | IO error. Return by promise.           |
3241| 5400105  | Service died. Return by promise.       |
3242
3243**示例:**
3244
3245```ts
3246import { BusinessError } from '@kit.BasicServicesKit';
3247let surfaceID: string; // 该surfaceID用于传递给相机接口创造videoOutput
3248
3249avRecorder.getInputSurface().then((surfaceId: string) => {
3250  console.info('Succeeded in getting InputSurface');
3251  surfaceID = surfaceId;
3252}).catch((err: BusinessError) => {
3253  console.error('Failed to get InputSurface and catch error is ' + err.message);
3254});
3255```
3256
3257### updateRotation<sup>12+</sup>
3258
3259updateRotation(rotation: number): Promise\<void>
3260
3261更新视频旋转角度。通过Promise获取返回值。
3262
3263当且仅当[prepare()](#prepare9-3)事件成功触发后,且在[start()](#start9)之前,才能调用updateRotation方法。
3264
3265**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3266
3267**参数:**
3268
3269| 参数名   | 类型                 | 必填 | 说明                        |
3270| -------- | -------------------- | ---- | --------------------------- |
3271| rotation | number | 是   | 旋转角度,取值仅支持0、90、180、270度。 |
3272
3273**返回值:**
3274
3275| 类型             | 说明                             |
3276| ---------------- | -------------------------------- |
3277| Promise\<void> | 异步返回函数执行结果。 |
3278
3279**错误码:**
3280
3281以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
3282
3283| 错误码ID | 错误信息                               |
3284| -------- | -------------------------------------- |
3285|   401    | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.   |
3286| 5400102  | Operation not allowed. Return by promise. |
3287| 5400103  | IO error. Return by promise.           |
3288| 5400105  | Service died. Return by promise.       |
3289
3290**示例:**
3291
3292```ts
3293import { BusinessError } from '@kit.BasicServicesKit';
3294
3295let rotation = 90
3296
3297avRecorder.updateRotation(rotation).then(() => {
3298  console.info('Succeeded in updateRotation');
3299}).catch((err: BusinessError) => {
3300  console.error('Failed to updateRotation and catch error is ' + err.message);
3301});
3302```
3303
3304### start<sup>9+</sup>
3305
3306start(callback: AsyncCallback\<void>): void
3307
3308异步方式开始视频录制。通过注册回调函数获取返回值。
3309
3310纯音频录制需在[prepare()](#prepare9-2)事件成功触发后,才能调用start方法。纯视频录制,音视频录制需在[getInputSurface()](#getinputsurface9)事件成功触发后,才能调用start方法。
3311
3312**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3313
3314**参数:**
3315
3316| 参数名   | 类型                 | 必填 | 说明                         |
3317| -------- | -------------------- | ---- | ---------------------------- |
3318| callback | AsyncCallback\<void> | 是   |回调函数。当开始录制视频成功,err为undefined,否则为错误对象。 |
3319
3320**错误码:**
3321
3322以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3323
3324| 错误码ID | 错误信息                                |
3325| -------- | --------------------------------------- |
3326| 5400102  | Operate not permit. Return by callback. |
3327| 5400103  | IO error. Return by callback.           |
3328| 5400105  | Service died. Return by callback.       |
3329
3330**示例:**
3331
3332```ts
3333import { BusinessError } from '@kit.BasicServicesKit';
3334
3335avRecorder.start((err: BusinessError) => {
3336  if (err) {
3337    console.error('Failed to start AVRecorder and error is ' + err.message);
3338  } else {
3339    console.info('Succeeded in starting AVRecorder');
3340  }
3341});
3342```
3343
3344### start<sup>9+</sup>
3345
3346start(): Promise\<void>
3347
3348异步方式开始视频录制。通过Promise获取返回值。
3349
3350纯音频录制需在[prepare()](#prepare9-3)事件成功触发后,才能调用start方法。纯视频录制,音视频录制需在[getInputSurface()](#getinputsurface9-1)事件成功触发后,才能调用start方法。
3351
3352**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
3353
3354**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3355
3356**返回值:**
3357
3358| 类型           | 说明                                  |
3359| -------------- | ------------------------------------- |
3360| Promise\<void> | 异步开始视频录制方法的Promise返回值。 |
3361
3362**错误码:**
3363
3364以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3365
3366| 错误码ID | 错误信息                               |
3367| -------- | -------------------------------------- |
3368| 5400102  | Operate not permit. Return by promise. |
3369| 5400103  | IO error. Return by promise.           |
3370| 5400105  | Service died. Return by promise.       |
3371
3372**示例:**
3373
3374```ts
3375import { BusinessError } from '@kit.BasicServicesKit';
3376
3377avRecorder.start().then(() => {
3378  console.info('Succeeded in starting AVRecorder');
3379}).catch((err: BusinessError) => {
3380  console.error('Failed to start AVRecorder and catch error is ' + err.message);
3381});
3382```
3383
3384### pause<sup>9+</sup>
3385
3386pause(callback: AsyncCallback\<void>): void
3387
3388异步方式暂停视频录制。通过注册回调函数获取返回值。
3389
3390需要[start()](#start9)事件成功触发后,才能调用pause方法,可以通过调用[resume()](#resume9)接口来恢复录制。
3391
3392**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3393
3394**参数:**
3395
3396| 参数名   | 类型                 | 必填 | 说明                        |
3397| -------- | -------------------- | ---- | --------------------------- |
3398| callback | AsyncCallback\<void> | 是   | 回调函数。当暂停视频录制成功,err为undefined,否则为错误对象。 |
3399
3400**错误码:**
3401
3402以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3403
3404| 错误码ID | 错误信息                                |
3405| -------- | --------------------------------------- |
3406| 5400102  | Operate not permit. Return by callback. |
3407| 5400103  | IO error. Return by callback.           |
3408| 5400105  | Service died. Return by callback.       |
3409
3410**示例:**
3411
3412```ts
3413import { BusinessError } from '@kit.BasicServicesKit';
3414
3415avRecorder.pause((err: BusinessError) => {
3416  if (err) {
3417    console.error('Failed to pause AVRecorder and error is ' + err.message);
3418  } else {
3419    console.info('Succeeded in pausing');
3420  }
3421});
3422```
3423
3424### pause<sup>9+</sup>
3425
3426pause(): Promise\<void>
3427
3428异步方式暂停视频录制。通过Promise获取返回值。
3429
3430需要[start()](#start9-1)事件成功触发后,才能调用pause方法,可以通过调用[resume()](#resume9-1)接口来恢复录制。
3431
3432**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
3433
3434**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3435
3436**返回值:**
3437
3438| 类型           | 说明                                  |
3439| -------------- | ------------------------------------- |
3440| Promise\<void> | 异步暂停视频录制方法的Promise返回值。 |
3441
3442**错误码:**
3443
3444以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3445
3446| 错误码ID | 错误信息                               |
3447| -------- | -------------------------------------- |
3448| 5400102  | Operate not permit. Return by promise. |
3449| 5400103  | IO error. Return by promise.           |
3450| 5400105  | Service died. Return by promise.       |
3451
3452**示例:**
3453
3454```ts
3455import { BusinessError } from '@kit.BasicServicesKit';
3456
3457avRecorder.pause().then(() => {
3458  console.info('Succeeded in pausing');
3459}).catch((err: BusinessError) => {
3460  console.error('Failed to pause AVRecorder and catch error is ' + err.message);
3461});
3462```
3463
3464### resume<sup>9+</sup>
3465
3466resume(callback: AsyncCallback\<void>): void
3467
3468异步方式恢复视频录制。通过注册回调函数获取返回值。
3469
3470需要在[pause()](#pause9-2)事件成功触发后,才能调用resume方法。
3471
3472**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3473
3474**参数:**
3475
3476| 参数名   | 类型                 | 必填 | 说明                         |
3477| -------- | -------------------- | ---- | ---------------------------- |
3478| callback | AsyncCallback\<void> | 是   | 回调函数。当恢复视频录制成功,err为undefined,否则为错误对象。 |
3479
3480**错误码:**
3481
3482以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3483
3484| 错误码ID | 错误信息                                |
3485| -------- | --------------------------------------- |
3486| 5400102  | Operate not permit. Return by callback. |
3487| 5400103  | IO error. Return by callback.           |
3488| 5400105  | Service died. Return by callback.       |
3489
3490**示例:**
3491
3492```ts
3493import { BusinessError } from '@kit.BasicServicesKit';
3494
3495avRecorder.resume((err: BusinessError) => {
3496  if (err) {
3497    console.error('Failed to resume AVRecorder and error is ' + err.message);
3498  } else {
3499    console.info('Succeeded in resuming AVRecorder');
3500  }
3501});
3502```
3503
3504### resume<sup>9+</sup>
3505
3506resume(): Promise\<void>
3507
3508异步方式恢复视频录制。通过Promise获取返回值。
3509
3510需要在[pause()](#pause9-3)事件成功触发后,才能调用resume方法。
3511
3512**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
3513
3514**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3515
3516**返回值:**
3517
3518| 类型           | 说明                                  |
3519| -------------- | ------------------------------------- |
3520| Promise\<void> | 异步恢复视频录制方法的Promise返回值。 |
3521
3522**错误码:**
3523
3524以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3525
3526| 错误码ID | 错误信息                               |
3527| -------- | -------------------------------------- |
3528| 5400102  | Operate not permit. Return by promise. |
3529| 5400103  | IO error. Return by promise.           |
3530| 5400105  | Service died. Return by promise.       |
3531
3532**示例:**
3533
3534```ts
3535import { BusinessError } from '@kit.BasicServicesKit';
3536
3537avRecorder.resume().then(() => {
3538  console.info('Succeeded in resuming AVRecorder');
3539}).catch((err: BusinessError) => {
3540  console.error('Failed to resume  AVRecorder failed and catch error is ' + err.message);
3541});
3542```
3543
3544### stop<sup>9+</sup>
3545
3546stop(callback: AsyncCallback\<void>): void
3547
3548异步方式停止视频录制。通过注册回调函数获取返回值。
3549
3550需要在[start()](#start9)或[pause()](#pause9-2)事件成功触发后,才能调用stop方法。
3551
3552纯音频录制时,需要重新调用[prepare()](#prepare9-2)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-2)和[getInputSurface()](#getinputsurface9)接口才能重新录制。
3553
3554**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3555
3556**参数:**
3557
3558| 参数名   | 类型                 | 必填 | 说明                         |
3559| -------- | -------------------- | ---- | ---------------------------- |
3560| callback | AsyncCallback\<void> | 是   | 回调函数。当停止视频录制成功,err为undefined,否则为错误对象。 |
3561
3562**错误码:**
3563
3564以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3565
3566| 错误码ID | 错误信息                                |
3567| -------- | --------------------------------------- |
3568| 5400102  | Operate not permit. Return by callback. |
3569| 5400103  | IO error. Return by callback.           |
3570| 5400105  | Service died. Return by callback.       |
3571
3572**示例:**
3573
3574```ts
3575import { BusinessError } from '@kit.BasicServicesKit';
3576
3577avRecorder.stop((err: BusinessError) => {
3578  if (err) {
3579    console.error('Failed to stop AVRecorder and error is ' + err.message);
3580  } else {
3581    console.info('Succeeded in stopping AVRecorder');
3582  }
3583});
3584```
3585
3586### stop<sup>9+</sup>
3587
3588stop(): Promise\<void>
3589
3590异步方式停止视频录制。通过Promise获取返回值。
3591
3592需要在[start()](#start9-1)或[pause()](#pause9-3)事件成功触发后,才能调用stop方法。
3593
3594纯音频录制时,需要重新调用[prepare()](#prepare9-3)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-3)和[getInputSurface()](#getinputsurface9-1)接口才能重新录制。
3595
3596**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
3597
3598**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3599
3600**返回值:**
3601
3602| 类型           | 说明                                  |
3603| -------------- | ------------------------------------- |
3604| Promise\<void> | 异步停止视频录制方法的Promise返回值。 |
3605
3606**错误码:**
3607
3608以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3609
3610| 错误码ID | 错误信息                               |
3611| -------- | -------------------------------------- |
3612| 5400102  | Operate not permit. Return by promise. |
3613| 5400103  | IO error. Return by promise.           |
3614| 5400105  | Service died. Return by promise.       |
3615
3616**示例:**
3617
3618```ts
3619import { BusinessError } from '@kit.BasicServicesKit';
3620
3621avRecorder.stop().then(() => {
3622  console.info('Succeeded in stopping AVRecorder');
3623}).catch((err: BusinessError) => {
3624  console.error('Failed to stop AVRecorder and catch error is ' + err.message);
3625});
3626```
3627
3628### reset<sup>9+</sup>
3629
3630reset(callback: AsyncCallback\<void>): void
3631
3632异步方式重置音视频录制。通过注册回调函数获取返回值。
3633
3634纯音频录制时,需要重新调用[prepare()](#prepare9-2)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-2)和[getInputSurface()](#getinputsurface9)接口才能重新录制。
3635
3636**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3637
3638**参数:**
3639
3640| 参数名   | 类型                 | 必填 | 说明                           |
3641| -------- | -------------------- | ---- | ------------------------------ |
3642| callback | AsyncCallback\<void> | 是   | 回调函数。当重置音视频录制成功,err为undefined,否则为错误对象。 |
3643
3644**错误码:**
3645
3646以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3647
3648| 错误码ID | 错误信息                          |
3649| -------- | --------------------------------- |
3650| 5400103  | IO error. Return by callback.     |
3651| 5400105  | Service died. Return by callback. |
3652
3653**示例:**
3654
3655```ts
3656import { BusinessError } from '@kit.BasicServicesKit';
3657
3658avRecorder.reset((err: BusinessError) => {
3659  if (err) {
3660    console.error('Failed to reset AVRecorder and error is ' + err.message);
3661  } else {
3662    console.info('Succeeded in resetting AVRecorder');
3663  }
3664});
3665```
3666
3667### reset<sup>9+</sup>
3668
3669reset(): Promise\<void>
3670
3671异步方式重置音视频录制。通过Promise获取返回值。
3672
3673纯音频录制时,需要重新调用[prepare()](#prepare9-3)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-3)和[getInputSurface()](#getinputsurface9-1)接口才能重新录制。
3674
3675**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3676
3677**返回值:**
3678
3679| 类型           | 说明                                    |
3680| -------------- | --------------------------------------- |
3681| Promise\<void> | 异步重置音视频录制方法的Promise返回值。 |
3682
3683**错误码:**
3684
3685以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3686
3687| 错误码ID | 错误信息                         |
3688| -------- | -------------------------------- |
3689| 5400103  | IO error. Return by promise.     |
3690| 5400105  | Service died. Return by promise. |
3691
3692**示例:**
3693
3694```ts
3695import { BusinessError } from '@kit.BasicServicesKit';
3696
3697avRecorder.reset().then(() => {
3698  console.info('Succeeded in resetting AVRecorder');
3699}).catch((err: BusinessError) => {
3700  console.error('Failed to reset and catch error is ' + err.message);
3701});
3702```
3703
3704### release<sup>9+</sup>
3705
3706release(callback: AsyncCallback\<void>): void
3707
3708异步方式释放音视频录制资源。通过注册回调函数获取返回值。
3709
3710释放音视频录制资源之后,该AVRecorder实例不能再进行任何操作。
3711
3712**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3713
3714**参数:**
3715
3716| 参数名   | 类型                 | 必填 | 说明                               |
3717| -------- | -------------------- | ---- | ---------------------------------- |
3718| callback | AsyncCallback\<void> | 是   | 回调函数。当释放音视频录制资源成功,err为undefined,否则为错误对象。 |
3719
3720**错误码:**
3721
3722以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3723
3724| 错误码ID | 错误信息                          |
3725| -------- | --------------------------------- |
3726| 5400105  | Service died. Return by callback. |
3727
3728**示例:**
3729
3730```ts
3731import { BusinessError } from '@kit.BasicServicesKit';
3732
3733avRecorder.release((err: BusinessError) => {
3734  if (err) {
3735    console.error('Failed to release AVRecorder and error is ' + err.message);
3736  } else {
3737    console.info('Succeeded in releasing AVRecorder');
3738  }
3739});
3740```
3741
3742### release<sup>9+</sup>
3743
3744release(): Promise\<void>
3745
3746异步方式释放音视频录制资源。通过Promise获取返回值。
3747
3748释放音视频录制资源之后,该AVRecorder实例不能再进行任何操作。
3749
3750**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
3751
3752**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3753
3754**返回值:**
3755
3756| 类型           | 说明                                        |
3757| -------------- | ------------------------------------------- |
3758| Promise\<void> | 异步释放音视频录制资源方法的Promise返回值。 |
3759
3760**错误码:**
3761
3762以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3763
3764| 错误码ID | 错误信息                          |
3765| -------- | --------------------------------- |
3766| 5400105  | Service died. Return by callback. |
3767
3768**示例:**
3769
3770```ts
3771import { BusinessError } from '@kit.BasicServicesKit';
3772
3773avRecorder.release().then(() => {
3774  console.info('Succeeded in releasing AVRecorder');
3775}).catch((err: BusinessError) => {
3776  console.error('Failed to release AVRecorder and catch error is ' + err.message);
3777});
3778```
3779
3780### getCurrentAudioCapturerInfo<sup>11+</sup>
3781
3782getCurrentAudioCapturerInfo(callback: AsyncCallback\<audio.AudioCapturerChangeInfo>): void
3783
3784异步方式获取当前音频采集参数。通过注册回调函数获取返回值。
3785
3786在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。
3787
3788**系统能力**:SystemCapability.Multimedia.Media.AVRecorder
3789
3790**参数**:
3791
3792| 参数名   | 类型                                                         | 必填 | 说明                                 |
3793| -------- | ------------------------------------------------------------ | ---- | ------------------------------------ |
3794| callback | AsyncCallback\<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | 是   | 回调函数。当获取音频采集参数成功时,err为undefined,data为获取到的audio.AudioCapturerChangeInfo,否则为错误对象。 |
3795
3796**错误码**:
3797
3798以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3799
3800| 错误码ID | 错误信息                                   |
3801| -------- | ------------------------------------------ |
3802| 5400102  | Operation not allowed. |
3803| 5400103  | I/O error.             |
3804| 5400105  | Service died. Return by callback.          |
3805
3806**示例**:
3807
3808```ts
3809import { audio } from '@kit.AudioKit';
3810
3811let currentCapturerInfo: audio.AudioCapturerChangeInfo;
3812
3813avRecorder.getCurrentAudioCapturerInfo((err: BusinessError, capturerInfo: audio.AudioCapturerChangeInfo) => {
3814  if (err) {
3815    console.error('Failed to get CurrentAudioCapturerInfo and error is ' + err.message);
3816  } else {
3817    console.info('Succeeded in getting CurrentAudioCapturerInfo');
3818    currentCapturerInfo = capturerInfo;
3819  }
3820});
3821```
3822
3823### getCurrentAudioCapturerInfo<sup>11+</sup>
3824
3825getCurrentAudioCapturerInfo(): Promise\<audio.AudioCapturerChangeInfo>
3826
3827异步方式获取当前音频采集参数。通过Promise获取返回值。
3828
3829在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。
3830
3831**系统能力**:SystemCapability.Multimedia.Media.AVRecorder
3832
3833**返回值**:
3834
3835| 类型                                                         | 说明                                              |
3836| ------------------------------------------------------------ | ------------------------------------------------- |
3837| Promise\<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | Promise对象,返回获取的当前音频采集参数。 |
3838
3839**错误码**:
3840
3841以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3842
3843| 错误码ID | 错误信息                         |
3844| -------- | -------------------------------- |
3845| 5400102  | Operation not allowed.           |
3846| 5400103  | I/O error.                       |
3847| 5400105  | Service died. Return by promise. |
3848
3849**示例**:
3850
3851```ts
3852import { audio } from '@kit.AudioKit';
3853
3854let currentCapturerInfo: audio.AudioCapturerChangeInfo;
3855
3856avRecorder.getCurrentAudioCapturerInfo().then((capturerInfo: audio.AudioCapturerChangeInfo) => {
3857  console.info('Succeeded in getting CurrentAudioCapturerInfo');
3858  currentCapturerInfo = capturerInfo;
3859}).catch((err: BusinessError) => {
3860  console.error('Failed to get CurrentAudioCapturerInfo and catch error is ' + err.message);
3861});
3862```
3863
3864### getAudioCapturerMaxAmplitude<sup>11+</sup>
3865
3866getAudioCapturerMaxAmplitude(callback: AsyncCallback\<number>): void
3867
3868异步方式获取当前音频最大振幅。通过注册回调函数获取返回值。
3869
3870在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。
3871
3872调用接口时,获取到的返回值是上一次获取最大振幅的时刻到当前这段区间内的音频最大振幅。即,如果在1s的时刻获取了一次最大振幅,在2s时再获取到的最大振幅时1-2s这个区间里面的最大值。
3873
3874**系统能力**:SystemCapability.Multimedia.Media.AVRecorder
3875
3876**参数**:
3877
3878| 参数名   | 类型                   | 必填 | 说明                                 |
3879| -------- | ---------------------- | ---- | ------------------------------------ |
3880| callback | AsyncCallback\<number> | 是   |  回调函数。获取当前音频最大振幅成功时,err为undefined,data为获取到的最大振幅,否则为错误对象。 |
3881
3882**错误码**:
3883
3884以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3885
3886| 错误码ID | 错误信息                                   |
3887| -------- | ------------------------------------------ |
3888| 5400102  | Operation not allowed. |
3889| 5400105  | Service died. Return by callback.          |
3890
3891**示例**:
3892
3893```ts
3894let maxAmplitude: number;
3895
3896avRecorder.getAudioCapturerMaxAmplitude((err: BusinessError, amplitude: number) => {
3897  if (err) {
3898    console.error('Failed to get AudioCapturerMaxAmplitude and error is ' + err.message);
3899  } else {
3900    console.info('Succeeded in getting AudioCapturerMaxAmplitude');
3901    maxAmplitude = amplitude;
3902  }
3903});
3904```
3905
3906### getAudioCapturerMaxAmplitude<sup>11+</sup>
3907
3908getAudioCapturerMaxAmplitude(): Promise\<number>
3909
3910异步方式获取当前音频最大振幅参数。通过Promise获取返回值。
3911
3912在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。
3913
3914调用接口时,获取到的返回值是上一次获取最大振幅的时刻到当前这段区间内的音频最大振幅。即,如果在1s的时刻获取了一次最大振幅,在2s时再获取到的最大振幅时1-2s这个区间里面的最大值。
3915
3916**系统能力**:SystemCapability.Multimedia.Media.AVRecorder
3917
3918**返回值**:
3919
3920| 类型             | 说明                                              |
3921| ---------------- | ------------------------------------------------- |
3922| Promise\<number> | Promise对象,返回获取的当前音频最大振幅。 |
3923
3924**错误码**:
3925
3926以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3927
3928| 错误码ID | 错误信息                         |
3929| -------- | -------------------------------- |
3930| 5400102  | Operation not allowed.           |
3931| 5400105  | Service died. Return by promise. |
3932
3933**示例**:
3934
3935```ts
3936let maxAmplitude: number;
3937
3938avRecorder.getAudioCapturerMaxAmplitude().then((amplitude: number) => {
3939  console.info('Succeeded in getting AudioCapturerMaxAmplitude');
3940  maxAmplitude = amplitude;
3941}).catch((err: BusinessError) => {
3942  console.error('Failed to get AudioCapturerMaxAmplitude and catch error is ' + err.message);
3943});
3944```
3945
3946### getAvailableEncoder<sup>11+</sup>
3947
3948getAvailableEncoder(callback: AsyncCallback\<Array\<EncoderInfo>>): void
3949
3950异步方式获取可用的编码器参数。通过注册回调函数获取返回值。
3951
3952**系统能力**:SystemCapability.Multimedia.Media.AVRecorder
3953
3954**参数**:
3955
3956| 参数名   | 类型                                                  | 必填 | 说明                                 |
3957| -------- | ----------------------------------------------------- | ---- | ------------------------------------ |
3958| callback | AsyncCallback\<Array\<[EncoderInfo](#encoderinfo11)>> | 是   | 回调函数。获取可用的编码器参数成功时,err为undefined,data为获取到的编码器参数,否则为错误对象。 |
3959
3960**错误码**:
3961
3962以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3963
3964| 错误码ID | 错误信息                                   |
3965| -------- | ------------------------------------------ |
3966| 5400102  | Operation not allowed. |
3967| 5400105  | Service died. Return by callback.          |
3968
3969**示例**:
3970
3971```ts
3972let encoderInfo: media.EncoderInfo;
3973
3974avRecorder.getAvailableEncoder((err: BusinessError, info: media.EncoderInfo[]) => {
3975  if (err) {
3976    console.error('Failed to get AvailableEncoder and error is ' + err.message);
3977  } else {
3978    console.info('Succeeded in getting AvailableEncoder');
3979    encoderInfo = info[0];
3980  }
3981});
3982```
3983
3984### getAvailableEncoder<sup>11+</sup>
3985
3986getAvailableEncoder(): Promise\<Array\<EncoderInfo>>
3987
3988异步方式获取可用的编码器参数。通过注册回调函数获取返回值。
3989
3990**系统能力**:SystemCapability.Multimedia.Media.AVRecorder
3991
3992**返回值**:
3993
3994| 类型                                            | 说明                                            |
3995| ----------------------------------------------- | ----------------------------------------------- |
3996| Promise\<Array\<[EncoderInfo](#encoderinfo11)>> | Promise对象,返回获取的可用的编码器参数。 |
3997
3998**错误码**:
3999
4000以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4001
4002| 错误码ID | 错误信息                         |
4003| -------- | -------------------------------- |
4004| 5400102  | Operation not allowed.           |
4005| 5400105  | Service died. Return by promise. |
4006
4007**示例**:
4008
4009```ts
4010let encoderInfo: media.EncoderInfo;
4011
4012avRecorder.getAvailableEncoder().then((info: media.EncoderInfo[]) => {
4013  console.info('Succeeded in getting AvailableEncoder');
4014  encoderInfo = info[0];
4015}).catch((err: BusinessError) => {
4016  console.error('Failed to get AvailableEncoder and catch error is ' + err.message);
4017});
4018```
4019
4020### getAVRecorderConfig<sup>11+</sup>
4021
4022getAVRecorderConfig(callback: AsyncCallback\<AVRecorderConfig>): void
4023
4024异步方式获取实时的配置参数。通过注册回调函数获取返回值。
4025
4026只能在[prepare()](#prepare9-2)接口调用后调用。
4027
4028**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4029
4030**参数:**
4031
4032| 参数名   | 类型                   | 必填 | 说明                        |
4033| -------- | ---------------------- | ---- | --------------------------- |
4034| callback | AsyncCallback\<[AVRecorderConfig](#avrecorderconfig9)> | 是   | 回调函数。获取实时配置的参数成功时,err为undefined,data为获取到的配置参数,否则为错误对象。 |
4035
4036**错误码:**
4037
4038以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
4039
4040| 错误码ID | 错误信息                                   |
4041| -------- | ------------------------------------------ |
4042| 5400102  | Operate not permit. Return by callback. |
4043| 5400103  | IO error. Return by callback.             |
4044| 5400105  | Service died. Return by callback.          |
4045
4046**示例:**
4047
4048```ts
4049import { BusinessError } from '@kit.BasicServicesKit';
4050
4051let avConfig: media.AVRecorderConfig;
4052
4053avRecorder.getAVRecorderConfig((err: BusinessError, config: media.AVRecorderConfig) => {
4054  if (err) {
4055    console.error('Failed to get avConfig and error is ' + err.message);
4056  } else {
4057    console.info('Succeeded in getting AVRecorderConfig');
4058    avConfig = config;
4059  }
4060});
4061```
4062
4063### getAVRecorderConfig<sup>11+</sup>
4064
4065getAVRecorderConfig(): Promise\<AVRecorderConfig>;
4066
4067异步方式获取实时的配置参数。通过Promise获取返回值。
4068
4069只能在[prepare()](#prepare9-3)接口调用后调用。
4070
4071**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4072
4073**返回值:**
4074
4075| 类型             | 说明                             |
4076| ---------------- | -------------------------------- |
4077| Promise\<[AVRecorderConfig](#avrecorderconfig9)> | 异步获得实时配置参数的回调方法。 |
4078
4079**错误码:**
4080
4081以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
4082
4083| 错误码ID | 错误信息                                  |
4084| -------- | ----------------------------------------- |
4085| 5400102  | Operate not permit. Return by promise. |
4086| 5400103  | IO error. Return by promise.             |
4087| 5400105  | Service died. Return by promise.          |
4088
4089**示例:**
4090
4091```ts
4092import { BusinessError } from '@kit.BasicServicesKit';
4093
4094let avConfig: media.AVRecorderConfig;
4095
4096avRecorder.getAVRecorderConfig().then((config: media.AVRecorderConfig) => {
4097  console.info('Succeeded in getting AVRecorderConfig');
4098  avConfig = config;
4099}).catch((err: BusinessError) => {
4100  console.error('Failed to get AVRecorderConfig and catch error is ' + err.message);
4101});
4102```
4103
4104### on('stateChange')<sup>9+</sup>
4105
4106on(type: 'stateChange', callback: OnAVRecorderStateChangeHandler): void
4107
4108订阅录制状态机AVRecorderState切换的事件,当 AVRecorderState状态机发生变化时,会通过订阅的回调方法通知用户。用户只能订阅一个状态机切换事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
4109
4110**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4111
4112**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4113
4114**参数:**
4115
4116| 参数名   | 类型     | 必填 | 说明                                                         |
4117| -------- | -------- | ---- | ------------------------------------------------------------ |
4118| type     | string   | 是   | 状态机切换事件回调类型,支持的事件:'stateChange',用户操作和系统都会触发此事件。 |
4119| callback | [OnAVRecorderStateChangeHandler](#onavrecorderstatechangehandler12) | 是   | 状态机切换事件回调方法。 |
4120
4121**错误码:**
4122
4123以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4124
4125| 错误码ID | 错误信息                          |
4126| -------- | --------------------------------- |
4127| 5400103  | IO error. Return by callback.     |
4128| 5400105  | Service died. Return by callback. |
4129
4130**示例:**
4131
4132```ts
4133avRecorder.on('stateChange', async (state: media.AVRecorderState, reason: media.StateChangeReason) => {
4134  console.info('case state has changed, new state is :' + state + ',and new reason is : ' + reason);
4135});
4136```
4137
4138### off('stateChange')<sup>9+</sup>
4139
4140off(type: 'stateChange', callback?: OnAVRecorderStateChangeHandler): void
4141
4142取消订阅播放状态机[AVRecorderState](#avrecorderstate9)切换的事件。
4143
4144**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4145
4146**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4147
4148**参数:**
4149
4150| 参数名 | 类型   | 必填 | 说明                                                         |
4151| ------ | ------ | ---- | ------------------------------------------------------------ |
4152| type   | string | 是   | 状态机切换事件回调类型,支持的事件:'stateChange',用户操作和系统都会触发此事件。 |
4153| callback | [OnAVRecorderStateChangeHandler](#onavrecorderstatechangehandler12) | 否   | 状态机切换事件回调方法。<br/>从API version 12开始支持此参数。 |
4154
4155**示例:**
4156
4157```ts
4158avRecorder.off('stateChange');
4159```
4160
4161### on('error')<sup>9+</sup>
4162
4163on(type: 'error', callback: ErrorCallback): void
4164
4165订阅AVRecorder的错误事件,该事件仅用于错误提示,不需要用户停止播控动作。如果此时[AVRecorderState](#avrecorderstate9)也切至error状态,用户需要通过[reset()](#reset9-2)或者[release()](#release9-2)退出录制操作。
4166
4167用户只能订阅一个错误事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
4168
4169**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4170
4171**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4172
4173**参数:**
4174
4175| 参数名   | 类型          | 必填 | 说明                                                         |
4176| -------- | ------------- | ---- | ------------------------------------------------------------ |
4177| type     | string        | 是   | 录制错误事件回调类型'error'。 <br>- 'error':录制过程中发生错误,触发该事件。 |
4178| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 录制错误事件回调方法。                                       |
4179
4180**错误码:**
4181
4182以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4183
4184| 错误码ID | 错误信息                                   |
4185| -------- | ------------------------------------------ |
4186| 201      | Permission denied.     |
4187| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
4188| 801      | Capability not supported. |
4189| 5400101  | No memory.             |
4190| 5400102  | Operation not allowed. |
4191| 5400103  | I/O error.             |
4192| 5400104  | Time out.              |
4193| 5400105  | Service died.          |
4194| 5400106  | Unsupport format.      |
4195| 5400107  | Audio interrupted.     |
4196
4197**示例:**
4198
4199```ts
4200import { BusinessError } from '@kit.BasicServicesKit';
4201
4202avRecorder.on('error', (err: BusinessError) => {
4203  console.info('case avRecorder.on(error) called, errMessage is ' + err.message);
4204});
4205```
4206
4207### off('error')<sup>9+</sup>
4208
4209off(type: 'error', callback?: ErrorCallback): void
4210
4211取消订阅录制错误事件,取消后不再接收到AVRecorder的错误事件。
4212
4213**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4214
4215**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4216
4217**参数:**
4218
4219| 参数名 | 类型   | 必填 | 说明                                                         |
4220| ------ | ------ | ---- | ------------------------------------------------------------ |
4221| type   | string | 是   | 录制错误事件回调类型'error'。 <br>- 'error':录制过程中发生错误,触发该事件。 |
4222| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否   | 录制错误事件回调方法。<br/>从API version 12开始支持此参数。                   |
4223
4224**示例:**
4225
4226```ts
4227avRecorder.off('error');
4228```
4229
4230### on('audioCapturerChange')<sup>11+</sup>
4231
4232on(type: 'audioCapturerChange', callback: Callback<audio.AudioCapturerChangeInfo>): void
4233
4234订阅录音配置变化的回调,任意录音配置的变化会触发变化后的录音配置全量信息回调。
4235
4236当用户重复订阅时,以最后一次订阅的回调接口为准。
4237
4238**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4239
4240**参数:**
4241
4242| 参数名   | 类型     | 必填 | 说明                                                         |
4243| -------- | -------- | ---- | ------------------------------------------------------------ |
4244| type     | string   | 是   |录音配置变化的回调类型,支持的事件:'audioCapturerChange'。 |
4245| callback | Callback<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | 是 | 变化后的录音配置全量信息。|
4246
4247**错误码:**
4248
4249| 错误码ID | 错误信息                                   |
4250| -------- | ------------------------------------------ |
4251| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.      |
4252
4253**示例:**
4254
4255```ts
4256let capturerChangeInfo: audio.AudioCapturerChangeInfo;
4257
4258avRecorder.on('audioCapturerChange',  (audioCapturerChangeInfo: audio.AudioCapturerChangeInfo) => {
4259  console.info('audioCapturerChange called');
4260  capturerChangeInfo = audioCapturerChangeInfo;
4261});
4262```
4263
4264### off('audioCapturerChange')<sup>11+</sup>
4265
4266off(type: 'audioCapturerChange', callback?: Callback<audio.AudioCapturerChangeInfo>): void
4267
4268取消订阅录音变化的回调事件。
4269
4270**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4271
4272**参数:**
4273
4274| 参数名 | 类型   | 必填 | 说明                                                         |
4275| ------ | ------ | ---- | ------------------------------------------------------------ |
4276| type   | string | 是   | 录音配置变化的回调类型,支持的事件:'audioCapturerChange'。 |
4277| callback | Callback<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | 否 | 变化后的录音配置全量信息。<br/>从API version 12开始支持此参数。|
4278
4279**示例:**
4280
4281```ts
4282avRecorder.off('audioCapturerChange');
4283```
4284
4285### on('photoAssetAvailable')<sup>12+</sup>
4286
4287on(type: 'photoAssetAvailable', callback: Callback\<photoAccessHelper.PhotoAsset>): void
4288
4289订阅媒体资源回调事件,当[FileGenerationMode](#filegenerationmode12)枚举设置为系统创建媒体文件时,会在[stop](#stop9-2)操作结束后把[PhotoAsset](../apis-media-library-kit/js-apis-photoAccessHelper.md#photoasset)对象回调给应用。
4290
4291当用户重复订阅时,以最后一次订阅的回调接口为准。
4292
4293**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4294
4295**参数:**
4296
4297| 参数名   | 类型     | 必填 | 说明                                                         |
4298| -------- | -------- | ---- | ------------------------------------------------------------ |
4299| type     | string   | 是   |录像资源的回调类型,支持的事件:'photoAssetAvailable'。 |
4300| callback | Callback<[photoAccessHelper.PhotoAsset](../apis-media-library-kit/js-apis-photoAccessHelper.md#photoasset)> | 是 | 系统创建的资源文件对应的PhotoAsset对象|
4301
4302**错误码:**
4303
4304| 错误码ID | 错误信息                                   |
4305| -------- | ------------------------------------------ |
4306| 5400103  | IO error. Return by callback.             |
4307| 5400105  | Service died. Return by callback.          |
4308
4309**示例:**
4310
4311```ts
4312import { photoAccessHelper } from '@kit.MediaLibraryKit';
4313let photoAsset: photoAccessHelper.PhotoAsset;
4314
4315// 例:处理photoAsset回调,保存video
4316async saveVideo(asset: photoAccessHelper.PhotoAsset) {
4317  console.info("saveVideo called");
4318  try {
4319    let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(getContext(this));
4320    let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(asset);
4321    assetChangeRequest.saveCameraPhoto();
4322    await phAccessHelper.applyChanges(assetChangeRequest);
4323    console.info('apply saveVideo successfully');
4324  } catch (err) {
4325    console.error(`apply saveVideo failed with error: ${err.code}, ${err.message}`);
4326  }
4327}
4328// 注册photoAsset监听
4329avRecorder.on('photoAssetAvailable',  (asset: photoAccessHelper.PhotoAsset) => {
4330  console.info('photoAssetAvailable called');
4331  if (asset != undefined) {
4332    photoAsset = asset;
4333    // 处理photoAsset回调
4334    // 例: this.saveVideo(asset);
4335  } else {
4336    console.error('photoAsset is undefined');
4337  }
4338});
4339```
4340
4341### off('photoAssetAvailable')<sup>12+</sup>
4342
4343off(type: 'photoAssetAvailable', callback?: Callback<photoAccessHelper.PhotoAsset>): void
4344
4345取消订阅媒体资源的回调类型。
4346
4347**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4348
4349**参数:**
4350
4351| 参数名 | 类型   | 必填 | 说明                                                         |
4352| ------ | ------ | ---- | ------------------------------------------------------------ |
4353| type   | string | 是   | 录音配置变化的回调类型,支持的事件:'photoAssetAvailable'。 |
4354
4355**示例:**
4356
4357```ts
4358avRecorder.off('photoAssetAvailable');
4359```
4360
4361## AVRecorderState<sup>9+</sup>
4362
4363type AVRecorderState = 'idle' | 'prepared' | 'started' | 'paused' | 'stopped' | 'released' | 'error'
4364
4365音视频录制的状态机。可通过state属性获取当前状态。
4366
4367**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
4368
4369**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4370
4371| 类型     | 说明                                                         |
4372| -------- | ------------------------------------------------------------ |
4373| 'idle'     | 闲置状态。此时可以调用[AVRecorder.prepare()](#prepare9-2)方法设置录制参数,进入prepared状态。AVRecorder刚被创建,或者在任何非released状态下调用[AVRecorder.reset()](#reset9-2)方法,均进入idle状态。 |
4374| 'prepared' | 参数设置完成。此时可以调用[AVRecorder.start()](#start9)方法开始录制,进入started状态。 |
4375| 'started'  | 正在录制。此时可以调用[AVRecorder.pause()](#pause9-2)方法暂停录制,进入paused状态。也可以调用[AVRecorder.stop()](#stop9-2)方法结束录制,进入stopped状态。 |
4376| 'paused'   | 录制暂停。此时可以调用[AVRecorder.resume()](#resume9)方法继续录制,进入started状态。也可以调用[AVRecorder.stop()](#stop9-2)方法结束录制,进入stopped状态。 |
4377| 'stopped'  | 录制停止。此时可以调用[AVRecorder.prepare()](#prepare9-2)方法设置录制参数,重新进入prepared状态。 |
4378| 'released' | 录制资源释放。此时不能再进行任何操作。在任何其他状态下,均可以通过调用[AVRecorder.release()](#release9-2)方法进入released状态。 |
4379| 'error'    | 错误状态。当AVRecorder实例发生不可逆错误,会转换至当前状态。切换至error状态时会伴随[AVRecorder.on('error')事件](#onerror9-1),该事件会上报详细错误原因。在error状态时,用户需要调用[AVRecorder.reset()](#reset9-2)方法重置AVRecorder实例,或者调用[AVRecorder.release()](#release9-2)方法释放资源。 |
4380
4381## OnAVRecorderStateChangeHandler<sup>12+</sup>
4382
4383type OnAVRecorderStateChangeHandler = (state: AVRecorderState, reason: StateChangeReason) => void
4384
4385状态机切换事件回调方法。
4386
4387**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4388
4389**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
4390
4391| 参数名   | 类型   | 必填 | 说明                                                         |
4392| ------ | ------ | ------ | ------------------------------------------------------------ |
4393| state  | [AVRecorderState](#avrecorderstate9) | 必填 | 当前播放状态。     |
4394| reason | [StateChangeReason](#statechangereason9) | 必填 | 当前播放状态的切换原因。 |
4395
4396## AVRecorderConfig<sup>9+</sup>
4397
4398表示音视频录制的参数设置。
4399
4400通过audioSourceType和videoSourceType区分纯音频录制、纯视频录制或音视频录制。纯音频录制时,仅需要设置audioSourceType;纯视频录制时,仅需要设置videoSourceType;音视频录制时,audioSourceType和videoSourceType均需要设置。
4401
4402**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4403
4404| 名称            | 类型                                     | 必填 | 说明                                                         |
4405| --------------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
4406| audioSourceType | [AudioSourceType](#audiosourcetype9)     | 否   | 选择录制的音频源类型。选择音频录制时必填。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。|
4407| videoSourceType | [VideoSourceType](#videosourcetype9)     | 否   | 选择录制的视频源类型。选择视频录制时必填。                   |
4408| profile         | [AVRecorderProfile](#avrecorderprofile9) | 是   | 录制的profile,必要参数。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。|
4409| url             | string                                   | 是   | 录制输出URL:fd://xx (fd number) ![img](figures/zh-cn_image_url.png),必要参数。 <br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
4410|fileGenerationMode<sup>12+</sup> | [FileGenerationMode](#filegenerationmode12)  | 否   |  创建媒体文件的模式,配合[on('photoAssetAvailable')](#onphotoassetavailable12)监听使用。|
4411| rotation<sup>(deprecated)</sup>        | number                                   | 否   | 录制的视频旋转角度,mp4格式支持0,90,180,270,默认值为0。<br>从API version 6开始支持,从API version 12开始废弃。建议使用[AVMetadata](#avmetadata11).videoOrientation替代。如果同时设置两个值,将会采用[AVMetadata](#avmetadata11).videoOrientation。     |
4412| location<sup>(deprecated)</sup>        | [Location](#location)                    | 否   | 录制的地理位置,默认不记录地理位置信息。<br>从API version 6开始支持,从API version 12开始废弃。建议使用 [AVMetadata](#avmetadata11).location。如果同时设置两个值,将会采用[AVMetadata](#avmetadata11).location。 |
4413| metadata<sup>12+</sup>        | [AVMetadata](#avmetadata11)              | 否   | 设置元数据信息。详情见 [AVMetadata](#avmetadata11)。                  |
4414
4415## AVRecorderProfile<sup>9+</sup>
4416
4417音视频录制的配置文件。
4418
4419**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4420
4421| 名称             | 类型                                         | 必填 | 说明                                                         |
4422| ---------------- | -------------------------------------------- | ---- | ------------------------------------------------------------ |
4423| audioBitrate     | number                                       | 否   | 音频编码比特率,选择音频录制时必填。<br>支持范围:<br>- AAC编码格式支持比特率范围[32000 - 500000]。<br>- G711-mulaw编码格式支持比特率范围[64000 - 64000]。<br>- MP3编码格式支持范围[8000, 16000, 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 160000, 192000, 224000, 256000, 320000]。<br>当使用MP3编码格式时,采样率和比特率的映射关系: <br>- 采样率使用16K以下时,对应比特率范围为[8kbps - 64kbps]。<br>- 采样率使用16K~32K时对应的比特率范围为[8kbps - 160kbps]。<br>- 采样率使用32K以上时对应的比特率范围为[32kbps - 320kbps]。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
4424| audioChannels    | number                                       | 否   | 音频采集声道数,选择音频录制时必填。<br>- AAC编码格式支持范围[1 - 8]。<br>- G711-mulaw编码格式支持范围[1 - 1]。<br>- MP3编码格式支持范围[1 - 2]。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。       |
4425| audioCodec       | [CodecMimeType](#codecmimetype8)             | 否   | 音频编码格式,选择音频录制时必填。当前支持AUDIO_AAC,AUDIO_MP3,AUDIO_G711MU。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。     |
4426| audioSampleRate  | number                                       | 否   | 音频采样率,选择音频录制时必填。<br>支持范围:<br>- AAC编码支持采样率范围[8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000]。<br>- G711-mulaw编码支持采样率范围[8000 - 8000]。<br>- MP3编码支持采样率范围[8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000]。<br>可变比特率模式,码率仅作参考。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
4427| fileFormat       | [ContainerFormatType](#containerformattype8) | 是   | 文件的容器格式,必要参数。当前支持MP4、M4A、MP3、WAV封装格式,不支持在MP4封装格式下使用AUDIO_MP3编码格式。<br>**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。|
4428| videoBitrate     | number                                       | 否   | 视频编码比特率,选择视频录制时必填,支持范围[10000 - 100000000]。  |
4429| videoCodec       | [CodecMimeType](#codecmimetype8)             | 否   | 视频编码格式,选择视频录制时必填。当前支持VIDEO_AVC。|
4430| videoFrameWidth  | number                                       | 否   | 视频帧的宽,选择视频录制时必填,支持范围[176 - 4096]。         |
4431| videoFrameHeight | number                                       | 否   | 视频帧的高,选择视频录制时必填,支持范围[144 - 4096]。         |
4432| videoFrameRate   | number                                       | 否   | 视频帧率,选择视频录制时必填,支持范围[1 - 60]。             |
4433| isHdr<sup>11+</sup>            | boolean                        | 否   | HDR编码,选择视频录制时选填,isHdr默认为false,对应编码格式没有要求,isHdr为true时,对应的编码格式必须为video/hevc。|
4434| enableTemporalScale<sup>12+</sup>            | boolean                        | 否   | 视频录制是否支持时域分层编码功能,选择视频录制时选填,enableTemporalScale默认为false。设置为true时,编码输出的码流中部分帧可以支持跳过不编码。|
4435
4436## AudioSourceType<sup>9+</sup>
4437
4438表示视频录制中音频源类型的枚举。
4439
4440**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4441
4442| 名称                      | 值   | 说明                   |
4443| ------------------------- | ---- | ---------------------- |
4444| AUDIO_SOURCE_TYPE_DEFAULT | 0    | 默认的音频输入源类型。 |
4445| AUDIO_SOURCE_TYPE_MIC     | 1    | 表示MIC的音频输入源。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
4446| AUDIO_SOURCE_TYPE_VOICE_RECOGNITION<sup>12+</sup> | 2    | 表示语音识别场景的音频源。 |
4447| AUDIO_SOURCE_TYPE_VOICE_COMMUNICATION<sup>12+</sup>     | 7    | 表示语音通话场景的音频源。 |
4448| AUDIO_SOURCE_TYPE_VOICE_MESSAGE<sup>12+</sup> | 10    | 表示短语音消息的音频源。 |
4449| AUDIO_SOURCE_TYPE_CAMCORDER<sup>12+</sup>     | 13    | 表示相机录像的音频源。 |
4450
4451## VideoSourceType<sup>9+</sup>
4452
4453表示视频录制中视频源类型的枚举。
4454
4455**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4456
4457| 名称                          | 值   | 说明                            |
4458| ----------------------------- | ---- | ------------------------------- |
4459| VIDEO_SOURCE_TYPE_SURFACE_YUV | 0    | 输入surface中携带的是raw data。 |
4460| VIDEO_SOURCE_TYPE_SURFACE_ES  | 1    | 输入surface中携带的是ES data。  |
4461
4462## ContainerFormatType<sup>8+</sup>
4463
4464表示容器格式类型的枚举,缩写为CFT。
4465
4466**系统能力:** SystemCapability.Multimedia.Media.Core
4467
4468| 名称        | 值    | 说明                  |
4469| ----------- | ----- | --------------------- |
4470| CFT_MPEG_4  | 'mp4' | 视频的容器格式,MP4。 |
4471| CFT_MPEG_4A | 'm4a' | 音频的容器格式,M4A。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
4472| CFT_MP3<sup>12+</sup>  | 'mp3' | 音频的容器格式,MP3。 |
4473| CFT_WAV<sup>12+</sup>  | 'wav' | 音频的容器格式,WAV。 |
4474
4475## Location
4476
4477视频录制的地理位置。
4478
4479**系统能力:** SystemCapability.Multimedia.Media.Core
4480
4481| 名称      | 类型   | 必填 | 说明             |
4482| --------- | ------ | ---- | ---------------- |
4483| latitude  | number | 是   | 地理位置的纬度。 |
4484| longitude | number | 是   | 地理位置的经度。 |
4485
4486## EncoderInfo<sup>11+</sup>
4487
4488编码器和规格参数
4489
4490系统能力:SystemCapability.Multimedia.Media.AVRecorder
4491
4492| 名称       | 类型                             | 可读 | 可写 | 说明                                                         |
4493| ---------- | -------------------------------- | ---- | ---- | ------------------------------------------------------------ |
4494| mimeType   | [CodecMimeType](#codecmimetype8) | 是   | 否   | 编码器MIME类型名称                                           |
4495| type       | string                           | 是   | 否   | 编码器类型,audio表示音频编码器,video表示视频编码器         |
4496| bitRate    | [Range](#range11)                | 是   | 否   | 比特率,包含该编码器的最大和最小值                           |
4497| frameRate  | [Range](#range11)                | 是   | 否   | 视频帧率,包含帧率的最大和最小值,仅视频编码器拥有           |
4498| width      | [Range](#range11)                | 是   | 否   | 视频帧的宽度,包含宽度的最大和最小值,仅视频编码器拥有       |
4499| height     | [Range](#range11)                | 是   | 否   | 视频帧的高度,包含高度的最大和最小值,仅视频编码器拥有       |
4500| channels   | [Range](#range11)                | 是   | 否   | 音频采集声道数,包含声道数的最大和最小值,仅音频编码器拥有   |
4501| sampleRate | Array\<number>                    | 是   | 否   | 音频采样率,包含所有可以使用的音频采样率值,仅音频编码器拥有 |
4502
4503## Range<sup>11+</sup>
4504
4505表示一个类型的范围
4506
4507系统能力:SystemCapability.Multimedia.Media.AVRecorder
4508
4509| 名称 | 类型   | 可读 | 可写 | 说明         |
4510| ---- | ------ | ---- | ---- | ------------ |
4511| min  | number | 是   | 否   | 范围的最小值 |
4512| max  | number | 是   | 否   | 范围的最大值 |
4513
4514## FileGenerationMode<sup>12+</sup>
4515
4516表示创建媒体文件模式的枚举。
4517
4518**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4519
4520| 名称                          | 值   | 说明                            |
4521| ----------------------------- | ---- | ------------------------------- |
4522| APP_CREATE  | 0    | 由应用自行在沙箱创建媒体文件。 |
4523| AUTO_CREATE_CAMERA_SCENE  | 1    | 由系统创建媒体文件,当前仅在相机录制场景下生效,会忽略应用设置的url。 |
4524
4525## AVTranscoder<sup>12+</sup>
4526
4527视频转码管理类,用于视频转码。在调用AVTranscoder的方法前,需要先通过createAVTranscoder()构建一个AVTranscoder实例。
4528
4529视频转码demo可参考:[视频转码开发指导](../../media/media/using-avtranscoder-for-transcodering.md)
4530
4531### 属性
4532
4533**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4534
4535| 名称    | 类型                                 | 只读 | 可选 | 说明               |
4536| ------- | ------------------------------------ | ---- | ---- | ------------------ |
4537| fdSrc<sup>12+</sup>                                  | [AVFileDescriptor](#avfiledescriptor9)                       |  否  | 否   | 源媒体文件描述,通过该属性设置数据源。<br/> **使用示例**:<br/>假设一个连续存储的媒体文件,地址偏移:0,字节长度:100。其文件描述为 AVFileDescriptor { fd = 资源句柄; offset = 0; length = 100; }。<br>**说明:** <br> - 将资源句柄(fd)传递给 AVTranscoder 实例之后,请不要通过该资源句柄做其他读写操作,包括但不限于将同一个资源句柄传递给多个 AVPlayer / AVMetadataExtractor / AVImageGenerator / AVTranscoder。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致视频转码数据获取异常。 |
4538| fdDst<sup>12+</sup>                               | number                 |  否  | 否   | 目标媒体文件描述,通过该属性设置数据输出。在创建AVTranscoder实例后,必须设置fdSrc和fdDst属性。<br>**说明:** <br> - 将资源句柄(fd)传递给 AVTranscoder 实例之后,请不要通过该资源句柄做其他读写操作,包括但不限于将同一个资源句柄传递给多个 AVPlayer / AVMetadataExtractor / AVImageGenerator / AVTranscoder。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致视频转码数据获取异常。 |
4539
4540### prepare<sup>12+</sup>
4541
4542prepare(config: AVTranscoderConfig): Promise\<void>
4543
4544异步方式进行视频转码的参数设置。通过Promise获取返回值。
4545
4546**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4547
4548**参数:**
4549
4550| 参数名 | 类型                                   | 必填 | 说明                       |
4551| ------ | -------------------------------------- | ---- | -------------------------- |
4552| config | [AVTranscoderConfig](#avtranscoderconfig12) | 是   | 配置视频转码的相关参数。 |
4553
4554**返回值:**
4555
4556| 类型           | 说明                                       |
4557| -------------- | ------------------------------------------ |
4558| Promise\<void> | 异步视频转码prepare方法的Promise返回值。 |
4559
4560**错误码:**
4561
4562以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4563
4564| 错误码ID | 错误信息                               |
4565| -------- | -------------------------------------- |
4566| 401  | The parameter check failed. Return by promise. |
4567| 5400102  | Operation not allowed. Return by promise. |
4568| 5400105  | Service died. Return by promise.       |
4569| 5400106  | Unsupported format. Returned by promise.  |
4570
4571**示例:**
4572
4573```ts
4574import { BusinessError } from '@kit.BasicServicesKit';
4575
4576// 配置参数以实际硬件设备支持的范围为准
4577let avTranscoderConfig: media.AVTranscoderConfig = {
4578  audioBitrate : 200000,
4579  audioCodec : media.CodecMimeType.AUDIO_AAC,
4580  fileFormat : media.ContainerFormatType.CFT_MPEG_4,
4581  videoBitrate : 3000000,
4582  videoCodec : media.CodecMimeType.VIDEO_AVC,
4583  videoFrameWidth : 1280,
4584  videoFrameHeight : 720,
4585}
4586
4587avTranscoder.prepare(avTranscoderConfig).then(() => {
4588  console.info('prepare success');
4589}).catch((err: BusinessError) => {
4590  console.error('prepare failed and catch error is ' + err.message);
4591});
4592```
4593
4594### start<sup>12+</sup>
4595
4596start(): Promise\<void>
4597
4598异步方式开始视频转码。通过Promise获取返回值。
4599
4600需要[prepare()](#prepare12)事件成功触发后,才能调用start方法。
4601
4602**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4603
4604**返回值:**
4605
4606| 类型           | 说明                                  |
4607| -------------- | ------------------------------------- |
4608| Promise\<void> | 异步开始视频转码方法的Promise返回值。 |
4609
4610**错误码:**
4611
4612以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4613
4614| 错误码ID | 错误信息                               |
4615| -------- | -------------------------------------- |
4616| 5400102  | Operation not allowed. Return by promise. |
4617| 5400103  | IO error. Return by promise.           |
4618| 5400105  | Service died. Return by promise.       |
4619
4620**示例:**
4621
4622```ts
4623import { BusinessError } from '@kit.BasicServicesKit';
4624
4625avTranscoder.start().then(() => {
4626  console.info('start AVTranscoder success');
4627}).catch((err: BusinessError) => {
4628  console.error('start AVTranscoder failed and catch error is ' + err.message);
4629});
4630```
4631
4632### pause<sup>12+</sup>
4633
4634pause(): Promise\<void>
4635
4636异步方式暂停视频转码。通过Promise获取返回值。
4637
4638需要[start()](#start12)事件成功触发后,才能调用pause方法,可以通过调用[resume()](#resume12)接口来恢复转码。
4639
4640**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4641
4642**返回值:**
4643
4644| 类型           | 说明                                  |
4645| -------------- | ------------------------------------- |
4646| Promise\<void> | 异步暂停视频转码方法的Promise返回值。 |
4647
4648**错误码:**
4649
4650以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4651
4652| 错误码ID | 错误信息                               |
4653| -------- | -------------------------------------- |
4654| 5400102  | Operation not allowed. Return by promise. |
4655| 5400103  | IO error. Return by promise.           |
4656| 5400105  | Service died. Return by promise.       |
4657
4658**示例:**
4659
4660```ts
4661import { BusinessError } from '@kit.BasicServicesKit';
4662
4663avTranscoder.pause().then(() => {
4664  console.info('pause AVTranscoder success');
4665}).catch((err: BusinessError) => {
4666  console.error('pause AVTranscoder failed and catch error is ' + err.message);
4667});
4668```
4669
4670### resume<sup>12+</sup>
4671
4672resume(): Promise\<void>
4673
4674异步方式恢复视频转码。通过Promise获取返回值。
4675
4676需要在[pause()](#pause12)事件成功触发后,才能调用resume方法。
4677
4678**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4679
4680**返回值:**
4681
4682| 类型           | 说明                                  |
4683| -------------- | ------------------------------------- |
4684| Promise\<void> | 异步恢复视频转码方法的Promise返回值。 |
4685
4686**错误码:**
4687
4688以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4689
4690| 错误码ID | 错误信息                               |
4691| -------- | -------------------------------------- |
4692| 5400102  | Operation not allowed. Return by promise. |
4693| 5400103  | IO error. Return by promise.           |
4694| 5400105  | Service died. Return by promise.       |
4695
4696**示例:**
4697
4698```ts
4699import { BusinessError } from '@kit.BasicServicesKit';
4700
4701avTranscoder.resume().then(() => {
4702  console.info('resume AVTranscoder success');
4703}).catch((err: BusinessError) => {
4704  console.error('resume AVTranscoder failed and catch error is ' + err.message);
4705});
4706```
4707
4708### cancel<sup>12+</sup>
4709
4710cancel(): Promise\<void>
4711
4712异步方式取消视频转码。通过Promise获取返回值。
4713
4714需要在[prepare()](#prepare12)、[start()](#start12)、[pause()](#pause12)或[resume()](#resume12)事件成功触发后,才能调用cancel方法。
4715
4716**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4717
4718**返回值:**
4719
4720| 类型           | 说明                                  |
4721| -------------- | ------------------------------------- |
4722| Promise\<void> | 异步取消视频转码方法的Promise返回值。 |
4723
4724**错误码:**
4725
4726以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4727
4728| 错误码ID | 错误信息                               |
4729| -------- | -------------------------------------- |
4730| 5400102  | Operation not allowed. Return by promise. |
4731| 5400103  | IO error. Return by promise.           |
4732| 5400105  | Service died. Return by promise.       |
4733
4734**示例:**
4735
4736```ts
4737import { BusinessError } from '@kit.BasicServicesKit';
4738
4739avTranscoder.cancel().then(() => {
4740  console.info('cancel AVTranscoder success');
4741}).catch((err: BusinessError) => {
4742  console.error('cancel AVTranscoder failed and catch error is ' + err.message);
4743});
4744```
4745
4746### release<sup>12+</sup>
4747
4748release(): Promise\<void>
4749
4750异步方式释放视频转码资源。通过Promise获取返回值。
4751
4752释放视频转码资源之后,该AVTranscoder实例不能再进行任何操作。
4753
4754**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4755
4756**返回值:**
4757
4758| 类型           | 说明                                        |
4759| -------------- | ------------------------------------------- |
4760| Promise\<void> | 异步释放视频转码资源方法的Promise返回值。 |
4761
4762**错误码:**
4763
4764以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4765
4766| 错误码ID | 错误信息                          |
4767| -------- | --------------------------------- |
4768| 5400102  | Operation not allowed. Return by promise. |
4769| 5400105  | Service died. Return by promise. |
4770
4771**示例:**
4772
4773```ts
4774import { BusinessError } from '@kit.BasicServicesKit';
4775
4776avTranscoder.release().then(() => {
4777  console.info('release AVTranscoder success');
4778}).catch((err: BusinessError) => {
4779  console.error('release AVTranscoder failed and catch error is ' + err.message);
4780});
4781```
4782
4783### on('progressUpdate')<sup>12+</sup>
4784
4785on(type: 'progressUpdate', callback: Callback\<number>): void
4786
4787注册转码进度更新事件,并通过注册的回调方法通知用户。用户只能注册一个进度更新事件的回调方法,当用户重复注册时,以最后一次注册的回调接口为准。
4788
4789**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4790
4791**参数:**
4792
4793| 参数名   | 类型     | 必填 | 说明                                                         |
4794| -------- | -------- | ---- | ------------------------------------------------------------ |
4795| type     | string   | 是   | 进度更新事件回调类型,支持的事件:'progressUpdate',在转码过程中系统会自动触发此事件。 |
4796| callback | [Callback](../apis-basic-services-kit/js-apis-base.md#callback) | 是   | 进度更新事件回调方法,progress: number,表示当前转码进度 |
4797
4798**示例:**
4799
4800```ts
4801avTranscoder.on('progressUpdate', (progress: number) => {
4802  console.info('avTranscoder progressUpdate = ' + progress);
4803});
4804```
4805
4806### off('progressUpdate')<sup>12+</sup>
4807
4808off(type:'progressUpdate', callback?: Callback\<number>): void
4809
4810取消注册转码进度更新事件。
4811
4812**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4813
4814**参数:**
4815
4816| 参数名 | 类型   | 必填 | 说明                                                         |
4817| ------ | ------ | ---- | ------------------------------------------------------------ |
4818| type   | string | 是   | 进度更新事件回调类型,支持的事件:'progressUpdate',用户操作和系统都会触发此事件。 |
4819| callback | [Callback](../apis-basic-services-kit/js-apis-base.md#callback) | 否   | 已注册的进度更新事件回调。由于当前回调注册时,仅会保留最后一次注册的回调,建议此参数缺省。 |
4820
4821**示例:**
4822
4823```ts
4824avTranscoder.off('progressUpdate');
4825```
4826
4827### on('error')<sup>12+</sup>
4828
4829on(type: 'error', callback: ErrorCallback): void
4830
4831注册AVtranscoder的错误事件,该事件仅用于错误提示。如果AVTranscoder上报error事件,用户需要通过[release()](#release12)退出转码操作。
4832
4833用户只能订阅一个错误事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
4834
4835**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4836
4837**参数:**
4838
4839| 参数名   | 类型          | 必填 | 说明                                                         |
4840| -------- | ------------- | ---- | ------------------------------------------------------------ |
4841| type     | string        | 是   | 转码错误事件回调类型'error'。 <br>- 'error':录制过程中发生错误,触发该事件。 |
4842| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 转码错误事件回调方法。                                       |
4843
4844**错误码:**
4845
4846以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4847
4848| 错误码ID | 错误信息                                   |
4849| -------- | ------------------------------------------ |
4850| 401      | The parameter check failed. |
4851| 801      | Capability not supported. |
4852| 5400101  | No memory.            |
4853| 5400102  | Operation not allowed. |
4854| 5400103  | I/O error.              |
4855| 5400104  | Time out.            |
4856| 5400105  | Service died.           |
4857| 5400106  | Unsupport format.      |
4858
4859**示例:**
4860
4861```ts
4862import { BusinessError } from '@kit.BasicServicesKit';
4863
4864avTranscoder.on('error', (err: BusinessError) => {
4865  console.info('case avTranscoder.on(error) called, errMessage is ' + err.message);
4866});
4867```
4868
4869### off('error')<sup>12+</sup>
4870
4871off(type:'error', callback?: ErrorCallback): void
4872
4873取消注册转码错误事件,取消后不再接收到AVTranscoder的错误事件。
4874
4875**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4876
4877**参数:**
4878
4879| 参数名 | 类型   | 必填 | 说明                                                         |
4880| ------ | ------ | ---- | ------------------------------------------------------------ |
4881| type   | string | 是   | 转码错误事件回调类型'error'。 <br>- 'error':转码过程中发生错误,触发该事件。 |
4882| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否   | 错误事件回调方法 |
4883
4884**示例:**
4885
4886```ts
4887avTranscoder.off('error');
4888```
4889
4890### on('complete')<sup>12+</sup>
4891
4892on(type: 'complete', callback: Callback\<void>): void
4893
4894注册转码完成事件,并通过注册的回调方法通知用户。用户只能注册一个进度更新事件的回调方法,当用户重复注册时,以最后一次注册的回调接口为准。
4895
4896当AVTranscoder上报complete事件时,当前转码操作已完成,用户可通过[release()](#release12)退出转码操作。
4897
4898**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4899
4900**参数:**
4901
4902| 参数名   | 类型     | 必填 | 说明                                                         |
4903| -------- | -------- | ---- | ------------------------------------------------------------ |
4904| type     | string   | 是   | 完成事件回调类型,支持的事件:'complete',在转码过程中系统会自动触发此事件。 |
4905| callback | [Callback](../apis-basic-services-kit/js-apis-base.md#callback) | 是   | 完成事件回调方法 |
4906
4907**示例:**
4908
4909```ts
4910avTranscoder.on('complete', () => {
4911  console.info('avTranscoder complete');
4912});
4913```
4914
4915### off('complete')<sup>12+</sup>
4916
4917off(type:'complete', callback?: Callback\<void>): void
4918
4919取消注册转码完成事件。
4920
4921**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4922
4923**参数:**
4924
4925| 参数名 | 类型   | 必填 | 说明                                                         |
4926| ------ | ------ | ---- | ------------------------------------------------------------ |
4927| type   | string | 是   | 转码完成事件回调类型,支持的事件:'complete',用户操作和系统都会触发此事件。 |
4928| callback | [Callback](../apis-basic-services-kit/js-apis-base.md#callback) | 否   | 完成事件回调方法 |
4929
4930**示例:**
4931
4932```ts
4933avTranscoder.off('complete');
4934```
4935
4936## AVTranscoderConfig<sup>12+</sup>
4937
4938表示视频转码的参数设置。
4939
4940**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4941
4942| 名称            | 类型                                    | 只读 | 可选 | 说明                                                         |
4943| --------------- | ---------------------------------------- |---- | ---- | ------------------------------------------------------------ |
4944| audioBitrate | number     | 否 | 是 | 输出音频的码率,单位为比特率(bps)。用户不设置,则默认设置为48Kbps|
4945| audioCodec | [CodecMimeType](#codecmimetype8)     | 否 | 是  | 输出音频的编码格式,当前仅支持AAC。                   |
4946| fileFormat         | [ContainerFormatType](#containerformattype8) | 否 | 否   | 输出视频文件的封装格式,当前视频文件仅支持MP4。|
4947| videoBitrate         | number | 否 |  是  | 输出视频的码率,单位为比特率(bps)。用户不设置,则默认码率按输出视频的分辨率设置,[240p,480P]默认码率值为1Mbps,(480P,720P]默认码率值为2Mbps,(720P,1080P]默认码率值为4Mbps,1080P及以上默认值为8Mbps。|
4948| videoCodec        | [CodecMimeType](#codecmimetype8) | 否 | 是   | 输出视频的编码格式,当前仅支持AVC和HEVC。|
4949| videoFrameWidth        | number | 否 |  是   | 输出视频帧的宽,单位为像素(px)。用户不设置,则默认设置为源视频帧的宽|
4950| videoFrameHeight        | number | 否 |  是   | 输出视频帧的高,单位为像素(px)。用户不设置,则默认设置为源视频帧的高|
4951
4952
4953
4954## AVMetadataExtractor<sup>11+</sup>
4955
4956元数据获取类,用于从媒体资源中获取元数据。在调用AVMetadataExtractor的方法前,需要先通过[createAVMetadataExtractor()](#mediacreateavmetadataextractor11)构建一个AVMetadataExtractor实例。
4957
4958获取音频或视频元数据的demo可参考:[获取音视频元数据开发指导](../../media/media/avmetadataextractor.md)。
4959
4960### 属性
4961
4962**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
4963
4964| 名称                                                | 类型                                                         | 可读 | 可写 | 说明                                                         |
4965| --------------------------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
4966| fdSrc<sup>11+</sup>                                  | [AVFileDescriptor](#avfiledescriptor9)                       | 是   | 是   | 媒体文件描述,通过该属性设置数据源。在获取元数据之前,必须设置数据源属性,只能设置fdSrc和dataSrc的其中一个。<br/> **使用示例**:<br/>假设一个连续存储的媒体文件,地址偏移:0,字节长度:100。其文件描述为 AVFileDescriptor { fd = 资源句柄; offset = 0; length = 100; }。<br>**说明:** <br> - 将资源句柄(fd)传递给 AVMetadataExtractor 实例之后,请不要通过该资源句柄做其他读写操作,包括但不限于将同一个资源句柄传递给多个 AVPlayer / AVMetadataExtractor / AVImageGenerator / AVTranscoder。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致音视频元数据获取异常。 |
4967| dataSrc<sup>11+</sup>                               | [AVDataSrcDescriptor](#avdatasrcdescriptor10)                | 是   | 是   | 流式媒体资源描述,通过该属性设置数据源。在获取元数据之前,必须设置数据源属性,只能设置fdSrc和dataSrc的其中一个。<br/> 当应用从远端获取音视频媒体文件,在应用未下载完整音视频资源时,可以设置dataSrc提前获取该资源的元数据。|
4968
4969### fetchMetadata<sup>11+</sup>
4970
4971fetchMetadata(callback: AsyncCallback\<AVMetadata>): void
4972
4973异步方式获取媒体元数据。通过注册回调函数获取返回值。
4974
4975**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
4976
4977**参数:**
4978
4979| 参数名   | 类型                                         | 必填 | 说明                                |
4980| -------- | -------------------------------------------- | ---- | ----------------------------------- |
4981| callback | AsyncCallback\<[AVMetadata](#avmetadata11)>       | 是   | 回调函数。异步返回音视频元数据对象(AVMetadata)。|
4982
4983**错误码:**
4984
4985以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
4986
4987| 错误码ID | 错误信息                                   |
4988| -------- | ------------------------------------------ |
4989| 5400102  | Operation not allowed. Returned by callback. |
4990| 5400106  | Unsupported format. Returned by callback.  |
4991
4992**示例:**
4993
4994```ts
4995import { BusinessError } from '@kit.BasicServicesKit';
4996
4997avMetadataExtractor.fetchMetadata((error: BusinessError, metadata: media.AVMetadata) => {
4998  if (error) {
4999    console.error(`Failed to fetch Metadata, err = ${JSON.stringify(error)}`);
5000    return;
5001  }
5002  console.info(`Succeeded in fetching Metadata, genre: ${metadata.genre}`);
5003});
5004```
5005
5006### fetchMetadata<sup>11+</sup>
5007
5008fetchMetadata(): Promise\<AVMetadata>
5009
5010异步方式获取媒体元数据。通过Promise获取返回值。
5011
5012**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5013
5014**返回值:**
5015
5016| 类型           | 说明                                     |
5017| -------------- | ---------------------------------------- |
5018| Promise\<[AVMetadata](#avmetadata11)>  | Promise对象。异步返回音视频元数据对象(AVMetadata)。 |
5019
5020**错误码:**
5021
5022以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
5023
5024| 错误码ID | 错误信息                                  |
5025| -------- | ----------------------------------------- |
5026| 5400102  | Operation not allowed. Returned by promise. |
5027| 5400106  | Unsupported format. Returned by promise.  |
5028
5029**示例:**
5030
5031```ts
5032import { BusinessError } from '@kit.BasicServicesKit';
5033
5034avMetadataExtractor.fetchMetadata().then((metadata: media.AVMetadata) => {
5035  console.info(`Succeeded in fetching Metadata, genre: ${metadata.genre}`)
5036}).catch((error: BusinessError) => {
5037  console.error(`Failed to fetch Metadata, error message:${error.message}`);
5038});
5039```
5040
5041### fetchAlbumCover<sup>11+</sup>
5042
5043fetchAlbumCover(callback: AsyncCallback\<image.PixelMap>): void
5044
5045异步方式获取音频专辑封面。通过注册回调函数获取返回值。
5046
5047**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5048
5049**参数:**
5050
5051| 参数名   | 类型                                         | 必填 | 说明                                |
5052| -------- | -------------------------------------------- | ---- | ----------------------------------- |
5053| callback | AsyncCallback\<[image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7)>    | 是   | 回调函数。异步返回专辑封面。 |
5054
5055**错误码:**
5056
5057以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
5058
5059| 错误码ID | 错误信息                                   |
5060| -------- | ------------------------------------------ |
5061| 5400102  | Operation not allowed. Return by callback. |
5062| 5400106  | Unsupported format. Returned by callback.  |
5063
5064**示例:**
5065
5066```ts
5067import { BusinessError } from '@kit.BasicServicesKit';
5068import { image } from '@kit.ImageKit';
5069
5070let pixel_map : image.PixelMap | undefined = undefined;
5071
5072avMetadataExtractor.fetchAlbumCover((error: BusinessError, pixelMap: image.PixelMap) => {
5073  if (error) {
5074    console.error(`Failed to fetch AlbumCover, error = ${JSON.stringify(error)}`);
5075    return;
5076  }
5077  pixel_map = pixelMap;
5078});
5079```
5080
5081### fetchAlbumCover<sup>11+</sup>
5082
5083fetchAlbumCover(): Promise\<image.PixelMap>
5084
5085异步方式获取专辑封面。通过Promise获取返回值。
5086
5087**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5088
5089**返回值:**
5090
5091| 类型           | 说明                                     |
5092| -------------- | ---------------------------------------- |
5093| Promise\<[image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7)> |  Promise对象。异步返回专辑封面。 |
5094
5095**错误码:**
5096
5097以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
5098
5099| 错误码ID | 错误信息                                  |
5100| -------- | ----------------------------------------- |
5101| 5400102  | Operation not allowed. Returned by promise. |
5102| 5400106  | Unsupported format. Returned by promise.  |
5103
5104**示例:**
5105
5106```ts
5107import { BusinessError } from '@kit.BasicServicesKit';
5108import { image } from '@kit.ImageKit';
5109
5110let pixel_map : image.PixelMap | undefined = undefined;
5111
5112avMetadataExtractor.fetchAlbumCover().then((pixelMap: image.PixelMap) => {
5113  pixel_map = pixelMap;
5114}).catch((error: BusinessError) => {
5115  console.error(`Failed to fetch AlbumCover, error message:${error.message}`);
5116});
5117```
5118
5119### release<sup>11+</sup>
5120
5121release(callback: AsyncCallback\<void>): void
5122
5123异步方式释放资源。通过注册回调函数获取返回值。
5124
5125**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5126
5127**参数:**
5128
5129| 参数名   | 类型                                         | 必填 | 说明                                |
5130| -------- | -------------------------------------------- | ---- | ----------------------------------- |
5131| callback | AsyncCallback\<void>                   | 是   |回调函数。当释放资源成功,err为undefined,否则为错误对象。 |
5132
5133**错误码:**
5134
5135以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
5136
5137| 错误码ID | 错误信息                                   |
5138| -------- | ------------------------------------------ |
5139| 5400102  | Operation not allowed. Returned by callback. |
5140
5141**示例:**
5142
5143```ts
5144import { BusinessError } from '@kit.BasicServicesKit';
5145
5146avMetadataExtractor.release((error: BusinessError) => {
5147  if (error) {
5148    console.error(`Failed to release, err = ${JSON.stringify(error)}`);
5149    return;
5150  }
5151  console.info(`Succeeded in releasing.`);
5152});
5153```
5154
5155### release<sup>11+</sup>
5156
5157release(): Promise\<void>
5158
5159异步方式释放资源。通过Promise获取返回值。
5160
5161**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5162
5163**返回值:**
5164
5165| 类型           | 说明                                     |
5166| -------------- | ---------------------------------------- |
5167| Promise\<void> | 异步方式释放资源release方法的Promise返回值。 |
5168
5169**错误码:**
5170
5171以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
5172
5173| 错误码ID | 错误信息                                  |
5174| -------- | ----------------------------------------- |
5175| 5400102  | Operation not allowed. Returned by promise. |
5176
5177**示例:**
5178
5179```ts
5180import { BusinessError } from '@kit.BasicServicesKit';
5181
5182avMetadataExtractor.release().then(() => {
5183  console.info(`Succeeded in releasing.`);
5184}).catch((error: BusinessError) => {
5185  console.error(`Failed to release, error message:${error.message}`);
5186});
5187```
5188
5189## AVMetadata<sup>11+</sup>
5190
5191音视频元数据,包含各个元数据字段。在[AVRecorderConfig](#avrecorderconfig9)中使用时未声明为当前版本只读的参数可以作为使用[AVRecorder](#avrecorder9)录制时的入参。
5192
5193**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5194
5195| 名称   | 类型   | 必填 | 说明                                                         |
5196| ------ | ------ | ---- | ------------------------------------------------------------ |
5197| album     | string | 否   | 专辑的标题。当前版本为只读参数。     |
5198| albumArtist | string | 否   | 专辑的艺术家。当前版本为只读参数。 |
5199| artist | string | 否   | 媒体资源的艺术家。当前版本为只读参数。 |
5200| author | string | 否   | 媒体资源的作者。当前版本为只读参数。 |
5201| dateTime | string | 否   | 媒体资源的创建时间。当前版本为只读参数。 |
5202| dateTimeFormat | string | 否   | 媒体资源的创建时间,按YYYY-MM-DD HH:mm:ss格式输出。当前版本为只读参数。 |
5203| composer | string | 否   | 媒体资源的作曲家。当前版本为只读参数。 |
5204| duration | string | 否   | 媒体资源的时长。当前版本为只读参数。 |
5205| genre | string | 否   | 媒体资源的类型或体裁。|
5206| hasAudio | string | 否   | 媒体资源是否包含音频。当前版本为只读参数。 |
5207| hasVideo | string | 否   | 媒体资源是否包含视频。当前版本为只读参数。 |
5208| mimeType | string | 否   | 媒体资源的mime类型。当前版本为只读参数。 |
5209| trackCount | string | 否   | 媒体资源的轨道数量。当前版本为只读参数。 |
5210| sampleRate | string | 否   | 音频的采样率,单位为赫兹(Hz)。当前版本为只读参数。 |
5211| title | string | 否   | 媒体资源的标题。当前版本为只读参数。当前版本为只读参数。 |
5212| videoHeight | string | 否   | 视频的高度,单位为像素。当前版本为只读参数。 |
5213| videoWidth | string | 否   | 视频的宽度,单位为像素。当前版本为只读参数。 |
5214| videoOrientation | string | 否   | 视频的旋转方向,单位为度(°)。|
5215| hdrType<sup>12+</sup> | [HdrType](#hdrtype12) | 否   | 媒体资源的HDR类型。当前版本为只读参数。 |
5216| location<sup>12+</sup> | [Location](#location) | 否 | 视频的地理位置信息。 |
5217| customInfo<sup>12+</sup> | Record<string, string> | 否 | 从moov.meta.list 获取的自定义参数键值映射。|
5218
5219## HdrType<sup>12+</sup>
5220
5221表示视频HDR类型的枚举。
5222
5223**系统能力:** SystemCapability.Multimedia.Media.Core
5224
5225| 名称                      | 值   | 说明                   |
5226| ------------------------- | ---- | ---------------------- |
5227| AV_HDR_TYPE_NONE          | 0    | 表示无HDR类型。 |
5228| AV_HDR_TYPE_VIVID         | 1    | 表示为HDR VIVID类型。 |
5229
5230## media.createAudioPlayer<sup>(deprecated)</sup>
5231
5232createAudioPlayer(): AudioPlayer
5233
5234同步方式创建音频播放实例。
5235
5236> **说明:**
5237> 从API version 6开始支持,从API version 9开始废弃,建议使用[createAVPlayer](#mediacreateavplayer9)替代。
5238
5239**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5240
5241**返回值:**
5242
5243| 类型                        | 说明                                                         |
5244| --------------------------- | ------------------------------------------------------------ |
5245| [AudioPlayer](#audioplayerdeprecated) | 返回AudioPlayer类实例,失败时返回null。可用于音频播放、暂停、停止等操作。 |
5246
5247**示例:**
5248
5249```ts
5250let audioPlayer: media.AudioPlayer = media.createAudioPlayer();
5251```
5252
5253## media.createVideoPlayer<sup>(deprecated)</sup>
5254
5255createVideoPlayer(callback: AsyncCallback\<VideoPlayer>): void
5256
5257异步方式创建视频播放实例,通过注册回调函数获取返回值。
5258
5259> **说明:**
5260> 从API version 8开始支持,从API version 9开始废弃,建议使用[createAVPlayer](#mediacreateavplayer9)替代。
5261
5262**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
5263
5264**参数:**
5265
5266| 参数名   | 类型                                       | 必填 | 说明                                                         |
5267| -------- | ------------------------------------------ | ---- | ------------------------------------------------------------ |
5268| callback | AsyncCallback<[VideoPlayer](#videoplayerdeprecated)> | 是   | 回调函数。创建VideoPlayer实例成功时,err为undefined,data为获取到的VideoPlayer实例,否则为错误对象。 |
5269
5270**示例:**
5271
5272```ts
5273import { BusinessError } from '@kit.BasicServicesKit';
5274
5275let videoPlayer: media.VideoPlayer;
5276media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => {
5277  if (video != null) {
5278    videoPlayer = video;
5279    console.info('Succeeded in creating VideoPlayer');
5280  } else {
5281    console.error(`Failed to create VideoPlayer, error:${error}`);
5282  }
5283});
5284```
5285
5286## media.createVideoPlayer<sup>(deprecated)</sup>
5287
5288createVideoPlayer(): Promise\<VideoPlayer>
5289
5290异步方式创建视频播放实例,通过Promise获取返回值。
5291
5292> **说明:**
5293> 从API version 8开始支持,从API version 9开始废弃,建议使用[createAVPlayer](#mediacreateavplayer9-1)替代。
5294
5295**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
5296
5297**返回值:**
5298
5299| 类型                                 | 说明                                                         |
5300| ------------------------------------ | ------------------------------------------------------------ |
5301| Promise<[VideoPlayer](#videoplayerdeprecated)> | Promise对象。异步返回VideoPlayer实例,失败时返回null。可用于管理和播放视频媒体。 |
5302
5303**示例:**
5304
5305```ts
5306import { BusinessError } from '@kit.BasicServicesKit';
5307
5308let videoPlayer: media.VideoPlayer;
5309media.createVideoPlayer().then((video: media.VideoPlayer) => {
5310  if (video != null) {
5311    videoPlayer = video;
5312    console.info('Succeeded in creating VideoPlayer');
5313  } else {
5314    console.error('Failed to create VideoPlayer');
5315  }
5316}).catch((error: BusinessError) => {
5317  console.error(`Failed to create VideoPlayer, error:${error}`);
5318});
5319```
5320
5321## media.createAudioRecorder<sup>(deprecated)</sup>
5322
5323createAudioRecorder(): AudioRecorder
5324
5325创建音频录制的实例来控制音频的录制。
5326一台设备只允许创建一个录制实例。
5327
5328> **说明:**
5329> 从API version 6开始支持,从API version 9开始废弃,建议使用[createAVRecorder](#mediacreateavrecorder9)替代。
5330
5331**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
5332
5333**返回值:**
5334
5335| 类型                            | 说明                                                         |
5336| ------------------------------- | ------------------------------------------------------------ |
5337| [AudioRecorder](#audiorecorderdeprecated) | 返回AudioRecorder类实例,失败时返回null。可用于录制音频媒体。 |
5338
5339**示例:**
5340
5341```ts
5342let audioRecorder: media.AudioRecorder = media.createAudioRecorder();
5343```
5344
5345## MediaErrorCode<sup>(deprecated)</sup>
5346
5347媒体服务错误类型枚举。
5348
5349> **说明:**
5350> 从API version 8开始支持,从API version 11开始废弃,建议使用[媒体错误码](#averrorcode9)替代。
5351
5352**系统能力:** SystemCapability.Multimedia.Media.Core
5353
5354| 名称                       | 值   | 说明                                   |
5355| -------------------------- | ---- | -------------------------------------- |
5356| MSERR_OK                   | 0    | 表示操作成功。                         |
5357| MSERR_NO_MEMORY            | 1    | 表示申请内存失败,系统可能无可用内存。 |
5358| MSERR_OPERATION_NOT_PERMIT | 2    | 表示无权限执行此操作。                 |
5359| MSERR_INVALID_VAL          | 3    | 表示传入入参无效。                     |
5360| MSERR_IO                   | 4    | 表示发生IO错误。                       |
5361| MSERR_TIMEOUT              | 5    | 表示操作超时。                         |
5362| MSERR_UNKNOWN              | 6    | 表示未知错误。                         |
5363| MSERR_SERVICE_DIED         | 7    | 表示服务端失效。                       |
5364| MSERR_INVALID_STATE        | 8    | 表示在当前状态下,不允许执行此操作。   |
5365| MSERR_UNSUPPORTED          | 9    | 表示在当前版本下,不支持此操作。       |
5366
5367## AudioPlayer<sup>(deprecated)</sup>
5368
5369> **说明:**
5370> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer](#avplayer9)替代。
5371
5372音频播放管理类,用于管理和播放音频媒体。在调用AudioPlayer的方法前,需要先通过[createAudioPlayer()](#mediacreateaudioplayerdeprecated)构建一个AudioPlayer实例。
5373
5374### 属性<sup>(deprecated)</sup>
5375
5376**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5377
5378| 名称                            | 类型                                                   | 只读 | 可选 | 说明                                                         |
5379| ------------------------------- | ------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
5380| src                             | string                                                 | 否   | 否   | 音频媒体URI,支持当前主流的音频格式(m4a、aac、mp3、ogg、wav、amr)。<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_MEDIAohos.permission.INTERNET。 |
5381| 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/> |
5382| loop                            | boolean                                                | 否   | 否  | 音频循环播放属性,设置为'true'表示循环播放。                 |
5383| audioInterruptMode<sup>9+</sup> | [audio.InterruptMode](../apis-audio-kit/js-apis-audio.md#interruptmode9) | 是   | 是   | 音频焦点模型。                                               |
5384| currentTime                     | number                                                 | 是   | 否   | 音频的当前播放位置,单位为毫秒(ms)。                       |
5385| duration                        | number                                                 | 是   | 否   | 音频时长,单位为毫秒(ms)。                                 |
5386| state                           | [AudioState](#audiostatedeprecated)                              | 是   | 否   | 可以查询音频播放的状态,该状态不可作为调用play/pause/stop等状态切换的触发条件。 |
5387
5388### play<sup>(deprecated)</sup>
5389
5390play(): void
5391
5392开始播放音频资源,需在'dataLoad'事件成功触发后,才能调用。
5393
5394> **说明:**
5395> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.play](#play9)替代。
5396
5397**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5398
5399**示例:**
5400
5401```ts
5402audioPlayer.on('play', () => {    //设置'play'事件回调
5403  console.info('audio play called');
5404});
5405audioPlayer.play();
5406```
5407
5408### pause<sup>(deprecated)</sup>
5409
5410pause(): void
5411
5412暂停播放音频资源。
5413
5414> **说明:**
5415> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.pause](#pause9)替代。
5416
5417**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5418
5419**示例:**
5420
5421```ts
5422audioPlayer.on('pause', () => {    //设置'pause'事件回调
5423  console.info('audio pause called');
5424});
5425audioPlayer.pause();
5426```
5427
5428### stop<sup>(deprecated)</sup>
5429
5430stop(): void
5431
5432停止播放音频资源。
5433
5434> **说明:**
5435> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.stop](#stop9)替代。
5436
5437**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5438
5439**示例:**
5440
5441```ts
5442audioPlayer.on('stop', () => {    //设置'stop'事件回调
5443  console.info('audio stop called');
5444});
5445audioPlayer.stop();
5446```
5447
5448### reset<sup>(deprecated)</sup>
5449
5450reset(): void
5451
5452重置播放音频资源。
5453
5454> **说明:**
5455> 从API version 7开始支持,从API version 9开始废弃,建议使用[AVPlayer.reset](#reset9)替代。
5456
5457**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5458
5459**示例:**
5460
5461```ts
5462audioPlayer.on('reset', () => {    //设置'reset'事件回调
5463  console.info('audio reset called');
5464});
5465audioPlayer.reset();
5466```
5467
5468### seek<sup>(deprecated)</sup>
5469
5470seek(timeMs: number): void
5471
5472跳转到指定播放位置。
5473
5474> **说明:**
5475> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。
5476
5477**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5478
5479**参数:**
5480
5481| 参数名 | 类型   | 必填 | 说明                                                        |
5482| ------ | ------ | ---- | ----------------------------------------------------------- |
5483| timeMs | number | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围[0, duration]。 |
5484
5485**示例:**
5486
5487```ts
5488audioPlayer.on('timeUpdate', (seekDoneTime: number) => {    //设置'timeUpdate'事件回调
5489  if (seekDoneTime == null) {
5490    console.error('Failed to seek');
5491    return;
5492  }
5493  console.info('Succeeded in seek. seekDoneTime: ' + seekDoneTime);
5494});
5495audioPlayer.seek(30000);    //seek到30000ms的位置
5496```
5497
5498### setVolume<sup>(deprecated)</sup>
5499
5500setVolume(vol: number): void
5501
5502设置音量。
5503
5504> **说明:**
5505> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.setVolume](#setvolume9)替代。
5506
5507**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5508
5509**参数:**
5510
5511| 参数名 | 类型   | 必填 | 说明                                                         |
5512| ------ | ------ | ---- | ------------------------------------------------------------ |
5513| vol    | number | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
5514
5515**示例:**
5516
5517```ts
5518audioPlayer.on('volumeChange', () => {    //设置'volumeChange'事件回调
5519  console.info('audio volumeChange called');
5520});
5521audioPlayer.setVolume(1);    //设置音量到100%
5522```
5523
5524### release<sup>(deprecated)</sup>
5525
5526release(): void
5527
5528释放音频资源。
5529
5530> **说明:**
5531> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.release](#release9)替代。
5532
5533**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5534
5535**示例:**
5536
5537```ts
5538audioPlayer.release();
5539audioPlayer = undefined;
5540```
5541
5542### getTrackDescription<sup>(deprecated)</sup>
5543
5544getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void
5545
5546获取音频轨道信息。需在'dataLoad'事件成功触发后,才能调用。通过回调函数获取返回值。
5547
5548> **说明:**
5549> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9)替代。
5550
5551**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5552
5553**参数:**
5554
5555| 参数名   | 类型                                                         | 必填 | 说明                                       |
5556| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------ |
5557| callback | AsyncCallback\<Array\<[MediaDescription](#mediadescription8)>> | 是   | 回调函数。获取音频轨道信息成功时,err为undefined,data为获取到的MediaDescription数组,否则为错误对象。 |
5558
5559**示例:**
5560
5561```ts
5562import { BusinessError } from '@kit.BasicServicesKit';
5563
5564audioPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => {
5565  if (arrList != null) {
5566    console.info('Succeeded in getting TrackDescription');
5567  } else {
5568    console.error(`Failed to get TrackDescription, error:${error}`);
5569  }
5570});
5571```
5572
5573### getTrackDescription<sup>(deprecated)</sup>
5574
5575getTrackDescription(): Promise\<Array\<MediaDescription>>
5576
5577获取音频轨道信息。需在'dataLoad'事件成功触发后,才能调用。通过Promise获取返回值。
5578
5579> **说明:**
5580> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9-1)替代。
5581
5582**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5583
5584**返回值:**
5585
5586| 类型                                                   | 说明                                            |
5587| ------------------------------------------------------ | ----------------------------------------------- |
5588| Promise<Array<[MediaDescription](#mediadescription8)>> | 音频轨道信息MediaDescription数组Promise返回值。 |
5589
5590**示例:**
5591
5592```ts
5593import { BusinessError } from '@kit.BasicServicesKit';
5594
5595audioPlayer.getTrackDescription().then((arrList: Array<media.MediaDescription>) => {
5596  console.info('Succeeded in getting TrackDescription');
5597}).catch((error: BusinessError) => {
5598  console.error(`Failed to get TrackDescription, error:${error}`);
5599});
5600```
5601
5602### on('bufferingUpdate')<sup>(deprecated)</sup>
5603
5604on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: number) => void): void
5605
5606开始订阅音频缓存更新事件。仅网络播放支持该订阅事件。
5607
5608> **说明:**
5609> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('bufferingUpdate')](#onbufferingupdate9)替代。
5610
5611**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5612
5613**参数:**
5614
5615| 参数名   | 类型     | 必填 | 说明                                                         |
5616| -------- | -------- | ---- | ------------------------------------------------------------ |
5617| type     | string   | 是   | 音频缓存事件回调类型,支持的事件:'bufferingUpdate'。        |
5618| callback | function | 是   | 音频缓存事件回调方法。<br>[BufferingInfoType](#bufferinginfotype8)value值固定为0。 |
5619
5620**示例:**
5621
5622```ts
5623audioPlayer.on('bufferingUpdate', (infoType: media.BufferingInfoType, value: number) => {
5624  console.info('audio bufferingInfo type: ' + infoType);
5625  console.info('audio bufferingInfo value: ' + value);
5626});
5627```
5628
5629### on('play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange')<sup>(deprecated)</sup>
5630
5631on(type: 'play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange', callback: () => void): void
5632
5633开始订阅音频播放事件。
5634
5635> **说明:**
5636> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('stateChange')](#onstatechange9)替代。
5637
5638**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5639
5640**参数:**
5641
5642| 参数名   | 类型       | 必填 | 说明                                                         |
5643| -------- | ---------- | ---- | ------------------------------------------------------------ |
5644| type     | string     | 是   | 播放事件回调类型,支持的事件包括:'play' \| 'pause' \| 'stop' \| 'reset' \| 'dataLoad' \| 'finish' \| 'volumeChange'。<br>- 'play':完成[play()](#playdeprecated)调用,音频开始播放,触发该事件。<br>- 'pause':完成[pause()](#pausedeprecated)调用,音频暂停播放,触发该事件。<br>- 'stop':完成[stop()](#stopdeprecated)调用,音频停止播放,触发该事件。<br>- 'reset':完成[reset()](#resetdeprecated)调用,播放器重置,触发该事件。<br>- 'dataLoad':完成音频数据加载后触发该事件,即src属性设置完成后触发该事件。<br>- 'finish':完成音频播放后触发该事件。<br>- 'volumeChange':完成[setVolume()](#setvolumedeprecated)调用,播放音量改变后触发该事件。 |
5645| callback | () => void | 是   | 播放事件回调方法。                                           |
5646
5647**示例:**
5648
5649```ts
5650import { fileIo as fs } from '@kit.CoreFileKit';
5651import { BusinessError } from '@kit.BasicServicesKit';
5652
5653let audioPlayer: media.AudioPlayer = media.createAudioPlayer();  //创建一个音频播放实例
5654audioPlayer.on('dataLoad', () => {            //设置'dataLoad'事件回调,src属性设置成功后,触发此回调
5655  console.info('audio set source called');
5656  audioPlayer.play();                       //开始播放,并触发'play'事件回调
5657});
5658audioPlayer.on('play', () => {                //设置'play'事件回调
5659  console.info('audio play called');
5660  audioPlayer.seek(30000);                  //调用seek方法,并触发'timeUpdate'事件回调
5661});
5662audioPlayer.on('pause', () => {               //设置'pause'事件回调
5663  console.info('audio pause called');
5664  audioPlayer.stop();                       //停止播放,并触发'stop'事件回调
5665});
5666audioPlayer.on('reset', () => {               //设置'reset'事件回调
5667  console.info('audio reset called');
5668  audioPlayer.release();                    //释放播放实例资源
5669  audioPlayer = undefined;
5670});
5671audioPlayer.on('timeUpdate', (seekDoneTime: number) => {  //设置'timeUpdate'事件回调
5672  if (seekDoneTime == null) {
5673    console.error('Failed to seek');
5674    return;
5675  }
5676  console.info('Succeeded in seek, and seek time is ' + seekDoneTime);
5677  audioPlayer.setVolume(0.5);                //设置音量为50%,并触发'volumeChange'事件回调
5678});
5679audioPlayer.on('volumeChange', () => {         //设置'volumeChange'事件回调
5680  console.info('audio volumeChange called');
5681  audioPlayer.pause();                       //暂停播放,并触发'pause'事件回调
5682});
5683audioPlayer.on('finish', () => {               //设置'finish'事件回调
5684  console.info('audio play finish');
5685  audioPlayer.stop();                        //停止播放,并触发'stop'事件回调
5686});
5687audioPlayer.on('error', (error: BusinessError) => {  //设置'error'事件回调
5688  console.error(`audio error called, error: ${error}`);
5689});
5690
5691// 用户选择音频设置fd(本地播放)
5692let fdPath = 'fd://';
5693// path路径的码流可通过"hdc file send D:\xxx\01.mp3 /data/accounts/account_0/appdata" 命令,将其推送到设备上
5694let path = '/data/accounts/account_0/appdata/ohos.xxx.xxx.xxx/01.mp3';
5695fs.open(path).then((file) => {
5696  fdPath = fdPath + '' + file.fd;
5697  console.info('Succeeded in opening fd, fd is' + fdPath);
5698  audioPlayer.src = fdPath;  //设置src属性,并触发'dataLoad'事件回调
5699}, (err: BusinessError) => {
5700  console.error('Failed to open fd, err is' + err);
5701}).catch((err: BusinessError) => {
5702  console.error('Failed to open fd, err is' + err);
5703});
5704```
5705
5706### on('timeUpdate')<sup>(deprecated)</sup>
5707
5708on(type: 'timeUpdate', callback: Callback\<number>): void
5709
5710开始订阅音频播放时间更新事件。处于播放状态时,每隔1s上报一次该事件。
5711
5712> **说明:**
5713> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('timeUpdate')](#ontimeupdate9)替代。
5714
5715**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5716
5717**参数:**
5718
5719| 参数名   | 类型              | 必填 | 说明                                                         |
5720| -------- | ----------------- | ---- | ------------------------------------------------------------ |
5721| type     | string            | 是   | 播放事件回调类型,支持的事件包括:'timeUpdate'。<br>- 'timeUpdate':音频播放时间戳更新,开始播放后自动触发该事件。 |
5722| callback | Callback\<number> | 是   | 播放事件回调方法。回调方法入参为更新后的时间戳。             |
5723
5724**示例:**
5725
5726```ts
5727audioPlayer.on('timeUpdate', (newTime: number) => {    //设置'timeUpdate'事件回调
5728  if (newTime == null) {
5729    console.error('Failed to do timeUpadate');
5730    return;
5731  }
5732  console.info('Succeeded in doing timeUpadate. seekDoneTime: ' + newTime);
5733});
5734audioPlayer.play();    //开始播放后,自动触发时间戳更新事件
5735```
5736
5737### on('audioInterrupt')<sup>(deprecated)</sup>
5738
5739on(type: 'audioInterrupt', callback: (info: audio.InterruptEvent) => void): void
5740
5741监听音频焦点变化事件,参考[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)。
5742
5743> **说明:**
5744> 从API version 9开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('audioInterrupt')](#onaudiointerrupt9)替代。
5745
5746**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5747
5748**参数:**
5749
5750| 参数名   | 类型                                                         | 必填 | 说明                                                     |
5751| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------------------- |
5752| type     | string                                                       | 是   | 音频焦点变化事件回调类型,支持的事件:'audioInterrupt'。 |
5753| callback | function  | 是   | 音频焦点变化事件回调方法。                               |
5754
5755**示例:**
5756
5757```ts
5758import { audio } from '@kit.AudioKit';
5759
5760audioPlayer.on('audioInterrupt', (info: audio.InterruptEvent) => {
5761  console.info('audioInterrupt called,and InterruptEvent info is:' + info)
5762})
5763```
5764
5765### on('error')<sup>(deprecated)</sup>
5766
5767on(type: 'error', callback: ErrorCallback): void
5768
5769开始订阅音频播放错误事件,当上报error错误事件后,用户需处理error事件,退出播放操作。
5770
5771> **说明:**
5772> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('error')](#onerror9)替代。
5773
5774**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5775
5776**参数:**
5777
5778| 参数名   | 类型          | 必填 | 说明                                                         |
5779| -------- | ------------- | ---- | ------------------------------------------------------------ |
5780| type     | string        | 是   | 播放错误事件回调类型,支持的事件包括:'error'。<br>- 'error':音频播放中发生错误,触发该事件。 |
5781| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 播放错误事件回调方法。                                       |
5782
5783**示例:**
5784
5785```ts
5786import { BusinessError } from '@kit.BasicServicesKit';
5787
5788audioPlayer.on('error', (error: BusinessError) => {  //设置'error'事件回调
5789  console.error(`audio error called, error: ${error}`);
5790});
5791audioPlayer.setVolume(3);  //设置volume为无效值,触发'error'事件
5792```
5793
5794## AudioState<sup>(deprecated)</sup>
5795
5796type AudioState = 'idle' | 'playing' | 'paused' | 'stopped' | 'error'
5797
5798音频播放的状态机。可通过state属性获取当前状态。
5799
5800> **说明:**
5801> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayerState](#avplayerstate9)替代。
5802
5803**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5804
5805| 类型    | 说明                                           |
5806| ------- | ---------------------------------------------- |
5807| 'idle'    | 音频播放空闲,dataload/reset成功后处于此状态。 |
5808| 'playing' | 音频正在播放,play成功后处于此状态。           |
5809| 'paused'  | 音频暂停播放,pause成功后处于此状态。          |
5810| 'stopped' | 音频播放停止,stop/播放结束后处于此状态。      |
5811| 'error'   | 错误状态。                                     |
5812
5813## VideoPlayer<sup>(deprecated)</sup>
5814
5815> **说明:**
5816> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer](#avplayer9)替代。
5817
5818视频播放管理类,用于管理和播放视频媒体。在调用VideoPlayer的方法前,需要先通过[createVideoPlayer()](#mediacreatevideoplayerdeprecated)构建一个VideoPlayer实例。
5819
5820### 属性
5821
5822**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
5823
5824| 名称                            | 类型                                                   | 只读 | 可选 | 说明                                                         |
5825| ------------------------------- | ------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
5826| url<sup>8+</sup>                | string                                                 | 否   | 否   | 视频媒体URL,支持当前主流的视频格式(mp4、mpeg-ts、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>5. file类型: file\://xx<br/>**说明:**<br>从API version 11开始不支持webm。 |
5827| 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/> |
5828| loop<sup>8+</sup>               | boolean                                                | 否   | 否   | 视频循环播放属性,设置为'true'表示循环播放。                 |
5829| videoScaleType<sup>9+</sup>     | [VideoScaleType](#videoscaletype9)                     | 否   | 是   | 视频缩放模式。默认值为VIDEO_SCALE_TYPE_FIT。                                               |
5830| audioInterruptMode<sup>9+</sup> | [audio.InterruptMode](../apis-audio-kit/js-apis-audio.md#interruptmode9) | 否   | 是   | 音频焦点模型。                                               |
5831| currentTime<sup>8+</sup>        | number                                                 | 是   | 否   | 视频的当前播放位置,单位为毫秒(ms)。                       |
5832| duration<sup>8+</sup>           | number                                                 | 是   | 否   | 视频时长,单位为毫秒(ms),返回-1表示直播模式。             |
5833| state<sup>8+</sup>              | [VideoPlayState](#videoplaystatedeprecated)                    | 是   | 否   | 视频播放的状态。                                             |
5834| width<sup>8+</sup>              | number                                                 | 是   | 否   | 视频宽,单位为像素(px)。                                   |
5835| height<sup>8+</sup>             | number                                                 | 是   | 否   | 视频高,单位为像素(px)。                                   |
5836
5837### setDisplaySurface<sup>(deprecated)</sup>
5838
5839setDisplaySurface(surfaceId: string, callback: AsyncCallback\<void>): void
5840
5841设置SurfaceId。通过回调函数获取返回值。
5842
5843*注意:SetDisplaySurface需要在设置url和Prepare之间,无音频的视频流必须设置Surface否则Prepare失败。
5844
5845> **说明:**
5846> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.surfaceId](#属性)替代。
5847
5848**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
5849
5850**参数:**
5851
5852| 参数名    | 类型                 | 必填 | 说明                      |
5853| --------- | -------------------- | ---- | ------------------------- |
5854| surfaceId | string               | 是   | SurfaceId                 |
5855| callback  | AsyncCallback\<void> | 是   | 回调函数。当设置SurfaceId成功,err为undefined,否则为错误对象。 |
5856
5857**示例:**
5858
5859```ts
5860import { BusinessError } from '@kit.BasicServicesKit';
5861
5862let surfaceId: string = '';
5863videoPlayer.setDisplaySurface(surfaceId, (err: BusinessError) => {
5864  if (err) {
5865    console.error('Failed to set DisplaySurface!');
5866  } else {
5867    console.info('Succeeded in setting DisplaySurface!');
5868  }
5869});
5870```
5871
5872### setDisplaySurface<sup>(deprecated)</sup>
5873
5874setDisplaySurface(surfaceId: string): Promise\<void>
5875
5876设置SurfaceId。通过Promise获取返回值。
5877
5878*注意:SetDisplaySurface需要在设置url和Prepare之间,无音频的视频流必须设置Surface否则Prepare失败。
5879
5880> **说明:**
5881> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.surfaceId](#属性)替代。
5882
5883**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
5884
5885**参数:**
5886
5887| 参数名    | 类型   | 必填 | 说明      |
5888| --------- | ------ | ---- | --------- |
5889| surfaceId | string | 是   | SurfaceId |
5890
5891**返回值:**
5892
5893| 类型           | 说明                           |
5894| -------------- | ------------------------------ |
5895| Promise\<void> | 设置SurfaceId的Promise返回值。 |
5896
5897**示例:**
5898
5899```ts
5900import { BusinessError } from '@kit.BasicServicesKit';
5901
5902let surfaceId: string = '';
5903videoPlayer.setDisplaySurface(surfaceId).then(() => {
5904  console.info('Succeeded in setting DisplaySurface');
5905}).catch((error: BusinessError) => {
5906  console.error(`video catchCallback, error:${error}`);
5907});
5908```
5909
5910### prepare<sup>(deprecated)</sup>
5911
5912prepare(callback: AsyncCallback\<void>): void
5913
5914准备播放视频。通过回调函数获取返回值。
5915
5916> **说明:**
5917> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.prepare](#prepare9)替代。
5918
5919**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
5920
5921**参数:**
5922
5923| 参数名   | 类型                 | 必填 | 说明                     |
5924| -------- | -------------------- | ---- | ------------------------ |
5925| callback | AsyncCallback\<void> | 是   | 回调函数。当准备播放视频成功,err为undefined,否则为错误对象。|
5926
5927**示例:**
5928
5929```ts
5930import { BusinessError } from '@kit.BasicServicesKit';
5931
5932videoPlayer.prepare((err: BusinessError) => {
5933  if (err) {
5934    console.error('Failed to prepare!');
5935  } else {
5936    console.info('Succeeded in preparing!');
5937  }
5938});
5939```
5940
5941### prepare<sup>(deprecated)</sup>
5942
5943prepare(): Promise\<void>
5944
5945准备播放视频。通过Promise获取返回值。
5946
5947> **说明:**
5948> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.prepare](#prepare9-1)替代。
5949
5950**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
5951
5952**返回值:**
5953
5954| 类型           | 说明                          |
5955| -------------- | ----------------------------- |
5956| Promise\<void> | 准备播放视频的Promise返回值。 |
5957
5958**示例:**
5959
5960```ts
5961import { BusinessError } from '@kit.BasicServicesKit';
5962
5963videoPlayer.prepare().then(() => {
5964  console.info('Succeeded in preparing');
5965}).catch((error: BusinessError) => {
5966  console.error(`video catchCallback, error:${error}`);
5967});
5968```
5969
5970### play<sup>(deprecated)</sup>
5971
5972play(callback: AsyncCallback\<void>): void
5973
5974开始播放视频。通过回调函数获取返回值。
5975
5976> **说明:**
5977> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.play](#play9)替代。
5978
5979**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
5980
5981**参数:**
5982
5983| 参数名   | 类型                 | 必填 | 说明                     |
5984| -------- | -------------------- | ---- | ------------------------ |
5985| callback | AsyncCallback\<void> | 是   | 回调函数。当开始播放视频成功,err为undefined,否则为错误对象。 |
5986
5987**示例:**
5988
5989```ts
5990import { BusinessError } from '@kit.BasicServicesKit';
5991
5992videoPlayer.play((err: BusinessError) => {
5993  if (err) {
5994    console.error('Failed to play!');
5995  } else {
5996    console.info('Succeeded in playing!');
5997  }
5998});
5999```
6000
6001### play<sup>(deprecated)</sup>
6002
6003play(): Promise\<void>
6004
6005开始播放视频。通过Promise获取返回值。
6006
6007> **说明:**
6008> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.play](#play9-1)替代。
6009
6010**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6011
6012**返回值:**
6013
6014| 类型           | 说明                          |
6015| -------------- | ----------------------------- |
6016| Promise\<void> | 开始播放视频的Promise返回值。 |
6017
6018**示例:**
6019
6020```ts
6021import { BusinessError } from '@kit.BasicServicesKit';
6022
6023videoPlayer.play().then(() => {
6024  console.info('Succeeded in playing');
6025}).catch((error: BusinessError) => {
6026  console.error(`video catchCallback, error:${error}`);
6027});
6028```
6029
6030### pause<sup>(deprecated)</sup>
6031
6032pause(callback: AsyncCallback\<void>): void
6033
6034通过回调方式暂停播放视频。通过回调函数获取返回值。
6035
6036> **说明:**
6037> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.pause](#pause9)替代。
6038
6039**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6040
6041**参数:**
6042
6043| 参数名   | 类型                 | 必填 | 说明                     |
6044| -------- | -------------------- | ---- | ------------------------ |
6045| callback | AsyncCallback\<void> | 是   | 回调函数。当暂停播放视频成功,err为undefined,否则为错误对象。 |
6046
6047**示例:**
6048
6049```ts
6050import { BusinessError } from '@kit.BasicServicesKit';
6051
6052videoPlayer.pause((err: BusinessError) => {
6053  if (err) {
6054    console.error('Failed to pause!');
6055  } else {
6056    console.info('Succeeded in pausing!');
6057  }
6058});
6059```
6060
6061### pause<sup>(deprecated)</sup>
6062
6063pause(): Promise\<void>
6064
6065暂停播放视频。通过Promise获取返回值。
6066
6067> **说明:**
6068> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.pause](#pause9-1)替代。
6069
6070**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6071
6072**返回值:**
6073
6074| 类型           | 说明                          |
6075| -------------- | ----------------------------- |
6076| Promise\<void> | 暂停播放视频的Promise返回值。 |
6077
6078**示例:**
6079
6080```ts
6081import { BusinessError } from '@kit.BasicServicesKit';
6082
6083videoPlayer.pause().then(() => {
6084  console.info('Succeeded in pausing');
6085}).catch((error: BusinessError) => {
6086  console.error(`video catchCallback, error:${error}`);
6087});
6088```
6089
6090### stop<sup>(deprecated)</sup>
6091
6092stop(callback: AsyncCallback\<void>): void
6093
6094通过回调方式停止播放视频。通过回调函数获取返回值。
6095
6096> **说明:**
6097> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.stop](#stop9)替代。
6098
6099**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6100
6101**参数:**
6102
6103| 参数名   | 类型                 | 必填 | 说明                     |
6104| -------- | -------------------- | ---- | ------------------------ |
6105| callback | AsyncCallback\<void> | 是   | 回调函数。当停止播放视频成功,err为undefined,否则为错误对象。 |
6106
6107**示例:**
6108
6109```ts
6110import { BusinessError } from '@kit.BasicServicesKit';
6111
6112videoPlayer.stop((err: BusinessError) => {
6113  if (err) {
6114    console.error('Failed to stop!');
6115  } else {
6116    console.info('Succeeded in stopping!');
6117  }
6118});
6119```
6120
6121### stop<sup>(deprecated)</sup>
6122
6123stop(): Promise\<void>
6124
6125停止播放视频。通过Promise获取返回值。
6126
6127> **说明:**
6128> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.stop](#stop9-1)替代。
6129
6130**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6131
6132**返回值:**
6133
6134| 类型           | 说明                          |
6135| -------------- | ----------------------------- |
6136| Promise\<void> | 停止播放视频的Promise返回值。 |
6137
6138**示例:**
6139
6140```ts
6141import { BusinessError } from '@kit.BasicServicesKit';
6142
6143videoPlayer.stop().then(() => {
6144  console.info('Succeeded in stopping');
6145}).catch((error: BusinessError) => {
6146  console.error(`video catchCallback, error:${error}`);
6147});
6148```
6149
6150### reset<sup>(deprecated)</sup>
6151
6152reset(callback: AsyncCallback\<void>): void
6153
6154重置播放视频。通过回调函数获取返回值。
6155
6156> **说明:**
6157> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.reset](#reset9)替代。
6158
6159**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6160
6161**参数:**
6162
6163| 参数名   | 类型                 | 必填 | 说明                     |
6164| -------- | -------------------- | ---- | ------------------------ |
6165| callback | AsyncCallback\<void> | 是   | 回调函数。当重置播放视频成功,err为undefined,否则为错误对象。 |
6166
6167**示例:**
6168
6169```ts
6170import { BusinessError } from '@kit.BasicServicesKit';
6171
6172videoPlayer.reset((err: BusinessError) => {
6173  if (err) {
6174    console.error('Failed to reset!');
6175  } else {
6176    console.info('Succeeded in resetting!');
6177  }
6178});
6179```
6180
6181### reset<sup>(deprecated)</sup>
6182
6183reset(): Promise\<void>
6184
6185重置播放视频。通过Promise获取返回值。
6186
6187> **说明:**
6188> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.reset](#reset9-1)替代。
6189
6190**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6191
6192**返回值:**
6193
6194| 类型           | 说明                          |
6195| -------------- | ----------------------------- |
6196| Promise\<void> | Promise对象。无返回结果的Promise对象。 |
6197
6198**示例:**
6199
6200```ts
6201import { BusinessError } from '@kit.BasicServicesKit';
6202
6203videoPlayer.reset().then(() => {
6204  console.info('Succeeded in resetting');
6205}).catch((error: BusinessError) => {
6206  console.error(`video catchCallback, error:${error}`);
6207});
6208```
6209
6210### seek<sup>(deprecated)</sup>
6211
6212seek(timeMs: number, callback: AsyncCallback\<number>): void
6213
6214跳转到指定播放位置,默认跳转到指定时间点的上一个关键帧。通过回调函数获取返回值。
6215
6216> **说明:**
6217> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。
6218
6219**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6220
6221**参数:**
6222
6223| 参数名   | 类型                   | 必填 | 说明                                                         |
6224| -------- | ---------------------- | ---- | ------------------------------------------------------------ |
6225| timeMs   | number                 | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, duration]。 |
6226| callback | AsyncCallback\<number> | 是   | 回调函数。跳转到指定播放位置成功时,err为undefined,data为获取到的跳转到的播放位置,否则为错误对象。                               |
6227
6228**示例:**
6229
6230```ts
6231import { BusinessError } from '@kit.BasicServicesKit';
6232
6233let videoPlayer: media.VideoPlayer;
6234media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => {
6235  if (video != null) {
6236    videoPlayer = video;
6237    console.info('Succeeded in creating VideoPlayer');
6238  } else {
6239    console.error(`Failed to create VideoPlayer, error:${error}`);
6240  }
6241});
6242
6243let seekTime: number = 5000;
6244videoPlayer.seek(seekTime, (err: BusinessError, result: number) => {
6245  if (err) {
6246    console.error('Failed to do seek!');
6247  } else {
6248    console.info('Succeeded in doing seek!');
6249  }
6250});
6251```
6252
6253### seek<sup>(deprecated)</sup>
6254
6255seek(timeMs: number, mode:SeekMode, callback: AsyncCallback\<number>): void
6256
6257跳转到指定播放位置。通过回调函数获取返回值。
6258
6259> **说明:**
6260> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。
6261
6262**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6263
6264**参数:**
6265
6266| 参数名   | 类型                   | 必填 | 说明                                                         |
6267| -------- | ---------------------- | ---- | ------------------------------------------------------------ |
6268| timeMs   | number                 | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, duration]。 |
6269| mode     | [SeekMode](#seekmode8) | 是   | 跳转模式。                                                   |
6270| callback | AsyncCallback\<number> | 是   | 回调函数。跳转到指定播放位置成功时,err为undefined,data为获取到的跳转到的播放位置,否则为错误对象。                               |
6271
6272**示例:**
6273
6274```ts
6275import { BusinessError } from '@kit.BasicServicesKit';
6276
6277let videoPlayer: media.VideoPlayer | null = null;
6278media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => {
6279  if (video != null) {
6280    videoPlayer = video;
6281    console.info('Succeeded in creating VideoPlayer');
6282  } else {
6283    console.error(`Failed to create VideoPlayer, error:${error}`);
6284  }
6285});
6286let seekTime: number = 5000;
6287if (videoPlayer) {
6288  (videoPlayer as media.VideoPlayer).seek(seekTime, media.SeekMode.SEEK_NEXT_SYNC, (err: BusinessError, result: number) => {
6289    if (err) {
6290      console.error('Failed to do seek!');
6291    } else {
6292      console.info('Succeeded in doing seek!');
6293    }
6294  });
6295}
6296```
6297
6298### seek<sup>(deprecated)</sup>
6299
6300seek(timeMs: number, mode?:SeekMode): Promise\<number>
6301
6302跳转到指定播放位置,如果没有设置mode则跳转到指定时间点的上一个关键帧。通过Promise获取返回值。
6303
6304> **说明:**
6305> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。
6306
6307**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6308
6309**参数:**
6310
6311| 参数名 | 类型                   | 必填 | 说明                                                         |
6312| ------ | ---------------------- | ---- | ------------------------------------------------------------ |
6313| timeMs | number                 | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, duration]。 |
6314| mode   | [SeekMode](#seekmode8) | 否   | 基于视频I帧的跳转模式,默认为SEEK_PREV_SYNC模式。            |
6315
6316**返回值:**
6317
6318| 类型             | 说明                                        |
6319| ---------------- | ------------------------------------------- |
6320| Promise\<number> | 跳转到指定播放位置的Promise返回值,单位ms。 |
6321
6322**示例:**
6323
6324```ts
6325import { BusinessError } from '@kit.BasicServicesKit';
6326
6327let videoPlayer: media.VideoPlayer | null = null;
6328media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => {
6329  if (video != null) {
6330    videoPlayer = video;
6331    console.info('Succeeded in creating VideoPlayer');
6332  } else {
6333    console.error(`Failed to create VideoPlayer, error:${error}`);
6334  }
6335});
6336let seekTime: number = 5000;
6337if (videoPlayer) {
6338  (videoPlayer as media.VideoPlayer).seek(seekTime).then((seekDoneTime: number) => { // seekDoneTime表示seek完成后的时间点
6339    console.info('Succeeded in doing seek');
6340  }).catch((error: BusinessError) => {
6341    console.error(`video catchCallback, error:${error}`);
6342  });
6343
6344  (videoPlayer as media.VideoPlayer).seek(seekTime, media.SeekMode.SEEK_NEXT_SYNC).then((seekDoneTime: number) => {
6345    console.info('Succeeded in doing seek');
6346  }).catch((error: BusinessError) => {
6347    console.error(`video catchCallback, error:${error}`);
6348  });
6349}
6350```
6351
6352### setVolume<sup>(deprecated)</sup>
6353
6354setVolume(vol: number, callback: AsyncCallback\<void>): void
6355
6356设置音量。通过回调函数获取返回值。
6357
6358> **说明:**
6359> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setVolume](#setvolume9)替代。
6360
6361**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6362
6363**参数:**
6364
6365| 参数名   | 类型                 | 必填 | 说明                                                         |
6366| -------- | -------------------- | ---- | ------------------------------------------------------------ |
6367| vol      | number               | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
6368| callback | AsyncCallback\<void> | 是   | 回调函数。当设置音量成功,err为undefined,否则为错误对象。 |
6369
6370**示例:**
6371
6372```ts
6373import { BusinessError } from '@kit.BasicServicesKit';
6374
6375let vol: number = 0.5;
6376videoPlayer.setVolume(vol, (err: BusinessError) => {
6377  if (err) {
6378    console.error('Failed to set Volume!');
6379  } else {
6380    console.info('Succeeded in setting Volume!');
6381  }
6382});
6383```
6384
6385### setVolume<sup>(deprecated)</sup>
6386
6387setVolume(vol: number): Promise\<void>
6388
6389设置音量。通过Promise获取返回值。
6390
6391> **说明:**
6392> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setVolume](#setvolume9)替代。
6393
6394**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6395
6396**参数:**
6397
6398| 参数名 | 类型   | 必填 | 说明                                                         |
6399| ------ | ------ | ---- | ------------------------------------------------------------ |
6400| vol    | number | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
6401
6402**返回值:**
6403
6404| 类型           | 说明                      |
6405| -------------- | ------------------------- |
6406| Promise\<void> | 设置音量的Promise返回值。 |
6407
6408**示例:**
6409
6410```ts
6411import { BusinessError } from '@kit.BasicServicesKit';
6412
6413let vol: number = 0.5;
6414videoPlayer.setVolume(vol).then(() => {
6415  console.info('Succeeded in setting Volume');
6416}).catch((error: BusinessError) => {
6417  console.error(`video catchCallback, error:${error}`);
6418});
6419```
6420
6421### release<sup>(deprecated)</sup>
6422
6423release(callback: AsyncCallback\<void>): void
6424
6425释放视频资源。通过回调函数获取返回值。
6426
6427> **说明:**
6428> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.release](#release9)替代。
6429
6430**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6431
6432**参数:**
6433
6434| 参数名   | 类型                 | 必填 | 说明                     |
6435| -------- | -------------------- | ---- | ------------------------ |
6436| callback | AsyncCallback\<void> | 是   | 回调函数。当释放视频资源成功,err为undefined,否则为错误对象。 |
6437
6438**示例:**
6439
6440```ts
6441import { BusinessError } from '@kit.BasicServicesKit';
6442
6443videoPlayer.release((err: BusinessError) => {
6444  if (err) {
6445    console.error('Failed to release!');
6446  } else {
6447    console.info('Succeeded in releasing!');
6448  }
6449});
6450```
6451
6452### release<sup>(deprecated)</sup>
6453
6454release(): Promise\<void>
6455
6456释放视频资源。通过Promise获取返回值。
6457
6458> **说明:**
6459> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.release](#release9-1)替代。
6460
6461**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6462
6463**返回值:**
6464
6465| 类型           | 说明                          |
6466| -------------- | ----------------------------- |
6467| Promise\<void> | 释放视频资源的Promise返回值。 |
6468
6469**示例:**
6470
6471```ts
6472import { BusinessError } from '@kit.BasicServicesKit';
6473
6474videoPlayer.release().then(() => {
6475  console.info('Succeeded in releasing');
6476}).catch((error: BusinessError) => {
6477  console.error(`video catchCallback, error:${error}`);
6478});
6479```
6480
6481### getTrackDescription<sup>(deprecated)</sup>
6482
6483getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void
6484
6485获取视频轨道信息。通过回调函数获取返回值。
6486
6487> **说明:**
6488> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9)替代。
6489
6490**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6491
6492**参数:**
6493
6494| 参数名   | 类型                                                         | 必填 | 说明                                       |
6495| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------ |
6496| callback | AsyncCallback\<Array\<[MediaDescription](#mediadescription8)>> | 是   | 回调函数。获取视频轨道信息成功时,err为undefined,data为获取到的视频轨道信息MediaDescription数组,否则为错误对象。 |
6497
6498**示例:**
6499
6500```ts
6501import { BusinessError } from '@kit.BasicServicesKit';
6502
6503videoPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => {
6504  if ((arrList) != null) {
6505    console.info('Succeeded in getting TrackDescription');
6506  } else {
6507    console.error(`Failed to get TrackDescription, error:${error}`);
6508  }
6509});
6510```
6511
6512### getTrackDescription<sup>(deprecated)</sup>
6513
6514getTrackDescription(): Promise\<Array\<MediaDescription>>
6515
6516获取视频轨道信息。通过Promise获取返回值。
6517
6518> **说明:**
6519> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9-1)替代。
6520
6521**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6522
6523**返回值:**
6524
6525| 类型                                                   | 说明                                            |
6526| ------------------------------------------------------ | ----------------------------------------------- |
6527| Promise<Array<[MediaDescription](#mediadescription8)>> | Promise对象,返回获取的视频轨道信息MediaDescription数组。 |
6528
6529**示例:**
6530
6531```ts
6532import { BusinessError } from '@kit.BasicServicesKit';
6533
6534videoPlayer.getTrackDescription().then((arrList: Array<media.MediaDescription>) => {
6535  if (arrList != null) {
6536    console.info('Succeeded in getting TrackDescription');
6537  } else {
6538    console.error('Failed to get TrackDescription');
6539  }
6540}).catch((error: BusinessError) => {
6541  console.error(`video catchCallback, error:${error}`);
6542});
6543```
6544
6545### setSpeed<sup>(deprecated)</sup>
6546
6547setSpeed(speed: number, callback: AsyncCallback\<number>): void
6548
6549设置播放速度。通过回调函数获取返回值。
6550
6551> **说明:**
6552> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setSpeed](#setspeed9)替代。
6553
6554**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6555
6556**参数:**
6557
6558| 参数名   | 类型                   | 必填 | 说明                                                       |
6559| -------- | ---------------------- | ---- | ---------------------------------------------------------- |
6560| speed    | number                 | 是   | 指定播放视频速度,具体见[PlaybackSpeed](#playbackspeed8)。 |
6561| callback | AsyncCallback\<number> | 是   | 回调函数。设置播放速度成功时,err为undefined,data为设置的播放速度,否则为错误对象。                                   |
6562
6563**示例:**
6564
6565```ts
6566import { BusinessError } from '@kit.BasicServicesKit';
6567
6568let videoPlayer: media.VideoPlayer | null = null;
6569media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => {
6570  if (video != null) {
6571    videoPlayer = video;
6572    console.info('Succeeded in creating VideoPlayer');
6573  } else {
6574    console.error(`Failed to create VideoPlayer, error:${error}`);
6575  }
6576});
6577let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X;
6578if (videoPlayer) {
6579  (videoPlayer as media.VideoPlayer).setSpeed(speed, (err: BusinessError, result: number) => {
6580    if (err) {
6581      console.error('Failed to set Speed!');
6582    } else {
6583      console.info('Succeeded in setting Speed!');
6584    }
6585  });
6586}
6587```
6588
6589### setSpeed<sup>(deprecated)</sup>
6590
6591setSpeed(speed: number): Promise\<number>
6592
6593设置播放速度。通过Promise获取返回值。
6594
6595> **说明:**
6596> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setSpeed](#setspeed9)替代。
6597
6598**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6599
6600**参数:**
6601
6602| 参数名 | 类型   | 必填 | 说明                                                       |
6603| ------ | ------ | ---- | ---------------------------------------------------------- |
6604| speed  | number | 是   | 指定播放视频速度,具体见[PlaybackSpeed](#playbackspeed8)。 |
6605
6606**返回值:**
6607
6608| 类型             | 说明                                                         |
6609| ---------------- | ------------------------------------------------------------ |
6610| Promise\<number> | Promise对象,返回设置的播放速度,具体见[PlaybackSpeed](#playbackspeed8)。 |
6611
6612**示例:**
6613
6614```ts
6615import { BusinessError } from '@kit.BasicServicesKit';
6616
6617let videoPlayer: media.VideoPlayer | null = null;
6618media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => {
6619  if (video != null) {
6620    videoPlayer = video;
6621    console.info('Succeeded in creating VideoPlayer');
6622  } else {
6623    console.error(`Failed to create VideoPlayer, error:${error}`);
6624  }
6625});
6626let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X;
6627if (videoPlayer) {
6628  (videoPlayer as media.VideoPlayer).setSpeed(speed).then((result: number) => {
6629    console.info('Succeeded in setting Speed');
6630  }).catch((error: BusinessError) => {
6631    console.error(`Failed to set Speed, error:${error}`);//todo:: error
6632  });
6633}
6634```
6635
6636### on('playbackCompleted')<sup>(deprecated)</sup>
6637
6638on(type: 'playbackCompleted', callback: Callback\<void>): void
6639
6640开始监听视频播放完成事件。
6641
6642> **说明:**
6643> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('stateChange')](#onstatechange9)替代。
6644
6645**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6646
6647**参数:**
6648
6649| 参数名   | 类型     | 必填 | 说明                                                        |
6650| -------- | -------- | ---- | ----------------------------------------------------------- |
6651| type     | string   | 是   | 视频播放完成事件回调类型,支持的事件:'playbackCompleted'。 |
6652| callback | Callback\<void> | 是   | 视频播放完成事件回调方法。                                  |
6653
6654**示例:**
6655
6656```ts
6657videoPlayer.on('playbackCompleted', () => {
6658  console.info('playbackCompleted called!');
6659});
6660```
6661
6662### on('bufferingUpdate')<sup>(deprecated)</sup>
6663
6664on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: number) => void): void
6665
6666开始监听视频缓存更新事件。仅网络播放支持该订阅事件。
6667
6668> **说明:**
6669> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('bufferingUpdate')](#onbufferingupdate9)替代。
6670
6671**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6672
6673**参数:**
6674
6675| 参数名   | 类型     | 必填 | 说明                                                         |
6676| -------- | -------- | ---- | ------------------------------------------------------------ |
6677| type     | string   | 是   | 视频缓存事件回调类型,支持的事件:'bufferingUpdate'。        |
6678| callback | function | 是   | 视频缓存事件回调方法。<br>[BufferingInfoType](#bufferinginfotype8)value值固定为0。 |
6679
6680**示例:**
6681
6682```ts
6683videoPlayer.on('bufferingUpdate', (infoType: media.BufferingInfoType, value: number) => {
6684  console.info('video bufferingInfo type: ' + infoType);
6685  console.info('video bufferingInfo value: ' + value);
6686});
6687```
6688
6689### on('startRenderFrame')<sup>(deprecated)</sup>
6690
6691on(type: 'startRenderFrame', callback: Callback\<void>): void
6692
6693开始监听视频播放首帧送显上报事件。
6694
6695> **说明:**
6696> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('startRenderFrame')](#onstartrenderframe9)替代。
6697
6698**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6699
6700**参数:**
6701
6702| 参数名   | 类型            | 必填 | 说明                                                         |
6703| -------- | --------------- | ---- | ------------------------------------------------------------ |
6704| type     | string          | 是   | 视频播放首帧送显上报事件回调类型,支持的事件:'startRenderFrame'。 |
6705| callback | Callback\<void> | 是   | 视频播放首帧送显上报事件回调方法。                           |
6706
6707**示例:**
6708
6709```ts
6710videoPlayer.on('startRenderFrame', () => {
6711  console.info('startRenderFrame called!');
6712});
6713```
6714
6715### on('videoSizeChanged')<sup>(deprecated)</sup>
6716
6717on(type: 'videoSizeChanged', callback: (width: number, height: number) => void): void
6718
6719开始监听视频播放宽高变化事件。
6720
6721> **说明:**
6722> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('videoSizeChange')](#onvideosizechange9)替代。
6723
6724**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6725
6726**参数:**
6727
6728| 参数名   | 类型     | 必填 | 说明                                                         |
6729| -------- | -------- | ---- | ------------------------------------------------------------ |
6730| type     | string   | 是   | 视频播放宽高变化事件回调类型,支持的事件:'videoSizeChanged'。 |
6731| callback | function | 是   | 视频播放宽高变化事件回调方法,width表示宽,height表示高。    |
6732
6733**示例:**
6734
6735```ts
6736videoPlayer.on('videoSizeChanged', (width: number, height: number) => {
6737  console.info('video width is: ' + width);
6738  console.info('video height is: ' + height);
6739});
6740```
6741### on('audioInterrupt')<sup>(deprecated)</sup>
6742
6743on(type: 'audioInterrupt', callback: (info: audio.InterruptEvent) => void): void
6744
6745监听音频焦点变化事件,参考[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)。
6746
6747> **说明:**
6748> 从API version 9开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('audioInterrupt')](#onaudiointerrupt9)替代。
6749
6750**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6751
6752**参数:**
6753
6754| 参数名   | 类型                                                         | 必填 | 说明                                                     |
6755| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------------------- |
6756| type     | string                                                       | 是   | 音频焦点变化事件回调类型,支持的事件:'audioInterrupt'。 |
6757| callback | function | 是   | 音频焦点变化事件回调方法。                               |
6758
6759**示例:**
6760
6761```ts
6762import { audio } from '@kit.AudioKit';
6763
6764videoPlayer.on('audioInterrupt', (info: audio.InterruptEvent) => {
6765  console.info('audioInterrupt called,and InterruptEvent info is:' + info)
6766})
6767```
6768
6769### on('error')<sup>(deprecated)</sup>
6770
6771on(type: 'error', callback: ErrorCallback): void
6772
6773开始监听视频播放错误事件,当上报error错误事件后,用户需处理error事件,退出播放操作。
6774
6775> **说明:**
6776> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('error')](#onerror9)替代。
6777
6778**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6779
6780**参数:**
6781
6782| 参数名   | 类型          | 必填 | 说明                                                         |
6783| -------- | ------------- | ---- | ------------------------------------------------------------ |
6784| type     | string        | 是   | 播放错误事件回调类型,支持的事件包括:'error'。<br>- 'error':视频播放中发生错误,触发该事件。 |
6785| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 播放错误事件回调方法。                                       |
6786
6787**示例:**
6788
6789```ts
6790import { BusinessError } from '@kit.BasicServicesKit';
6791
6792videoPlayer.on('error', (error: BusinessError) => {  // 设置'error'事件回调
6793  console.error(`video error called, error: ${error}`);
6794});
6795videoPlayer.url = 'fd://error';  //设置错误的播放地址,触发'error'事件
6796```
6797
6798## VideoPlayState<sup>(deprecated)</sup>
6799
6800type VideoPlayState = 'idle' | 'prepared' | 'playing' | 'paused' | 'stopped' | 'error'
6801
6802视频播放的状态机,可通过state属性获取当前状态。
6803
6804> **说明:**
6805> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayerState](#avplayerstate9)替代。
6806
6807**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6808
6809| 类型     | 说明           |
6810| -------- | -------------- |
6811| 'idle'     | 视频播放空闲。 |
6812| 'prepared' | 视频播放准备。 |
6813| 'playing'  | 视频正在播放。 |
6814| 'paused'   | 视频暂停播放。 |
6815| 'stopped'  | 视频播放停止。 |
6816| 'error'    | 错误状态。     |
6817
6818## AudioRecorder<sup>(deprecated)</sup>
6819
6820> **说明:**
6821> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder](#avrecorder9)替代。
6822
6823音频录制管理类,用于录制音频媒体。在调用AudioRecorder的方法前,需要先通过[createAudioRecorder()](#mediacreateaudiorecorderdeprecated) 构建一个AudioRecorder实例。
6824
6825### prepare<sup>(deprecated)</sup>
6826
6827prepare(config: AudioRecorderConfig): void
6828
6829录音准备。
6830
6831> **说明:**
6832> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.prepare](#prepare9-2)替代。
6833
6834**需要权限:** ohos.permission.MICROPHONE
6835
6836**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
6837
6838**参数:**
6839
6840| 参数名 | 类型                                        | 必填 | 说明                                                         |
6841| ------ | ------------------------------------------- | ---- | ------------------------------------------------------------ |
6842| config | [AudioRecorderConfig](#audiorecorderconfigdeprecated) | 是   | 配置录音的相关参数,包括音频输出URI、编码格式、采样率、声道数、输出格式等。 |
6843
6844**错误码:**
6845
6846以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
6847
6848| 错误码ID | 错误信息              |
6849| -------- | --------------------- |
6850| 201      | permission denied     |
6851
6852**示例:**
6853
6854```ts
6855let audioRecorderConfig: media.AudioRecorderConfig = {
6856  audioEncoder : media.AudioEncoder.AAC_LC,
6857  audioEncodeBitRate : 22050,
6858  audioSampleRate : 22050,
6859  numberOfChannels : 2,
6860  format : media.AudioOutputFormat.AAC_ADTS,
6861  uri : 'fd://1',       // 文件需先由调用者创建,并给予适当的权限
6862  location : { latitude : 30, longitude : 130},
6863}
6864audioRecorder.on('prepare', () => {    //设置'prepare'事件回调
6865  console.info('prepare called');
6866});
6867audioRecorder.prepare(audioRecorderConfig);
6868```
6869
6870### start<sup>(deprecated)</sup>
6871
6872start(): void
6873
6874开始录制,需在'prepare'事件成功触发后,才能调用start方法。
6875
6876> **说明:**
6877> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.start](#start9)替代。
6878
6879**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
6880
6881**示例:**
6882
6883```ts
6884audioRecorder.on('start', () => {    //设置'start'事件回调
6885  console.info('audio recorder start called');
6886});
6887audioRecorder.start();
6888```
6889
6890### pause<sup>(deprecated)</sup>
6891
6892pause():void
6893
6894暂停录制,需要在'start'事件成功触发后,才能调用pause方法。
6895
6896> **说明:**
6897> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.pause](#pause9-2)替代。
6898
6899**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
6900
6901**示例:**
6902
6903```ts
6904audioRecorder.on('pause', () => {    //设置'pause'事件回调
6905  console.info('audio recorder pause called');
6906});
6907audioRecorder.pause();
6908```
6909
6910### resume<sup>(deprecated)</sup>
6911
6912resume():void
6913
6914恢复录制,需要在'pause'事件成功触发后,才能调用resume方法。
6915
6916> **说明:**
6917> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.resume](#resume9)替代。
6918
6919**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
6920
6921**示例:**
6922
6923```ts
6924audioRecorder.on('resume', () => {    //设置'resume'事件回调
6925  console.info('audio recorder resume called');
6926});
6927audioRecorder.resume();
6928```
6929
6930### stop<sup>(deprecated)</sup>
6931
6932stop(): void
6933
6934停止录音。
6935
6936> **说明:**
6937> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.stop](#stop9-2)替代。
6938
6939**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
6940
6941**示例:**
6942
6943```ts
6944audioRecorder.on('stop', () => {    //设置'stop'事件回调
6945  console.info('audio recorder stop called');
6946});
6947audioRecorder.stop();
6948```
6949
6950### release<sup>(deprecated)</sup>
6951
6952release(): void
6953
6954释放录音资源。
6955
6956> **说明:**
6957> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.release](#release9-2)替代。
6958
6959**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
6960
6961**示例:**
6962
6963```ts
6964audioRecorder.on('release', () => {    //设置'release'事件回调
6965  console.info('audio recorder release called');
6966});
6967audioRecorder.release();
6968audioRecorder = undefined;
6969```
6970
6971### reset<sup>(deprecated)</sup>
6972
6973reset(): void
6974
6975重置录音。
6976
6977进行重置录音之前,需要先调用stop()停止录音。重置录音之后,需要调用prepare()设置录音参数项,才能再次进行录音。
6978
6979> **说明:**
6980> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.reset](#reset9-2)替代。
6981
6982**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
6983
6984**示例:**
6985
6986```ts
6987audioRecorder.on('reset', () => {    //设置'reset'事件回调
6988  console.info('audio recorder reset called');
6989});
6990audioRecorder.reset();
6991```
6992
6993### on('prepare' | 'start' | 'pause' | 'resume' | 'stop' | 'release' | 'reset')<sup>(deprecated)</sup>
6994
6995on(type: 'prepare' | 'start' | 'pause' | 'resume' | 'stop' | 'release' | 'reset', callback: () => void): void
6996
6997开始订阅音频录制事件。
6998
6999> **说明:**
7000> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.on('stateChange')](#onstatechange9-1)替代。
7001
7002**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7003
7004**参数:**
7005
7006| 参数名   | 类型     | 必填 | 说明                                                         |
7007| -------- | -------- | ---- | ------------------------------------------------------------ |
7008| type     | string   | 是   | 录制事件回调类型,支持的事件包括:'prepare'&nbsp;\|&nbsp;'start'&nbsp;\|  'pause' \| ’resume‘ \|&nbsp;'stop'&nbsp;\|&nbsp;'release'&nbsp;\|&nbsp;'reset'。<br/>-&nbsp;'prepare'&nbsp;:完成prepare调用,音频录制参数设置完成,触发该事件。<br/>-&nbsp;'start'&nbsp;:完成start调用,音频录制开始,触发该事件。<br/>-&nbsp;'pause': 完成pause调用,音频暂停录制,触发该事件。<br/>-&nbsp;'resume': 完成resume调用,音频恢复录制,触发该事件。<br/>-&nbsp;'stop'&nbsp;:完成stop调用,音频停止录制,触发该事件。<br/>-&nbsp;'release'&nbsp;:完成release调用,音频释放录制资源,触发该事件。<br/>-&nbsp;'reset':完成reset调用,音频重置为初始状态,触发该事件。 |
7009| callback | ()=>void | 是   | 录制事件回调方法。                                           |
7010
7011**示例:**
7012
7013```ts
7014import { BusinessError } from '@kit.BasicServicesKit';
7015
7016let audioRecorder: media.AudioRecorder = media.createAudioRecorder();  // 创建一个音频录制实例
7017let audioRecorderConfig: media.AudioRecorderConfig = {
7018  audioEncoder : media.AudioEncoder.AAC_LC,
7019  audioEncodeBitRate : 22050,
7020  audioSampleRate : 22050,
7021  numberOfChannels : 2,
7022  format : media.AudioOutputFormat.AAC_ADTS,
7023  uri : 'fd://xx',  // 文件需先由调用者创建,并给予适当的权限
7024  location : { latitude : 30, longitude : 130}
7025}
7026audioRecorder.on('error', (error: BusinessError) => {  // 设置'error'事件回调
7027  console.error(`audio error called, error: ${error}`);
7028});
7029audioRecorder.on('prepare', () => {  // 设置'prepare'事件回调
7030  console.info('prepare called');
7031  audioRecorder.start();  // 开始录制,并触发'start'事件回调
7032});
7033audioRecorder.on('start', () => {  // 设置'start'事件回调
7034  console.info('audio recorder start called');
7035});
7036audioRecorder.on('pause', () => {  // 设置'pause'事件回调
7037  console.info('audio recorder pause called');
7038});
7039audioRecorder.on('resume', () => {  // 设置'resume'事件回调
7040  console.info('audio recorder resume called');
7041});
7042audioRecorder.on('stop', () => {  // 设置'stop'事件回调
7043  console.info('audio recorder stop called');
7044});
7045audioRecorder.on('release', () => {  // 设置'release'事件回调
7046  console.info('audio recorder release called');
7047});
7048audioRecorder.on('reset', () => {  // 设置'reset'事件回调
7049  console.info('audio recorder reset called');
7050});
7051audioRecorder.prepare(audioRecorderConfig)  // 设置录制参数 ,并触发'prepare'事件回调
7052```
7053
7054### on('error')<sup>(deprecated)</sup>
7055
7056on(type: 'error', callback: ErrorCallback): void
7057
7058开始订阅音频录制错误事件,当上报error错误事件后,用户需处理error事件,退出录制操作。
7059
7060> **说明:**
7061> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.on('error')](#onerror9-1)替代。
7062
7063**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7064
7065**参数:**
7066
7067| 参数名   | 类型          | 必填 | 说明                                                         |
7068| -------- | ------------- | ---- | ------------------------------------------------------------ |
7069| type     | string        | 是   | 录制错误事件回调类型'error'。<br/>-&nbsp;'error':音频录制过程中发生错误,触发该事件。 |
7070| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 录制错误事件回调方法。                                       |
7071
7072**示例:**
7073
7074```ts
7075import { BusinessError } from '@kit.BasicServicesKit';
7076
7077let audioRecorderConfig: media.AudioRecorderConfig = {
7078  audioEncoder : media.AudioEncoder.AAC_LC,
7079  audioEncodeBitRate : 22050,
7080  audioSampleRate : 22050,
7081  numberOfChannels : 2,
7082  format : media.AudioOutputFormat.AAC_ADTS,
7083  uri : 'fd://xx',   // 文件需先由调用者创建,并给予适当的权限
7084  location : { latitude : 30, longitude : 130}
7085}
7086audioRecorder.on('error', (error: BusinessError) => {  // 设置'error'事件回调
7087  console.error(`audio error called, error: ${error}`);
7088});
7089audioRecorder.prepare(audioRecorderConfig);  // prepare不设置参数,触发'error'事件
7090```
7091
7092## AudioRecorderConfig<sup>(deprecated)</sup>
7093
7094> **说明:**
7095> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorderConfig](#avrecorderconfig9)替代。
7096
7097表示音频的录音配置。
7098
7099**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7100
7101| 名称                                | 类型                                         | 必填 | 说明                                                         |
7102| ----------------------------------- | -------------------------------------------- | ---- | ------------------------------------------------------------ |
7103| audioEncoder                        | [AudioEncoder](#audioencoderdeprecated)                | 否   | 音频编码格式,默认设置为AAC_LC。<br/>**说明:** 从API version 8开始废弃,建议使用audioEncoderMime替代。 |
7104| audioEncodeBitRate                  | number                                       | 否   | 音频编码比特率,默认值为48000。                              |
7105| audioSampleRate                     | number                                       | 否   | 音频采集采样率,默认值为48000。<br>可变比特率模式,码率仅作参考。                              |
7106| numberOfChannels                    | number                                       | 否   | 音频采集声道数,默认值为2。                                  |
7107| format                              | [AudioOutputFormat](#audiooutputformatdeprecated)      | 否   | 音频输出封装格式,默认设置为MPEG_4。<br/>**说明:** 从API version 8开始废弃,建议使用fileFormat替代。 |
7108| location                            | [Location](#location)                        | 否   | 音频采集的地理位置。                                         |
7109| uri                                 | string                                       | 是   | 音频输出URI:fd://xx&nbsp;(fd&nbsp;number)<br/>![](figures/zh-cn_image_url.png) <br/>文件需要由调用者创建,并赋予适当的权限。 |
7110| audioEncoderMime<sup>8+</sup>       | [CodecMimeType](#codecmimetype8)             | 否   | 容器编码格式。                                               |
7111| fileFormat<sup>8+</sup>             | [ContainerFormatType](#containerformattype8) | 否   | 音频编码格式。                                               |
7112
7113## AudioEncoder<sup>(deprecated)</sup>
7114
7115> **说明:**
7116> 从API version 6开始支持,从API version 8开始废弃,建议使用[CodecMimeType](#codecmimetype8)替代。
7117
7118表示音频编码格式的枚举。
7119
7120**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7121
7122| 名称    | 值   | 说明                                                         |
7123| ------- | ---- | ------------------------------------------------------------ |
7124| DEFAULT | 0    | 默认编码格式。<br/>仅做接口定义,暂不支持使用。              |
7125| AMR_NB  | 1    | AMR-NB(Adaptive Multi Rate-Narrow Band Speech Codec) 编码格式。<br/>仅做接口定义,暂不支持使用。 |
7126| AMR_WB  | 2    | AMR-WB(Adaptive Multi Rate-Wide Band Speech Codec) 编码格式。<br/>仅做接口定义,暂不支持使用。 |
7127| AAC_LC  | 3    | AAC-LC(Advanced&nbsp;Audio&nbsp;Coding&nbsp;Low&nbsp;Complexity)编码格式。 |
7128| HE_AAC  | 4    | HE_AAC(High-Efficiency Advanced&nbsp;Audio&nbsp;Coding)编码格式。<br/>仅做接口定义,暂不支持使用。 |
7129
7130## AudioOutputFormat<sup>(deprecated)</sup>
7131
7132> **说明:**
7133> 从API version 6开始支持,从API version 8 开始废弃,建议使用[ContainerFormatType](#containerformattype8)替代。
7134
7135表示音频封装格式的枚举。
7136
7137**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7138
7139| 名称     | 值   | 说明                                                         |
7140| -------- | ---- | ------------------------------------------------------------ |
7141| DEFAULT  | 0    | 默认封装格式。<br/>仅做接口定义,暂不支持使用。              |
7142| MPEG_4   | 2    | 封装为MPEG-4格式。                                           |
7143| AMR_NB   | 3    | 封装为AMR_NB格式。<br/>仅做接口定义,暂不支持使用。          |
7144| AMR_WB   | 4    | 封装为AMR_WB格式。<br/>仅做接口定义,暂不支持使用。          |
7145| AAC_ADTS | 6    | 封装为ADTS(Audio&nbsp;Data&nbsp;Transport&nbsp;Stream)格式,是AAC音频的传输流格式。 |
7146
7147
7148## media.createAVImageGenerator<sup>12+</sup>
7149
7150createAVImageGenerator(callback: AsyncCallback\<AVImageGenerator>): void
7151
7152创建AVImageGenerator实例,通过回调函数获取返回值。
7153
7154**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7155
7156**参数:**
7157
7158| 参数名   | 类型                                  | 必填 | 说明                                                         |
7159| -------- | ------------------------------------- | ---- | ------------------------------------------------------------ |
7160| callback | AsyncCallback\<[AVImageGenerator](#avimagegenerator12)> | 是   | 回调函数。异步返回AVImageGenerator实例,失败时返回null。可用于获取视频缩略图。 |
7161
7162**错误码:**
7163
7164以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7165
7166| 错误码ID | 错误信息                       |
7167| -------- | ------------------------------ |
7168| 5400101  | No memory. Returned by callback. |
7169
7170**示例:**
7171
7172```ts
7173import { BusinessError } from '@kit.BasicServicesKit';
7174
7175let avImageGenerator: media.AVImageGenerator;
7176media.createAVImageGenerator((error: BusinessError, generator: media.AVImageGenerator) => {
7177  if (generator != null) {
7178    avImageGenerator = generator;
7179    console.info('Succeeded in creating AVImageGenerator');
7180  } else {
7181    console.error(`Failed to creat AVImageGenerator, error message:${error.message}`);
7182  }
7183});
7184```
7185
7186## media.createAVImageGenerator<sup>12+</sup>
7187
7188createAVImageGenerator(): Promise\<AVImageGenerator>
7189
7190创建AVImageGenerator对象,通过Promise获取返回值。
7191
7192**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7193
7194**返回值:**
7195
7196| 类型                            | 说明                                                         |
7197| ------------------------------- | ------------------------------------------------------------ |
7198| Promise\<[AVImageGenerator](#avimagegenerator12)> | Promise对象。异步返回AVImageGenerator实例,失败时返回null。可用于获取视频缩略图。 |
7199
7200**错误码:**
7201
7202以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7203
7204| 错误码ID | 错误信息                      |
7205| -------- | ----------------------------- |
7206| 5400101  | No memory. Returned by promise. |
7207
7208**示例:**
7209
7210```ts
7211import { BusinessError } from '@kit.BasicServicesKit';
7212
7213let avImageGenerator: media.AVImageGenerator;
7214media.createAVImageGenerator().then((generator: media.AVImageGenerator) => {
7215  if (generator != null) {
7216    avImageGenerator = generator;
7217    console.info('Succeeded in creating AVImageGenerator');
7218  } else {
7219    console.error('Failed to creat AVImageGenerator');
7220  }
7221}).catch((error: BusinessError) => {
7222  console.error(`Failed to creat AVImageGenerator, error message:${error.message}`);
7223});
7224```
7225
7226## AVImageGenerator<sup>12+</sup>
7227
7228视频缩略图获取类,用于从视频资源中获取缩略图。在调用AVImageGenerator的方法前,需要先通过[createAVImageGenerator()](#mediacreateavimagegenerator12)构建一个AVImageGenerator实例。
7229
7230获取视频缩略图的demo可参考:[获取视频缩略图开发指导](../../media/media/avimagegenerator.md)。
7231
7232### 属性
7233
7234**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7235
7236| 名称                                                | 类型                                                         | 可读 | 可写 | 说明                                                         |
7237| --------------------------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
7238| fdSrc<sup>12+</sup>                                  | [AVFileDescriptor](js-apis-media.md#avfiledescriptor9)                       | 是   | 是   | 媒体文件描述,通过该属性设置数据源。<br/> **使用示例**:<br/>假设一个连续存储的媒体文件,地址偏移:0,字节长度:100。其文件描述为 AVFileDescriptor { fd = 资源句柄; offset = 0; length = 100; }。<br>**说明:** <br> - 将资源句柄(fd)传递给 AVImageGenerator 实例之后,请不要通过该资源句柄做其他读写操作,包括但不限于将同一个资源句柄传递给多个 AVPlayer / AVMetadataExtractor / AVImageGenerator / AVTranscoder。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致视频缩略图数据获取异常。 |
7239
7240### fetchFrameByTime<sup>12+</sup>
7241
7242fetchFrameByTime(timeUs: number, options: AVImageQueryOptions, param: PixelMapParams, callback: AsyncCallback\<image.PixelMap>): void
7243
7244异步方式获取视频缩略图。通过注册回调函数获取返回值。
7245
7246**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7247
7248**参数:**
7249
7250| 参数名   | 类型                                         | 必填 | 说明                                |
7251| -------- | -------------------------------------------- | ---- | ----------------------------------- |
7252| timeUs | number                   | 是   | 需要获取的缩略图在视频中的时间点,单位为微秒(μs)。 |
7253| options | [AVImageQueryOptions](#avimagequeryoptions12)     | 是   | 需要获取的缩略图时间点与视频帧的对应关系。 |
7254| param | [PixelMapParams](#pixelmapparams12)     | 是   | 需要获取的缩略图的格式参数。 |
7255| callback | AsyncCallback\<[image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7)>   | 是   | 回调函数。获取缩略图成功时,err为undefined,data为PixelMap实例,否则为错误对象。 |
7256
7257**错误码:**
7258
7259以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7260
7261| 错误码ID | 错误信息                                   |
7262| -------- | ------------------------------------------ |
7263| 5400102  | Operation not allowed. Returned by callback. |
7264| 5400106  | Unsupported format. Returned by callback.  |
7265
7266**示例:**
7267
7268```ts
7269import { BusinessError } from '@kit.BasicServicesKit';
7270import { media } from '@kit.MediaKit';
7271import { image } from '@kit.ImageKit';
7272
7273let avImageGenerator: media.AVImageGenerator | undefined = undefined;
7274let pixel_map : image.PixelMap | undefined = undefined;
7275
7276// 初始化入参
7277let timeUs: number = 0
7278
7279let queryOption: media.AVImageQueryOptions = media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC
7280
7281let param: media.PixelMapParams = {
7282  width : 300,
7283  height : 300,
7284}
7285
7286// 获取缩略图
7287media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => {
7288  if(generator != null){
7289    avImageGenerator = generator;
7290    console.info(`Succeeded in creating AVImageGenerator`);
7291    avImageGenerator.fetchFrameByTime(timeUs, queryOption, param, (error: BusinessError, pixelMap) => {
7292      if (error) {
7293        console.error(`Failed to fetch FrameByTime, err = ${JSON.stringify(error)}`)
7294        return
7295      }
7296      pixel_map = pixelMap;
7297    });
7298  } else {
7299    console.error(`Failed to creat AVImageGenerator, error message:${err.message}`);
7300  };
7301});
7302```
7303
7304### fetchFrameByTime<sup>12+</sup>
7305
7306fetchFrameByTime(timeUs: number, options: AVImageQueryOptions, param: PixelMapParams): Promise<image.PixelMap>
7307
7308异步方式获取视频缩略图。通过Promise获取返回值。
7309
7310**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7311
7312**参数:**
7313
7314| 参数名   | 类型                                         | 必填 | 说明                                |
7315| -------- | -------------------------------------------- | ---- | ----------------------------------- |
7316| timeUs | number                   | 是   | 需要获取的缩略图在视频中的时间点,单位为微秒(μs)。 |
7317| options | [AVImageQueryOptions](#avimagequeryoptions12)     | 是   | 需要获取的缩略图时间点与视频帧的对应关系。 |
7318| param | [PixelMapParams](#pixelmapparams12)    | 是   | 需要获取的缩略图的格式参数。 |
7319
7320**返回值:**
7321
7322| 类型           | 说明                                     |
7323| -------------- | ---------------------------------------- |
7324| Promise\<[image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7)> | Promise对象,返回视频缩略图对象。 |
7325
7326**错误码:**
7327
7328以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7329
7330| 错误码ID | 错误信息                                  |
7331| -------- | ----------------------------------------- |
7332| 5400102  | Operation not allowed. Returned by promise. |
7333| 5400106  | Unsupported format. Returned by promise.  |
7334
7335**示例:**
7336
7337```ts
7338import { BusinessError } from '@kit.BasicServicesKit';
7339import { media } from '@kit.MediaKit';
7340import { image } from '@kit.ImageKit';
7341
7342let avImageGenerator: media.AVImageGenerator | undefined = undefined;
7343let pixel_map : image.PixelMap | undefined = undefined;
7344
7345// 初始化入参
7346let timeUs: number = 0
7347
7348let queryOption: media.AVImageQueryOptions = media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC
7349
7350let param: media.PixelMapParams = {
7351  width : 300,
7352  height : 300,
7353}
7354
7355// 获取缩略图
7356media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => {
7357  if(generator != null){
7358    avImageGenerator = generator;
7359    console.info(`Succeeded in creating AVImageGenerator`);
7360    avImageGenerator.fetchFrameByTime(timeUs, queryOption, param).then((pixelMap: image.PixelMap) => {
7361      pixel_map = pixelMap;
7362    }).catch((error: BusinessError) => {
7363      console.error(`Failed to fetch FrameByTime, error message:${error.message}`);
7364    });
7365  } else {
7366    console.error(`Failed to creat AVImageGenerator, error message:${err.message}`);
7367  };
7368});
7369```
7370
7371### release<sup>12+</sup>
7372
7373release(callback: AsyncCallback\<void>): void
7374
7375异步方式释放资源。通过注册回调函数获取返回值。
7376
7377**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7378
7379**参数:**
7380
7381| 参数名   | 类型                                         | 必填 | 说明                                |
7382| -------- | -------------------------------------------- | ---- | ----------------------------------- |
7383| callback | AsyncCallback\<void>                   | 是   | 回调函数。当释放资源成功,err为undefined,否则为错误对象。 |
7384
7385**错误码:**
7386
7387以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7388
7389| 错误码ID | 错误信息                                   |
7390| -------- | ------------------------------------------ |
7391| 5400102  | Operation not allowed. Returned by callback. |
7392
7393**示例:**
7394
7395```ts
7396import { BusinessError } from '@kit.BasicServicesKit';
7397import { media } from '@kit.MediaKit';
7398
7399let avImageGenerator: media.AVImageGenerator | undefined = undefined;
7400
7401//释放资源
7402media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => {
7403  if(generator != null){
7404    avImageGenerator = generator;
7405    console.info(`Succeeded in creating AVImageGenerator`);
7406    avImageGenerator.release((error: BusinessError) => {
7407      if (error) {
7408        console.error(`Failed to release, err = ${JSON.stringify(error)}`);
7409        return;
7410      }
7411      console.info(`Succeeded in releasing`);
7412    });
7413  } else {
7414    console.error(`Failed to creat AVImageGenerator, error message:${err.message}`);
7415  };
7416});
7417```
7418
7419### release<sup>12+</sup>
7420
7421release(): Promise\<void>
7422
7423异步方式释放资源。通过Promise获取返回值。
7424
7425**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7426
7427**返回值:**
7428
7429| 类型           | 说明                                     |
7430| -------------- | ---------------------------------------- |
7431| Promise\<void> | 异步方式释放资源release方法的Promise返回值。 |
7432
7433**错误码:**
7434
7435以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7436
7437| 错误码ID | 错误信息                                  |
7438| -------- | ----------------------------------------- |
7439| 5400102  | Operation not allowed. Returned by promise. |
7440
7441**示例:**
7442
7443```ts
7444import { BusinessError } from '@kit.BasicServicesKit';
7445import { media } from '@kit.MediaKit';
7446
7447let avImageGenerator: media.AVImageGenerator | undefined = undefined;
7448
7449//释放资源
7450media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => {
7451  if(generator != null){
7452    avImageGenerator = generator;
7453    console.info(`Succeeded in creating AVImageGenerator`);
7454    avImageGenerator.release().then(() => {
7455      console.info(`Succeeded in releasing.`);
7456    }).catch((error: BusinessError) => {
7457      console.error(`Failed to release, error message:${error.message}`);
7458    });
7459  } else {
7460    console.error(`Failed to creat AVImageGenerator, error message:${err.message}`);
7461  };
7462});
7463```
7464
7465## AVImageQueryOptions<sup>12+</sup>
7466
7467需要获取的缩略图时间点与视频帧的对应关系。
7468
7469在获取视频缩略图时,传入的时间点与实际取得的视频帧所在时间点不一定相等,需要指定传入的时间点与实际取得的视频帧的时间关系。
7470
7471**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7472
7473| 名称                     | 值              | 说明                                                         |
7474| ------------------------ | --------------- | ------------------------------------------------------------ |
7475| AV_IMAGE_QUERY_NEXT_SYNC       | 0   | 表示选取传入时间点或之后的关键帧。                       |
7476| AV_IMAGE_QUERY_PREVIOUS_SYNC        | 1    | 表示选取传入时间点或之前的关键帧。 |
7477| AV_IMAGE_QUERY_CLOSEST_SYNC        | 2    | 表示选取离传入时间点最近的关键帧。                 |
7478| AV_IMAGE_QUERY_CLOSEST             | 3    | 表示选取离传入时间点最近的帧,该帧不一定是关键帧。 |
7479
7480## PixelMapParams<sup>12+</sup>
7481
7482获取视频缩略图时,输出缩略图的格式参数。
7483
7484**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7485
7486| 名称   | 类型   | 可读 | 可写 | 说明                                                                            |
7487|--------|--------|------|------|---------------------------------------------------------------------------------|
7488| width  | number | 是   | 是   | 输出的缩略图宽度。应保证大于0且不大于原始视频宽度。否则返回的缩略图不会进行缩放。 |
7489| height | number | 是   | 是   | 输出的缩略图高度。应保证大于0且不大于原始视频高度。否则返回的缩略图不会进行缩放。 |
7490
7491## media.createMediaSourceWithUrl<sup>12+</sup>
7492
7493createMediaSourceWithUrl(url: string, headers?: Record\<string, string>): MediaSource
7494
7495创建流媒体预下载媒体来源实例方法。
7496
7497**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。
7498
7499**系统能力:** SystemCapability.Multimedia.Media.Core
7500
7501**参数:**
7502
7503| 参数名   | 类型     | 必填 | 说明                 |
7504| -------- | -------- | ---- | -------------------- |
7505| url | string | 是   | - 流媒体预下载媒体来源url,支持的流媒体格式:HLS、HTTP-FLV、Dash、Https。<br> - 本地m3u8的fd路径。  |
7506| headers | Record\<string, string> | 否   | 支持流媒体预下载HttpHeader自定义。 |
7507
7508**返回值:**
7509
7510| 类型           | 说明                                       |
7511| -------------- | ------------------------------------------ |
7512| [MediaSource](#mediasource12) | MediaSource返回值。 |
7513
7514**错误码:**
7515
7516以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7517
7518| 错误码ID | 错误信息                                  |
7519| -------- | ----------------------------------------- |
7520| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.      |
7521| 5400101  | No memory.  |
7522
7523**示例1:**
7524
7525```ts
7526import { media } from '@kit.MediaKit';
7527
7528let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"};
7529let mediaSource : media.MediaSource = media.createMediaSourceWithUrl("http://xxx",  headers);
7530```
7531
7532**示例2:**
7533
7534```ts
7535import { media } from '@kit.MediaKit';
7536import { common } from '@kit.AbilityKit';
7537import { resourceManager } from '@kit.LocalizationKit';
7538
7539let context = getContext(this) as common.UIAbilityContext;
7540let mgr = context.resourceManager;
7541let fileDescriptor = await mgr.getRawFd("xxx.m3u8");
7542
7543let fd:string = fileDescriptor.fd.toString();
7544let offset:string = fileDescriptor.offset.toString();
7545let length:string = fileDescriptor.length.toString();
7546let fdUrl:string = "fd://" + fd + "?offset=" + offset + "&size=" + length;
7547
7548let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"};
7549let mediaSource : media.MediaSource = media.createMediaSourceWithUrl(fdUrl,  headers);
7550
7551let mimeType : media.AVMimeTypes = media.AVMimeTypes.APPLICATION_M3U8;
7552mediaSource.setMimeType(mimeType);
7553
7554```
7555
7556## MediaSource<sup>12+</sup>
7557
7558媒体数据信息。来源自[createMediaSourceWithUrl](#mediacreatemediasourcewithurl12)。
7559
7560**系统能力:** SystemCapability.Multimedia.Media.Core
7561
7562### setMimeType<sup>12+</sup>
7563
7564setMimeType(mimeType: AVMimeTypes): void
7565
7566设置媒体MIME类型,以帮助播放器处理扩展的媒体源。
7567
7568**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
7569
7570**系统能力:** SystemCapability.Multimedia.Media.Core
7571
7572**参数:**
7573
7574| 参数名   | 类型     | 必填 | 说明                 |
7575| -------- | -------- | ---- | -------------------- |
7576| mimeType | [AVMimeTypes](#mediasource12) | 是   | 媒体MIME类型。 |
7577
7578## AVMimeTypes<sup>12+</sup>
7579
7580媒体MIME类型,通过[setMimeType](#setmimetype12)设置。
7581
7582**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
7583
7584**系统能力:** SystemCapability.Multimedia.Media.Core
7585
7586
7587| 名称       | 值   | 说明                                                         |
7588| ---------- | ---- | ------------------------------------------------------------ |
7589| APPLICATION_M3U8       | application/m3u8    | 表示m3u8本地文件。 |
7590
7591
7592## PlaybackStrategy<sup>12+</sup>
7593
7594播放策略。
7595
7596**系统能力:** SystemCapability.Multimedia.Media.Core
7597
7598| 名称  | 类型     | 必填 | 说明                 |
7599| -------- | -------- | ---- | -------------------- |
7600| preferredWidth| number | 否   | 播放策略首选宽度,int类型,如1080。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
7601| preferredHeight | number | 否   | 播放策略首选高度,int类型,如1920。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
7602| preferredBufferDuration | number | 否  | 播放策略首选缓冲持续时间,单位s,取值范围1-20。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
7603| preferredHdr | boolean | 否   | 播放策略true是hdr,false非hdr,默认非hdr。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
7604| mutedMediaType | [MediaType](#mediatype8) | 否 | 静音播放的媒体类型,仅支持设置 MediaType.MEDIA_TYPE_AUD。 |
7605| preferredAudioLanguage<sup>13+</sup> | string | 否 | 播放策略首选音轨语言。dash场景下应用可按需设置。非dash场景不涉及,建议缺省。 |
7606| preferredSubtitleLanguage<sup>13+</sup> | string | 否 | 播放策略首选字幕语言。dash场景下应用可按需设置。非dash场景不涉及,建议缺省。 |
7607
7608## AVScreenCaptureRecordPreset<sup>12+</sup>
7609
7610进行屏幕录制时的编码、封装格式参数的枚举。
7611
7612**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7613
7614| 名称                              | 值   | 说明                                         |
7615| --------------------------------- | ---- | -------------------------------------------- |
7616| SCREEN_RECORD_PRESET_H264_AAC_MP4 | 0    | 使用视频H264编码,音频AAC编码,MP4封装格式。 |
7617| SCREEN_RECORD_PRESET_H265_AAC_MP4 | 1    | 使用视频H265编码,音频AAC编码,MP4封装格式。 |
7618
7619## AVScreenCaptureStateCode<sup>12+</sup>
7620
7621屏幕录制的状态回调。
7622
7623**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7624
7625| 名称                                     | 值   | 说明                     |
7626| ---------------------------------------- | ---- | ------------------------ |
7627| SCREENCAPTURE_STATE_STARTED              | 0    | 录屏已开始。             |
7628| SCREENCAPTURE_STATE_CANCELED             | 1    | 录屏被取消。             |
7629| SCREENCAPTURE_STATE_STOPPED_BY_USER      | 2    | 录屏被用户手动停止。     |
7630| SCREENCAPTURE_STATE_INTERRUPTED_BY_OTHER | 3    | 录屏被其他录屏打断。     |
7631| SCREENCAPTURE_STATE_STOPPED_BY_CALL      | 4    | 录屏被来电打断。         |
7632| SCREENCAPTURE_STATE_MIC_UNAVAILABLE      | 5    | 录屏无法使用麦克风收音。 |
7633| SCREENCAPTURE_STATE_MIC_MUTED_BY_USER    | 6    | 麦克风被用户关闭。       |
7634| SCREENCAPTURE_STATE_MIC_UNMUTED_BY_USER  | 7    | 麦克风被用户打开。       |
7635| SCREENCAPTURE_STATE_ENTER_PRIVATE_SCENE  | 8    | 录屏进入隐私页面。       |
7636| SCREENCAPTURE_STATE_EXIT_PRIVATE_SCENE   | 9    | 录屏退出隐私页面。       |
7637| SCREENCAPTURE_STATE_STOPPED_BY_USER_SWITCHES   | 10    | 系统用户切换,录屏中断。       |
7638
7639## AVScreenCaptureRecordConfig<sup>12+</sup>
7640
7641表示录屏参数配置。
7642
7643**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7644
7645| 名称              | 类型                                                         | 必填 | 说明                                                         |
7646| ----------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
7647| fd                | number                                                       | 是   | 录制输出的文件fd。                                           |
7648| frameWidth        | number                                                       | 否   | 录屏的视频宽度,默认屏幕宽度,根据不同屏幕默认值不同,单位px。 |
7649| frameHeight       | number                                                       | 否   | 录屏的视频高度,默认屏幕高度,根据不同屏幕默认值不同,单位px。 |
7650| videoBitrate      | number                                                       | 否   | 录屏的视频比特率,默认10000000。                             |
7651| audioSampleRate   | number                                                       | 否   | 录屏的音频采样率,内录的系统音和外录的麦克风都是用此采样率,默认48000,仅支持设置48000或16000。 |
7652| audioChannelCount | number                                                       | 否   | 录屏的音频通道数,内录的系统音和外录的麦克风都是用此通道数,默认2声道,仅支持设置1或2声道。 |
7653| audioBitrate      | number                                                       | 否   | 录屏的音频比特率,内录的系统音和外录的麦克风都是用此比特率,默认96000。 |
7654| preset            | [AVScreenCaptureRecordPreset](#avscreencapturerecordpreset12) | 否   | 录屏使用的编码和封装格式,默认SCREEN_RECORD_PRESET_H264_AAC_MP4格式。 |
7655
7656## AVScreenCaptureRecorder<sup>12+</sup>
7657
7658屏幕录制管理类,用于进行屏幕录制。在调用AVScreenCaptureRecorder的方法前,需要先通过[createAVScreenCaptureRecorder()](#mediacreateavscreencapturerecorder12)创建一个AVScreenCaptureRecorder实例。
7659
7660### init<sup>12+</sup>
7661
7662init(config: AVScreenCaptureRecordConfig): Promise\<void>
7663
7664异步方式进行录屏初始化,设置录屏参数。通过Promise获取返回值。
7665
7666**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7667
7668**参数:**
7669
7670| 参数名 | 类型                                                         | 必填 | 说明                     |
7671| ------ | ------------------------------------------------------------ | ---- | ------------------------ |
7672| config | [AVScreenCaptureRecordConfig](#avscreencapturerecordconfig12) | 是   | 配置屏幕录制的相关参数。 |
7673
7674**返回值:**
7675
7676| 类型           | 说明                                |
7677| -------------- | ----------------------------------- |
7678| Promise\<void> | 异步录屏初始化方法的Promise返回值。 |
7679
7680**错误码:**
7681
7682| 错误码ID | 错误信息                                       |
7683| -------- | ---------------------------------------------- |
7684| 401      | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. Return by promise. |
7685| 5400103  | IO error. Return by promise.                   |
7686| 5400105  | Service died. Return by promise.               |
7687
7688**示例:**
7689
7690```ts
7691import { BusinessError } from '@kit.BasicServicesKit';
7692
7693let avCaptureConfig: media.AVScreenCaptureRecordConfig = {
7694    fd: 0, // 文件需要先有调用者创建,赋予写权限,将文件fd传给此参数
7695    frameWidth: 640,
7696    frameHeight: 480
7697    // 补充其他参数
7698}
7699
7700avScreenCaptureRecorder.init(avCaptureConfig).then(() => {
7701    console.info('Succeeded in initing avScreenCaptureRecorder');
7702}).catch((err: BusinessError) => {
7703    console.info('Failed to init avScreenCaptureRecorder, error: ' + err.message);
7704})
7705```
7706
7707### startRecording<sup>12+</sup>
7708
7709startRecording(): Promise\<void>
7710
7711异步方式开始录屏。通过Promise获取返回值。
7712
7713**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7714
7715**返回值:**
7716
7717| 类型           | 说明                             |
7718| -------------- | -------------------------------- |
7719| Promise\<void> | 异步开始录屏方法的Promise返回值. |
7720
7721**错误码:**
7722
7723| 错误码ID | 错误信息                         |
7724| -------- | -------------------------------- |
7725| 5400103  | IO error. Return by promise.     |
7726| 5400105  | Service died. Return by promise. |
7727
7728**示例:**
7729
7730```ts
7731import { BusinessError } from '@kit.BasicServicesKit';
7732
7733avScreenCaptureRecorder.startRecording().then(() => {
7734    console.info('Succeeded in starting avScreenCaptureRecorder');
7735}).catch((err: BusinessError) => {
7736    console.info('Failed to start avScreenCaptureRecorder, error: ' + err.message);
7737})
7738```
7739
7740### stopRecording<sup>12+</sup>
7741
7742stopRecording(): Promise\<void>
7743
7744异步方式结束录屏。通过Promise获取返回值。
7745
7746**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7747
7748**返回值:**
7749
7750| 类型           | 说明                              |
7751| -------------- | --------------------------------- |
7752| Promise\<void> | 异步结束录屏方法的Promise返回值。 |
7753
7754**错误码:**
7755
7756| 错误码ID | 错误信息                         |
7757| -------- | -------------------------------- |
7758| 5400103  | IO error. Return by promise.     |
7759| 5400105  | Service died. Return by promise. |
7760
7761**示例:**
7762
7763```ts
7764import { BusinessError } from '@kit.BasicServicesKit';
7765
7766avScreenCaptureRecorder.stopRecording().then(() => {
7767    console.info('Succeeded in stopping avScreenCaptureRecorder');
7768}).catch((err: BusinessError) => {
7769    console.info('Failed to stop avScreenCaptureRecorder, error: ' + err.message);
7770})
7771```
7772
7773### skipPrivacyMode<sup>12+</sup>
7774
7775skipPrivacyMode(windowIDs: Array\<number>): Promise\<void>
7776
7777录屏时,应用可对本应用的隐私窗口做安全豁免。通过Promise获取返回值。
7778如录屏时,用户在本应用进行输入密码等操作,应用不会进行黑屏处理。
7779
7780**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7781
7782**参数:**
7783
7784| 参数名 | 类型    | 必填 | 说明                                                      |
7785| ------ | ------- | ---- | --------------------------------------------------------- |
7786| windowIDs | Array\<number> | 是   | 需要豁免隐私的窗口列表,包括主窗口id和子窗口id,窗口属性获取方法可以参考[窗口API引用](../apis-arkui/js-apis-window.md#getwindowproperties9) |
7787
7788**返回值:**
7789
7790| 类型           | 说明                             |
7791| -------------- | -------------------------------- |
7792| Promise\<void> | 豁免隐私窗口的Promise返回值. |
7793
7794**错误码:**
7795
7796| 错误码ID | 错误信息                         |
7797| -------- | -------------------------------- |
7798| 5400103  | IO error. Return by promise.     |
7799| 5400105  | Service died. Return by promise. |
7800
7801**示例:**
7802
7803```ts
7804import { BusinessError } from '@kit.BasicServicesKit';
7805
7806let windowIDs = [];
7807avScreenCaptureRecorder.skipPrivacyMode(windowIDs).then(() => {
7808    console.info('Succeeded in skipping privacy mode');
7809}).catch((err: BusinessError) => {
7810    console.info('Failed to skip privacy mode, error: ' + err.message);
7811})
7812```
7813
7814### setMicEnabled<sup>12+</sup>
7815
7816setMicEnabled(enable: boolean): Promise\<void>
7817
7818异步方式设置麦克风开关。通过Promise获取返回值。
7819
7820**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7821
7822**参数:**
7823
7824| 参数名 | 类型    | 必填 | 说明                                                      |
7825| ------ | ------- | ---- | --------------------------------------------------------- |
7826| enable | boolean | 是   | 麦克风开关控制,true代表麦克风打开,false代表麦克风关闭。 |
7827
7828**返回值:**
7829
7830| 类型           | 说明                                    |
7831| -------------- | --------------------------------------- |
7832| Promise\<void> | 异步设置麦克风开关方法的Promise返回值。 |
7833
7834**错误码:**
7835
7836| 错误码ID | 错误信息                         |
7837| -------- | -------------------------------- |
7838| 5400103  | IO error. Return by promise.     |
7839| 5400105  | Service died. Return by promise. |
7840
7841**示例:**
7842
7843```ts
7844import { BusinessError } from '@kit.BasicServicesKit';
7845
7846avScreenCaptureRecorder.setMicEnabled(true).then(() => {
7847    console.info('Succeeded in setMicEnabled avScreenCaptureRecorder');
7848}).catch((err: BusinessError) => {
7849    console.info('Failed to setMicEnabled avScreenCaptureRecorder, error: ' + err.message);
7850})
7851```
7852
7853### release<sup>12+</sup>
7854
7855release(): Promise\<void>
7856
7857异步方式释放录屏。通过Promise获取返回值。
7858
7859**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7860
7861**返回值:**
7862
7863| 类型           | 说明                              |
7864| -------------- | --------------------------------- |
7865| Promise\<void> | 异步释放录屏方法的Promise返回值。 |
7866
7867**错误码:**
7868
7869| 错误码ID | 错误信息                         |
7870| -------- | -------------------------------- |
7871| 5400103  | IO error. Return by promise.     |
7872| 5400105  | Service died. Return by promise. |
7873
7874**示例:**
7875
7876```ts
7877import { BusinessError } from '@kit.BasicServicesKit';
7878
7879avScreenCaptureRecorder.release().then(() => {
7880    console.info('Succeeded in releasing avScreenCaptureRecorder');
7881}).catch((err: BusinessError) => {
7882    console.info('Faile to release avScreenCaptureRecorder, error: ' + err.message);
7883})
7884```
7885
7886### on('stateChange')<sup>12+</sup>
7887
7888on(type: 'stateChange', callback: Callback\<AVScreenCaptureStateCode>): void
7889
7890订阅录屏状态切换的事件,当状态发生的时候,会通过订阅的回调通知用户。用户只能订阅一个状态切换的回调方法,重复订阅时,以最后一次订阅的回调接口为准。
7891
7892**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7893
7894**参数:**
7895
7896| 参数名   | 类型     | 必填 | 说明                                                         |
7897| -------- | -------- | ---- | ------------------------------------------------------------ |
7898| type     | string   | 是   | 状态切换事件回调类型,支持的事件:'stateChange'。            |
7899| callback | function | 是   | 状态切换事件回调方法,[AVScreenCaptureStateCode](#avscreencapturestatecode12)表示切换到的状态。 |
7900
7901**示例:**
7902
7903```ts
7904avScreenCaptureRecorder.on('stateChange', (state: media.AVScreenCaptureStateCode) => {
7905    console.info('avScreenCaptureRecorder stateChange to ' + state);
7906})
7907```
7908
7909### on('error')<sup>12+</sup>
7910
7911on(type: 'error', callback: ErrorCallback): void
7912
7913订阅AVScreenCaptureRecorder的错误事件,用户可以根据应用自身逻辑对错误事件进行处理。用户只能订阅一个错误事件的回调方法,重复订阅时,以最后一次订阅的回调接口为准。
7914
7915**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7916
7917**参数:**
7918
7919| 参数名   | 类型          | 必填 | 说明                                    |
7920| -------- | ------------- | ---- | --------------------------------------- |
7921| type     | string        | 是   | 错误事件回调类型,支持的事件:'error'。 |
7922| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 录屏错误事件回调方法。                  |
7923
7924**错误码:**
7925
7926| 错误码ID | 错误信息                         |
7927| -------- | -------------------------------- |
7928| 201      | permission denied.     |
7929| 5400103  | IO error. Return by ErrorCallback. |
7930| 5400105  | Service died. Return by ErrorCallback. |
7931
7932**示例:**
7933
7934```ts
7935avScreenCaptureRecorder.on('error', (err: BusinessError) => {
7936    console.error('avScreenCaptureRecorder error:' + err.message);
7937})
7938```
7939
7940### off('stateChange')<sup>12+</sup>
7941
7942 off(type: 'stateChange', callback?: Callback\<AVScreenCaptureStateCode>): void
7943
7944取消订阅状态切换回调事件。用户可以指定填入状态切换的回调方法来取消订阅。
7945
7946**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7947
7948**参数:**
7949
7950| 参数名   | 类型     | 必填 | 说明                                                         |
7951| -------- | -------- | ---- | ------------------------------------------------------------ |
7952| type     | string   | 是   | 状态切换事件回调类型,支持的事件:'stateChange'。            |
7953| callback | function | 否   | 状态切换事件回调方法,[AVScreenCaptureStateCode](#avscreencapturestatecode12)表示切换到的状态,不填此参数则会取消最后一次订阅事件。 |
7954
7955**示例:**
7956
7957```ts
7958avScreenCaptureRecorder.off('stateChange');
7959```
7960
7961### off('error')<sup>12+</sup>
7962
7963off(type: 'error', callback?: ErrorCallback): void
7964
7965取消订阅错误回调事件。用户可以指定填入错误回调方法来取消订阅。
7966
7967**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7968
7969**参数:**
7970
7971| 参数名   | 类型     | 必填 | 说明                                                       |
7972| -------- | -------- | ---- | ---------------------------------------------------------- |
7973| type     | string   | 是   | 状态切换事件回调类型,支持的事件:'error'。                |
7974| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否   | 录屏错误事件回调方法,不填此参数则会取消最后一次订阅事件。 |
7975
7976**示例:**
7977
7978```ts
7979avScreenCaptureRecorder.off('error');
7980```