• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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- 屏幕录制([AVScreenCaptureRecorder](#avscreencapturerecorder12)<sup>12+</sup>)
21
22## 导入模块
23
24```ts
25import { media } from '@kit.MediaKit';
26```
27
28## media.createAVPlayer<sup>9+</sup>
29
30createAVPlayer(callback: AsyncCallback\<AVPlayer>): void
31
32异步方式创建音视频播放实例,通过注册回调函数获取返回值。
33
34> **说明:**
35>
36> - 推荐单个应用创建的音视频播放实例(即音频、视频、音视频三类相加)不超过16个。<!--Del-->
37> - 可创建的音视频播放实例数量依赖于设备芯片的支持情况,如芯片支持创建的数量少于上述情况,请以芯片规格为准。如RK3568推荐单个应用创建6个以内的音视频播放实例。<!--DelEnd-->
38
39**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
40
41**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
42
43**参数:**
44
45| 参数名   | 类型                                  | 必填 | 说明                                                         |
46| -------- | ------------------------------------- | ---- | ------------------------------------------------------------ |
47| callback | AsyncCallback\<[AVPlayer](#avplayer9)> | 是   | 回调函数。异步返回AVPlayer实例,失败时返回null。可用于音视频播放。 |
48
49**错误码:**
50
51以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
52
53| 错误码ID | 错误信息                       |
54| -------- | ------------------------------ |
55| 5400101  | No memory. Return by callback. |
56
57**示例:**
58
59```ts
60import { BusinessError } from '@kit.BasicServicesKit';
61
62let avPlayer: media.AVPlayer;
63media.createAVPlayer((error: BusinessError, video: media.AVPlayer) => {
64  if (video != null) {
65    avPlayer = video;
66    console.info('Succeeded in creating AVPlayer');
67  } else {
68    console.error(`Failed to create AVPlayer, error message:${error.message}`);
69  }
70});
71```
72
73## media.createAVPlayer<sup>9+</sup>
74
75createAVPlayer(): Promise\<AVPlayer>
76
77异步方式创建音视频播放实例,通过Promise获取返回值。
78
79> **说明:**
80>
81> - 推荐单个应用创建的音视频播放实例(即音频、视频、音视频三类相加)不超过16个。<!--Del-->
82> - 可创建的音视频播放实例数量依赖于设备芯片的支持情况,如芯片支持创建的数量少于上述情况,请以芯片规格为准。如RK3568推荐单个应用创建6个以内的音视频播放实例。<!--DelEnd-->
83
84**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
85
86**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
87
88**返回值:**
89
90| 类型                            | 说明                                                         |
91| ------------------------------- | ------------------------------------------------------------ |
92| Promise\<[AVPlayer](#avplayer9)> | Promise对象。异步返回AVPlayer实例,失败时返回null。可用于音视频播放。 |
93
94**错误码:**
95
96以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
97
98| 错误码ID | 错误信息                      |
99| -------- | ----------------------------- |
100| 5400101  | No memory. Return by promise. |
101
102**示例:**
103
104```ts
105import { BusinessError } from '@kit.BasicServicesKit';
106
107let avPlayer: media.AVPlayer;
108media.createAVPlayer().then((video: media.AVPlayer) => {
109  if (video != null) {
110    avPlayer = video;
111    console.info('Succeeded in creating AVPlayer');
112  } else {
113    console.error('Failed to create AVPlayer');
114  }
115}).catch((error: BusinessError) => {
116  console.error(`Failed to create AVPlayer, error message:${error.message}`);
117});
118```
119
120## media.createAVRecorder<sup>9+</sup>
121
122createAVRecorder(callback: AsyncCallback\<AVRecorder>): void
123
124异步方式创建音视频录制实例。通过注册回调函数获取返回值。
125
126> **说明:**
127>
128> 应用可创建多个音视频录制实例,但由于设备共用音频通路,一个设备仅能有一个实例进行音频录制。创建第二个实例录制音频时,将会因为音频通路冲突导致创建失败。
129
130**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
131
132**参数:**
133
134| 参数名   | 类型                                       | 必填 | 说明                                                         |
135| -------- | ------------------------------------------ | ---- | ------------------------------------------------------------ |
136| callback | AsyncCallback\<[AVRecorder](#avrecorder9)> | 是   | 回调函数。异步返回AVRecorder实例,失败时返回null。可用于录制音视频媒体。 |
137
138**错误码:**
139
140以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
141
142| 错误码ID | 错误信息                       |
143| -------- | ------------------------------ |
144| 5400101  | No memory. Return by callback. |
145
146**示例:**
147
148```ts
149import { BusinessError } from '@kit.BasicServicesKit';
150let avRecorder: media.AVRecorder;
151
152media.createAVRecorder((error: BusinessError, recorder: media.AVRecorder) => {
153  if (recorder != null) {
154    avRecorder = recorder;
155    console.info('Succeeded in creating AVRecorder');
156  } else {
157    console.error(`Failed to create AVRecorder, error message:${error.message}`);
158  }
159});
160```
161
162## media.createAVRecorder<sup>9+</sup>
163
164createAVRecorder(): Promise\<AVRecorder>
165
166异步方式创建音视频录制实例。通过Promise获取返回值。
167
168> **说明:**
169>
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 | undefined = undefined;
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| 类型           | 说明                                     |
301| -------------- | ---------------------------------------- |
302| Promise\<[AVMetadataExtractor](#avmetadataextractor11)>  | Promise对象。异步返回元数据获取类对象(AVMetadataExtractor)。 |
303
304**错误码:**
305
306以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
307
308| 错误码ID | 错误信息                       |
309| -------- | ------------------------------ |
310| 5400101  | No memory. Returned by promise. |
311
312**示例:**
313
314```ts
315import { BusinessError } from '@kit.BasicServicesKit';
316
317let avMetadataExtractor: media.AVMetadataExtractor;
318media.createAVMetadataExtractor().then((extractor: media.AVMetadataExtractor) => {
319  if (extractor != null) {
320    avMetadataExtractor = extractor;
321    console.info('Succeeded in creating AVMetadataExtractor');
322  } else {
323    console.error(`Failed to create AVMetadataExtractor`);
324  }
325}).catch((error: BusinessError) => {
326  console.error(`Failed to create AVMetadataExtractor, error message:${error.message}`);
327});
328```
329
330## media.createSoundPool<sup>10+</sup>
331
332createSoundPool(maxStreams: number, audioRenderInfo: audio.AudioRendererInfo, callback: AsyncCallback\<SoundPool>): void
333
334创建音频池实例,使用callback方式异步获取返回值。
335
336> **说明:**
337>
338> - API 18以下版本,创建的SoundPool对象底层为单实例模式,一个应用进程只能够创建1个SoundPool实例。
339> - API 18及API 18以上版本,创建的SoundPool对象底层为多实例模式,一个应用进程最多能够创建128个SoundPool实例。
340
341**系统能力:** SystemCapability.Multimedia.Media.SoundPool
342
343**参数:**
344
345| 参数名   | 类型                                            | 必填 | 说明                                                         |
346| -------- | ----------------------------------------------- | ---- | ------------------------------------------------------------ |
347| maxStreams | number | 是   | soundPool实例的最大播放的流数,设置范围为1-32的正整数。 |
348| 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播放短音时为混音模式,不会打断其他音频播放。 |
349| callback | AsyncCallback<[SoundPool](js-apis-inner-multimedia-soundPool.md)> | 是   | 回调函数。异步返回SoundPool实例,失败时返回null。用于音频池实例的加载播放功能。 |
350
351**错误码:**
352
353以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
354
355| 错误码ID | 错误信息                       |
356| -------- | ------------------------------ |
357| 5400101  | No memory. Return by callback. |
358
359**示例:**
360
361```js
362import { audio } from '@kit.AudioKit';
363
364let soundPool: media.SoundPool;
365let audioRendererInfo: audio.AudioRendererInfo = {
366  usage : audio.StreamUsage.STREAM_USAGE_MUSIC,
367  rendererFlags : 0
368};
369
370media.createSoundPool(5, audioRendererInfo, (error, soundPool_: media.SoundPool) => {
371  if (error) {
372    console.error(`Failed to createSoundPool`);
373    return;
374  } else {
375    soundPool = soundPool_;
376    console.info(`Succeeded in createSoundPool`);
377  }
378});
379```
380
381## media.createSoundPool<sup>10+</sup>
382
383createSoundPool(maxStreams: number, audioRenderInfo: audio.AudioRendererInfo): Promise\<SoundPool>
384
385创建音频池实例,通过Promise获取返回值。
386
387> **说明:**
388>
389> - API 18以下版本,创建的SoundPool对象底层为单实例模式,一个应用进程只能够创建1个SoundPool实例。
390> - API 18及API 18以上版本,创建的SoundPool对象底层为多实例模式,一个应用进程最多能够创建128个SoundPool实例。
391
392**系统能力:** SystemCapability.Multimedia.Media.SoundPool
393
394**参数:**
395
396| 参数名   | 类型                                            | 必填 | 说明                                                         |
397| -------- | ----------------------------------------------- | ---- | ------------------------------------------------------------ |
398| maxStreams | number | 是   | soundPool实例的最大播放的流数,设置范围为1-32的正整数。 |
399| audioRenderInfo | [audio.AudioRendererInfo](../apis-audio-kit/js-apis-audio.md#audiorendererinfo8)  | 是   | 音频播放参数信息 |
400
401**返回值:**
402
403| 类型                                      | 说明                                                         |
404| ----------------------------------------- | ------------------------------------------------------------ |
405| Promise<[SoundPool](js-apis-inner-multimedia-soundPool.md)> | Promise对象。异步返回SoundPool实例,失败时返回null。用于音频池实例的加载播放功能。 |
406
407**错误码:**
408
409以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
410
411| 错误码ID | 错误信息                      |
412| -------- | ----------------------------- |
413| 5400101  | No memory. Return by promise. |
414
415**示例:**
416
417```js
418import { audio } from '@kit.AudioKit';
419import { BusinessError } from '@kit.BasicServicesKit';
420
421let soundPool: media.SoundPool;
422let audioRendererInfo: audio.AudioRendererInfo = {
423  usage : audio.StreamUsage.STREAM_USAGE_MUSIC,
424  rendererFlags : 0
425};
426
427media.createSoundPool(5, audioRendererInfo).then((soundpool_: media.SoundPool) => {
428  if (soundpool_ != null) {
429    soundPool = soundpool_;
430    console.info('Succceeded in creating SoundPool');
431  } else {
432    console.error('Failed to create SoundPool');
433  }
434}, (error: BusinessError) => {
435  console.error(`soundpool catchCallback, error message:${error.message}`);
436});
437```
438
439## media.createAVScreenCaptureRecorder<sup>12+</sup>
440
441createAVScreenCaptureRecorder(): Promise\<AVScreenCaptureRecorder>
442
443创建屏幕录制实例,通过Promise获取返回值。
444
445**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
446
447**返回值:**
448
449| 类型                                                         | 说明                                                         |
450| ------------------------------------------------------------ | ------------------------------------------------------------ |
451| Promise\<[AVScreenCaptureRecorder](#avscreencapturerecorder12)> | Promise对象。异步返回AVScreenCaptureRecorder实例,失败时返回null。可用于进行屏幕录制。 |
452
453**错误码:**
454
455| 错误码ID | 错误信息                       |
456| -------- | ------------------------------ |
457| 5400101  | No memory. Return by promise. |
458
459**示例:**
460
461```ts
462import { BusinessError } from '@kit.BasicServicesKit';
463
464let avScreenCaptureRecorder: media.AVScreenCaptureRecorder;
465media.createAVScreenCaptureRecorder().then((captureRecorder: media.AVScreenCaptureRecorder) => {
466  if (captureRecorder != null) {
467    avScreenCaptureRecorder = captureRecorder;
468    console.info('Succeeded in createAVScreenCaptureRecorder');
469  } else {
470    console.error('Failed to createAVScreenCaptureRecorder');
471  }
472}).catch((error: BusinessError) => {
473  console.error(`createAVScreenCaptureRecorder catchCallback, error message:${error.message}`);
474});
475```
476
477## SoundPool<sup>10+</sup>
478
479type SoundPool = _SoundPool
480
481音频池,提供了系统声音的加载、播放、音量设置、循环设置、停止播放、资源卸载等功能。
482
483**系统能力:** SystemCapability.Multimedia.Media.SoundPool
484
485| 类型     | 说明                       |
486| -------- | ------------------------------ |
487| [_SoundPool](js-apis-inner-multimedia-soundPool.md#soundpool)  | 音频池,提供了系统声音的加载、播放、音量设置、循环设置、停止播放、资源卸载等功能。 |
488
489## PlayParameters<sup>10+</sup>
490
491type PlayParameters = _PlayParameters
492
493表示音频池播放参数设置。
494
495**系统能力:** SystemCapability.Multimedia.Media.SoundPool
496
497| 类型     | 说明                       |
498| -------- | ------------------------------ |
499| [_PlayParameters](js-apis-inner-multimedia-soundPool.md#playparameters)  | 表示音频池播放参数设置。 |
500
501## AVErrorCode<sup>9+</sup>
502
503[媒体错误码](errorcode-media.md)类型枚举
504
505**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
506
507**系统能力:** SystemCapability.Multimedia.Media.Core
508
509| 名称                                  | 值      | 说明                                 |
510| :------------------------------------ | ------- | ------------------------------------ |
511| AVERR_OK                              | 0       | 表示操作成功。                       |
512| AVERR_NO_PERMISSION                   | 201     | 表示无权限执行此操作。               |
513| AVERR_INVALID_PARAMETER               | 401     | 表示传入入参无效。                   |
514| AVERR_UNSUPPORT_CAPABILITY            | 801     | 表示当前版本不支持该API能力。        |
515| AVERR_NO_MEMORY                       | 5400101 | 表示系统内存不足或服务数量达到上限。 |
516| AVERR_OPERATE_NOT_PERMIT              | 5400102 | 表示当前状态不允许或无权执行此操作。 |
517| AVERR_IO                              | 5400103 | 表示数据流异常信息。                 |
518| AVERR_TIMEOUT                         | 5400104 | 表示系统或网络响应超时。             |
519| AVERR_SERVICE_DIED                    | 5400105 | 表示服务进程死亡。                   |
520| AVERR_UNSUPPORT_FORMAT                | 5400106 | 表示不支持当前媒体资源的格式。       |
521| AVERR_AUDIO_INTERRUPTED<sup>11+</sup> | 5400107 | 表示音频焦点被抢占                   |
522| AVERR_IO_HOST_NOT_FOUND<sup>14+</sup> | 5411001 | 表示解析或链接服务端地址错误。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。        |
523| AVERR_IO_CONNECTION_TIMEOUT<sup>14+</sup> | 5411002 | 表示网络连接超时。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。        |
524| AVERR_IO_NETWORK_ABNORMAL<sup>14+</sup> | 5411003 | 表示网络异常导致的数据或链路异常。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。        |
525| AVERR_IO_NETWORK_UNAVAILABLE<sup>14+</sup> | 5411004 | 表示网络被禁用。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。        |
526| AVERR_IO_NO_PERMISSION<sup>14+</sup> | 5411005 | 表示无访问权限。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。        |
527| AVERR_IO_REQUEST_DENIED<sup>14+</sup> | 5411006 | 表示客户端请求参数错误或超出处理能力。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。        |
528| AVERR_IO_RESOURCE_NOT_FOUND<sup>14+</sup> | 5411007 | 表示无可用网络资源。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。        |
529| AVERR_IO_SSL_CLIENT_CERT_NEEDED<sup>14+</sup> | 5411008 | 表示服务端校验客户端证书失败。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。        |
530| AVERR_IO_SSL_CONNECTION_FAILED<sup>14+</sup> | 5411009 | 表示SSL连接失败。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。        |
531| AVERR_IO_SSL_SERVER_CERT_UNTRUSTED<sup>14+</sup> | 5411010 | 表示客户端校验服务端证书失败。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。        |
532| AVERR_IO_UNSUPPORTED_REQUEST<sup>14+</sup> | 5411011 | 表示网络协议的原因导致请求不受支持。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。        |
533| AVERR_SEEK_CONTINUOUS_UNSUPPORTED<sup>18+</sup> | 5410002 | 表示不支持SEEK_CONTINUOUS模式的seek。 <br> **原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。        |
534| AVERR_SUPER_RESOLUTION_UNSUPPORTED<sup>18+</sup> | 5410003 | 表示不支持超分。 <br> **原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。        |
535| AVERR_SUPER_RESOLUTION_NOT_ENABLED<sup>18+</sup> | 5410004 | 表示未使能超分。 <br> **原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。        |
536
537## MediaType<sup>8+</sup>
538
539媒体类型枚举。
540
541**系统能力:** SystemCapability.Multimedia.Media.Core
542
543| 名称           | 值                    | 说明                 |
544| -------------- | --------------------- | ------------------- |
545| MEDIA_TYPE_AUD | 0                     | 表示音频。 <br> **原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。           |
546| MEDIA_TYPE_VID | 1                     | 表示视频。  <br> **原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。          |
547| MEDIA_TYPE_SUBTITLE<sup>12+</sup> | 2    | 表示字幕。 <br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
548
549## CodecMimeType<sup>8+</sup>
550
551Codec MIME类型枚举。
552
553**系统能力:** SystemCapability.Multimedia.Media.Core
554
555| 名称         | 值                    | 说明                     |
556| ------------ | --------------------- | ------------------------ |
557| VIDEO_H263   | 'video/h263'          | 表示视频/h263类型。      |
558| VIDEO_AVC    | 'video/avc'           | 表示视频/avc类型。       |
559| VIDEO_MPEG2  | 'video/mpeg2'         | 表示视频/mpeg2类型。     |
560| VIDEO_MPEG4  | 'video/mp4v-es'         | 表示视频/mpeg4类型。     |
561| VIDEO_VP8    | 'video/x-vnd.on2.vp8' | 表示视频/vp8类型。       |
562| VIDEO_HEVC<sup>11+</sup>   | 'video/hevc'          | 表示视频/H265类型。|
563| AUDIO_AAC    | 'audio/mp4a-latm'     | 表示音频/mp4a-latm类型。 <br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
564| AUDIO_VORBIS | 'audio/vorbis'        | 表示音频/vorbis类型。    |
565| AUDIO_FLAC   | 'audio/flac'          | 表示音频/flac类型。      |
566| AUDIO_MP3<sup>12+</sup>   | 'audio/mpeg'          | 表示音频/mpeg类型。      |
567| AUDIO_G711MU<sup>12+</sup>   | 'audio/g711mu'     | 表示音频/G711-mulaw类型。 |
568| AUDIO_AMR_NB<sup>18+</sup>   | 'audio/3gpp'     | 表示音频/amr-nb类型。 |
569| AUDIO_AMR_WB<sup>18+</sup>   | 'audio/amr-wb'     | 表示音频/amr-wb类型。 |
570
571## MediaDescriptionKey<sup>8+</sup>
572
573媒体信息描述枚举。
574
575**系统能力:** SystemCapability.Multimedia.Media.Core
576
577| 名称                     | 值              | 说明                                                         |
578| ------------------------ | --------------- | ------------------------------------------------------------ |
579| MD_KEY_TRACK_INDEX       | 'track_index'   | 表示轨道序号,其对应键值类型为number。 <br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
580| MD_KEY_TRACK_TYPE        | 'track_type'    | 表示轨道类型,其对应键值类型为number,参考[MediaType](#mediatype8)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
581| MD_KEY_CODEC_MIME        | 'codec_mime'    | 表示codec_mime类型,其对应键值类型为string。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
582| MD_KEY_DURATION          | 'duration'      | 表示媒体时长,其对应键值类型为number,单位为毫秒(ms)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
583| MD_KEY_BITRATE           | 'bitrate'       | 表示比特率,其对应键值类型为number,单位为比特率(bps)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
584| MD_KEY_WIDTH             | 'width'         | 表示视频宽度,其对应键值类型为number,单位为像素(px)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
585| MD_KEY_HEIGHT            | 'height'        | 表示视频高度,其对应键值类型为number,单位为像素(px)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
586| MD_KEY_FRAME_RATE        | 'frame_rate'    | 表示视频帧率,其对应键值类型为number,单位为每100秒的帧数。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
587| MD_KEY_AUD_CHANNEL_COUNT | 'channel_count' | 表示声道数,其对应键值类型为number。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
588| MD_KEY_AUD_SAMPLE_RATE   | 'sample_rate'   | 表示采样率,其对应键值类型为number,单位为赫兹(Hz)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
589| MD_KEY_AUD_SAMPLE_DEPTH<sup>12+</sup>  | 'sample_depth'  | 表示位深,其对应键值类型为number,单位为位(bit)。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
590| MD_KEY_LANGUAGE<sup>12+</sup>  | 'language'  | 表示字幕语言,其对应键值类型为string。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
591| MD_KEY_TRACK_NAME<sup>12+</sup>  | 'track_name'  | 表示track名称,其对应键值类型为string。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
592| MD_KEY_HDR_TYPE<sup>12+</sup>  | 'hdr_type'  | 表示视频轨类型,其对应键值类型为string。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
593
594## PlaybackInfoKey<sup>12+</sup>
595
596播放信息描述枚举。
597
598**系统能力:** SystemCapability.Multimedia.Media.Core
599
600| 名称                     | 值              | 说明                                                         |
601| ------------------------ | --------------- | ------------------------------------------------------------ |
602| SERVER_IP_ADDRESS        | 'server_ip_address'    | 表示服务器IP地址,其对应键值类型为string。  |
603| AVG_DOWNLOAD_RATE        | 'average_download_rate'| 表示平均下载速率,其对应键值类型为number,单位为比特率(bps)。 |
604| DOWNLOAD_RATE            | 'download_rate'        | 表示1s的下载速率,其对应键值类型为number,单位为比特率(bps)。|
605| IS_DOWNLOADING           | 'is_downloading'       | 表示下载状态,1表示在下载状态,0表示非下载状态(下载完成),其对应键值类型为number。|
606| BUFFER_DURATION          | 'buffer_duration'      | 表示缓存数据的可播放时长,其对应键值类型为number,单位为秒(s)。|
607
608## BufferingInfoType<sup>8+</sup>
609
610缓存事件类型枚举。
611
612**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
613
614**系统能力:** SystemCapability.Multimedia.Media.Core
615
616| 名称              | 值   | 说明                             |
617| ----------------- | ---- | -------------------------------- |
618| BUFFERING_START   | 1    | 表示开始缓冲。当上报BUFFERING_START时,播放器会暂停播放。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                   |
619| BUFFERING_END     | 2    | 表示结束缓冲。当上报BUFFERING_END时,播放器会恢复播放。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                   |
620| BUFFERING_PERCENT | 3    | 表示缓冲百分比。可参考该事件感知缓冲进度。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                 |
621| CACHED_DURATION   | 4    |  表示已缓冲数据预估可播放时长,单位为毫秒(ms)。缓冲区中的数据变化量大于500ms,上报一次。可参考该事件做进度条。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。  |
622
623## StateChangeReason<sup>9+</sup>
624
625表示播放或录制实例状态机切换原因的枚举,伴随state一起上报。
626
627**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
628
629**系统能力:** SystemCapability.Multimedia.Media.Core
630
631| 名称       | 值   | 说明                                                         |
632| ---------- | ---- | ------------------------------------------------------------ |
633| USER       | 1    | 表示用户行为造成的状态切换,由用户或客户端主动调用接口产生。 |
634| BACKGROUND | 2    | 表示后台系统行为造成的状态切换,比如应用未注册播控中心权限,退到后台时被系统强制暂停或停止。 |
635
636## AVPlayer<sup>9+</sup>
637
638播放管理类,用于管理和播放媒体资源。在调用AVPlayer的方法前,需要先通过[createAVPlayer()](#mediacreateavplayer9)构建一个AVPlayer实例。
639
640Audio/Video播放demo可参考:[音频播放开发指导](../../media/media/using-avplayer-for-playback.md)、[视频播放开发指导](../../media/media/video-playback.md)。
641
642> **说明:**
643>
644> 在使用AVPlayer实例的方法时,建议开发者注册相关回调,主动获取当前状态变化。
645> - [on('stateChange')](#onstatechange9):监听播放状态机AVPlayerState切换。
646> - [on('error')](#onerror9):监听错误事件。
647
648### 属性
649
650**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
651
652| 名称                                                | 类型                                                         | 只读 | 可选 | 说明                                                         |
653| --------------------------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
654| 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开始,该接口支持在原子化服务中使用。 |
655| 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开始,该接口支持在原子化服务中使用。 |
656| 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开始,该接口支持在原子化服务中使用。 |
657| 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#getxcomponentsurfaceid9)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
658| loop<sup>9+</sup>                                   | boolean                                                      | 否   | 否   | 视频循环播放属性,默认'false',设置为'true'表示循环播放,动态属性。<br/>只允许在**prepared**/**playing**/**paused**/**completed**状态下设置。<br/>直播场景不支持loop设置。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
659| videoScaleType<sup>9+</sup>                         | [VideoScaleType](#videoscaletype9)                           | 否   | 是   | 视频缩放模式,默认VIDEO_SCALE_TYPE_FIT,动态属性。<br/>只允许在**prepared**/**playing**/**paused**/**completed**状态下设置。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
660| 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开始,该接口支持在原子化服务中使用。|
661| 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开始,该接口支持在原子化服务中使用。|
662| 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开始,该接口支持在原子化服务中使用。|
663| state<sup>9+</sup>                                  | [AVPlayerState](#avplayerstate9)                             | 是   | 否   | 音视频播放的状态,全状态有效,可查询参数。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                  |
664| currentTime<sup>9+</sup>                            | number                                                       | 是   | 否   | 视频的当前播放位置,单位为毫秒(ms),可查询参数。<br/>返回为(-1)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。<br/>直播场景默认返回(-1)。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
665| duration<sup>9+</sup> | number                                                       | 是   | 否   | 视频时长,单位为毫秒(ms),可查询参数。<br/>返回为(-1)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。<br/>直播场景默认返回(-1)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
666| width<sup>9+</sup>                                  | number                                                       | 是   | 否   | 视频宽,单位为像素(px),可查询参数。<br/>返回为(0)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
667| height<sup>9+</sup>                                 | number                                                       | 是   | 否   | 视频高,单位为像素(px),可查询参数。<br/>返回为(0)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
668
669### on('stateChange')<sup>9+</sup>
670
671on(type: 'stateChange', callback: OnAVPlayerStateChangeHandle): void
672
673监听播放状态机AVPlayerState切换的事件。
674
675**原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。
676
677**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
678
679**参数:**
680
681| 参数名   | 类型     | 必填 | 说明                                                         |
682| -------- | -------- | ---- | ------------------------------------------------------------ |
683| type     | string   | 是   | 状态机切换事件回调类型,支持的事件:'stateChange',用户操作和系统都会触发此事件。 |
684| callback | [OnAVPlayerStateChangeHandle](#onavplayerstatechangehandle12) | 是   | 状态机切换事件回调方法。 |
685
686**示例:**
687
688```ts
689avPlayer.on('stateChange', async (state: string, reason: media.StateChangeReason) => {
690  switch (state) {
691    case 'idle':
692      console.info('state idle called');
693      break;
694    case 'initialized':
695      console.info('initialized prepared called');
696      break;
697    case 'prepared':
698      console.info('state prepared called');
699      break;
700    case 'playing':
701      console.info('state playing called');
702      break;
703    case 'paused':
704      console.info('state paused called');
705      break;
706    case 'completed':
707      console.info('state completed called');
708      break;
709    case 'stopped':
710      console.info('state stopped called');
711      break;
712    case 'released':
713      console.info('state released called');
714      break;
715    case 'error':
716      console.info('state error called');
717      break;
718    default:
719      console.info('unknown state :' + state);
720      break;
721  }
722});
723```
724
725### off('stateChange')<sup>9+</sup>
726
727off(type: 'stateChange', callback?: OnAVPlayerStateChangeHandle): void
728
729取消监听播放状态机[AVPlayerState](#avplayerstate9)切换的事件。
730
731**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
732
733**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
734
735**参数:**
736
737| 参数名 | 类型   | 必填 | 说明                                                  |
738| ------ | ------ | ---- | ----------------------------------------------------- |
739| type   | string | 是   | 状态机切换事件回调类型,取消注册的事件:'stateChange' |
740| callback   | [OnAVPlayerStateChangeHandle](#onavplayerstatechangehandle12) | 否   | 状态机切换事件回调方法。<br/>从API version 12开始支持此参数。 |
741
742**示例:**
743
744```ts
745avPlayer.off('stateChange');
746```
747
748### on('error')<sup>9+</sup>
749
750on(type: 'error', callback: ErrorCallback): void
751
752监听[AVPlayer](#avplayer9)的错误事件,该事件仅用于错误提示,不需要用户停止播控动作。如果此时[AVPlayerState](#avplayerstate9)也切至error状态,用户需要通过[reset()](#reset9)或者[release()](#release9)退出播放操作。
753
754**原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。
755
756**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
757
758**参数:**
759
760| 参数名   | 类型     | 必填 | 说明                                                         |
761| -------- | -------- | ---- | ------------------------------------------------------------ |
762| type     | string   | 是   | 错误事件回调类型,支持的事件:'error',用户操作和系统都会触发此事件。 |
763| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 错误事件回调方法,使用播放器的过程中发生错误,会提供错误码ID和错误信息。 |
764
765**错误码:**
766
767以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
768
769在API version 9-13,针对网络、服务器等数据流异常,接口上报5400103;从API version 14开始,对应错误细化为错误码5411001-5411011。
770
771| 错误码ID | 错误信息              |
772| -------- | --------------------- |
773| 201      | Permission denied.     |
774| 401      | The parameter check failed. |
775| 801      | Capability not supported. |
776| 5400101  | No memory. |
777| 5400102  | Operation not allowed.|
778| 5400103  | I/O error.             |
779| 5400104  | Time out.              |
780| 5400105  | Service died.         |
781| 5400106  | Unsupported format.     |
782| 5411001  | IO can not find host.    |
783| 5411002  | IO connection timeout.  |
784| 5411003  | IO network abnormal.     |
785| 5411004  | IO network unavailable.  |
786| 5411005  | IO no permission.        |
787| 5411006  | IO request denied.  |
788| 5411007  | IO resource not found. |
789| 5411008  | IO SSL client cert needed.    |
790| 5411009  | IO SSL connect fail.     |
791| 5411010  | IO SSL server cert untrusted.    |
792| 5411011  | IO unsupported request.      |
793
794**示例:**
795
796```ts
797import { BusinessError } from '@kit.BasicServicesKit';
798
799avPlayer.on('error', (error: BusinessError) => {
800  console.info('error happened,and error message is :' + error.message);
801  console.info('error happened,and error code is :' + error.code);
802});
803```
804
805### off('error')<sup>9+</sup>
806
807off(type: 'error', callback?: ErrorCallback): void
808
809取消监听播放的错误事件。
810
811**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
812
813**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
814
815**参数:**
816
817| 参数名 | 类型   | 必填 | 说明                                      |
818| ------ | ------ | ---- | ----------------------------------------- |
819| type   | string | 是   | 错误事件回调类型,取消注册的事件:'error' |
820| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否   | 错误事件回调方法,使用播放器的过程中发生错误,会提供错误码ID和错误信息。<br/>从API version 12开始支持此参数。 |
821
822**示例:**
823
824```ts
825avPlayer.off('error');
826```
827
828### setMediaSource<sup>12+</sup>
829
830setMediaSource(src:MediaSource, strategy?: PlaybackStrategy): Promise\<void>
831
832流媒体预下载资源设置,下载url对应的流媒体数据,并暂存在内存中。[视频播放开发指导](../../media/media/video-playback.md)。通过Promise获取返回值。
833
834**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
835
836**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
837
838**参数:**
839
840| 参数名   | 类型     | 必填 | 说明                 |
841| -------- | -------- | ---- | -------------------- |
842| src | [MediaSource](#mediasource12) | 是   | 流媒体预下载媒体来源。 |
843| strategy | [PlaybackStrategy](#playbackstrategy12) | 否   | 流媒体预下载播放策略。 |
844
845**返回值:**
846
847| 类型           | 说明                                       |
848| -------------- | ------------------------------------------ |
849| Promise\<void> | Promise对象。无返回结果的Promise对象。 |
850
851**错误码:**
852
853以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
854
855| 错误码ID | 错误信息                                  |
856| -------- | ----------------------------------------- |
857| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.      |
858| 5400102  | Operation not allowed. Return by promise. |
859
860**示例:**
861
862<!--code_no_check-->
863```ts
864let player = await media.createAVPlayer();
865let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"};
866let mediaSource : media.MediaSource = media.createMediaSourceWithUrl("http://xxx",  headers);
867let playStrategy : media.PlaybackStrategy = {
868  preferredWidth: 1,
869  preferredHeight: 2,
870  preferredBufferDuration: 3,
871  preferredHdr: false,
872  preferredBufferDurationForPlaying: 1,
873  thresholdForAutoQuickPlay: 5
874};
875player.setMediaSource(mediaSource, playStrategy);
876```
877
878### setPlaybackStrategy<sup>12+</sup>
879
880setPlaybackStrategy(strategy: PlaybackStrategy): Promise\<void>
881
882设置播放策略,只能在initialized状态下调用。
883
884**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
885
886**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
887
888**参数:**
889
890| 参数名   | 类型     | 必填 | 说明                 |
891| -------- | -------- | ---- | -------------------- |
892| strategy | [PlaybackStrategy](#playbackstrategy12) | 是   | 播放策略。 |
893
894**返回值:**
895
896| 类型           | 说明                                  |
897| -------------- | ------------------------------------ |
898| Promise\<void> | Promise对象。无返回结果的Promise对象。 |
899
900**错误码:**
901
902以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
903
904| 错误码ID | 错误信息                                  |
905| -------- | ----------------------------------------- |
906| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed. |
907| 5400102  | Operation not allowed. Return by promise. |
908
909**示例:**
910
911<!--code_no_check-->
912```ts
913import { common } from '@kit.AbilityKit';
914
915private context: Context | undefined;
916constructor(context: Context) {
917  this.context = context; // this.getUIContext().getHostContext();
918}
919
920let player = await media.createAVPlayer();
921let fileDescriptor = await this.context.resourceManager.getRawFd('xxx.mp4');
922player.fdSrc = fileDescriptor
923let playStrategy : media.PlaybackStrategy = {
924  preferredWidth: 1,
925  preferredHeight: 2,
926  preferredBufferDuration: 3,
927  preferredHdr: false,
928  mutedMediaType: media.MediaType.MEDIA_TYPE_AUD,
929  preferredBufferDurationForPlaying: 1,
930  thresholdForAutoQuickPlay: 5
931};
932player.setPlaybackStrategy(playStrategy);
933```
934
935### setPlaybackRange<sup>18+</sup>
936
937setPlaybackRange(startTimeMs: number, endTimeMs: number, mode?: SeekMode) : Promise\<void>
938
939设置播放区间,并通过指定的[SeekMode](#seekmode8)跳转到区间开始位置。设置之后,只播放音视频文件设定区间内的内容。该方法异步方式返回执行结果,通过Promise获取返回值。可在**initialized**/**prepared**/**paused**/**stopped**/**completed**状态下使用。
940
941**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
942
943**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
944
945**参数:**
946
947| 参数名   | 类型                   | 必填 | 说明                        |
948| -------- | ---------------------- | ---- | --------------------------- |
949| startTimeMs | number | 是   | 区间开始位置,单位ms,取值[0, duration)。可以设置-1值,系统将会从0位置开始播放。|
950| endTimeMs | number | 是   | 区间结束位置,单位ms,取值(startTimeMs, duration]。可以设置-1值,系统将会播放到资源末尾。|
951| mode | [SeekMode](#seekmode8) | 否   | 支持SeekMode.SEEK_PREV_SYNCSeekMode.SEEK_CLOSEST, <br/>默认值: SeekMode.SEEK_PREV_SYNC。|
952
953**错误码:**
954
955以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
956
957| 错误码ID | 错误信息                                   |
958| -------- | ------------------------------------------ |
959| 401  | The parameter check failed. Return by promise. |
960| 5400102  | Operation not allowed. Return by promise. |
961
962**示例:**
963
964```ts
965import { media } from '@kit.MediaKit';
966import { BusinessError } from '@kit.BasicServicesKit';
967
968avPlayer.setPlaybackRange(0, 6000, media.SeekMode.SEEK_CLOSEST).then(() => {
969  console.info('Succeeded setPlaybackRange');
970}).catch((err: BusinessError) => {
971  console.error('Failed to setPlaybackRange' + err.message);
972});
973```
974
975### prepare<sup>9+</sup>
976
977prepare(callback: AsyncCallback\<void>): void
978
979准备播放音频/视频,需在[stateChange](#onstatechange9)事件成功触发至initialized状态后,才能调用。使用callback方式异步获取返回值。
980
981**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
982
983**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
984
985**参数:**
986
987| 参数名   | 类型     | 必填 | 说明                 |
988| -------- | -------- | ---- | -------------------- |
989| callback | AsyncCallback\<void> | 是   | 准备播放的回调方法。 |
990
991**错误码:**
992
993以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
994
995| 错误码ID | 错误信息                                   |
996| -------- | ------------------------------------------ |
997| 5400102  | Operation not allowed. Return by callback. |
998| 5400106  | Unsupported format. Return by callback.      |
999
1000**示例:**
1001
1002```ts
1003import { BusinessError } from '@kit.BasicServicesKit';
1004
1005avPlayer.prepare((err: BusinessError) => {
1006  if (err) {
1007    console.error('Failed to prepare,error message is :' + err.message);
1008  } else {
1009    console.info('Succeeded in preparing');
1010  }
1011});
1012```
1013
1014### prepare<sup>9+</sup>
1015
1016prepare(): Promise\<void>
1017
1018准备播放音频/视频,需在[stateChange](#onstatechange9)事件成功触发至initialized状态后,才能调用。通过Promise获取返回值。
1019
1020如果应用使用到多个短视频频繁切换的场景,为了提升切换性能,可以考虑创建多个AVPlayer对象,提前准备下一个视频,详情参见[在线短视频流畅切换](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-smooth-switching)1021
1022**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1023
1024**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1025
1026**返回值:**
1027
1028| 类型           | 说明                      |
1029| -------------- | ------------------------- |
1030| Promise\<void> | 准备播放的Promise返回值。 |
1031
1032**错误码:**
1033
1034以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
1035
1036| 错误码ID | 错误信息                                  |
1037| -------- | ----------------------------------------- |
1038| 5400102  | Operation not allowed. Return by promise. |
1039| 5400106  | Unsupported format. Return by promise.      |
1040
1041**示例:**
1042
1043```ts
1044import { BusinessError } from '@kit.BasicServicesKit';
1045
1046avPlayer.prepare().then(() => {
1047  console.info('Succeeded in preparing');
1048}, (err: BusinessError) => {
1049  console.error('Failed to prepare,error message is :' + err.message);
1050});
1051```
1052
1053### setMediaMuted<sup>12+</sup>
1054
1055setMediaMuted(mediaType: MediaType,  muted: boolean ): Promise\<void>
1056
1057设置音频静音/取消音频静音。只能在prepared/playing/paused/completed状态下调用。仅支持设置mediaType为音频格式。
1058
1059**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1060
1061**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1062
1063**参数:**
1064
1065| 参数名   | 类型     | 必填 | 说明                 |
1066| -------- | -------- | ---- | -------------------- |
1067| mediaType | [MediaType](#mediatype8) | 是   | 播放策略。 |
1068| muted | boolean | 是   | 是否静音播放。true表示是静音播放,false表示不是静音播放。|
1069
1070**返回值:**
1071
1072| 类型           | 说明                      |
1073| -------------- | ------------------------- |
1074| Promise\<void> | 准备播放的Promise返回值。 |
1075
1076**错误码:**
1077
1078以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
1079
1080| 错误码ID | 错误信息 |
1081| -------- | ----------------------------------------- |
1082| 401 | The parameter check failed. Return by promise. |
1083| 5400102 | Operation not allowed. Return by promise. |
1084
1085**示例:**
1086
1087```ts
1088import { BusinessError } from '@kit.BasicServicesKit';
1089
1090avPlayer.prepare().then(() => {
1091  console.info('Succeeded in preparing');
1092  avPlayer.setMediaMuted(media.MediaType.MEDIA_TYPE_AUD, true);
1093}, (err: BusinessError) => {
1094  console.error('Failed to prepare,error message is :' + err.message);
1095});
1096```
1097
1098### play<sup>9+</sup>
1099
1100play(callback: AsyncCallback\<void>): void
1101
1102开始播放音视频资源,只能在prepared/paused/completed状态调用。使用callback方式异步获取返回值。
1103
1104**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1105
1106**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1107
1108**参数:**
1109
1110| 参数名   | 类型     | 必填 | 说明                 |
1111| -------- | -------- | ---- | -------------------- |
1112| callback | AsyncCallback\<void> | 是   | 开始播放的回调方法。 |
1113
1114**错误码:**
1115
1116以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
1117
1118| 错误码ID | 错误信息                                   |
1119| -------- | ------------------------------------------ |
1120| 5400102  | Operation not allowed. Return by callback. |
1121
1122**示例:**
1123
1124```ts
1125import { BusinessError } from '@kit.BasicServicesKit';
1126
1127avPlayer.play((err: BusinessError) => {
1128  if (err) {
1129    console.error('Failed to play,error message is :' + err.message);
1130  } else {
1131    console.info('Succeeded in playing');
1132  }
1133});
1134```
1135
1136### play<sup>9+</sup>
1137
1138play(): Promise\<void>
1139
1140开始播放音视频资源,只能在prepared/paused/completed状态调用。通过Promise获取返回值。
1141
1142**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1143
1144**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1145
1146**返回值:**
1147
1148| 类型           | 说明                      |
1149| -------------- | ------------------------- |
1150| Promise\<void> | 开始播放的Promise返回值。 |
1151
1152**错误码:**
1153
1154以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1155
1156| 错误码ID | 错误信息                                  |
1157| -------- | ----------------------------------------- |
1158| 5400102  | Operation not allowed. Return by promise. |
1159
1160**示例:**
1161
1162```ts
1163import { BusinessError } from '@kit.BasicServicesKit';
1164
1165avPlayer.play().then(() => {
1166  console.info('Succeeded in playing');
1167}, (err: BusinessError) => {
1168  console.error('Failed to play,error message is :' + err.message);
1169});
1170```
1171
1172### pause<sup>9+</sup>
1173
1174pause(callback: AsyncCallback\<void>): void
1175
1176暂停播放音视频资源,只能在playing状态调用。使用callback方式异步获取返回值。
1177
1178**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1179
1180**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1181
1182**参数:**
1183
1184| 参数名   | 类型     | 必填 | 说明                 |
1185| -------- | -------- | ---- | -------------------- |
1186| callback | AsyncCallback\<void> | 是   | 暂停播放的回调方法。 |
1187
1188**错误码:**
1189
1190以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1191
1192| 错误码ID | 错误信息                                   |
1193| -------- | ------------------------------------------ |
1194| 5400102  | Operation not allowed. Return by callback. |
1195
1196**示例:**
1197
1198```ts
1199import { BusinessError } from '@kit.BasicServicesKit';
1200
1201avPlayer.pause((err: BusinessError) => {
1202  if (err) {
1203    console.error('Failed to pause,error message is :' + err.message);
1204  } else {
1205    console.info('Succeeded in pausing');
1206  }
1207});
1208```
1209
1210### pause<sup>9+</sup>
1211
1212pause(): Promise\<void>
1213
1214暂停播放音视频资源,只能在playing状态调用。通过Promise获取返回值。
1215
1216**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1217
1218**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1219
1220**返回值:**
1221
1222| 类型           | 说明                      |
1223| -------------- | ------------------------- |
1224| Promise\<void> | 暂停播放的Promise返回值。 |
1225
1226**错误码:**
1227
1228以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1229
1230| 错误码ID | 错误信息                                  |
1231| -------- | ----------------------------------------- |
1232| 5400102  | Operation not allowed. Return by promise. |
1233
1234**示例:**
1235
1236```ts
1237import { BusinessError } from '@kit.BasicServicesKit';
1238
1239avPlayer.pause().then(() => {
1240  console.info('Succeeded in pausing');
1241}, (err: BusinessError) => {
1242  console.error('Failed to pause,error message is :' + err.message);
1243});
1244```
1245
1246### stop<sup>9+</sup>
1247
1248stop(callback: AsyncCallback\<void>): void
1249
1250停止播放音视频资源,只能在prepared/playing/paused/completed状态调用。使用callback方式异步获取返回值。
1251
1252**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1253
1254**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1255
1256**参数:**
1257
1258| 参数名   | 类型     | 必填 | 说明                 |
1259| -------- | -------- | ---- | -------------------- |
1260| callback | AsyncCallback\<void> | 是   | 停止播放的回调方法。 |
1261
1262**错误码:**
1263
1264以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1265
1266| 错误码ID | 错误信息                                   |
1267| -------- | ------------------------------------------ |
1268| 5400102  | Operation not allowed. Return by callback. |
1269
1270**示例:**
1271
1272```ts
1273import { BusinessError } from '@kit.BasicServicesKit';
1274
1275avPlayer.stop((err: BusinessError) => {
1276  if (err) {
1277    console.error('Failed to stop,error message is :' + err.message);
1278  } else {
1279    console.info('Succeeded in stopping');
1280  }
1281});
1282```
1283
1284### stop<sup>9+</sup>
1285
1286stop(): Promise\<void>
1287
1288停止播放音视频资源,只能在prepared/playing/paused/completed状态调用。通过Promise获取返回值。
1289
1290**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1291
1292**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1293
1294**返回值:**
1295
1296| 类型           | 说明                      |
1297| -------------- | ------------------------- |
1298| Promise\<void> | 停止播放的Promise返回值。 |
1299
1300**错误码:**
1301
1302以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1303
1304| 错误码ID | 错误信息                                  |
1305| -------- | ----------------------------------------- |
1306| 5400102  | Operation not allowed. Return by promise. |
1307
1308**示例:**
1309
1310```ts
1311import { BusinessError } from '@kit.BasicServicesKit';
1312
1313avPlayer.stop().then(() => {
1314  console.info('Succeeded in stopping');
1315}, (err: BusinessError) => {
1316  console.error('Failed to stop,error message is :' + err.message);
1317});
1318```
1319
1320### reset<sup>9+</sup>
1321
1322reset(callback: AsyncCallback\<void>): void
1323
1324重置播放,只能在initialized/prepared/playing/paused/completed/stopped/error状态调用。使用callback方式异步获取返回值。
1325
1326**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1327
1328**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1329
1330**参数:**
1331
1332| 参数名   | 类型     | 必填 | 说明                 |
1333| -------- | -------- | ---- | -------------------- |
1334| callback | AsyncCallback\<void> | 是   | 重置播放的回调方法。 |
1335
1336**错误码:**
1337
1338以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1339
1340| 错误码ID | 错误信息                                   |
1341| -------- | ------------------------------------------ |
1342| 5400102  | Operation not allowed. Return by callback. |
1343
1344**示例:**
1345
1346```ts
1347import { BusinessError } from '@kit.BasicServicesKit';
1348
1349avPlayer.reset((err: BusinessError) => {
1350  if (err) {
1351    console.error('Failed to reset,error message is :' + err.message);
1352  } else {
1353    console.info('Succeeded in resetting');
1354  }
1355});
1356```
1357
1358### reset<sup>9+</sup>
1359
1360reset(): Promise\<void>
1361
1362重置播放,只能在initialized/prepared/playing/paused/completed/stopped/error状态调用。通过Promise获取返回值。
1363
1364**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1365
1366**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1367
1368**返回值:**
1369
1370| 类型           | 说明                      |
1371| -------------- | ------------------------- |
1372| Promise\<void> | 重置播放的Promise返回值。 |
1373
1374**错误码:**
1375
1376以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1377
1378| 错误码ID | 错误信息                                  |
1379| -------- | ----------------------------------------- |
1380| 5400102  | Operation not allowed. Return by promise. |
1381
1382**示例:**
1383
1384```ts
1385import { BusinessError } from '@kit.BasicServicesKit';
1386
1387avPlayer.reset().then(() => {
1388  console.info('Succeeded in resetting');
1389}, (err: BusinessError) => {
1390  console.error('Failed to reset,error message is :' + err.message);
1391});
1392```
1393
1394### release<sup>9+</sup>
1395
1396release(callback: AsyncCallback\<void>): void
1397
1398销毁播放资源,除released状态外,均可以调用。使用callback方式异步获取返回值。
1399
1400**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1401
1402**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1403
1404**参数:**
1405
1406| 参数名   | 类型     | 必填 | 说明                 |
1407| -------- | -------- | ---- | -------------------- |
1408| callback | AsyncCallback\<void> | 是   | 销毁播放的回调方法。 |
1409
1410**错误码:**
1411
1412以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1413
1414| 错误码ID | 错误信息                                   |
1415| -------- | ------------------------------------------ |
1416| 5400102  | Operation not allowed. Return by callback. |
1417
1418**示例:**
1419
1420```ts
1421import { BusinessError } from '@kit.BasicServicesKit';
1422
1423avPlayer.release((err: BusinessError) => {
1424  if (err) {
1425    console.error('Failed to release,error message is :' + err.message);
1426  } else {
1427    console.info('Succeeded in releasing');
1428  }
1429});
1430```
1431
1432### release<sup>9+</sup>
1433
1434release(): Promise\<void>
1435
1436销毁播放资源,除released状态,都可以调用。通过Promise获取返回值。
1437
1438**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1439
1440**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1441
1442**返回值:**
1443
1444| 类型           | 说明                      |
1445| -------------- | ------------------------- |
1446| Promise\<void> | 销毁播放的Promise返回值。 |
1447
1448**错误码:**
1449
1450以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1451
1452| 错误码ID | 错误信息                                  |
1453| -------- | ----------------------------------------- |
1454| 5400102  | Operation not allowed. Return by promise. |
1455
1456**示例:**
1457
1458```ts
1459import { BusinessError } from '@kit.BasicServicesKit';
1460
1461avPlayer.release().then(() => {
1462  console.info('Succeeded in releasing');
1463}, (err: BusinessError) => {
1464  console.error('Failed to release,error message is :' + err.message);
1465});
1466```
1467
1468### getTrackDescription<sup>9+</sup>
1469
1470getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void
1471
1472获取音视频轨道信息,可以在prepared/playing/paused状态调用。获取所有音视轨道信息,应在数据加载回调后调用。使用callback方式异步获取返回值。
1473
1474**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1475
1476**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1477
1478**参数:**
1479
1480| 参数名   | 类型                                                         | 必填 | 说明                                         |
1481| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------- |
1482| callback | AsyncCallback<Array<[MediaDescription](#mediadescription8)>> | 是   | 回调函数,当获取音视频轨道信息成功,err为undefined,data为获取到的MediaDescription数组;否则为错误对象。|
1483
1484**错误码:**
1485
1486以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1487
1488| 错误码ID | 错误信息                                   |
1489| -------- | ------------------------------------------ |
1490| 5400102  | Operation not allowed. Return by callback. |
1491
1492**示例:**
1493
1494```ts
1495import { BusinessError } from '@kit.BasicServicesKit';
1496
1497avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => {
1498  if ((arrList) != null) {
1499    console.info('Succeeded in doing getTrackDescription');
1500  } else {
1501    console.error(`Failed to do getTrackDescription, error:${error}`);
1502  }
1503});
1504```
1505
1506### getTrackDescription<sup>9+</sup>
1507
1508getTrackDescription(): Promise\<Array\<MediaDescription>>
1509
1510获取音视频轨道信息,可以在prepared/playing/paused状态调用。通过Promise获取返回值。
1511
1512**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1513
1514**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1515
1516**返回值:**
1517
1518| 类型                                                   | 说明                                              |
1519| ------------------------------------------------------ | ------------------------------------------------- |
1520| Promise<Array<[MediaDescription](#mediadescription8)>> | Promise对象,返回音视频轨道信息MediaDescription数组。 |
1521
1522**错误码:**
1523
1524以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1525
1526| 错误码ID | 错误信息                                  |
1527| -------- | ----------------------------------------- |
1528| 5400102  | Operation not allowed. Return by promise. |
1529
1530**示例:**
1531
1532```ts
1533import { BusinessError } from '@kit.BasicServicesKit';
1534
1535avPlayer.getTrackDescription().then((arrList: Array<media.MediaDescription>) => {
1536  console.info('Succeeded in getting TrackDescription');
1537}).catch((error: BusinessError) => {
1538  console.error(`Failed to get TrackDescription, error:${error}`);
1539});
1540```
1541
1542### getSelectedTracks<sup>12+</sup>
1543
1544getSelectedTracks(): Promise\<Array\<number>>
1545
1546获取已选择的音视频轨道索引,可以在prepared/playing/paused状态调用。通过Promise获取返回值。
1547
1548**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1549
1550**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1551
1552**返回值:**
1553
1554| 类型                                                   | 说明                                              |
1555| ------------------------------------------------------ | ------------------------------------------------- |
1556| Promise\<Array\<number>> | Promise对象,返回已选择音视频轨道索引数组。 |
1557
1558**错误码:**
1559
1560以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1561
1562| 错误码ID | 错误信息                                  |
1563| -------- | ----------------------------------------- |
1564| 5400102  | Operation not allowed. |
1565
1566**示例:**
1567
1568```ts
1569import { BusinessError } from '@kit.BasicServicesKit';
1570
1571avPlayer.getSelectedTracks().then((arrList: Array<number>) => {
1572  console.info('Succeeded in getting SelectedTracks');
1573}).catch((error: BusinessError) => {
1574  console.error(`Failed to get SelectedTracks, error:${error}`);
1575});
1576```
1577
1578### getPlaybackInfo<sup>12+</sup>
1579
1580getPlaybackInfo(): Promise\<PlaybackInfo>
1581
1582获取播放过程信息,可以在prepared/playing/paused状态调用。通过Promise获取返回值。
1583
1584**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1585
1586**返回值:**
1587
1588| 类型                                                   | 说明                                              |
1589| ------------------------------------------------------ | ------------------------------------------------- |
1590| Promise<[PlaybackInfo](#playbackinfo12)> | Promise对象,返回播放器信息PlaybackInfo。 |
1591
1592**示例:**
1593
1594```ts
1595import { BusinessError } from '@kit.BasicServicesKit';
1596
1597let avPlayer: media.AVPlayer | undefined = undefined;
1598let playbackInfo: media.PlaybackInfo | undefined = undefined;
1599media.createAVPlayer(async (err: BusinessError, player: media.AVPlayer) => {
1600  if (player != null) {
1601    avPlayer = player;
1602    console.info(`Succeeded in creating AVPlayer`);
1603    if (avPlayer) {
1604      try {
1605        playbackInfo = await avPlayer.getPlaybackInfo();
1606        console.info(`AVPlayer getPlaybackInfo = ${JSON.stringify(playbackInfo)}`); // 打印整个PlaybackInfo的值。
1607      } catch (error) {
1608        console.error(`error = ${error}`);
1609      }
1610    }
1611  } else {
1612    console.error(`Failed to create AVPlayer, error message:${err.message}`);
1613  }
1614});
1615```
1616
1617### getPlaybackPosition<sup>18+</sup>
1618
1619getPlaybackPosition(): number
1620
1621获取当前播放位置,可以在prepared/playing/paused/completed状态调用。
1622
1623**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
1624
1625**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1626
1627**返回值:**
1628
1629| 类型                                                   | 说明                                              |
1630| ------------------------------------------------------ | ------------------------------------------------- |
1631| number | 返回当前播放位置的时间,单位:毫秒(ms)。|
1632
1633**错误码:**
1634
1635以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
1636
1637| 错误码ID | 错误信息                                  |
1638| -------- | ----------------------------------------- |
1639| 5400102  | Operation not allowed. |
1640
1641**示例:**
1642
1643```ts
1644import { BusinessError } from '@kit.BasicServicesKit';
1645
1646avPlayer.prepare().then(() => {
1647  console.info('Succeeded in preparing');
1648  let playbackPosition: number = avPlayer.getPlaybackPosition();
1649  console.info(`AVPlayer getPlaybackPosition== ${playbackPosition}`);
1650}, (err: BusinessError) => {
1651  console.error('Failed to prepare,error message is :' + err.message);
1652});
1653```
1654
1655### selectTrack<sup>12+</sup>
1656
1657selectTrack(index: number, mode?: SwitchMode): Promise\<void>
1658
1659使用AVPlayer播放多音视频轨资源时,选择指定轨道播放,通过Promise获取返回值。
1660
1661**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1662
1663**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1664
1665**参数:**
1666
1667| 参数名   | 类型     | 必填 | 说明                 |
1668| -------- | -------- | ---- | -------------------- |
1669| index | number | 是   | 多音视频资源的轨道索引,可通过[getTrackDescription](#gettrackdescription9-1)接口获取当前资源的所有轨道信息[MediaDescription](#mediadescription8)。 |
1670| mode   | [SwitchMode](#switchmode12) | 否   | 切换视频轨道模式,默认为SMOOTH模式,**仅在DASH协议网络流视频轨切换时生效**,其他场景当前暂不支持。 |
1671
1672**返回值:**
1673
1674| 类型           | 说明                      |
1675| -------------- | ------------------------- |
1676| Promise\<void> | 选择轨道完成的Promise返回值。 |
1677
1678**错误码:**
1679
1680以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
1681
1682| 错误码ID | 错误信息                                  |
1683| -------- | ----------------------------------------- |
1684| 401      | The parameter check failed. Return by promise.       |
1685| 5400102  | Operation not allowed. Return by promise. |
1686
1687**示例:**
1688
1689<!--code_no_check-->
1690```ts
1691import { BusinessError } from '@kit.BasicServicesKit';
1692
1693let avPlayer: media.AVPlayer = await media.createAVPlayer();
1694let audioTrackIndex: Object = 0;
1695avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => {
1696  if (arrList != null) {
1697    for (let i = 0; i < arrList.length; i++) {
1698      if (i != 0) {
1699        // 获取音频轨道列表。
1700        audioTrackIndex = arrList[i][media.MediaDescriptionKey.MD_KEY_TRACK_INDEX];
1701      }
1702    }
1703  } else {
1704    console.error(`Failed to get TrackDescription, error:${error}`);
1705  }
1706});
1707
1708// 选择其中一个音频轨道。
1709avPlayer.selectTrack(parseInt(audioTrackIndex.toString()));
1710```
1711
1712### deselectTrack<sup>12+</sup>
1713
1714deselectTrack(index: number): Promise\<void>
1715
1716使用AVPlayer播放多音轨视频时取消指定音视频轨道播放,通过Promise获取返回值。
1717
1718**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1719
1720**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1721
1722**参数:**
1723
1724| 参数名   | 类型     | 必填 | 说明                 |
1725| -------- | -------- | ---- | -------------------- |
1726| index | number | 是   | 多音视频资源的轨道索引,来自[getTrackDescription](#gettrackdescription9-1)接口所获取的轨道信息[MediaDescription](#mediadescription8)。 |
1727
1728**返回值:**
1729
1730| 类型           | 说明                      |
1731| -------------- | ------------------------- |
1732| Promise\<void> | 取消选择曲目完成的Promise返回值。 |
1733
1734**错误码:**
1735
1736以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
1737
1738| 错误码ID | 错误信息                                  |
1739| -------- | ----------------------------------------- |
1740| 401      | The parameter check failed. Return by promise.       |
1741| 5400102  | Operation not allowed. Return by promise. |
1742
1743**示例:**
1744
1745<!--code_no_check-->
1746```ts
1747import { BusinessError } from '@kit.BasicServicesKit';
1748
1749let avPlayer: media.AVPlayer = await media.createAVPlayer();
1750let audioTrackIndex: Object = 0;
1751avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => {
1752  if (arrList != null) {
1753    for (let i = 0; i < arrList.length; i++) {
1754      if (i != 0) {
1755        // 获取音频轨道列表。
1756        audioTrackIndex = arrList[i][media.MediaDescriptionKey.MD_KEY_TRACK_INDEX];
1757      }
1758    }
1759  } else {
1760    console.error(`Failed to get TrackDescription, error:${error}`);
1761  }
1762});
1763
1764// 选择其中一个音频轨道。
1765avPlayer.selectTrack(parseInt(audioTrackIndex.toString()));
1766// 取消选择上次选中的音频轨道,并恢复到默认音频轨道。
1767avPlayer.deselectTrack(parseInt(audioTrackIndex.toString()));
1768```
1769
1770### setDecryptionConfig<sup>11+</sup>
1771
1772setDecryptionConfig(mediaKeySession: drm.MediaKeySession, secureVideoPath: boolean): void
1773
1774设置解密配置。当收到[mediaKeySystemInfoUpdate事件](#onmediakeysysteminfoupdate11)时,需根据事件上报的信息创建相关配置并设置解密配置,否则无法播放。
1775
1776**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1777
1778**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1779
1780**参数:**
1781
1782| 参数名   | 类型                                                         | 必填 | 说明                                         |
1783| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------- |
1784| mediaKeySession | [drm.MediaKeySession](../apis-drm-kit/arkts-apis-drm-MediaKeySession.md) | 是   | 解密会话 |
1785| secureVideoPath | boolean | 是 | 安全视频通路,true表示选择安全视频通路,false表示选择非安全视频通路 |
1786
1787**错误码:**
1788
1789以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1790
1791| 错误码ID | 错误信息                                  |
1792| -------- | ----------------------------------------- |
1793| 401  | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1794
1795**示例:**
1796
1797关于drm模块的示例具体可见[@ohos.multimedia.drm](../apis-drm-kit/arkts-apis-drm.md)。
1798```ts
1799import { drm } from '@kit.DrmKit';
1800
1801// 创建MediaKeySystem系统。
1802let keySystem:drm.MediaKeySystem = drm.createMediaKeySystem('com.clearplay.drm');
1803// 创建MediaKeySession解密会话。
1804let keySession:drm.MediaKeySession = keySystem.createMediaKeySession(drm.ContentProtectionLevel.CONTENT_PROTECTION_LEVEL_SW_CRYPTO);
1805// 生成许可证请求、设置许可证响应等。
1806// 安全视频通路标志。
1807let secureVideoPath:boolean = false;
1808// 设置解密配置。
1809avPlayer.setDecryptionConfig(keySession, secureVideoPath);
1810```
1811
1812### getMediaKeySystemInfos<sup>11+</sup>
1813
1814getMediaKeySystemInfos(): Array\<drm.MediaKeySystemInfo>
1815
1816获取当前播放的媒体资源的MediaKeySystemInfo。需要在[mediaKeySystemInfoUpdate事件](#onmediakeysysteminfoupdate11)触发成功后才能调用。
1817
1818**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1819
1820**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1821
1822**返回值:**
1823
1824| 类型                                                   | 说明                                              |
1825| ------------------------------------------------------ | ------------------------------------------------- |
1826|  Array<[drm.MediaKeySystemInfo](../apis-drm-kit/arkts-apis-drm-i.md#mediakeysysteminfo)> | MediaKeySystemInfo数组,MediaKeySystemInfo具有uuid和pssh两个属性。 |
1827
1828**示例:**
1829
1830```ts
1831import { drm } from '@kit.DrmKit';
1832
1833const infos = avPlayer.getMediaKeySystemInfos();
1834console.info('GetMediaKeySystemInfos count: ' + infos.length);
1835for (let i = 0; i < infos.length; i++) {
1836  console.info('GetMediaKeySystemInfos uuid: ' + infos[i]["uuid"]);
1837  console.info('GetMediaKeySystemInfos pssh: ' + infos[i]["pssh"]);
1838}
1839```
1840
1841### seek<sup>9+</sup>
1842
1843seek(timeMs: number, mode?:SeekMode): void
1844
1845跳转到指定播放位置,只能在prepared/playing/paused/completed状态调用,可以通过[seekDone事件](#onseekdone9)确认是否生效。
1846注:直播场景不支持seek。
1847
1848**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1849
1850**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1851
1852**参数:**
1853
1854| 参数名 | 类型                   | 必填 | 说明                                                         |
1855| ------ | ---------------------- | ---- | ------------------------------------------------------------ |
1856| timeMs | number                 | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, [duration](#属性)]。SEEK_CONTINUOU模式可以额外取值-1,用于表示SEEK_CONTINUOUS模式结束。 |
1857| mode   | [SeekMode](#seekmode8) | 否   | 基于视频I帧的跳转模式,默认为SEEK_PREV_SYNC模式,**仅在视频资源播放时设置**。 |
1858
1859**示例:**
1860
1861```ts
1862let seekTime: number = 1000;
1863avPlayer.seek(seekTime, media.SeekMode.SEEK_PREV_SYNC);
1864```
1865
1866```ts
1867// SEEK_CONTINUOUS 可以结合Slider的onChange回调方法进行对应处理,当slideMode为Moving时,触发拖动过程的SeekContinuous。
1868let slideMovingTime: number = 2000;
1869avPlayer.seek(slideMovingTime, media.SeekMode.SEEK_CONTINUOUS);
1870
1871// 当slideMode为End时,调用seek(-1, media.SeekMode.SEEK_CONTINUOUS)结束seek。
1872avPlayer.seek(-1, media.SeekMode.SEEK_CONTINUOUS);
1873```
1874
1875### isSeekContinuousSupported<sup>18+</sup>
1876
1877isSeekContinuousSupported() : boolean
1878
1879查询媒体源是否支持以SEEK_CONTINUOUS模式[SeekMode](#seekmode8)进行[seek](#seek9),在prepared/playing/paused/completed状态调用返回实际值,其余状态调用返回false。对于不支持SEEK_CONTINUOUS模式进行seek的设备,返回false。
1880
1881**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
1882
1883**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1884
1885**返回值:**
1886
1887| 类型           | 说明                                       |
1888| -------------- | ------------------------------------------ |
1889| boolean | 媒体源是否支持以SEEK_CONTINUOUS模式进行seek。 |
1890
1891**示例:**
1892
1893```ts
1894let isSupported = avPlayer.isSeekContinuousSupported();
1895```
1896
1897### on('seekDone')<sup>9+</sup>
1898
1899on(type: 'seekDone', callback: Callback\<number>): void
1900
1901监听seek生效的事件。
1902
1903**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1904
1905**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1906
1907**参数:**
1908
1909| 参数名   | 类型     | 必填 | 说明                                                         |
1910| -------- | -------- | ---- | ------------------------------------------------------------ |
1911| type     | string   | 是   | seek生效的事件回调类型,支持的事件:'seekDone',除SEEK_CONTINUOUS外的[SeekMode](#seekmode8)每次调用seek后都会回调此事件。 |
1912| callback | Callback\<number> | 是   | 回调函数。seek生效的事件回调方法,只会上报用户请求的time位置。<br/>**视频播放:**[SeekMode](#seekmode8)会造成实际跳转位置与用户设置产生偏差,精准位置需要通过currentTime获取,事件回调的time仅代表完成用户某一次请求。 |
1913
1914**示例:**
1915
1916```ts
1917avPlayer.on('seekDone', (seekDoneTime:number) => {
1918  console.info('seekDone called,and seek time is:' + seekDoneTime);
1919});
1920```
1921
1922### off('seekDone')<sup>9+</sup>
1923
1924off(type: 'seekDone', callback?: Callback\<number>): void
1925
1926取消监听seek生效的事件。
1927
1928**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1929
1930**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1931
1932**参数:**
1933
1934| 参数名 | 类型   | 必填 | 说明                                                 |
1935| ------ | ------ | ---- | ---------------------------------------------------- |
1936| type   | string | 是   | seek生效的事件回调类型,取消注册的事件:'seekDone'。 |
1937| callback | Callback\<number> | 否   | 回调函数。seek生效的事件回调方法,只会上报用户请求的time位置。<br/>**视频播放:**[SeekMode](#seekmode8)会造成实际跳转位置与用户设置产生偏差,精准位置需要通过currentTime获取,事件回调的time仅代表完成用户某一次请求。<br/>从API version 12开始支持此参数。 |
1938
1939**示例:**
1940
1941```ts
1942avPlayer.off('seekDone');
1943```
1944
1945### setSpeed<sup>9+</sup>
1946
1947setSpeed(speed: PlaybackSpeed): void
1948
1949设置倍速模式,只能在prepared/playing/paused/completed状态调用,可以通过[speedDone事件](#onspeeddone9)确认是否生效。
1950注:直播场景不支持setSpeed。
1951
1952**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1953
1954**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1955
1956**参数:**
1957
1958| 参数名 | 类型                             | 必填 | 说明               |
1959| ------ | -------------------------------- | ---- | ------------------ |
1960| speed  | [PlaybackSpeed](#playbackspeed8) | 是   | 指定播放倍速模式。 |
1961
1962**示例:**
1963
1964```ts
1965avPlayer.setSpeed(media.PlaybackSpeed.SPEED_FORWARD_2_00_X);
1966```
1967
1968### on('speedDone')<sup>9+</sup>
1969
1970on(type: 'speedDone', callback: Callback\<number>): void
1971
1972监听setSpeed生效的事件
1973
1974**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1975
1976**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1977
1978**参数:**
1979
1980| 参数名   | 类型     | 必填 | 说明                                                         |
1981| -------- | -------- | ---- | ------------------------------------------------------------ |
1982| type     | string   | 是   | setSpeed生效的事件回调类型,支持的事件:'speedDone',每次调用setSpeed后都会回调此事件。 |
1983| callback | Callback\<number> | 是   | 回调函数。当setSpeed成功,上报生效的倍速模式,具体见[PlaybackSpeed](#playbackspeed8)。 |
1984
1985**示例:**
1986
1987```ts
1988avPlayer.on('speedDone', (speed:number) => {
1989  console.info('speedDone called,and speed value is:' + speed);
1990});
1991```
1992
1993### off('speedDone')<sup>9+</sup>
1994
1995off(type: 'speedDone', callback?: Callback\<number>): void
1996
1997取消监听setSpeed生效的事件。
1998
1999**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2000
2001**参数:**
2002
2003| 参数名 | 类型   | 必填 | 说明                                                      |
2004| ------ | ------ | ---- | --------------------------------------------------------- |
2005| type   | string | 是   | setSpeed生效的事件回调类型,取消注册的事件:'speedDone'。 |
2006| callback | Callback\<number> | 否   | 回调函数。当setSpeed成功,上报生效的倍速模式,具体见[PlaybackSpeed](#playbackspeed8)。<br/>从API version 12开始支持此参数。 |
2007
2008**示例:**
2009
2010```ts
2011avPlayer.off('speedDone');
2012```
2013
2014
2015### setPlaybackRate<sup>20+</sup>
2016
2017setPlaybackRate(rate: number): void
2018
2019设置倍速模式。只能在prepared/playing/paused/completed状态调用,取值范围是[0.125, 4.0],可以通过[playbackRateDone](#onplaybackratedone20)事件确认是否生效。<br>
2020>**注意:**
2021>
2022>直播场景不支持setPlaybackRate。
2023
2024**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
2025
2026**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2027
2028**参数:**
2029
2030| 参数名 | 类型                             | 必填 | 说明               |
2031| ------ | -------------------------------- | ---- | ------------------ |
2032| rate  | number | 是   | 指定播放倍速速率。 |
2033
2034**错误码:**
2035
2036以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
2037
2038| 错误码ID | 错误信息                                   |
2039| -------- | ------------------------------------------ |
2040| 5400108  | The parameter check failed, parameter value out of range.      |
2041| 5400102  | Operation not allowed,if invalid state or live stream.      |
2042
2043**示例:**
2044
2045```ts
2046avPlayer.setPlaybackRate(2.0);
2047```
2048
2049
2050### on('playbackRateDone')<sup>20+</sup>
2051
2052on(type: 'playbackRateDone', callback: OnPlaybackRateDone): void
2053
2054监听[setPlaybackRate](#setplaybackrate20)生效的事件。
2055
2056**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
2057
2058**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2059
2060**参数:**
2061
2062| 参数名   | 类型     | 必填 | 说明                                                         |
2063| -------- | -------- | ---- | ------------------------------------------------------------ |
2064| type     | string   | 是   | setPlaybackRate生效的事件回调类型,支持的事件:'playbackRateDone',每次调用setPlaybackRate后都会回调此事件。 |
2065| callback | [OnPlaybackRateDone](#onplaybackratedone20) | 是   | setPlaybackRate生效的事件回调方法,上报设置后的播放速率。<br/>从API version 20开始支持此参数。 |
2066
2067**示例:**
2068
2069```ts
2070avPlayer.on('playbackRateDone', (rate:number) => {
2071  console.info('playbackRateDone called,and rate value is:' + rate);
2072});
2073```
2074
2075### off('playbackRateDone')<sup>20+</sup>
2076
2077off(type: 'playbackRateDone', callback?: OnPlaybackRateDone): void
2078
2079取消监听[setPlaybackRate](#setplaybackrate20)生效的事件。
2080
2081**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
2082
2083**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2084
2085**参数:**
2086
2087| 参数名 | 类型   | 必填 | 说明                                                      |
2088| ------ | ------ | ---- | --------------------------------------------------------- |
2089| type   | string | 是   | setPlaybackRate生效的事件回调类型,取消注册的事件:'playbackRateDone'。 |
2090| callback | [OnPlaybackRateDone](#onplaybackratedone20) | 否   |  setPlaybackRate生效的事件回调方法,上报设置后的播放速率。如填写该参数,则仅取消注册此回调方法,否则取消注册playbackRateDone事件的所有回调方法。<br/>从API version 20开始支持此参数。 |
2091
2092**示例:**
2093
2094```ts
2095avPlayer.off('playbackRateDone');
2096```
2097
2098
2099### setBitrate<sup>9+</sup>
2100
2101setBitrate(bitrate: number): void
2102
2103设置比特率,以播放所指定比特率的流媒体资源,当前仅对**HLS/DASH协议网络流**有效。默认情况下,AVPlayer会根据网络连接速度选择合适的比特率。只能在prepared/playing/paused/completed状态调用,可以通过[bitrateDone](#onbitratedone9)事件确认是否生效。
2104
2105**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2106
2107**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2108
2109**参数:**
2110
2111| 参数名  | 类型   | 必填 | 说明                                                         |
2112| ------- | ------ | ---- | ------------------------------------------------------------ |
2113| bitrate | number | 是   | 指定比特率,须通过[availableBitrates](#onavailablebitrates9)事件获得当前HLS/DASH协议网络流可用的比特率列表,如果用户指定的比特率不在此列表中,则播放器将从可用比特率列表中选择最接近的比特率。如果通过availableBitrates事件获得的比特率列表长度为0,则不支持指定比特率,也不会产生bitrateDone回调。 |
2114
2115**示例:**
2116
2117```ts
2118let bitrate: number = 96000;
2119avPlayer.setBitrate(bitrate);
2120```
2121
2122### on('bitrateDone')<sup>9+</sup>
2123
2124on(type: 'bitrateDone', callback: Callback\<number>): void
2125
2126监听setBitrate生效的事件。
2127
2128**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2129
2130**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2131
2132**参数:**
2133
2134| 参数名   | 类型     | 必填 | 说明                                                         |
2135| -------- | -------- | ---- | ------------------------------------------------------------ |
2136| type     | string   | 是   | setBitrate生效的事件回调类型,支持的事件:'bitrateDone',每次调用setBitrate后都会回调此事件。 |
2137| callback | Callback\<number> | 是   | setBitrate生效的事件回调方法,上报生效的比特率。             |
2138
2139**示例:**
2140
2141```ts
2142avPlayer.on('bitrateDone', (bitrate:number) => {
2143  console.info('bitrateDone called,and bitrate value is:' + bitrate);
2144});
2145```
2146
2147### off('bitrateDone')<sup>9+</sup>
2148
2149off(type: 'bitrateDone', callback?: Callback\<number>): void
2150
2151取消监听setBitrate生效的事件。
2152
2153**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2154
2155**参数:**
2156
2157| 参数名 | 类型   | 必填 | 说明                                                         |
2158| ------ | ------ | ---- | ------------------------------------------------------------ |
2159| type   | string | 是   | setBitrate生效的事件回调类型,取消注册的事件:'bitrateDone'。 |
2160| callback | Callback\<number> | 否   | setBitrate生效的事件回调方法,上报生效的比特率。<br/>从API version 12开始支持此参数。             |
2161
2162**示例:**
2163
2164```ts
2165avPlayer.off('bitrateDone');
2166```
2167
2168### on('availableBitrates')<sup>9+</sup>
2169
2170on(type: 'availableBitrates', callback: Callback\<Array\<number>>): void
2171
2172监听HLS/DASH协议网络流可用的比特率列表,只会在切换prepared状态后上报。
2173
2174**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2175
2176**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2177
2178**参数:**
2179
2180| 参数名   | 类型     | 必填 | 说明                                                         |
2181| -------- | -------- | ---- | ------------------------------------------------------------ |
2182| type     | string   | 是   | HLS/DASH协议网络流可用比特率上报事件回调类型,支持的事件:'availableBitrates',只会在prepared之后上报一次。 |
2183| callback | Callback\<Array\<number>> | 是   | HLS/DASH协议网络流可用比特率上报事件回调方法,使用数组存放支持的比特率。如果数组长度为0,则不支持指定比特率。 |
2184
2185**示例:**
2186
2187```ts
2188avPlayer.on('availableBitrates', (bitrates: Array<number>) => {
2189  console.info('availableBitrates called,and availableBitrates length is:' + bitrates.length);
2190});
2191```
2192
2193### off('availableBitrates')<sup>9+</sup>
2194
2195off(type: 'availableBitrates', callback?: Callback\<Array\<number>>): void
2196
2197取消监听HLS/DASH协议网络流可用的比特率列表,调用[prepare](#prepare9)后,上报此事件。
2198
2199**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2200
2201**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2202
2203**参数:**
2204
2205| 参数名 | 类型   | 必填 | 说明                                                         |
2206| ------ | ------ | ---- | ------------------------------------------------------------ |
2207| type   | string | 是   | HLS/DASH协议网络流可用比特率上报事件回调类型,取消注册的事件:'availableBitrates'。 |
2208| callback | Callback\<Array\<number>> | 否   | HLS/DASH协议网络流可用比特率上报事件回调方法,使用数组存放支持的比特率。如果数组长度为0,则不支持指定比特率。<br/>从API version 12开始支持此参数。 |
2209
2210**示例:**
2211
2212```ts
2213avPlayer.off('availableBitrates');
2214```
2215
2216
2217### on('mediaKeySystemInfoUpdate')<sup>11+</sup>
2218
2219on(type: 'mediaKeySystemInfoUpdate', callback: Callback\<Array\<drm.MediaKeySystemInfo>>): void
2220
2221监听mediaKeySystemInfoUpdate事件。
2222
2223**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2224
2225**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2226
2227**参数:**
2228
2229| 参数名   | 类型     | 必填 | 说明                                                         |
2230| -------- | -------- | ---- | ------------------------------------------------------------ |
2231| type     | string   | 是   | 版权保护信息更新上报事件回调类型,支持的事件:'mediaKeySystemInfoUpdate',当播放内容的版权保护信息更新时上报事件。 |
2232| callback | Callback\<Array\<drm.[MediaKeySystemInfo](../apis-drm-kit/arkts-apis-drm-i.md#mediakeysysteminfo)>> | 是   | 版权保护信息更新上报事件回调方法,上报MediaKeySystemInfo数组。 |
2233
2234**示例:**
2235
2236```ts
2237import { drm } from '@kit.DrmKit';
2238
2239avPlayer.on('mediaKeySystemInfoUpdate', (mediaKeySystemInfo: Array<drm.MediaKeySystemInfo>) => {
2240    for (let i = 0; i < mediaKeySystemInfo.length; i++) {
2241      console.info('mediaKeySystemInfoUpdate happened uuid: ' + mediaKeySystemInfo[i]["uuid"]);
2242      console.info('mediaKeySystemInfoUpdate happened pssh: ' + mediaKeySystemInfo[i]["pssh"]);
2243    }
2244});
2245```
2246
2247### off('mediaKeySystemInfoUpdate')<sup>11+</sup>
2248
2249off(type: 'mediaKeySystemInfoUpdate', callback?: Callback\<Array\<drm.MediaKeySystemInfo>>): void;
2250
2251取消监听mediaKeySystemInfoUpdate事件。
2252
2253**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2254
2255**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2256
2257**参数:**
2258
2259| 参数名 | 类型   | 必填 | 说明                                                         |
2260| ------ | ------ | ---- | ------------------------------------------------------------ |
2261| type   | string | 是   | 版权保护信息更新上报事件回调类型,取消注册的事件:'mediaKeySystemInfoUpdate'。 |
2262| callback | Callback\<Array\<drm.[MediaKeySystemInfo](../apis-drm-kit/arkts-apis-drm-i.md#mediakeysysteminfo)>> | 否   | 版权保护信息更新上报事件回调方法,上报版权保护信息数组。如填写该参数,则仅取消注册此回调方法,否则取消注册mediaKeySystemInfoUpdate事件的所有回调方法。 |
2263
2264**示例:**
2265
2266```ts
2267avPlayer.off('mediaKeySystemInfoUpdate');
2268```
2269
2270### setVolume<sup>9+</sup>
2271
2272setVolume(volume: number): void
2273
2274设置媒体播放音量,只能在prepared/playing/paused/completed状态调用,可以通过[volumeChange事件](#onvolumechange9)确认是否生效。
2275
2276**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2277
2278**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2279
2280**参数:**
2281
2282| 参数名 | 类型   | 必填 | 说明                                                         |
2283| ------ | ------ | ---- | ------------------------------------------------------------ |
2284| volume | number | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
2285
2286**示例:**
2287
2288```ts
2289let volume: number = 1.0;
2290avPlayer.setVolume(volume);
2291```
2292
2293### on('volumeChange')<sup>9+</sup>
2294
2295on(type: 'volumeChange', callback: Callback\<number>): void
2296
2297监听setVolume生效的事件。
2298
2299**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2300
2301**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2302
2303**参数:**
2304
2305| 参数名   | 类型     | 必填 | 说明                                                         |
2306| -------- | -------- | ---- | ------------------------------------------------------------ |
2307| type     | string   | 是   | setVolume生效的事件回调类型,支持的事件:'volumeChange',每次调用setVolume后都会回调此事件。 |
2308| callback | Callback\<number> | 是   | setVolume生效的事件回调方法,上报生效的媒体音量。            |
2309
2310**示例:**
2311
2312```ts
2313avPlayer.on('volumeChange', (vol: number) => {
2314  console.info('volumeChange called,and new volume is :' + vol);
2315});
2316```
2317
2318### off('volumeChange')<sup>9+</sup>
2319
2320off(type: 'volumeChange', callback?: Callback\<number>): void
2321
2322取消监听setVolume生效的事件。
2323
2324**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2325
2326**参数:**
2327
2328| 参数名 | 类型   | 必填 | 说明                                                         |
2329| ------ | ------ | ---- | ------------------------------------------------------------ |
2330| type   | string | 是   | setVolume生效的事件回调类型,取消注册的事件:'volumeChange'。 |
2331| callback | Callback\<number> | 否   | setVolume生效的事件回调方法,上报生效的媒体音量。<br/>从API version 12开始支持此参数。            |
2332
2333**示例:**
2334
2335```ts
2336avPlayer.off('volumeChange');
2337```
2338
2339### on('endOfStream')<sup>9+</sup>
2340
2341on(type: 'endOfStream', callback: Callback\<void>): void
2342
2343监听资源播放至结尾的事件;如果用户设置[loop](#属性)=true,播放会跳转至开头重播;如果用户没有设置loop,会通过[stateChange](#onstatechange9)上报completed状态。
2344
2345**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2346
2347**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2348
2349**参数:**
2350
2351| 参数名   | 类型     | 必填 | 说明                                                         |
2352| -------- | -------- | ---- | ------------------------------------------------------------ |
2353| type     | string   | 是   | 资源播放至结尾的事件回调类型,支持的事件:'endOfStream',当播放至结尾时会上报此事件。 |
2354| callback | Callback\<void> | 是   | 资源播放至结尾的事件回调方法。                               |
2355
2356**示例:**
2357
2358```ts
2359avPlayer.on('endOfStream', () => {
2360  console.info('endOfStream called');
2361});
2362```
2363
2364### off('endOfStream')<sup>9+</sup>
2365
2366off(type: 'endOfStream', callback?: Callback\<void>): void
2367
2368取消监听资源播放至结尾的事件。
2369
2370**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2371
2372**参数:**
2373
2374| 参数名 | 类型   | 必填 | 说明                                                         |
2375| ------ | ------ | ---- | ------------------------------------------------------------ |
2376| type   | string | 是   | 资源播放至结尾的事件回调类型,取消注册的事件:'endOfStream'。 |
2377| callback | Callback\<void> | 否   | 资源播放至结尾的事件回调方法。<br/>从API version 12开始支持此参数。                               |
2378
2379**示例:**
2380
2381```ts
2382avPlayer.off('endOfStream');
2383```
2384
2385### on('timeUpdate')<sup>9+</sup>
2386
2387on(type: 'timeUpdate', callback: Callback\<number>): void
2388
2389监听资源播放当前时间,单位为毫秒(ms),用于刷新进度条当前位置,默认间隔100ms时间上报,因用户操作(seek)产生的时间变化会立刻上报。
2390
2391注:直播场景不支持timeUpdate上报。
2392
2393**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
2394
2395**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2396
2397**参数:**
2398
2399| 参数名   | 类型     | 必填 | 说明                                           |
2400| -------- | -------- | ---- | ---------------------------------------------- |
2401| type     | string   | 是   | 时间更新的回调类型,支持的事件:'timeUpdate'。 |
2402| callback | Callback\<number> | 是   | 回调函数。返回当前时间。                                     |
2403
2404**示例:**
2405
2406```ts
2407avPlayer.on('timeUpdate', (time:number) => {
2408  console.info('timeUpdate called,and new time is :' + time);
2409});
2410```
2411
2412### off('timeUpdate')<sup>9+</sup>
2413
2414off(type: 'timeUpdate', callback?: Callback\<number>): void
2415
2416取消监听资源播放当前时间。
2417
2418**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
2419
2420**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2421
2422**参数:**
2423
2424| 参数名 | 类型   | 必填 | 说明                                               |
2425| ------ | ------ | ---- | -------------------------------------------------- |
2426| type   | string | 是   | 时间更新的回调类型,取消注册的事件:'timeUpdate'。 |
2427| callback | Callback\<number> | 否   | 回调函数。返回当前时间。<br/>从API version 12开始支持此参数。             |
2428
2429**示例:**
2430
2431```ts
2432avPlayer.off('timeUpdate');
2433```
2434
2435### on('durationUpdate')<sup>9+</sup>
2436
2437
2438on(type: 'durationUpdate', callback: Callback\<number>): void
2439
2440监听资源播放资源的时长,单位为毫秒(ms),用于刷新进度条长度,默认只在prepared上报一次,同时允许一些特殊码流刷新多次时长。
2441注:直播场景不支持durationUpdate上报。
2442
2443**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2444
2445**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2446
2447**参数:**
2448
2449| 参数名   | 类型     | 必填 | 说明                                               |
2450| -------- | -------- | ---- | -------------------------------------------------- |
2451| type     | string   | 是   | 时长更新的回调类型,支持的事件:'durationUpdate'。 |
2452| callback | Callback\<number> | 是   | 回调函数。返回资源时长。        |
2453
2454**示例:**
2455
2456```ts
2457avPlayer.on('durationUpdate', (duration: number) => {
2458  console.info('durationUpdate called,new duration is :' + duration);
2459});
2460```
2461
2462### off('durationUpdate')<sup>9+</sup>
2463
2464off(type: 'durationUpdate', callback?: Callback\<number>): void
2465
2466取消监听资源播放资源的时长。
2467
2468**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2469
2470**参数:**
2471
2472| 参数名 | 类型   | 必填 | 说明                                                   |
2473| ------ | ------ | ---- | ------------------------------------------------------ |
2474| type   | string | 是   | 时长更新的回调类型,取消注册的事件:'durationUpdate'。 |
2475| callback | Callback\<number> | 否   | 回调函数。返回资源时长。<br/>从API version 12开始支持此参数。        |
2476
2477**示例:**
2478
2479```ts
2480avPlayer.off('durationUpdate');
2481```
2482
2483### on('bufferingUpdate')<sup>9+</sup>
2484
2485on(type: 'bufferingUpdate', callback: OnBufferingUpdateHandler): void
2486
2487订阅音视频缓存更新事件,仅网络播放支持该订阅事件。
2488
2489**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2490
2491**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2492
2493**参数:**
2494
2495| 参数名   | 类型     | 必填 | 说明                                                         |
2496| -------- | -------- | ---- | ------------------------------------------------------------ |
2497| type     | string   | 是   | 播放缓存事件回调类型,支持的事件:'bufferingUpdate'。        |
2498| callback | [OnBufferingUpdateHandler](#onbufferingupdatehandler12) | 是   | 播放缓存事件回调方法。 |
2499
2500**示例:**
2501
2502```ts
2503avPlayer.on('bufferingUpdate', (infoType: media.BufferingInfoType, value: number) => {
2504  console.info('bufferingUpdate called,and infoType value is:' + infoType + ', value is :' + value);
2505});
2506```
2507
2508### off('bufferingUpdate')<sup>9+</sup>
2509
2510off(type: 'bufferingUpdate', callback?: OnBufferingUpdateHandler): void
2511
2512取消监听音视频缓存更新事件。
2513
2514**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2515
2516**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2517
2518**参数:**
2519
2520| 参数名 | 类型   | 必填 | 说明                                                      |
2521| ------ | ------ | ---- | --------------------------------------------------------- |
2522| type   | string | 是   | 播放缓存事件回调类型,取消注册的事件:'bufferingUpdate'。 |
2523| callback | [OnBufferingUpdateHandler](#onbufferingupdatehandler12) | 否   | 播放缓存事件回调方法。 |
2524
2525**示例:**
2526
2527```ts
2528avPlayer.off('bufferingUpdate');
2529```
2530
2531### on('startRenderFrame')<sup>9+</sup>
2532
2533on(type: 'startRenderFrame', callback: Callback\<void>): void
2534
2535订阅视频播放开始首帧渲染的更新事件,仅视频播放支持该订阅事件,该事件仅代表播放服务将第一帧画面送显示模块,实际效果依赖显示服务渲染性能。
2536
2537**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2538
2539**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2540
2541**参数:**
2542
2543| 参数名   | 类型     | 必填 | 说明                                                         |
2544| -------- | -------- | ---- | ------------------------------------------------------------ |
2545| type     | string   | 是   | 视频播放开始首帧渲染事件回调类型,支持的事件:'startRenderFrame'。 |
2546| callback | Callback\<void> | 是   | 视频播放开始首帧渲染事件回调方法。                           |
2547
2548**示例:**
2549
2550```ts
2551avPlayer.on('startRenderFrame', () => {
2552  console.info('startRenderFrame called');
2553});
2554```
2555
2556### off('startRenderFrame')<sup>9+</sup>
2557
2558off(type: 'startRenderFrame', callback?: Callback\<void>): void
2559
2560取消监听视频播放开始首帧渲染的更新事件。
2561
2562**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2563
2564**参数:**
2565
2566| 参数名 | 类型   | 必填 | 说明                                                         |
2567| ------ | ------ | ---- | ------------------------------------------------------------ |
2568| type   | string | 是   | 视频播放开始首帧渲染事件回调类型,取消注册的事件:'startRenderFrame'。 |
2569| callback | Callback\<void> | 否   | 视频播放开始首帧渲染事件回调方法。<br/>从API version 12开始支持此参数。                   |
2570
2571**示例:**
2572
2573```ts
2574avPlayer.off('startRenderFrame');
2575```
2576
2577### on('videoSizeChange')<sup>9+</sup>
2578
2579on(type: 'videoSizeChange', callback: OnVideoSizeChangeHandler): void
2580
2581监听视频播放宽高变化事件,仅视频播放支持该订阅事件,默认只在prepared状态上报一次,但HLS协议码流会在切换分辨率时上报。
2582
2583**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2584
2585**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2586
2587**参数:**
2588
2589| 参数名   | 类型     | 必填 | 说明                                                         |
2590| -------- | -------- | ---- | ------------------------------------------------------------ |
2591| type     | string   | 是   | 视频播放宽高变化事件回调类型,支持的事件:'videoSizeChange'。 |
2592| callback | [OnVideoSizeChangeHandler](#onvideosizechangehandler12) | 是   | 视频播放宽高变化事件回调方法。    |
2593
2594**示例:**
2595
2596```ts
2597avPlayer.on('videoSizeChange', (width: number, height: number) => {
2598  console.info('videoSizeChange called,and width is:' + width + ', height is :' + height);
2599});
2600```
2601
2602### off('videoSizeChange')<sup>9+</sup>
2603
2604off(type: 'videoSizeChange', callback?: OnVideoSizeChangeHandler): void
2605
2606取消监听视频播放宽高变化事件。
2607
2608**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2609
2610**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2611
2612**参数:**
2613
2614| 参数名 | 类型   | 必填 | 说明                                                         |
2615| ------ | ------ | ---- | ------------------------------------------------------------ |
2616| type   | string | 是   | 视频播放宽高变化事件回调类型,取消注册的事件:'videoSizeChange'。 |
2617| callback | [OnVideoSizeChangeHandler](#onvideosizechangehandler12) | 否   | 视频播放宽高变化事件回调方法。<br/>从API version 12开始支持此参数。    |
2618
2619**示例:**
2620
2621```ts
2622avPlayer.off('videoSizeChange');
2623```
2624
2625### on('audioInterrupt')<sup>9+</sup>
2626
2627on(type: 'audioInterrupt', callback: Callback\<audio.InterruptEvent>): void
2628
2629监听音频焦点变化事件,多个音视频资源同时播放时,会根据音频焦点模型[audio.InterruptMode](../apis-audio-kit/js-apis-audio.md#interruptmode9)触发此事件。应用需根据不同焦点变化事件作相应处理。具体可参考[处理音频焦点事件](../../media/audio/audio-playback-concurrency.md)。
2630
2631**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2632
2633**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2634
2635**参数:**
2636
2637| 参数名   | 类型                                                         | 必填 | 说明                                                     |
2638| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------------------- |
2639| type     | string                                                       | 是   | 音频焦点变化事件回调类型,支持的事件:'audioInterrupt'。 |
2640| callback | Callback\<[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)> | 是   | 音频焦点变化事件回调方法。                           |
2641
2642**示例:**
2643
2644```ts
2645import { audio } from '@kit.AudioKit';
2646
2647avPlayer.on('audioInterrupt', (info: audio.InterruptEvent) => {
2648  console.info('audioInterrupt called,and InterruptEvent info is:' + info);
2649});
2650```
2651
2652### off('audioInterrupt')<sup>9+</sup>
2653
2654off(type: 'audioInterrupt', callback?: Callback<audio.InterruptEvent>): void
2655
2656取消监听音频焦点变化事件。
2657
2658**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2659
2660**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2661
2662**参数:**
2663
2664| 参数名 | 类型   | 必填 | 说明                                                         |
2665| ------ | ------ | ---- | ------------------------------------------------------------ |
2666| type   | string | 是   | 音频焦点变化事件回调类型,取消注册的事件:'audioInterrupt'。 |
2667| callback | Callback\<[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)> | 否   | 音频焦点变化事件回调方法。<br/>从API version 12开始支持此参数。             |
2668
2669**示例:**
2670
2671```ts
2672avPlayer.off('audioInterrupt');
2673```
2674
2675### on('audioOutputDeviceChangeWithInfo')<sup>11+</sup>
2676
2677on(type: 'audioOutputDeviceChangeWithInfo', callback: Callback\<audio.AudioStreamDeviceChangeInfo>): void
2678
2679订阅监听音频流输出设备变化及原因,使用callback方式返回结果。
2680
2681在订阅此监听时,建议参考[响应音频流输出设备变更](../../media/audio/audio-output-device-change.md)自行实现设备连接或者断开时的播放器行为。
2682
2683**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2684
2685**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2686
2687**参数:**
2688
2689| 参数名   | 类型                       | 必填 | 说明                                        |
2690| :------- | :------------------------- | :--- | :------------------------------------------ |
2691| type     | string                     | 是   | 事件回调类型,支持的事件为:'audioOutputDeviceChangeWithInfo'。 |
2692| callback | Callback\<[audio.AudioStreamDeviceChangeInfo](../apis-audio-kit/js-apis-audio.md#audiostreamdevicechangeinfo11)> | 是   | 回调函数,返回当前音频流的输出设备描述信息及变化原因。 |
2693
2694**错误码:**
2695
2696| 错误码ID | 错误信息                                   |
2697| -------- | ------------------------------------------ |
2698| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.       |
2699
2700**示例:**
2701
2702```ts
2703import { audio } from '@kit.AudioKit';
2704
2705avPlayer.on('audioOutputDeviceChangeWithInfo', (data: audio.AudioStreamDeviceChangeInfo) => {
2706  console.info(`${JSON.stringify(data)}`);
2707});
2708```
2709
2710### off('audioOutputDeviceChangeWithInfo')<sup>11+</sup>
2711
2712off(type: 'audioOutputDeviceChangeWithInfo', callback?: Callback\<audio.AudioStreamDeviceChangeInfo>): void
2713
2714取消订阅监听音频流输出设备变化及原因,使用callback方式返回结果。
2715
2716**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2717
2718**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2719
2720**参数:**
2721
2722| 参数名   | 类型                       | 必填 | 说明                                        |
2723| :------- | :------------------------- | :--- | :------------------------------------------ |
2724| type     | string                     | 是   | 事件回调类型,支持的事件为:'audioOutputDeviceChangeWithInfo'。 |
2725| callback | Callback\<[audio.AudioStreamDeviceChangeInfo](../apis-audio-kit/js-apis-audio.md#audiostreamdevicechangeinfo11)> | 否   | 回调函数,返回当前音频流的输出设备描述信息及变化原因。 |
2726
2727**错误码:**
2728
2729| 错误码ID | 错误信息                                   |
2730| -------- | ------------------------------------------ |
2731| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.      |
2732
2733**示例:**
2734
2735```ts
2736avPlayer.off('audioOutputDeviceChangeWithInfo');
2737```
2738
2739### addSubtitleFromFd<sup>12+</sup>
2740
2741addSubtitleFromFd(fd: number, offset?: number, length?: number): Promise\<void>
2742
2743依据fd为视频添加外挂字幕,当前仅支持与视频资源同时设置(在avplayer设置fdSrc视频资源后设置外挂字幕)。使用Promise方式返回结果。
2744
2745**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2746
2747**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2748
2749**参数:**
2750
2751| 参数名 | 类型                   | 必填 | 说明                                                         |
2752| ------ | ---------------------- | ---- | ------------------------------------------------------------ |
2753| fd | number   | 是   | 资源句柄,通过[resourceManager.getRawFd](../apis-localization-kit/js-apis-resource-manager.md#getrawfd9)获取。 |
2754| offset | number | 否   | 资源偏移量,需要基于预置资源的信息输入,非法值会造成字幕频资源解析错误,默认值:0。 |
2755| length | number | 否   | 资源长度,默认值为文件中从偏移量开始的剩余字节,需要基于预置资源的信息输入,非法值会造成字幕频资源解析错误,默认值:0。 |
2756
2757**返回值:**
2758
2759| 类型           | 说明                                       |
2760| -------------- | ------------------------------------------ |
2761| Promise\<void> | 添加外挂字幕addSubtitleFromFd方法的Promise返回值。 |
2762
2763**错误码:**
2764
2765| 错误码ID | 错误信息                                   |
2766| -------- | ------------------------------------------ |
2767| 401      | The parameter check failed. Return by promise. |
2768| 5400102  | Operation not allowed. Return by promise. |
2769
2770**示例:**
2771
2772<!--code_no_check-->
2773```ts
2774import { common } from '@kit.AbilityKit'
2775
2776private context: Context | undefined;
2777constructor(context: Context) {
2778  this.context = context; // this.getUIContext().getHostContext();
2779}
2780let fileDescriptor = await this.context.resourceManager.getRawFd('xxx.srt');
2781
2782avPlayer.addSubtitleFromFd(fileDescriptor.fd, fileDescriptor.offset, fileDescriptor.length);
2783```
2784
2785### addSubtitleFromUrl<sup>12+</sup>
2786
2787addSubtitleFromUrl(url: string): Promise\<void>
2788
2789依据url为视频添加外挂字幕,当前仅支持与视频资源同时设置(在avplayer设置fdSrc视频资源后设置外挂字幕)。使用Promise方式返回结果。
2790
2791**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2792
2793**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2794
2795**参数:**
2796
2797| 参数名 | 类型   | 必填 | 说明                                                         |
2798| ------ | ------ | ---- | ------------------------------------------------------------ |
2799| url    | string | 是   | 外挂字幕文件地址。 |
2800
2801**返回值:**
2802
2803| 类型           | 说明                                       |
2804| -------------- | ------------------------------------------ |
2805| Promise\<void> | 添加外挂字幕addSubtitleFromUrl方法的Promise返回值。 |
2806
2807**错误码:**
2808
2809| 错误码ID | 错误信息                                   |
2810| -------- | ------------------------------------------ |
2811| 401      | The parameter check failed. Return by promise. |
2812| 5400102  | Operation not allowed. Return by promise. |
2813
2814**示例:**
2815
2816<!--code_no_check-->
2817```ts
2818let fdUrl:string = 'http://xxx.xxx.xxx/xx/index.srt';
2819
2820let avPlayer: media.AVPlayer = await media.createAVPlayer();
2821avPlayer.addSubtitleFromUrl(fdUrl);
2822```
2823
2824### on('subtitleUpdate')<sup>12+</sup>
2825
2826on(type: 'subtitleUpdate', callback: Callback\<SubtitleInfo>): void
2827
2828订阅获取外挂字幕的事件,当有外挂字幕时,会通过订阅的回调方法通知用户。用户只能订阅一个外挂字幕事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
2829
2830**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2831
2832**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2833
2834**参数:**
2835
2836| 参数名   | 类型     | 必填 | 说明                                                         |
2837| -------- | -------- | ---- | ------------------------------------------------------------ |
2838| type | string | 是   | 事件回调类型,支持的事件为:'subtitleUpdate'。 |
2839| callback | function | 是   | 外挂字幕事件回调方法。 |
2840
2841**示例:**
2842
2843```ts
2844avPlayer.on('subtitleUpdate', async (info: media.SubtitleInfo) => {
2845  if (info) {
2846    let text = (!info.text) ? '' : info.text
2847    let startTime = (!info.startTime) ? 0 : info.startTime
2848    let duration = (!info.duration) ? 0 : info.duration
2849    console.info('subtitleUpdate info: text=' + text + ' startTime=' + startTime +' duration=' + duration);
2850  } else {
2851    console.info('subtitleUpdate info is null');
2852  }
2853});
2854```
2855
2856### off('subtitleUpdate')<sup>12+</sup>
2857
2858off(type: 'subtitleUpdate', callback?: Callback\<SubtitleInfo>): void
2859
2860取消订阅获取外挂字幕的事件。
2861
2862**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2863
2864**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2865
2866**参数:**
2867
2868| 参数名   | 类型     | 必填 | 说明                                                         |
2869| -------- | -------- | ---- | ------------------------------------------------------------ |
2870| type | string | 是   | 事件回调类型,支持的事件为:'subtitleUpdate'。 |
2871| callback | function | 否   | 取消外挂字幕事件的回调方法。 |
2872
2873**示例:**
2874
2875```ts
2876avPlayer.off('subtitleUpdate');
2877```
2878
2879### on('trackChange')<sup>12+</sup>
2880
2881on(type: 'trackChange', callback: OnTrackChangeHandler): void
2882
2883订阅获取轨道变更的事件,当播放的轨道变更时,会通过订阅的回调方法通知用户。用户只能订阅一个轨道变更事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
2884
2885**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2886
2887**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2888
2889**参数:**
2890
2891| 参数名   | 类型     | 必填 | 说明                                                         |
2892| -------- | -------- | ---- | ------------------------------------------------------------ |
2893| type | string | 是   | 事件回调类型,支持的事件为:'trackChange'。 |
2894| callback | [OnTrackChangeHandler](#ontrackchangehandler12) | 是   | 轨道变更事件回调方法。 |
2895
2896**示例:**
2897
2898```ts
2899avPlayer.on('trackChange', (index: number, isSelect: boolean) => {
2900  console.info('trackChange info: index=' + index + ' isSelect=' + isSelect);
2901});
2902```
2903
2904### off('trackChange')<sup>12+</sup>
2905
2906off(type: 'trackChange', callback?: OnTrackChangeHandler): void
2907
2908取消订阅获取轨道变更的事件。
2909
2910**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2911
2912**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2913
2914**参数:**
2915
2916| 参数名   | 类型     | 必填 | 说明                                                         |
2917| -------- | -------- | ---- | ------------------------------------------------------------ |
2918| type | string | 是   | 事件回调类型,支持的事件为:'trackChange'。 |
2919| callback | [OnTrackChangeHandler](#ontrackchangehandler12) | 否   | 取消轨道变更事件的回调方法。 |
2920
2921**示例:**
2922
2923```ts
2924avPlayer.off('trackChange');
2925```
2926
2927### on('trackInfoUpdate')<sup>12+</sup>
2928
2929on(type: 'trackInfoUpdate', callback: Callback\<Array\<MediaDescription>>): void
2930
2931订阅获取轨道信息更新的事件,当播放的轨道有更新时,会通过订阅的回调方法通知用户。用户只能订阅一个轨道变更事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
2932
2933**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2934
2935**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2936
2937**参数:**
2938
2939| 参数名   | 类型     | 必填 | 说明                                                         |
2940| -------- | -------- | ---- | ------------------------------------------------------------ |
2941| type | string | 是   | 事件回调类型,支持的事件为:'trackInfoUpdate'。 |
2942| callback | Callback\<Array\<[MediaDescription](#mediadescription8)>> | 是   | 轨道信息更新事件回调方法。 |
2943
2944**示例:**
2945
2946```ts
2947avPlayer.on('trackInfoUpdate', (info: Array<media.MediaDescription>) => {
2948  if (info) {
2949    for (let i = 0; i < info.length; i++) {
2950      let propertyIndex: Object = info[i][media.MediaDescriptionKey.MD_KEY_TRACK_INDEX];
2951      let propertyType: Object = info[i][media.MediaDescriptionKey.MD_KEY_TRACK_TYPE];
2952      console.info('track info: index=' + propertyIndex + ' tracktype=' + propertyType);
2953    }
2954  } else {
2955    console.info('track info is null');
2956  }
2957});
2958```
2959
2960### off('trackInfoUpdate')<sup>12+</sup>
2961
2962off(type: 'trackInfoUpdate', callback?: Callback\<Array\<MediaDescription>>): void
2963
2964取消订阅获取轨道变更的事件。
2965
2966**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2967
2968**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2969
2970**参数:**
2971
2972| 参数名   | 类型     | 必填 | 说明                                                         |
2973| -------- | -------- | ---- | ------------------------------------------------------------ |
2974| type | string | 是   | 事件回调类型,支持的事件为:'trackInfoUpdate'。 |
2975| callback | Callback\<Array\<[MediaDescription](#mediadescription8)>> | 否   | 取消轨道信息更新事件的回调方法。 |
2976
2977**示例:**
2978
2979```ts
2980avPlayer.off('trackInfoUpdate');
2981```
2982
2983### on('amplitudeUpdate')<sup>13+</sup>
2984
2985on(type: 'amplitudeUpdate', callback: Callback\<Array\<number>>): void
2986
2987订阅音频最大电平值,音频资源播放时定时上报。
2988
2989**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2990
2991**参数:**
2992
2993| 参数名   | 类型     | 必填 | 说明                                                         |
2994| -------- | -------- | ---- | ------------------------------------------------------------ |
2995| type     | string   | 是   | 事件回调类型,支持的事件为:'amplitudeUpdate'。 |
2996| callback | Callback\<Array\<number>> | 是   | 音频最大电平值更新事件回调方法。 |
2997
2998**示例:**
2999
3000```ts
3001avPlayer.on('amplitudeUpdate', (value: Array<number>) => {
3002  console.info('amplitudeUpdate called,and amplitudeUpdate = ${value}');
3003});
3004```
3005
3006### off('amplitudeUpdate')<sup>13+</sup>
3007
3008off(type: 'amplitudeUpdate', callback?: Callback\<Array\<number>>): void
3009
3010取消订阅获取音频最大电平值事件。
3011
3012**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
3013
3014**参数:**
3015
3016| 参数名 | 类型   | 必填 | 说明                                                         |
3017| ------ | ------ | ---- | ------------------------------------------------------------ |
3018| type   | string | 是   | 事件回调类型,支持的事件为:'amplitudeUpdate'。 |
3019| callback | Callback\<Array\<number>> | 否   | 取消音频最大电平值更新事件回调方法。 |
3020
3021**示例:**
3022
3023```ts
3024avPlayer.off('amplitudeUpdate');
3025```
3026
3027### on('seiMessageReceived')<sup>18+</sup>
3028
3029on(type: 'seiMessageReceived', payloadTypes: Array\<number>, callback: OnSeiMessageHandle): void
3030
3031订阅获取SEI信息事件,仅适用于HTTP-FLV直播,视频流中包含SEI信息时上报。需在prepare之前订阅,当用户重复订阅时,以最后一次订阅的回调接口为准。
3032
3033**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
3034
3035**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
3036
3037**参数:**
3038
3039| 参数名   | 类型     | 必填 | 说明                                                         |
3040| -------- | -------- | ---- | ------------------------------------------------------------ |
3041| type     | string | 是 | 事件回调类型,支持的事件为:'seiMessageReceived'。 |
3042| payloadTypes | Array\<number> | 是 | SEI信息的订阅负载类型数组。当前仅支持负载类型为5,即payloadType = 5。|
3043| callback | [OnSeiMessageHandle](#onseimessagehandle18) | 是 | 用于监听SEI信息事件的回调函数,接收订阅的负载类型。 |
3044
3045**示例:**
3046
3047```ts
3048import util from '@ohos.util';
3049
3050avPlayer.on('seiMessageReceived', [5], (messages: Array<media.SeiMessage>, playbackPosition?: number) =>
3051{
3052  console.info('seiMessageReceived playbackPosition ' + playbackPosition);
3053
3054  for (let key = 0; key < messages.length; key++) {
3055    console.info('seiMessageReceived messages payloadType ' + messages[key].payloadType + ' payload size ' + messages[key].payload.byteLength);
3056
3057    let textDecoder = util.TextDecoder.create("utf-8",{ignoreBOM: true});
3058    let ab = messages[key]?.payload?.slice(16, messages[key].payload.byteLength);
3059    let result: Uint8Array = new Uint8Array(ab);
3060    let retStr: string = textDecoder.decodeToString(result);
3061    console.info('seiMessageReceived messages payload ' + retStr);
3062  }
3063});
3064```
3065
3066### off('seiMessageReceived')<sup>18+</sup>
3067
3068off(type: 'seiMessageReceived', payloadTypes?: Array\<number>, callback?: OnSeiMessageHandle): void
3069
3070取消订阅获取SEI信息事件。
3071
3072**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
3073
3074**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
3075
3076**参数:**
3077
3078| 参数名 | 类型   | 必填 | 说明                                                         |
3079| ------ | ------ | ---- | ------------------------------------------------------------ |
3080| type     | string   | 是   | 事件回调类型,支持的事件为:'seiMessageReceived'。 |
3081| payloadTypes | Array\<number> | 否   | SEI信息的订阅负载类型。 |
3082| callback | [OnSeiMessageHandle](#onseimessagehandle18) | 否   | 用于监听SEI信息事件的回调函数,接收订阅的负载类型。 |
3083
3084**示例:**
3085
3086```ts
3087avPlayer.off('seiMessageReceived');
3088```
3089
3090### setSuperResolution<sup>18+</sup>
3091
3092setSuperResolution(enabled: boolean) : Promise\<void>
3093
3094动态开启/关闭超分算法,可以在 'initialized' | 'prepared' | 'playing' | 'paused' | 'completed' | 'stopped' 状态调用。使用Promise方式返回结果。
3095
3096在调用[prepare()](#prepare9)前先通过[PlaybackStrategy](#playbackstrategy12)使能超分。
3097
3098**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
3099
3100**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
3101
3102**参数:**
3103
3104| 参数名 | 类型   | 必填 | 说明                                                         |
3105| ------ | ------ | ---- | ------------------------------------------------------------ |
3106| enabled    | boolean | 是   | 表示是否开启超分。true表示开启超分,false表示关闭超分。 |
3107
3108**返回值:**
3109
3110| 类型           | 说明                                       |
3111| -------------- | ------------------------------------------ |
3112| Promise\<void> | 开启/关闭超分setSuperResolution方法的Promise返回值。 |
3113
3114**错误码:**
3115
3116以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3117
3118| 错误码ID | 错误信息                                   |
3119| -------- | ------------------------------------------ |
3120| 5400102  | Operation not allowed. Return by promise. |
3121| 5410003  | Super-resolution not supported. Return by promise. |
3122| 5410004  | Missing enable super-resolution feature in [PlaybackStrategy](#playbackstrategy12). Return by promise. |
3123
3124**示例:**
3125
3126```ts
3127avPlayer.setSuperResolution(true);
3128```
3129
3130### setVideoWindowSize<sup>18+</sup>
3131
3132setVideoWindowSize(width: number, height: number) : Promise\<void>
3133
3134动态设置超分算法的输出分辨率,可以在 'initialized' | 'prepared' | 'playing' | 'paused' | 'completed' | 'stopped' 状态调用。使用Promise方式返回结果。输入参数须在 320x320 ~ 1920x1080 范围内,单位为像素。
3135
3136在调用[prepare()](#prepare9)前先通过[PlaybackStrategy](#playbackstrategy12)使能超分。
3137
3138**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
3139
3140**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
3141
3142**参数:**
3143
3144| 参数名 | 类型   | 必填 | 说明                                                         |
3145| ------ | ------ | ---- | ------------------------------------------------------------ |
3146| width    | number | 是   | 超分算法的目标输出视频宽度,取值范围为[320-1920],单位为像素。 |
3147| height    | number | 是   | 超分算法的目标输出视频高度,取值范围为[320-1080],单位为像素。 |
3148
3149**返回值:**
3150
3151| 类型           | 说明                                       |
3152| -------------- | ------------------------------------------ |
3153| Promise\<void> | 配置超分目标输出分辨率setVideoWindowSize方法的Promise返回值。 |
3154
3155**错误码:**
3156
3157以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[媒体错误码](errorcode-media.md)。
3158
3159| 错误码ID | 错误信息                                   |
3160| -------- | ------------------------------------------ |
3161| 401      | Parameter error. Return by promise. |
3162| 5400102  | Operation not allowed. Return by promise. |
3163| 5410003  | Super-resolution not supported. Return by promise. |
3164| 5410004  | Missing enable super-resolution feature in [PlaybackStrategy](#playbackstrategy12). Return by promise. |
3165
3166**示例:**
3167
3168```ts
3169avPlayer.setVideoWindowSize(1920, 1080);
3170```
3171
3172### on('superResolutionChanged')<sup>18+</sup>
3173
3174on(type:'superResolutionChanged', callback: OnSuperResolutionChanged): void
3175
3176订阅监听超分算法开启/关闭事件。
3177
3178**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
3179
3180**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
3181
3182**参数:**
3183
3184| 参数名   | 类型     | 必填 | 说明                                                         |
3185| -------- | -------- | ---- | ------------------------------------------------------------ |
3186| type     | string | 是 | 事件回调类型,支持的事件为:'superResolutionChanged',当超分算法开启/关闭状态变化时,触发该事件。 |
3187| callback | [OnSuperResolutionChanged](#onsuperresolutionchanged-18) | 是 | 超分开关事件回调方法。 |
3188
3189**示例:**
3190
3191```ts
3192avPlayer.on('superResolutionChanged', (enabled: boolean) => {
3193  console.info('superResolutionChanged called, and enabled is:' + enabled);
3194});
3195```
3196
3197### off('superResolutionChanged')<sup>18+</sup>
3198
3199off(type:'superResolutionChanged', callback?: OnSuperResolutionChanged): void
3200
3201取消监听超分算法开启/关闭事件。
3202
3203**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
3204
3205**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
3206
3207**参数:**
3208
3209| 参数名   | 类型     | 必填 | 说明                                                         |
3210| -------- | -------- | ---- | ------------------------------------------------------------ |
3211| type     | string | 是 | 事件回调类型,支持的事件为:'superResolutionChanged',当超分算法开启/关闭状态变化时,触发该事件。 |
3212| callback | [OnSuperResolutionChanged](#onsuperresolutionchanged-18) | 否 | 超分开关事件回调方法。 |
3213
3214**示例:**
3215
3216```ts
3217avPlayer.off('superResolutionChanged');
3218```
3219
3220## AVPlayerState<sup>9+</sup>
3221
3222type AVPlayerState = 'idle' | 'initialized' | 'prepared' | 'playing' | 'paused' | 'completed' | 'stopped' | 'released' | 'error'
3223
3224[AVPlayer](#avplayer9)的状态机,可通过state属性主动获取当前状态,也可通过监听[stateChange](#onstatechange9)事件上报当前状态,状态机之间的切换规则,可参考[音频播放开发指导](../../media/media/using-avplayer-for-playback.md)。
3225
3226**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
3227
3228**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
3229
3230|              类型               | 说明                                                         |
3231| :-----------------------------: | :----------------------------------------------------------- |
3232|              '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属性会被重置,其他用户设置的属性将被保留。 |
3233|           'initialized'           | 资源初始化,在idle 状态设置 url<sup>9+</sup> 或 fdSrc<sup>9+</sup>属性,AVPlayer会进入initialized状态,此时可以配置窗口、音频等静态属性。 |
3234|            'prepared'             | 已准备状态,在initialized状态调用[prepare()](#prepare9)方法,AVPlayer会进入prepared状态,此时播放引擎的资源已准备就绪。 |
3235|             'playing'             | 正在播放状态,在prepared/paused/completed状态调用[play()](#play9)方法,AVPlayer会进入playing状态。 |
3236|             'paused'              | 暂停状态,在playing状态调用pause方法,AVPlayer会进入paused状态。 |
3237|            'completed'            | 播放至结尾状态,当媒体资源播放至结尾时,如果用户未设置循环播放(loop = true),AVPlayer会进入completed状态,此时调用[play()](#play9)会进入playing状态和重播,调用[stop()](#stop9)会进入stopped状态。 |
3238|             'stopped'             | 停止状态,在prepared/playing/paused/completed状态调用[stop()](#stop9)方法,AVPlayer会进入stopped状态,此时播放引擎只会保留属性,但会释放内存资源,可以调用[prepare()](#prepare9)重新准备,也可以调用[reset()](#reset9)重置,或者调用[release()](#release9)彻底销毁。 |
3239|            'released'             | 销毁状态,销毁与当前AVPlayer关联的播放引擎,无法再进行状态转换,调用[release()](#release9)方法后,会进入released状态,结束流程。 |
3240| '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:播放过程发现码流问题,导致容器、解码短暂异常,不影响连续播放和播控操作的,不需要客户端设计容错机制。 |
3241
3242## OnTrackChangeHandler<sup>12+</sup>
3243
3244type OnTrackChangeHandler = (index: number, isSelected: boolean) => void
3245
3246track变更事件回调方法。
3247
3248**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3249
3250**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
3251
3252| 参数名   | 类型   | 必填 | 说明                                                         |
3253| ------ | ------ | ------ | ---------------------------------------------------------- |
3254| index  | number | 是 | 当前变更的track索引。     |
3255| isSelected | boolean | 是 | 当前变更的track索引是否被选中。true表示处于选中状态,false表示处于非选中状态。 |
3256
3257## OnAVPlayerStateChangeHandle<sup>12+</sup>
3258
3259type OnAVPlayerStateChangeHandle = (state: AVPlayerState, reason: StateChangeReason) => void
3260
3261状态机切换事件回调方法。
3262
3263**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3264
3265**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
3266
3267| 参数名   | 类型   | 必填 | 说明                                                         |
3268| ------ | ------ | ------ | ---------------------------------------------------------- |
3269| state  | [AVPlayerState](#avplayerstate9) | 是 | 当前播放状态。     |
3270| reason | [StateChangeReason](#statechangereason9) | 是 | 当前播放状态的切换原因。 |
3271
3272## OnBufferingUpdateHandler<sup>12+</sup>
3273
3274type OnBufferingUpdateHandler = (infoType: BufferingInfoType, value: number) => void
3275
3276播放缓存事件回调方法。
3277
3278**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3279
3280**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
3281
3282| 参数名   | 类型   | 必填 | 说明                                                         |
3283| ------ | ------ | ------ | ------------------------------------------------------------ |
3284| infoType  | [BufferingInfoType](#bufferinginfotype8) | 是 | 缓存时间类型。     |
3285| value | number | 是 | value值固定为0。 |
3286
3287## OnVideoSizeChangeHandler<sup>12+</sup>
3288
3289type OnVideoSizeChangeHandler = (width: number, height: number) => void
3290
3291视频播放宽高变化事件回调方法。
3292
3293**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3294
3295**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
3296
3297| 参数名   | 类型   | 必填 | 说明                                                         |
3298| ------ | ------ | ------ | ------------------------------------------------------------ |
3299| width  | number | 是 | 视频宽度,单位为像素(px)。|
3300| height | number | 是 | 视频高度,单位为像素(px)。|
3301
3302## OnSeiMessageHandle<sup>18+</sup>
3303
3304type OnSeiMessageHandle = (messages: Array\<SeiMessage>, playbackPosition?: number) => void
3305
3306获取SEI信息,使用场景:订阅SEI信息事件,回调返回SEI详细信息。
3307
3308**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
3309
3310**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
3311
3312**参数:**
3313
3314| 参数名   |   类型   | 必填 | 说明                                                         |
3315| ------ | ------ | ---- | ------------------------------------------------------------ |
3316| messages | Array\<[SeiMessage](#seimessage18)> | 是  | SEI信息。 |
3317| playbackPosition | number | 否  | 获取当前播放位置(单位:毫秒)。 |
3318
3319## OnSuperResolutionChanged <sup>18+</sup>
3320
3321type OnSuperResolutionChanged = (enabled: boolean) => void
3322
3323视频超分开关事件回调方法。若通过[PlaybackStrategy](#playbackstrategy12)正确使能超分,超分算法状态变化时会通过此回调上报,视频起播时也会上报超分初始开启/关闭状态。若未使能超分,不会触发该回调。
3324
3325出现以下两种情况,超分算法会自动关闭。
3326* 目前超分算法最高仅支持30帧及以下的视频。若视频帧率超过30帧,或者在倍速播放等场景下导致输入帧率超出超分算法处理能力,超分会自动关闭。
3327* 目前超分算法支持输入分辨率范围为320x320 ~ 1920x1080,单位为像素。若播放过程中输入视频分辨率超出此范围,超分算法会自动关闭。
3328
3329**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
3330
3331**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
3332
3333| 参数名   | 类型   | 必填 | 说明                                                         |
3334| ------ | ------ | ------ | ------------------------------------------------------------ |
3335| enabled  | boolean | 是 | 表示当前超分是否开启。true表示超分开启,false表示超分关闭。     |
3336
3337## OnPlaybackRateDone<sup>20+</sup>
3338
3339type OnPlaybackRateDone = (rate: number) => void
3340
3341播放速率设置完成事件回调方法。
3342
3343**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
3344
3345**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
3346
3347| 参数名   | 类型   | 必填 | 说明                                                         |
3348| ------ | ------ | ------ | ------------------------------------------------------------ |
3349| rate | number | 是 | 播放速率。 |
3350
3351## AVFileDescriptor<sup>9+</sup>
3352
3353音视频文件资源描述,一种特殊资源的播放方式,使用场景:应用中的音频资源被连续存储在同一个文件中,需要根据偏移量和长度进行播放。
3354
3355**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
3356
3357**系统能力:** SystemCapability.Multimedia.Media.Core
3358
3359| 名称   | 类型   | 必填 | 说明                                                         |
3360| ------ | ------ | ---- | ------------------------------------------------------------ |
3361| 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)获取。    |
3362| offset | number | 否   | 资源偏移量,默认值为0,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 |
3363| length | number | 否   | 资源长度,默认值为文件中从偏移量开始的剩余字节,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 |
3364
3365## AVDataSrcDescriptor<sup>10+</sup>
3366
3367音视频文件资源描述,用于DataSource播放方式,使用场景:应用在未获取完整音视频资源时,允许用户创建播放实例并开始播放,达到提前播放的目的。
3368
3369**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
3370
3371**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
3372
3373| 名称   | 类型   | 必填 | 说明                                                         |
3374| ------ | ------ | ---- | ------------------------------------------------------------ |
3375| fileSize     | number | 是   | 待播放文件大小(字节),-1代表大小未知。如果fileSize设置为-1, 播放模式类似于直播,不能进行seek及setSpeed操作,不能设置loop属性,因此不能重新播放。 |
3376| 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类型,返回填充数据的长度,返回-1表示到达流的末尾,返回-2表示遇到不可恢复的错误。|
3377
3378## SubtitleInfo<sup>12+</sup>
3379
3380外挂字幕信息,使用场景:订阅外挂字幕事件,回调返回外挂字幕详细信息。
3381
3382**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3383
3384**系统能力:** SystemCapability.Multimedia.Media.Core
3385
3386| 名称   | 类型   | 必填 | 说明                                                         |
3387| ------ | ------ | ---- | ------------------------------------------------------------ |
3388| text | string | 否  | 字幕文本信息。 |
3389| startTime | number | 否  | 显示当前字幕文本的开始时间(单位:毫秒)。 |
3390| duration | number | 否 | 显示当前字幕文本的持续时间(单位:毫秒)。 |
3391
3392## SeiMessage<sup>18+</sup>
3393
3394SEI信息内容,描述SEI信息的负载类型和数据。
3395
3396**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
3397
3398**系统能力:** SystemCapability.Multimedia.Media.Core
3399
3400| 名称   | 类型   | 只读 | 可选  | 说明                                                         |
3401| ------ | ------ | ---- | ---- | ------------------------------------------------------------ |
3402| payloadType | number | 否  | 否  | SEI信息的负载类型。 |
3403| payload | ArrayBuffer | 否  | 否  | SEI信息的负载数据。 |
3404
3405## SeekMode<sup>8+</sup>
3406
3407视频播放的Seek模式枚举,可通过seek方法作为参数传递下去。
3408
3409**系统能力:** SystemCapability.Multimedia.Media.Core
3410
3411| 名称           | 值   | 说明                                                         |
3412| -------------- | ---- | ------------------------------------------------------------ |
3413| SEEK_NEXT_SYNC | 0    | 表示跳转到指定时间点的下一个关键帧,建议向后快进的时候用这个枚举值。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
3414| SEEK_PREV_SYNC | 1    | 表示跳转到指定时间点的上一个关键帧,建议向前快进的时候用这个枚举值。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
3415| SEEK_CLOSEST<sup>12+</sup> | 2    | 表示跳转到距离指定时间点最近的帧,建议精准跳转进度的时候用这个枚举值。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
3416| SEEK_CONTINUOUS<sup>18+</sup> | 3    | 该模式提供了一种画面平滑流畅变化的Seek体验,应用可以结合进度条控件持续调用Seek方法,AVPlayer根据Seek调用持续流畅地更新画面。<br>应用可以调用[isSeekContinuousSupported](#isseekcontinuoussupported18)方法根据返回结果感知视频源是否支持该模式Seek。<br>对于不支持该Seek模式的视频源调用该模式Seek时,会上报AVERR_SEEK_CONTINUOUS_UNSUPPORTED错误([媒体错误码](#averrorcode9)),同时画面更新的流畅性会降低。<br>该Seek模式不会触发[seekDone事件](#onseekdone9)。<br>当应用需要退出该模式下的Seek时,需要调用`seek(-1, SeekMode.SEEK_CONTINUOUS)`来结束该模式下的Seek。<br>**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 |
3417
3418## SwitchMode<sup>12+</sup>
3419
3420视频播放的selectTrack模式枚举,可通过selectTrack方法作为参数传递下去,当前仅DASH协议视频轨支持该扩展参数。
3421
3422**系统能力:** SystemCapability.Multimedia.Media.Core
3423
3424| 名称           | 值   | 说明                                                         |
3425| -------------- | ---- | ------------------------------------------------------------ |
3426| SMOOTH | 0    | 表示切换后视频平滑播放,该模式切换存在延迟,不会立即生效。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
3427| SEGMENT | 1    | 表示切换后从当前分片开始位置播放,该模式立即切换,会有重复播放。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
3428| CLOSEST | 2    | 表示从距离当前播放时间点最近的帧开始播放,该模式立即切换,切换后会卡住3到5s,然后恢复播放。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
3429
3430## PlaybackSpeed<sup>8+</sup>
3431
3432视频播放的倍速枚举,可通过setSpeed方法作为参数传递下去。
3433
3434**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3435
3436**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
3437
3438| 名称                 | 值   | 说明                           |
3439| -------------------- | ---- | ------------------------------ |
3440| SPEED_FORWARD_0_75_X | 0    | 表示视频播放正常播速的0.75倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
3441| SPEED_FORWARD_1_00_X | 1    | 表示视频播放正常播速。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。         |
3442| SPEED_FORWARD_1_25_X | 2    | 表示视频播放正常播速的1.25倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
3443| SPEED_FORWARD_1_75_X | 3    | 表示视频播放正常播速的1.75倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
3444| SPEED_FORWARD_2_00_X | 4    | 表示视频播放正常播速的2.00倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
3445| SPEED_FORWARD_0_50_X<sup>12+</sup> | 5    | 表示视频播放正常播速的0.50倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
3446| SPEED_FORWARD_1_50_X<sup>12+</sup> | 6    | 表示视频播放正常播速的1.50倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
3447| SPEED_FORWARD_3_00_X<sup>13+</sup> | 7    | 表示视频播放正常播速的3.00倍。<br>**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。 |
3448| SPEED_FORWARD_0_25_X<sup>12+</sup> | 8    | 表示视频播放正常播速的0.25倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
3449| SPEED_FORWARD_0_125_X<sup>12+</sup> | 9    | 表示视频播放正常播速的0.125倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
3450
3451## VideoScaleType<sup>9+</sup>
3452
3453枚举,视频缩放模式。
3454
3455**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
3456
3457**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
3458
3459| 名称                        | 值   | 说明                                              |
3460| ----------------------------| ---- | ------------------------------------------------ |
3461| VIDEO_SCALE_TYPE_FIT        | 0    | 默认比例类型,视频拉伸至与窗口等大。                |
3462| VIDEO_SCALE_TYPE_FIT_CROP   | 1    | 保持视频宽高比缩放至最短边填满窗口,长边超出窗口部分被裁剪。     |
3463| VIDEO_SCALE_TYPE_FIT_ASPECT<sup>20+</sup> | 2    | 保持视频宽高比缩放至长边填满窗口,短边居中对齐,未填满部分留黑。<br>**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。  |
3464
3465## MediaDescription<sup>8+</sup>
3466
3467通过key-value方式获取媒体信息。
3468
3469**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
3470
3471**系统能力:** SystemCapability.Multimedia.Media.Core
3472
3473| 名称          | 类型   | 必填 | 说明                                                         |
3474| ------------- | ------ | ---- | ------------------------------------------------------------ |
3475| [key: string] | Object | 是   | 该键值对支持的key取值范围,请参考[MediaDescriptionKey](#mediadescriptionkey8);每个key值的Object类型和范围,请参考[MediaDescriptionKey](#mediadescriptionkey8)对应Key值的说明 |
3476
3477**示例:**
3478
3479```ts
3480import { BusinessError } from '@kit.BasicServicesKit';
3481
3482function printfItemDescription(obj: media.MediaDescription, key: string) {
3483  let property: Object = obj[key];
3484  console.info('audio key is ' + key); // 通过key值获取对应的value。key值具体可见[MediaDescriptionKey]。
3485  console.info('audio value is ' + property); //对应key值得value。其类型可为任意类型,具体key对应value的类型可参考[MediaDescriptionKey]。
3486}
3487
3488let avPlayer: media.AVPlayer | undefined = undefined;
3489media.createAVPlayer((err: BusinessError, player: media.AVPlayer) => {
3490  if(player != null) {
3491    avPlayer = player;
3492    console.info(`Succeeded in creating AVPlayer`);
3493    avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => {
3494      if (arrList != null) {
3495        for (let i = 0; i < arrList.length; i++) {
3496          printfItemDescription(arrList[i], media.MediaDescriptionKey.MD_KEY_TRACK_TYPE);  //打印出每条轨道MD_KEY_TRACK_TYPE的值。
3497        }
3498      } else {
3499        console.error(`Failed to get TrackDescription, error:${error}`);
3500      }
3501    });
3502  } else {
3503    console.error(`Failed to create AVPlayer, error message:${err.message}`);
3504  }
3505});
3506```
3507
3508## PlaybackInfo<sup>12+</sup>
3509
3510通过key-value方式获取播放信息。
3511
3512**系统能力:** SystemCapability.Multimedia.Media.Core
3513
3514| 名称          | 类型   | 必填 | 说明                                                         |
3515| ------------- | ------ | ---- | ------------------------------------------------------------ |
3516| [key: string] | Object | 是   | 该键值对支持的key取值范围,请参考[PlaybackInfoKey](#playbackinfokey12);每个key值的Object类型和范围,请参考[PlaybackInfoKey](#playbackinfokey12)对应Key值的说明。 |
3517
3518**示例:**
3519
3520```ts
3521import { BusinessError } from '@kit.BasicServicesKit';
3522
3523function printfPlaybackInfo(obj: media.PlaybackInfo, key: string) {
3524  let property: Object = obj[key];
3525  console.info('key is ' + key); // 通过key值获取对应的value。key值具体可见[PlaybackInfoKey]。
3526  console.info('value is ' + property); //对应key值得value。其类型可为任意类型,具体key对应value的类型可参考[PlaybackInfoKey]。
3527}
3528
3529let avPlayer: media.AVPlayer | undefined = undefined;
3530let playbackInfo: media.PlaybackInfo | undefined = undefined;
3531media.createAVPlayer(async (err: BusinessError, player: media.AVPlayer) => {
3532  if (player != null) {
3533    avPlayer = player;
3534    console.info(`Succeeded in creating AVPlayer`);
3535    if (avPlayer) {
3536      try {
3537        playbackInfo = await avPlayer.getPlaybackInfo();
3538        console.info(`AVPlayer getPlaybackInfo = ${JSON.stringify(playbackInfo)}`); // 打印整个PlaybackInfo的值。
3539        printfPlaybackInfo(playbackInfo, media.PlaybackInfoKey.SERVER_IP_ADDRESS); // 打印ip的值。
3540      } catch (error) {
3541        console.error(`error = ${error}`);
3542      }
3543    }
3544  } else {
3545    console.error(`Failed to create AVPlayer, error message:${err.message}`);
3546  }
3547});
3548```
3549
3550## AVRecorder<sup>9+</sup>
3551
3552音视频录制管理类,用于音视频媒体录制。在调用AVRecorder的方法前,需要先通过[createAVRecorder()](#mediacreateavrecorder9)构建一个AVRecorder实例。
3553
3554音视频录制demo可参考:[音频录制开发指导](../../media/media/using-avrecorder-for-recording.md)、[视频录制开发指导](../../media/media/video-recording.md)。
3555
3556> **说明:**
3557>
3558> 使用相机进行视频录制时,需要与相机模块配合,相机模块接口的使用详情见[相机管理](../apis-camera-kit/arkts-apis-camera.md)。
3559
3560### 属性
3561
3562**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3563
3564| 名称    | 类型                                 | 只读 | 可选 | 说明               |
3565| ------- | ------------------------------------ | ---- | ---- | ------------------ |
3566| state9+ | [AVRecorderState](#avrecorderstate9) | 是   | 否   | 音视频录制的状态。<br>**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
3567
3568### prepare<sup>9+</sup>
3569
3570prepare(config: AVRecorderConfig, callback: AsyncCallback\<void>): void
3571
3572异步方式进行音视频录制的参数设置。通过注册回调函数获取返回值。
3573
3574**需要权限:** ohos.permission.MICROPHONE
3575
3576不涉及音频录制时,可以不需要获取ohos.permission.MICROPHONE权限。
3577
3578使用相机视频录制还需要与相机模块配合,相机模块接口的使用详情见[相机管理](../apis-camera-kit/arkts-apis-camera.md)。
3579
3580**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3581
3582**参数:**
3583
3584| 参数名   | 类型                                   | 必填 | 说明                                  |
3585| -------- | -------------------------------------- | ---- | ------------------------------------- |
3586| config   | [AVRecorderConfig](#avrecorderconfig9) | 是   | 配置音视频录制的相关参数。            |
3587| callback | AsyncCallback\<void>                   | 是   | 回调函数。当prepare方法成功,err为undefined,否则为错误对象。 |
3588
3589**错误码:**
3590
3591以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3592
3593| 错误码ID | 错误信息                                |
3594| -------- | --------------------------------------- |
3595| 201      | Permission denied. Return by callback.  |
3596| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.    |
3597| 5400102  | Operate not permit. Return by callback. |
3598| 5400105  | Service died. Return by callback.       |
3599
3600**示例:**
3601
3602```ts
3603import { BusinessError } from '@kit.BasicServicesKit';
3604
3605// 配置参数以实际硬件设备支持的范围为准。
3606let avRecorderProfile: media.AVRecorderProfile = {
3607  audioBitrate : 48000,
3608  audioChannels : 2,
3609  audioCodec : media.CodecMimeType.AUDIO_AAC,
3610  audioSampleRate : 48000,
3611  fileFormat : media.ContainerFormatType.CFT_MPEG_4,
3612  videoBitrate : 2000000,
3613  videoCodec : media.CodecMimeType.VIDEO_AVC,
3614  videoFrameWidth : 640,
3615  videoFrameHeight : 480,
3616  videoFrameRate : 30
3617};
3618let avRecorderConfig: media.AVRecorderConfig = {
3619  audioSourceType : media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC,
3620  videoSourceType : media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV,
3621  profile : avRecorderProfile,
3622  url : 'fd://', // 文件需先由调用者创建,赋予读写权限,将文件fd传给此参数,eg.fd://45
3623  rotation : 0, // 合理值0、90、180、270,非合理值prepare接口将报错。
3624  location : { latitude : 30, longitude : 130 }
3625};
3626
3627avRecorder.prepare(avRecorderConfig, (err: BusinessError) => {
3628  if (err) {
3629    console.error('Failed to prepare and error is ' + err.message);
3630  } else {
3631    console.info('Succeeded in preparing');
3632  }
3633});
3634```
3635
3636### prepare<sup>9+</sup>
3637
3638prepare(config: AVRecorderConfig): Promise\<void>
3639
3640异步方式进行音视频录制的参数设置。通过Promise获取返回值。
3641
3642**需要权限:** ohos.permission.MICROPHONE
3643
3644不涉及音频录制时,可以不需要获ohos.permission.MICROPHONE权限。
3645
3646使用相机视频录制还需要与相机模块配合,相机模块接口的使用详情见[相机管理](../apis-camera-kit/arkts-apis-camera.md)。
3647
3648**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
3649
3650**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3651
3652**参数:**
3653
3654| 参数名 | 类型                                   | 必填 | 说明                       |
3655| ------ | -------------------------------------- | ---- | -------------------------- |
3656| config | [AVRecorderConfig](#avrecorderconfig9) | 是   | 配置音视频录制的相关参数。 |
3657
3658**返回值:**
3659
3660| 类型           | 说明                                       |
3661| -------------- | ------------------------------------------ |
3662| Promise\<void> | 异步音视频录制prepare方法的Promise返回值。 |
3663
3664**错误码:**
3665
3666以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3667
3668| 错误码ID | 错误信息                               |
3669| -------- | -------------------------------------- |
3670| 201      | Permission denied. Return by promise.  |
3671| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.    |
3672| 5400102  | Operate not permit. Return by promise. |
3673| 5400105  | Service died. Return by promise.       |
3674
3675**示例:**
3676
3677```ts
3678import { BusinessError } from '@kit.BasicServicesKit';
3679
3680// 配置参数以实际硬件设备支持的范围为准。
3681let avRecorderProfile: media.AVRecorderProfile = {
3682  audioBitrate : 48000,
3683  audioChannels : 2,
3684  audioCodec : media.CodecMimeType.AUDIO_AAC,
3685  audioSampleRate : 48000,
3686  fileFormat : media.ContainerFormatType.CFT_MPEG_4,
3687  videoBitrate : 2000000,
3688  videoCodec : media.CodecMimeType.VIDEO_AVC,
3689  videoFrameWidth : 640,
3690  videoFrameHeight : 480,
3691  videoFrameRate : 30
3692};
3693let avRecorderConfig: media.AVRecorderConfig = {
3694  audioSourceType : media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC,
3695  videoSourceType : media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV,
3696  profile : avRecorderProfile,
3697  url : 'fd://',  // 文件需先由调用者创建,赋予读写权限,将文件fd传给此参数,eg.fd://45
3698  rotation : 0, // 合理值0、90、180、270,非合理值prepare接口报错。
3699  location : { latitude : 30, longitude : 130 }
3700};
3701
3702avRecorder.prepare(avRecorderConfig).then(() => {
3703  console.info('Succeeded in preparing');
3704}).catch((err: BusinessError) => {
3705  console.error('Failed to prepare and catch error is ' + err.message);
3706});
3707```
3708
3709### getInputSurface<sup>9+</sup>
3710
3711getInputSurface(callback: AsyncCallback\<string>): void
3712
3713异步方式获得录制需要的surface。通过注册回调函数获取返回值。此surface提供给调用者,调用者从此surface中获取surfaceBuffer,填入相应的视频数据。
3714
3715应当注意,填入的视频数据需要携带时间戳(单位ns)和buffersize。时间戳的起始时间请以系统启动时间为基准。
3716
3717需在[prepare()](#prepare9-2)事件成功触发后,才能调用getInputSurface()方法。
3718
3719**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3720
3721**参数:**
3722
3723| 参数名   | 类型                   | 必填 | 说明                        |
3724| -------- | ---------------------- | ---- | --------------------------- |
3725| callback | AsyncCallback\<string> | 是   | 回调函数。当获取surface成功,err为undefined,data为获取到的surfaceId,否则为错误对象。 |
3726
3727**错误码:**
3728
3729以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
3730
3731| 错误码ID | 错误信息                                |
3732| -------- | --------------------------------------- |
3733| 5400102  | Operate not permit. Return by callback. |
3734| 5400103  | IO error. Return by callback.           |
3735| 5400105  | Service died. Return by callback.       |
3736
3737**示例:**
3738
3739```ts
3740import { BusinessError } from '@kit.BasicServicesKit';
3741let surfaceID: string; // 该surfaceID用于传递给相机接口创造videoOutput。
3742
3743avRecorder.getInputSurface((err: BusinessError, surfaceId: string) => {
3744  if (err) {
3745    console.error('Failed to do getInputSurface and error is ' + err.message);
3746  } else {
3747    console.info('Succeeded in doing getInputSurface');
3748    surfaceID = surfaceId;
3749  }
3750});
3751
3752```
3753
3754### getInputSurface<sup>9+</sup>
3755
3756getInputSurface(): Promise\<string>
3757
3758异步方式获得录制需要的surface。通过Promise获取返回值。此surface提供给调用者,调用者从此surface中获取surfaceBuffer,填入相应的视频数据。
3759
3760应当注意,填入的视频数据需要携带时间戳(单位ns)和buffersize。时间戳的起始时间请以系统启动时间为基准。
3761
3762需在[prepare()](#prepare9-3)事件成功触发后,才能调用getInputSurface方法。
3763
3764**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3765
3766**返回值:**
3767
3768| 类型             | 说明                             |
3769| ---------------- | -------------------------------- |
3770| Promise\<string> | 异步获得surface的Promise返回值。 |
3771
3772**错误码:**
3773
3774以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
3775
3776| 错误码ID | 错误信息                               |
3777| -------- | -------------------------------------- |
3778| 5400102  | Operate not permit. Return by promise. |
3779| 5400103  | IO error. Return by promise.           |
3780| 5400105  | Service died. Return by promise.       |
3781
3782**示例:**
3783
3784```ts
3785import { BusinessError } from '@kit.BasicServicesKit';
3786let surfaceID: string; // 该surfaceID用于传递给相机接口创造videoOutput。
3787
3788avRecorder.getInputSurface().then((surfaceId: string) => {
3789  console.info('Succeeded in getting InputSurface');
3790  surfaceID = surfaceId;
3791}).catch((err: BusinessError) => {
3792  console.error('Failed to get InputSurface and catch error is ' + err.message);
3793});
3794```
3795
3796### updateRotation<sup>12+</sup>
3797
3798updateRotation(rotation: number): Promise\<void>
3799
3800更新视频旋转角度。通过Promise获取返回值。
3801
3802当且仅当[prepare()](#prepare9-3)事件成功触发后,且在[start()](#start9)之前,才能调用updateRotation方法。
3803
3804**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3805
3806**参数:**
3807
3808| 参数名   | 类型                 | 必填 | 说明                        |
3809| -------- | -------------------- | ---- | --------------------------- |
3810| rotation | number | 是   | 旋转角度,取值仅支持0、90、180、270度。 |
3811
3812**返回值:**
3813
3814| 类型             | 说明                             |
3815| ---------------- | -------------------------------- |
3816| Promise\<void> | 异步返回函数执行结果。 |
3817
3818**错误码:**
3819
3820以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
3821
3822| 错误码ID | 错误信息                               |
3823| -------- | -------------------------------------- |
3824|   401    | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.   |
3825| 5400102  | Operation not allowed. Return by promise. |
3826| 5400103  | IO error. Return by promise.           |
3827| 5400105  | Service died. Return by promise.       |
3828
3829**示例:**
3830
3831```ts
3832import { BusinessError } from '@kit.BasicServicesKit';
3833
3834let rotation = 90;
3835
3836avRecorder.updateRotation(rotation).then(() => {
3837  console.info('Succeeded in updateRotation');
3838}).catch((err: BusinessError) => {
3839  console.error('Failed to updateRotation and catch error is ' + err.message);
3840});
3841```
3842
3843### setWillMuteWhenInterrupted<sup>20+</sup>
3844
3845setWillMuteWhenInterrupted(muteWhenInterrupted: boolean): Promise&lt;void&gt;
3846
3847设置当前录制音频流是否启用静音打断模式。使用Promise异步回调。
3848
3849**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3850
3851**参数:**
3852
3853| 参数名     | 类型             | 必填   | 说明                                                      |
3854| ---------- |---------------- | ------ |---------------------------------------------------------|
3855| muteWhenInterrupted | boolean | 是  | 设置当前录制音频流是否启用静音打断模式, true表示启用,false表示不启用,保持为默认打断模式。 |
3856
3857**返回值:**
3858
3859| 类型                | 说明                          |
3860| ------------------- | ----------------------------- |
3861| Promise&lt;void&gt;| Promise对象。无返回结果的Promise对象。|
3862
3863**错误码:**
3864
3865以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
3866
3867| 错误码ID | 错误信息                               |
3868| -------- | -------------------------------------- |
3869| 5400102  | Operation not allowed. Return by promise. |
3870| 5400105  | Service died. Return by promise.       |
3871
3872**示例:**
3873
3874```ts
3875import { BusinessError } from '@kit.BasicServicesKit';
3876
3877avRecorder.setWillMuteWhenInterrupted(true).then(() => {
3878  console.info('setWillMuteWhenInterrupted Success!');
3879}).catch((err: BusinessError) => {
3880  console.error(`setWillMuteWhenInterrupted Fail: ${err}`);
3881});
3882```
3883
3884### start<sup>9+</sup>
3885
3886start(callback: AsyncCallback\<void>): void
3887
3888异步方式开始视频录制。通过注册回调函数获取返回值。
3889
3890纯音频录制需在[prepare()](#prepare9-2)事件成功触发后,才能调用start方法。纯视频录制,音视频录制需在[getInputSurface()](#getinputsurface9)事件成功触发后,才能调用start方法。
3891
3892**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3893
3894**参数:**
3895
3896| 参数名   | 类型                 | 必填 | 说明                         |
3897| -------- | -------------------- | ---- | ---------------------------- |
3898| callback | AsyncCallback\<void> | 是   |回调函数。当开始录制视频成功,err为undefined,否则为错误对象。 |
3899
3900**错误码:**
3901
3902以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3903
3904| 错误码ID | 错误信息                                |
3905| -------- | --------------------------------------- |
3906| 5400102  | Operate not permit. Return by callback. |
3907| 5400103  | IO error. Return by callback.           |
3908| 5400105  | Service died. Return by callback.       |
3909
3910**示例:**
3911
3912```ts
3913import { BusinessError } from '@kit.BasicServicesKit';
3914
3915avRecorder.start((err: BusinessError) => {
3916  if (err) {
3917    console.error('Failed to start AVRecorder and error is ' + err.message);
3918  } else {
3919    console.info('Succeeded in starting AVRecorder');
3920  }
3921});
3922```
3923
3924### start<sup>9+</sup>
3925
3926start(): Promise\<void>
3927
3928异步方式开始视频录制。通过Promise获取返回值。
3929
3930纯音频录制需在[prepare()](#prepare9-3)事件成功触发后,才能调用start方法。纯视频录制,音视频录制需在[getInputSurface()](#getinputsurface9-1)事件成功触发后,才能调用start方法。
3931
3932**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
3933
3934**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3935
3936**返回值:**
3937
3938| 类型           | 说明                                  |
3939| -------------- | ------------------------------------- |
3940| Promise\<void> | 异步开始视频录制方法的Promise返回值。 |
3941
3942**错误码:**
3943
3944以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3945
3946| 错误码ID | 错误信息                               |
3947| -------- | -------------------------------------- |
3948| 5400102  | Operate not permit. Return by promise. |
3949| 5400103  | IO error. Return by promise.           |
3950| 5400105  | Service died. Return by promise.       |
3951
3952**示例:**
3953
3954```ts
3955import { BusinessError } from '@kit.BasicServicesKit';
3956
3957avRecorder.start().then(() => {
3958  console.info('Succeeded in starting AVRecorder');
3959}).catch((err: BusinessError) => {
3960  console.error('Failed to start AVRecorder and catch error is ' + err.message);
3961});
3962```
3963
3964### pause<sup>9+</sup>
3965
3966pause(callback: AsyncCallback\<void>): void
3967
3968异步方式暂停视频录制。通过注册回调函数获取返回值。
3969
3970需要[start()](#start9)事件成功触发后,才能调用pause方法,可以通过调用[resume()](#resume9)接口来恢复录制。
3971
3972**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3973
3974**参数:**
3975
3976| 参数名   | 类型                 | 必填 | 说明                        |
3977| -------- | -------------------- | ---- | --------------------------- |
3978| callback | AsyncCallback\<void> | 是   | 回调函数。当暂停视频录制成功,err为undefined,否则为错误对象。 |
3979
3980**错误码:**
3981
3982以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3983
3984| 错误码ID | 错误信息                                |
3985| -------- | --------------------------------------- |
3986| 5400102  | Operate not permit. Return by callback. |
3987| 5400103  | IO error. Return by callback.           |
3988| 5400105  | Service died. Return by callback.       |
3989
3990**示例:**
3991
3992```ts
3993import { BusinessError } from '@kit.BasicServicesKit';
3994
3995avRecorder.pause((err: BusinessError) => {
3996  if (err) {
3997    console.error('Failed to pause AVRecorder and error is ' + err.message);
3998  } else {
3999    console.info('Succeeded in pausing');
4000  }
4001});
4002```
4003
4004### pause<sup>9+</sup>
4005
4006pause(): Promise\<void>
4007
4008异步方式暂停视频录制。通过Promise获取返回值。
4009
4010需要[start()](#start9-1)事件成功触发后,才能调用pause方法,可以通过调用[resume()](#resume9-1)接口来恢复录制。
4011
4012**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
4013
4014**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4015
4016**返回值:**
4017
4018| 类型           | 说明                                  |
4019| -------------- | ------------------------------------- |
4020| Promise\<void> | 异步暂停视频录制方法的Promise返回值。 |
4021
4022**错误码:**
4023
4024以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4025
4026| 错误码ID | 错误信息                               |
4027| -------- | -------------------------------------- |
4028| 5400102  | Operate not permit. Return by promise. |
4029| 5400103  | IO error. Return by promise.           |
4030| 5400105  | Service died. Return by promise.       |
4031
4032**示例:**
4033
4034```ts
4035import { BusinessError } from '@kit.BasicServicesKit';
4036
4037avRecorder.pause().then(() => {
4038  console.info('Succeeded in pausing');
4039}).catch((err: BusinessError) => {
4040  console.error('Failed to pause AVRecorder and catch error is ' + err.message);
4041});
4042```
4043
4044### resume<sup>9+</sup>
4045
4046resume(callback: AsyncCallback\<void>): void
4047
4048异步方式恢复视频录制。通过注册回调函数获取返回值。
4049
4050需要在[pause()](#pause9-2)事件成功触发后,才能调用resume方法。
4051
4052**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4053
4054**参数:**
4055
4056| 参数名   | 类型                 | 必填 | 说明                         |
4057| -------- | -------------------- | ---- | ---------------------------- |
4058| callback | AsyncCallback\<void> | 是   | 回调函数。当恢复视频录制成功,err为undefined,否则为错误对象。 |
4059
4060**错误码:**
4061
4062以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4063
4064| 错误码ID | 错误信息                                |
4065| -------- | --------------------------------------- |
4066| 5400102  | Operate not permit. Return by callback. |
4067| 5400103  | IO error. Return by callback.           |
4068| 5400105  | Service died. Return by callback.       |
4069
4070**示例:**
4071
4072```ts
4073import { BusinessError } from '@kit.BasicServicesKit';
4074
4075avRecorder.resume((err: BusinessError) => {
4076  if (err) {
4077    console.error('Failed to resume AVRecorder and error is ' + err.message);
4078  } else {
4079    console.info('Succeeded in resuming AVRecorder');
4080  }
4081});
4082```
4083
4084### resume<sup>9+</sup>
4085
4086resume(): Promise\<void>
4087
4088异步方式恢复视频录制。通过Promise获取返回值。
4089
4090需要在[pause()](#pause9-3)事件成功触发后,才能调用resume方法。
4091
4092**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
4093
4094**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4095
4096**返回值:**
4097
4098| 类型           | 说明                                  |
4099| -------------- | ------------------------------------- |
4100| Promise\<void> | 异步恢复视频录制方法的Promise返回值。 |
4101
4102**错误码:**
4103
4104以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4105
4106| 错误码ID | 错误信息                               |
4107| -------- | -------------------------------------- |
4108| 5400102  | Operate not permit. Return by promise. |
4109| 5400103  | IO error. Return by promise.           |
4110| 5400105  | Service died. Return by promise.       |
4111
4112**示例:**
4113
4114```ts
4115import { BusinessError } from '@kit.BasicServicesKit';
4116
4117avRecorder.resume().then(() => {
4118  console.info('Succeeded in resuming AVRecorder');
4119}).catch((err: BusinessError) => {
4120  console.error('Failed to resume  AVRecorder failed and catch error is ' + err.message);
4121});
4122```
4123
4124### stop<sup>9+</sup>
4125
4126stop(callback: AsyncCallback\<void>): void
4127
4128异步方式停止视频录制。通过注册回调函数获取返回值。
4129
4130需要在[start()](#start9)或[pause()](#pause9-2)事件成功触发后,才能调用stop方法。
4131
4132纯音频录制时,需要重新调用[prepare()](#prepare9-2)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-2)和[getInputSurface()](#getinputsurface9)接口才能重新录制。
4133
4134**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4135
4136**参数:**
4137
4138| 参数名   | 类型                 | 必填 | 说明                         |
4139| -------- | -------------------- | ---- | ---------------------------- |
4140| callback | AsyncCallback\<void> | 是   | 回调函数。当停止视频录制成功,err为undefined,否则为错误对象。 |
4141
4142**错误码:**
4143
4144以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4145
4146| 错误码ID | 错误信息                                |
4147| -------- | --------------------------------------- |
4148| 5400102  | Operate not permit. Return by callback. |
4149| 5400103  | IO error. Return by callback.           |
4150| 5400105  | Service died. Return by callback.       |
4151
4152**示例:**
4153
4154```ts
4155import { BusinessError } from '@kit.BasicServicesKit';
4156
4157avRecorder.stop((err: BusinessError) => {
4158  if (err) {
4159    console.error('Failed to stop AVRecorder and error is ' + err.message);
4160  } else {
4161    console.info('Succeeded in stopping AVRecorder');
4162  }
4163});
4164```
4165
4166### stop<sup>9+</sup>
4167
4168stop(): Promise\<void>
4169
4170异步方式停止视频录制。通过Promise获取返回值。
4171
4172需要在[start()](#start9-1)或[pause()](#pause9-3)事件成功触发后,才能调用stop方法。
4173
4174纯音频录制时,需要重新调用[prepare()](#prepare9-3)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-3)和[getInputSurface()](#getinputsurface9-1)接口才能重新录制。
4175
4176**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
4177
4178**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4179
4180**返回值:**
4181
4182| 类型           | 说明                                  |
4183| -------------- | ------------------------------------- |
4184| Promise\<void> | 异步停止视频录制方法的Promise返回值。 |
4185
4186**错误码:**
4187
4188以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4189
4190| 错误码ID | 错误信息                               |
4191| -------- | -------------------------------------- |
4192| 5400102  | Operate not permit. Return by promise. |
4193| 5400103  | IO error. Return by promise.           |
4194| 5400105  | Service died. Return by promise.       |
4195
4196**示例:**
4197
4198```ts
4199import { BusinessError } from '@kit.BasicServicesKit';
4200
4201avRecorder.stop().then(() => {
4202  console.info('Succeeded in stopping AVRecorder');
4203}).catch((err: BusinessError) => {
4204  console.error('Failed to stop AVRecorder and catch error is ' + err.message);
4205});
4206```
4207
4208### reset<sup>9+</sup>
4209
4210reset(callback: AsyncCallback\<void>): void
4211
4212异步方式重置音视频录制。通过注册回调函数获取返回值。
4213
4214纯音频录制时,需要重新调用[prepare()](#prepare9-2)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-2)和[getInputSurface()](#getinputsurface9)接口才能重新录制。
4215
4216**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4217
4218**参数:**
4219
4220| 参数名   | 类型                 | 必填 | 说明                           |
4221| -------- | -------------------- | ---- | ------------------------------ |
4222| callback | AsyncCallback\<void> | 是   | 回调函数。当重置音视频录制成功,err为undefined,否则为错误对象。 |
4223
4224**错误码:**
4225
4226以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4227
4228| 错误码ID | 错误信息                          |
4229| -------- | --------------------------------- |
4230| 5400103  | IO error. Return by callback.     |
4231| 5400105  | Service died. Return by callback. |
4232
4233**示例:**
4234
4235```ts
4236import { BusinessError } from '@kit.BasicServicesKit';
4237
4238avRecorder.reset((err: BusinessError) => {
4239  if (err) {
4240    console.error('Failed to reset AVRecorder and error is ' + err.message);
4241  } else {
4242    console.info('Succeeded in resetting AVRecorder');
4243  }
4244});
4245```
4246
4247### reset<sup>9+</sup>
4248
4249reset(): Promise\<void>
4250
4251异步方式重置音视频录制。通过Promise获取返回值。
4252
4253纯音频录制时,需要重新调用[prepare()](#prepare9-3)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-3)和[getInputSurface()](#getinputsurface9-1)接口才能重新录制。
4254
4255**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4256
4257**返回值:**
4258
4259| 类型           | 说明                                    |
4260| -------------- | --------------------------------------- |
4261| Promise\<void> | 异步重置音视频录制方法的Promise返回值。 |
4262
4263**错误码:**
4264
4265以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4266
4267| 错误码ID | 错误信息                         |
4268| -------- | -------------------------------- |
4269| 5400103  | IO error. Return by promise.     |
4270| 5400105  | Service died. Return by promise. |
4271
4272**示例:**
4273
4274```ts
4275import { BusinessError } from '@kit.BasicServicesKit';
4276
4277avRecorder.reset().then(() => {
4278  console.info('Succeeded in resetting AVRecorder');
4279}).catch((err: BusinessError) => {
4280  console.error('Failed to reset and catch error is ' + err.message);
4281});
4282```
4283
4284### release<sup>9+</sup>
4285
4286release(callback: AsyncCallback\<void>): void
4287
4288异步方式释放音视频录制资源。通过注册回调函数获取返回值。
4289
4290释放音视频录制资源之后,该AVRecorder实例不能再进行任何操作。
4291
4292**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4293
4294**参数:**
4295
4296| 参数名   | 类型                 | 必填 | 说明                               |
4297| -------- | -------------------- | ---- | ---------------------------------- |
4298| callback | AsyncCallback\<void> | 是   | 回调函数。当释放音视频录制资源成功,err为undefined,否则为错误对象。 |
4299
4300**错误码:**
4301
4302以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4303
4304| 错误码ID | 错误信息                          |
4305| -------- | --------------------------------- |
4306| 5400105  | Service died. Return by callback. |
4307
4308**示例:**
4309
4310```ts
4311import { BusinessError } from '@kit.BasicServicesKit';
4312
4313avRecorder.release((err: BusinessError) => {
4314  if (err) {
4315    console.error('Failed to release AVRecorder and error is ' + err.message);
4316  } else {
4317    console.info('Succeeded in releasing AVRecorder');
4318  }
4319});
4320```
4321
4322### release<sup>9+</sup>
4323
4324release(): Promise\<void>
4325
4326异步方式释放音视频录制资源。通过Promise获取返回值。
4327
4328释放音视频录制资源之后,该AVRecorder实例不能再进行任何操作。
4329
4330**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
4331
4332**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4333
4334**返回值:**
4335
4336| 类型           | 说明                                        |
4337| -------------- | ------------------------------------------- |
4338| Promise\<void> | 异步释放音视频录制资源方法的Promise返回值。 |
4339
4340**错误码:**
4341
4342以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4343
4344| 错误码ID | 错误信息                          |
4345| -------- | --------------------------------- |
4346| 5400105  | Service died. Return by callback. |
4347
4348**示例:**
4349
4350```ts
4351import { BusinessError } from '@kit.BasicServicesKit';
4352
4353avRecorder.release().then(() => {
4354  console.info('Succeeded in releasing AVRecorder');
4355}).catch((err: BusinessError) => {
4356  console.error('Failed to release AVRecorder and catch error is ' + err.message);
4357});
4358```
4359
4360### getCurrentAudioCapturerInfo<sup>11+</sup>
4361
4362getCurrentAudioCapturerInfo(callback: AsyncCallback\<audio.AudioCapturerChangeInfo>): void
4363
4364异步方式获取当前音频采集参数。通过注册回调函数获取返回值。
4365
4366在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。
4367
4368**系统能力**:SystemCapability.Multimedia.Media.AVRecorder
4369
4370**参数**:
4371
4372| 参数名   | 类型                                                         | 必填 | 说明                                 |
4373| -------- | ------------------------------------------------------------ | ---- | ------------------------------------ |
4374| callback | AsyncCallback\<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | 是   | 回调函数。当获取音频采集参数成功时,err为undefined,data为获取到的audio.AudioCapturerChangeInfo,否则为错误对象。 |
4375
4376**错误码**:
4377
4378以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4379
4380| 错误码ID | 错误信息                                   |
4381| -------- | ------------------------------------------ |
4382| 5400102  | Operation not allowed. |
4383| 5400103  | I/O error.             |
4384| 5400105  | Service died. Return by callback.          |
4385
4386**示例**:
4387
4388```ts
4389import { audio } from '@kit.AudioKit';
4390
4391let currentCapturerInfo: audio.AudioCapturerChangeInfo;
4392
4393avRecorder.getCurrentAudioCapturerInfo((err: BusinessError, capturerInfo: audio.AudioCapturerChangeInfo) => {
4394  if (err) {
4395    console.error('Failed to get CurrentAudioCapturerInfo and error is ' + err.message);
4396  } else {
4397    console.info('Succeeded in getting CurrentAudioCapturerInfo');
4398    currentCapturerInfo = capturerInfo;
4399  }
4400});
4401```
4402
4403### getCurrentAudioCapturerInfo<sup>11+</sup>
4404
4405getCurrentAudioCapturerInfo(): Promise\<audio.AudioCapturerChangeInfo>
4406
4407异步方式获取当前音频采集参数。通过Promise获取返回值。
4408
4409在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。
4410
4411**系统能力**:SystemCapability.Multimedia.Media.AVRecorder
4412
4413**返回值**:
4414
4415| 类型                                                         | 说明                                              |
4416| ------------------------------------------------------------ | ------------------------------------------------- |
4417| Promise\<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | Promise对象,返回获取的当前音频采集参数。 |
4418
4419**错误码**:
4420
4421以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4422
4423| 错误码ID | 错误信息                         |
4424| -------- | -------------------------------- |
4425| 5400102  | Operation not allowed.           |
4426| 5400103  | I/O error.                       |
4427| 5400105  | Service died. Return by promise. |
4428
4429**示例**:
4430
4431```ts
4432import { audio } from '@kit.AudioKit';
4433
4434let currentCapturerInfo: audio.AudioCapturerChangeInfo;
4435
4436avRecorder.getCurrentAudioCapturerInfo().then((capturerInfo: audio.AudioCapturerChangeInfo) => {
4437  console.info('Succeeded in getting CurrentAudioCapturerInfo');
4438  currentCapturerInfo = capturerInfo;
4439}).catch((err: BusinessError) => {
4440  console.error('Failed to get CurrentAudioCapturerInfo and catch error is ' + err.message);
4441});
4442```
4443
4444### getAudioCapturerMaxAmplitude<sup>11+</sup>
4445
4446getAudioCapturerMaxAmplitude(callback: AsyncCallback\<number>): void
4447
4448异步方式获取当前音频最大振幅。通过注册回调函数获取返回值。
4449
4450在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。
4451
4452调用接口时,获取到的返回值是上一次获取最大振幅的时刻到当前这段区间内的音频最大振幅。即,如果在1s的时刻获取了一次最大振幅,在2s时再获取到的最大振幅时1-2s这个区间里面的最大值。
4453
4454**系统能力**:SystemCapability.Multimedia.Media.AVRecorder
4455
4456**参数**:
4457
4458| 参数名   | 类型                   | 必填 | 说明                                 |
4459| -------- | ---------------------- | ---- | ------------------------------------ |
4460| callback | AsyncCallback\<number> | 是   |  回调函数。获取当前音频最大振幅成功时,err为undefined,data为获取到的最大振幅,否则为错误对象。 |
4461
4462**错误码**:
4463
4464以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4465
4466| 错误码ID | 错误信息                                   |
4467| -------- | ------------------------------------------ |
4468| 5400102  | Operation not allowed. |
4469| 5400105  | Service died. Return by callback.          |
4470
4471**示例**:
4472
4473```ts
4474let maxAmplitude: number;
4475
4476avRecorder.getAudioCapturerMaxAmplitude((err: BusinessError, amplitude: number) => {
4477  if (err) {
4478    console.error('Failed to get AudioCapturerMaxAmplitude and error is ' + err.message);
4479  } else {
4480    console.info('Succeeded in getting AudioCapturerMaxAmplitude');
4481    maxAmplitude = amplitude;
4482  }
4483});
4484```
4485
4486### getAudioCapturerMaxAmplitude<sup>11+</sup>
4487
4488getAudioCapturerMaxAmplitude(): Promise\<number>
4489
4490异步方式获取当前音频最大振幅参数。通过Promise获取返回值。
4491
4492在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。
4493
4494调用接口时,获取到的返回值是上一次获取最大振幅的时刻到当前这段区间内的音频最大振幅。即,如果在1s的时刻获取了一次最大振幅,在2s时再获取到的最大振幅时1-2s这个区间里面的最大值。
4495
4496**系统能力**:SystemCapability.Multimedia.Media.AVRecorder
4497
4498**返回值**:
4499
4500| 类型             | 说明                                              |
4501| ---------------- | ------------------------------------------------- |
4502| Promise\<number> | Promise对象,返回获取的当前音频最大振幅。 |
4503
4504**错误码**:
4505
4506以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4507
4508| 错误码ID | 错误信息                         |
4509| -------- | -------------------------------- |
4510| 5400102  | Operation not allowed.           |
4511| 5400105  | Service died. Return by promise. |
4512
4513**示例**:
4514
4515```ts
4516let maxAmplitude: number;
4517
4518avRecorder.getAudioCapturerMaxAmplitude().then((amplitude: number) => {
4519  console.info('Succeeded in getting AudioCapturerMaxAmplitude');
4520  maxAmplitude = amplitude;
4521}).catch((err: BusinessError) => {
4522  console.error('Failed to get AudioCapturerMaxAmplitude and catch error is ' + err.message);
4523});
4524```
4525
4526### getAvailableEncoder<sup>11+</sup>
4527
4528getAvailableEncoder(callback: AsyncCallback\<Array\<EncoderInfo>>): void
4529
4530异步方式获取可用的编码器参数。通过注册回调函数获取返回值。
4531
4532**系统能力**:SystemCapability.Multimedia.Media.AVRecorder
4533
4534**参数**:
4535
4536| 参数名   | 类型                                                  | 必填 | 说明                                 |
4537| -------- | ----------------------------------------------------- | ---- | ------------------------------------ |
4538| callback | AsyncCallback\<Array\<[EncoderInfo](#encoderinfo11)>> | 是   | 回调函数。获取可用的编码器参数成功时,err为undefined,data为获取到的编码器参数,否则为错误对象。 |
4539
4540**错误码**:
4541
4542以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4543
4544| 错误码ID | 错误信息                                   |
4545| -------- | ------------------------------------------ |
4546| 5400102  | Operation not allowed. |
4547| 5400105  | Service died. Return by callback.          |
4548
4549**示例**:
4550
4551```ts
4552let encoderInfo: media.EncoderInfo;
4553
4554avRecorder.getAvailableEncoder((err: BusinessError, info: media.EncoderInfo[]) => {
4555  if (err) {
4556    console.error('Failed to get AvailableEncoder and error is ' + err.message);
4557  } else {
4558    console.info('Succeeded in getting AvailableEncoder');
4559    encoderInfo = info[0];
4560  }
4561});
4562```
4563
4564### getAvailableEncoder<sup>11+</sup>
4565
4566getAvailableEncoder(): Promise\<Array\<EncoderInfo>>
4567
4568异步方式获取可用的编码器参数。通过注册回调函数获取返回值。
4569
4570**系统能力**:SystemCapability.Multimedia.Media.AVRecorder
4571
4572**返回值**:
4573
4574| 类型                                            | 说明                                            |
4575| ----------------------------------------------- | ----------------------------------------------- |
4576| Promise\<Array\<[EncoderInfo](#encoderinfo11)>> | Promise对象,返回获取的可用的编码器参数。 |
4577
4578**错误码**:
4579
4580以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4581
4582| 错误码ID | 错误信息                         |
4583| -------- | -------------------------------- |
4584| 5400102  | Operation not allowed.           |
4585| 5400105  | Service died. Return by promise. |
4586
4587**示例**:
4588
4589```ts
4590let encoderInfo: media.EncoderInfo;
4591
4592avRecorder.getAvailableEncoder().then((info: media.EncoderInfo[]) => {
4593  console.info('Succeeded in getting AvailableEncoder');
4594  encoderInfo = info[0];
4595}).catch((err: BusinessError) => {
4596  console.error('Failed to get AvailableEncoder and catch error is ' + err.message);
4597});
4598```
4599
4600### getAVRecorderConfig<sup>11+</sup>
4601
4602getAVRecorderConfig(callback: AsyncCallback\<AVRecorderConfig>): void
4603
4604异步方式获取实时的配置参数。通过注册回调函数获取返回值。
4605
4606只能在[prepare()](#prepare9-2)接口调用后调用。
4607
4608**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4609
4610**参数:**
4611
4612| 参数名   | 类型                   | 必填 | 说明                        |
4613| -------- | ---------------------- | ---- | --------------------------- |
4614| callback | AsyncCallback\<[AVRecorderConfig](#avrecorderconfig9)> | 是   | 回调函数。获取实时配置的参数成功时,err为undefined,data为获取到的配置参数,否则为错误对象。 |
4615
4616**错误码:**
4617
4618以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
4619
4620| 错误码ID | 错误信息                                   |
4621| -------- | ------------------------------------------ |
4622| 5400102  | Operate not permit. Return by callback. |
4623| 5400103  | IO error. Return by callback.             |
4624| 5400105  | Service died. Return by callback.          |
4625
4626**示例:**
4627
4628```ts
4629import { BusinessError } from '@kit.BasicServicesKit';
4630
4631let avConfig: media.AVRecorderConfig;
4632
4633avRecorder.getAVRecorderConfig((err: BusinessError, config: media.AVRecorderConfig) => {
4634  if (err) {
4635    console.error('Failed to get avConfig and error is ' + err.message);
4636  } else {
4637    console.info('Succeeded in getting AVRecorderConfig');
4638    avConfig = config;
4639  }
4640});
4641```
4642
4643### getAVRecorderConfig<sup>11+</sup>
4644
4645getAVRecorderConfig(): Promise\<AVRecorderConfig>;
4646
4647异步方式获取实时的配置参数。通过Promise获取返回值。
4648
4649只能在[prepare()](#prepare9-3)接口调用后调用。
4650
4651**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4652
4653**返回值:**
4654
4655| 类型             | 说明                             |
4656| ---------------- | -------------------------------- |
4657| Promise\<[AVRecorderConfig](#avrecorderconfig9)> | 异步获得实时配置参数的回调方法。 |
4658
4659**错误码:**
4660
4661以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
4662
4663| 错误码ID | 错误信息                                  |
4664| -------- | ----------------------------------------- |
4665| 5400102  | Operate not permit. Return by promise. |
4666| 5400103  | IO error. Return by promise.             |
4667| 5400105  | Service died. Return by promise.          |
4668
4669**示例:**
4670
4671```ts
4672import { BusinessError } from '@kit.BasicServicesKit';
4673
4674let avConfig: media.AVRecorderConfig;
4675
4676avRecorder.getAVRecorderConfig().then((config: media.AVRecorderConfig) => {
4677  console.info('Succeeded in getting AVRecorderConfig');
4678  avConfig = config;
4679}).catch((err: BusinessError) => {
4680  console.error('Failed to get AVRecorderConfig and catch error is ' + err.message);
4681});
4682```
4683
4684### on('stateChange')<sup>9+</sup>
4685
4686on(type: 'stateChange', callback: OnAVRecorderStateChangeHandler): void
4687
4688订阅录制状态机AVRecorderState切换的事件,当 AVRecorderState状态机发生变化时,会通过订阅的回调方法通知用户。用户只能订阅一个状态机切换事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
4689
4690**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4691
4692**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4693
4694**参数:**
4695
4696| 参数名   | 类型     | 必填 | 说明                                                         |
4697| -------- | -------- | ---- | ------------------------------------------------------------ |
4698| type     | string   | 是   | 状态机切换事件回调类型,支持的事件:'stateChange',用户操作和系统都会触发此事件。 |
4699| callback | [OnAVRecorderStateChangeHandler](#onavrecorderstatechangehandler12) | 是   | 状态机切换事件回调方法。 |
4700
4701**错误码:**
4702
4703以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4704
4705| 错误码ID | 错误信息                          |
4706| -------- | --------------------------------- |
4707| 5400103  | IO error. Return by callback.     |
4708| 5400105  | Service died. Return by callback. |
4709
4710**示例:**
4711
4712```ts
4713avRecorder.on('stateChange', async (state: media.AVRecorderState, reason: media.StateChangeReason) => {
4714  console.info('case state has changed, new state is :' + state + ',and new reason is : ' + reason);
4715});
4716```
4717
4718### off('stateChange')<sup>9+</sup>
4719
4720off(type: 'stateChange', callback?: OnAVRecorderStateChangeHandler): void
4721
4722取消订阅播放状态机[AVRecorderState](#avrecorderstate9)切换的事件。
4723
4724**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4725
4726**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4727
4728**参数:**
4729
4730| 参数名 | 类型   | 必填 | 说明                                                         |
4731| ------ | ------ | ---- | ------------------------------------------------------------ |
4732| type   | string | 是   | 状态机切换事件回调类型,支持的事件:'stateChange',用户操作和系统都会触发此事件。 |
4733| callback | [OnAVRecorderStateChangeHandler](#onavrecorderstatechangehandler12) | 否   | 状态机切换事件回调方法。<br/>从API version 12开始支持此参数。 |
4734
4735**示例:**
4736
4737```ts
4738avRecorder.off('stateChange');
4739```
4740
4741### on('error')<sup>9+</sup>
4742
4743on(type: 'error', callback: ErrorCallback): void
4744
4745订阅AVRecorder的错误事件,该事件仅用于错误提示,不需要用户停止播控动作。如果此时[AVRecorderState](#avrecorderstate9)也切至error状态,用户需要通过[reset()](#reset9-2)或者[release()](#release9-2)退出录制操作。
4746
4747用户只能订阅一个错误事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
4748
4749**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4750
4751**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4752
4753**参数:**
4754
4755| 参数名   | 类型          | 必填 | 说明                                                         |
4756| -------- | ------------- | ---- | ------------------------------------------------------------ |
4757| type     | string        | 是   | 录制错误事件回调类型'error'。 <br>- 'error':录制过程中发生错误,触发该事件。 |
4758| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 录制错误事件回调方法。                                       |
4759
4760**错误码:**
4761
4762以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4763
4764| 错误码ID | 错误信息                                   |
4765| -------- | ------------------------------------------ |
4766| 201      | Permission denied.     |
4767| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
4768| 801      | Capability not supported. |
4769| 5400101  | No memory.             |
4770| 5400102  | Operation not allowed. |
4771| 5400103  | I/O error.             |
4772| 5400104  | Time out.              |
4773| 5400105  | Service died.          |
4774| 5400106  | Unsupported format.    |
4775| 5400107  | Audio interrupted.     |
4776
4777**示例:**
4778
4779```ts
4780import { BusinessError } from '@kit.BasicServicesKit';
4781
4782avRecorder.on('error', (err: BusinessError) => {
4783  console.info('case avRecorder.on(error) called, errMessage is ' + err.message);
4784});
4785```
4786
4787### off('error')<sup>9+</sup>
4788
4789off(type: 'error', callback?: ErrorCallback): void
4790
4791取消订阅录制错误事件,取消后不再接收到AVRecorder的错误事件。
4792
4793**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4794
4795**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4796
4797**参数:**
4798
4799| 参数名 | 类型   | 必填 | 说明                                                         |
4800| ------ | ------ | ---- | ------------------------------------------------------------ |
4801| type   | string | 是   | 录制错误事件回调类型'error'。 <br>- 'error':录制过程中发生错误,触发该事件。 |
4802| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否   | 录制错误事件回调方法。<br/>从API version 12开始支持此参数。                   |
4803
4804**示例:**
4805
4806```ts
4807avRecorder.off('error');
4808```
4809
4810### on('audioCapturerChange')<sup>11+</sup>
4811
4812on(type: 'audioCapturerChange', callback: Callback<audio.AudioCapturerChangeInfo>): void
4813
4814订阅录音配置变化的回调,任意录音配置的变化会触发变化后的录音配置全量信息回调。
4815
4816当用户重复订阅时,以最后一次订阅的回调接口为准。
4817
4818**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4819
4820**参数:**
4821
4822| 参数名   | 类型     | 必填 | 说明                                                         |
4823| -------- | -------- | ---- | ------------------------------------------------------------ |
4824| type     | string   | 是   |录音配置变化的回调类型,支持的事件:'audioCapturerChange'。 |
4825| callback | Callback<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | 是 | 变化后的录音配置全量信息。|
4826
4827**错误码:**
4828
4829| 错误码ID | 错误信息                                   |
4830| -------- | ------------------------------------------ |
4831| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.      |
4832
4833**示例:**
4834
4835```ts
4836import { audio } from '@kit.AudioKit'
4837
4838let capturerChangeInfo: audio.AudioCapturerChangeInfo;
4839
4840avRecorder.on('audioCapturerChange',  (audioCapturerChangeInfo: audio.AudioCapturerChangeInfo) => {
4841  console.info('audioCapturerChange called');
4842  capturerChangeInfo = audioCapturerChangeInfo;
4843});
4844```
4845
4846### off('audioCapturerChange')<sup>11+</sup>
4847
4848off(type: 'audioCapturerChange', callback?: Callback<audio.AudioCapturerChangeInfo>): void
4849
4850取消订阅录音变化的回调事件。
4851
4852**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4853
4854**参数:**
4855
4856| 参数名 | 类型   | 必填 | 说明                                                         |
4857| ------ | ------ | ---- | ------------------------------------------------------------ |
4858| type   | string | 是   | 录音配置变化的回调类型,支持的事件:'audioCapturerChange'。 |
4859| callback | Callback<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | 否 | 变化后的录音配置全量信息。<br/>从API version 12开始支持此参数。|
4860
4861**示例:**
4862
4863```ts
4864avRecorder.off('audioCapturerChange');
4865```
4866
4867### on('photoAssetAvailable')<sup>12+</sup>
4868
4869on(type: 'photoAssetAvailable', callback: Callback\<photoAccessHelper.PhotoAsset>): void
4870
4871订阅媒体资源回调事件,当[FileGenerationMode](#filegenerationmode12)枚举设置为系统创建媒体文件时,会在[stop](#stop9-2)操作结束后把[PhotoAsset](../apis-media-library-kit/js-apis-photoAccessHelper.md#photoasset)对象回调给应用。
4872
4873当用户重复订阅时,以最后一次订阅的回调接口为准。
4874
4875**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4876
4877**参数:**
4878
4879| 参数名   | 类型     | 必填 | 说明                                                         |
4880| -------- | -------- | ---- | ------------------------------------------------------------ |
4881| type     | string   | 是   |录像资源的回调类型,支持的事件:'photoAssetAvailable'。 |
4882| callback | Callback<[photoAccessHelper.PhotoAsset](../apis-media-library-kit/js-apis-photoAccessHelper.md#photoasset)> | 是 | 系统创建的资源文件对应的PhotoAsset对象。|
4883
4884**错误码:**
4885
4886| 错误码ID | 错误信息                                   |
4887| -------- | ------------------------------------------ |
4888| 5400103  | IO error. Return by callback.             |
4889| 5400105  | Service died. Return by callback.          |
4890
4891**示例:**
4892
4893<!--code_no_check-->
4894```ts
4895import { photoAccessHelper } from '@kit.MediaLibraryKit';
4896import { common } from '@kit.AbilityKit'
4897let photoAsset: photoAccessHelper.PhotoAsset;
4898private context: Context | undefined;
4899constructor(context: Context) {
4900  this.context = context; // this.getUIContext().getHostContext();
4901}
4902
4903// 例:处理photoAsset回调,保存video。
4904async function saveVideo(asset: photoAccessHelper.PhotoAsset) {
4905  console.info("saveVideo called");
4906  try {
4907    let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(this.context);
4908    let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(asset);
4909    assetChangeRequest.saveCameraPhoto();
4910    await phAccessHelper.applyChanges(assetChangeRequest);
4911    console.info('apply saveVideo successfully');
4912  } catch (err) {
4913    console.error(`apply saveVideo failed with error: ${err.code}, ${err.message}`);
4914  }
4915}
4916// 注册photoAsset监听。
4917avRecorder.on('photoAssetAvailable',  (asset: photoAccessHelper.PhotoAsset) => {
4918  console.info('photoAssetAvailable called');
4919  if (asset != undefined) {
4920    photoAsset = asset;
4921    // 处理photoAsset回调。
4922    // 例: this.saveVideo(asset);
4923  } else {
4924    console.error('photoAsset is undefined');
4925  }
4926});
4927```
4928
4929### off('photoAssetAvailable')<sup>12+</sup>
4930
4931off(type: 'photoAssetAvailable', callback?: Callback<photoAccessHelper.PhotoAsset>): void
4932
4933取消订阅媒体资源的回调类型。
4934
4935**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4936
4937**参数:**
4938
4939| 参数名 | 类型   | 必填 | 说明                                                         |
4940| ------ | ------ | ---- | ------------------------------------------------------------ |
4941| type   | string | 是   | 录音配置变化的回调类型,支持的事件:'photoAssetAvailable'。 |
4942| callback | Callback<[photoAccessHelper.PhotoAsset](../apis-media-library-kit/js-apis-photoAccessHelper.md#photoasset)> | 否 | 系统创建的资源文件对应的PhotoAsset对象。|
4943
4944**示例:**
4945
4946```ts
4947avRecorder.off('photoAssetAvailable');
4948```
4949
4950## AVRecorderState<sup>9+</sup>
4951
4952type AVRecorderState = 'idle' | 'prepared' | 'started' | 'paused' | 'stopped' | 'released' | 'error'
4953
4954音视频录制的状态机。可通过state属性获取当前状态。
4955
4956**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
4957
4958**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4959
4960| 类型     | 说明                                                         |
4961| -------- | ------------------------------------------------------------ |
4962| 'idle'     | 闲置状态。此时可以调用[AVRecorder.prepare()](#prepare9-2)方法设置录制参数,进入prepared状态。AVRecorder刚被创建,或者在任何非released状态下调用[AVRecorder.reset()](#reset9-2)方法,均进入idle状态。 |
4963| 'prepared' | 参数设置完成。此时可以调用[AVRecorder.start()](#start9)方法开始录制,进入started状态。 |
4964| 'started'  | 正在录制。此时可以调用[AVRecorder.pause()](#pause9-2)方法暂停录制,进入paused状态。也可以调用[AVRecorder.stop()](#stop9-2)方法结束录制,进入stopped状态。 |
4965| 'paused'   | 录制暂停。此时可以调用[AVRecorder.resume()](#resume9)方法继续录制,进入started状态。也可以调用[AVRecorder.stop()](#stop9-2)方法结束录制,进入stopped状态。 |
4966| 'stopped'  | 录制停止。此时可以调用[AVRecorder.prepare()](#prepare9-2)方法设置录制参数,重新进入prepared状态。 |
4967| 'released' | 录制资源释放。此时不能再进行任何操作。在任何其他状态下,均可以通过调用[AVRecorder.release()](#release9-2)方法进入released状态。 |
4968| 'error'    | 错误状态。当AVRecorder实例发生不可逆错误,会转换至当前状态。切换至error状态时会伴随[AVRecorder.on('error')事件](#onerror9-1),该事件会上报详细错误原因。在error状态时,用户需要调用[AVRecorder.reset()](#reset9-2)方法重置AVRecorder实例,或者调用[AVRecorder.release()](#release9-2)方法释放资源。 |
4969
4970## OnAVRecorderStateChangeHandler<sup>12+</sup>
4971
4972type OnAVRecorderStateChangeHandler = (state: AVRecorderState, reason: StateChangeReason) => void
4973
4974状态机切换事件回调方法。
4975
4976**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4977
4978**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4979
4980| 参数名   | 类型   | 必填 | 说明                                                         |
4981| ------ | ------ | ------ | ------------------------------------------------------------ |
4982| state  | [AVRecorderState](#avrecorderstate9) | 是 | 当前录制状态。     |
4983| reason | [StateChangeReason](#statechangereason9) | 是 | 当前录制状态的切换原因。 |
4984
4985## AVRecorderConfig<sup>9+</sup>
4986
4987表示音视频录制的参数设置。
4988
4989通过audioSourceType和videoSourceType区分纯音频录制、纯视频录制或音视频录制。纯音频录制时,仅需要设置audioSourceType;纯视频录制时,仅需要设置videoSourceType;音视频录制时,audioSourceType和videoSourceType均需要设置。
4990
4991**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4992
4993| 名称            | 类型                                     | 必填 | 说明                                                         |
4994| --------------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
4995| audioSourceType | [AudioSourceType](#audiosourcetype9)     | 否   | 选择录制的音频源类型。选择音频录制时必填。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。|
4996| videoSourceType | [VideoSourceType](#videosourcetype9)     | 否   | 选择录制的视频源类型。选择视频录制时必填。                   |
4997| profile         | [AVRecorderProfile](#avrecorderprofile9) | 是   | 录制的profile,必要参数。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。|
4998| url             | string                                   | 是   | 录制输出URL:fd://xx (fd number) ![img](figures/zh-cn_image_url.png),必要参数。 <br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
4999|fileGenerationMode<sup>12+</sup> | [FileGenerationMode](#filegenerationmode12)  | 否   |  创建媒体文件的模式,配合[on('photoAssetAvailable')](#onphotoassetavailable12)监听使用。|
5000| rotation<sup>(deprecated)</sup>        | number                                   | 否   | 录制的视频旋转角度,mp4格式支持0,90,180,270,默认值为0。<br>从API version 6开始支持,从API version 12开始废弃。建议使用[AVMetadata](#avmetadata11).videoOrientation替代。如果同时设置两个值,将会采用[AVMetadata](#avmetadata11).videoOrientation。     |
5001| location<sup>(deprecated)</sup>        | [Location](#location)                    | 否   | 录制的地理位置,默认不记录地理位置信息。<br>从API version 6开始支持,从API version 12开始废弃。建议使用 [AVMetadata](#avmetadata11).location。如果同时设置两个值,将会采用[AVMetadata](#avmetadata11).location。 |
5002| metadata<sup>12+</sup>        | [AVMetadata](#avmetadata11)              | 否   | 设置元数据信息。详情见 [AVMetadata](#avmetadata11)。                  |
5003| maxDuration<sup>18+</sup>        | number             | 否   | 设置录制的最大时长,单位为秒,有效值取值范围[1 , 2^31-1],无效输入会重置为最大值。录制到达设定时长后,录制会自动停止,并通过stateChange回调录制状态,[AVRecorderState](#avrecorderstate9) = 'stopped',[StateChangeReason](#statechangereason9) = BACKGROUND。|
5004
5005## AVRecorderProfile<sup>9+</sup>
5006
5007音视频录制的配置文件。
5008
5009> **说明:**
5010> 此处提供音频参数配置的对照表,每项的具体释义,可查看下述字段解释。
5011>
5012> |编码格式|封装格式|采样率|比特率|声道数|
5013> |----|----|----|----|----|
5014> |AUDIO_AAC|MP4,M4A|[8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000]|[32000-500000]|[1-8]|
5015> |AUDIO_MP3|MP3|[8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000]|<br>- 采样率使用16000以下时,对应比特率范围为[8000 - 64000]。<br>- 采样率使用16000~32000时对应的比特率范围为[8000 - 160000]。<br>- 采样率使用32000以上时对应的比特率范围为[32000 - 320000]。|[1-2]|
5016> |AUDIO_G711MU|WAV|[8000]|[64000]|[1]|
5017> |AUDIO_AMR_NB<sup>18+</sup> |AMR|[8000]|[4750, 5150, 5900, 6700, 7400, 7950, 10200, 12200]|[1]|
5018> |AUDIO_AMR_WB<sup>18+</sup> |AMR|[16000]|[6600, 8850, 12650, 14250, 15850, 18250, 19850, 23050, 23850]|[1]|
5019
5020**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
5021
5022| 名称             | 类型                                         | 必填 | 说明                                                         |
5023| ---------------- | -------------------------------------------- | ---- | ------------------------------------------------------------ |
5024| audioBitrate     | number                                       | 否   | 音频编码比特率,选择音频录制时必填。<br>支持范围:<br>- AAC编码格式支持比特率范围[32000 - 500000]。<br>- G711-mulaw编码格式支持比特率范围[64000]。<br>- MP3编码格式支持范围[8000, 16000, 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 160000, 192000, 224000, 256000, 320000]。<br>当使用MP3编码格式时,采样率和比特率的映射关系: <br>- 采样率使用16K以下时,对应比特率范围为[8000 - 64000]。<br>- 采样率使用16K~32K时对应的比特率范围为[8000 - 160000]。<br>- 采样率使用32K以上时对应的比特率范围为[32000 - 320000]。<br>- AMR_NB编码格式支持比特率范围[4750, 5150, 5900, 6700, 7400, 7950, 10200, 12200]。<br>- AMR_WB编码格式支持比特率范围[6600, 8850, 12650, 14250, 15850, 18250, 19850, 23050, 23850]。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
5025| audioChannels    | number                                       | 否   | 音频采集声道数,选择音频录制时必填。<br>- AAC编码格式支持范围[1 - 8]。<br>- G711-mulaw编码格式支持范围[1]。<br>- MP3编码格式支持范围[1 - 2]。<br>- AMR-NB、AMR-WB编码格式支持范围[1]。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。       |
5026| audioCodec       | [CodecMimeType](#codecmimetype8)             | 否   | 音频编码格式,选择音频录制时必填。当前支持AUDIO_AAC,AUDIO_MP3,AUDIO_G711MU, AUDIO_AMR_NB, AUDIO_AMR_WB。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。     |
5027| audioSampleRate  | number                                       | 否   | 音频采样率,选择音频录制时必填。<br>支持范围:<br>- AAC编码支持采样率范围[8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000]。<br>- G711-mulaw编码支持采样率范围[8000]。<br>- MP3编码支持采样率范围[8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000]。<br>- AMR_NB编码支持采样率范围[8000]。<br>- AMR_WB编码支持采样率范围[16000]。<br>可变比特率模式,码率仅作参考。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
5028| fileFormat       | [ContainerFormatType](#containerformattype8) | 是   | 文件的容器格式,必要参数。当前支持MP4、M4A、MP3、WAV、AMR、AAC封装格式,当前AAC音频封装默认为ADTS帧头格式。不支持在MP4封装格式下使用AUDIO_MP3编码格式。<br>**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。|
5029| videoBitrate     | number                                       | 否   | 视频编码比特率,选择视频录制时必填,支持范围[10000 - 100000000]。  |
5030| videoCodec       | [CodecMimeType](#codecmimetype8)             | 否   | 视频编码格式,选择视频录制时必填。当前支持VIDEO_AVC。|
5031| videoFrameWidth  | number                                       | 否   | 视频帧的宽,选择视频录制时必填,支持范围[176 - 4096]。         |
5032| videoFrameHeight | number                                       | 否   | 视频帧的高,选择视频录制时必填,支持范围[144 - 4096]。         |
5033| videoFrameRate   | number                                       | 否   | 视频帧率,选择视频录制时必填,推荐范围[1 - 60]。             |
5034| isHdr<sup>11+</sup>            | boolean                        | 否   | HDR编码,选择视频录制时选填,isHdr默认为false,对应编码格式没有要求,isHdr为true时,对应的编码格式必须为video/hevc。|
5035| enableTemporalScale<sup>12+</sup>            | boolean                        | 否   | 视频录制是否支持时域分层编码功能,选择视频录制时选填,enableTemporalScale默认为false。设置为true时,编码输出的码流中部分帧可以支持跳过不编码。|
5036
5037## AudioSourceType<sup>9+</sup>
5038
5039表示视频录制中音频源类型的枚举。
5040
5041**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
5042
5043| 名称                      | 值   | 说明                   |
5044| ------------------------- | ---- | ---------------------- |
5045| AUDIO_SOURCE_TYPE_DEFAULT | 0    | 默认的音频输入源类型。 |
5046| AUDIO_SOURCE_TYPE_MIC     | 1    | 表示MIC的音频输入源。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
5047| AUDIO_SOURCE_TYPE_VOICE_RECOGNITION<sup>12+</sup> | 2    | 表示语音识别场景的音频源。 |
5048| AUDIO_SOURCE_TYPE_VOICE_COMMUNICATION<sup>12+</sup>     | 7    | 表示语音通话场景的音频源。 |
5049| AUDIO_SOURCE_TYPE_VOICE_MESSAGE<sup>12+</sup> | 10    | 表示短语音消息的音频源。 |
5050| AUDIO_SOURCE_TYPE_CAMCORDER<sup>12+</sup>     | 13    | 表示相机录像的音频源。 |
5051
5052## VideoSourceType<sup>9+</sup>
5053
5054表示视频录制中视频源类型的枚举。
5055
5056**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
5057
5058| 名称                          | 值   | 说明                            |
5059| ----------------------------- | ---- | ------------------------------- |
5060| VIDEO_SOURCE_TYPE_SURFACE_YUV | 0    | 输入surface中携带的是raw data。 |
5061| VIDEO_SOURCE_TYPE_SURFACE_ES  | 1    | 输入surface中携带的是ES data。  |
5062
5063## ContainerFormatType<sup>8+</sup>
5064
5065表示容器格式类型的枚举,缩写为CFT。
5066
5067**系统能力:** SystemCapability.Multimedia.Media.Core
5068
5069| 名称        | 值    | 说明                  |
5070| ----------- | ----- | --------------------- |
5071| CFT_MPEG_4  | 'mp4' | 视频的容器格式,MP4。 |
5072| CFT_MPEG_4A | 'm4a' | 音频的容器格式,M4A。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
5073| CFT_MP3<sup>12+</sup>  | 'mp3' | 音频的容器格式,MP3。 |
5074| CFT_WAV<sup>12+</sup>  | 'wav' | 音频的容器格式,WAV。 |
5075| CFT_AMR<sup>18+</sup>  | 'amr' | 音频的容器格式,AMR。 |
5076| CFT_AAC<sup>20+</sup>  | 'aac' | 音频的容器格式,AAC。默认为ADTS帧头格式。 |
5077
5078## Location
5079
5080视频录制的地理位置。
5081
5082**系统能力:** SystemCapability.Multimedia.Media.Core
5083
5084| 名称      | 类型   | 必填 | 说明             |
5085| --------- | ------ | ---- | ---------------- |
5086| latitude  | number | 是   | 地理位置的纬度,取值范围为[-90, 90]。 |
5087| longitude | number | 是   | 地理位置的经度,取值范围为[-180, 180]。 |
5088
5089## EncoderInfo<sup>11+</sup>
5090
5091编码器和规格参数
5092
5093系统能力:SystemCapability.Multimedia.Media.AVRecorder
5094
5095| 名称       | 类型                             | 可读 | 可写 | 说明                                                         |
5096| ---------- | -------------------------------- | ---- | ---- | ------------------------------------------------------------ |
5097| mimeType   | [CodecMimeType](#codecmimetype8) | 是   | 否   | 编码器MIME类型名称。                                           |
5098| type       | string                           | 是   | 否   | 编码器类型,audio表示音频编码器,video表示视频编码器。         |
5099| bitRate    | [Range](#range11)                | 是   | 否   | 比特率,包含该编码器的最大和最小值。                           |
5100| frameRate  | [Range](#range11)                | 是   | 否   | 视频帧率,包含帧率的最大和最小值,仅视频编码器拥有。          |
5101| width      | [Range](#range11)                | 是   | 否   | 视频帧的宽度,包含宽度的最大和最小值,仅视频编码器拥有。       |
5102| height     | [Range](#range11)                | 是   | 否   | 视频帧的高度,包含高度的最大和最小值,仅视频编码器拥有。       |
5103| channels   | [Range](#range11)                | 是   | 否   | 音频采集声道数,包含声道数的最大和最小值,仅音频编码器拥有。   |
5104| sampleRate | Array\<number>                    | 是   | 否   | 音频采样率,包含所有可以使用的音频采样率值数组,具体数值依赖编码器类型,仅音频编码器拥有。 |
5105
5106## Range<sup>11+</sup>
5107
5108表示一个类型的范围
5109
5110系统能力:SystemCapability.Multimedia.Media.AVRecorder
5111
5112| 名称 | 类型   | 可读 | 可写 | 说明         |
5113| ---- | ------ | ---- | ---- | ------------ |
5114| min  | number | 是   | 否   | 范围的最小值。 |
5115| max  | number | 是   | 否   | 范围的最大值。 |
5116
5117## FileGenerationMode<sup>12+</sup>
5118
5119表示创建媒体文件模式的枚举。
5120
5121**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
5122
5123| 名称                          | 值   | 说明                            |
5124| ----------------------------- | ---- | ------------------------------- |
5125| APP_CREATE  | 0    | 由应用自行在沙箱创建媒体文件。 |
5126| AUTO_CREATE_CAMERA_SCENE  | 1    | 由系统创建媒体文件,当前仅在相机录制场景下生效,会忽略应用设置的url。 |
5127
5128## AVTranscoder<sup>12+</sup>
5129
5130视频转码管理类,用于视频转码。在调用AVTranscoder的方法前,需要先通过[createAVTranscoder()](#mediacreateavtranscoder12)构建一个AVTranscoder实例。
5131
5132视频转码demo可参考:[视频转码开发指导](../../media/media/using-avtranscoder-for-transcodering.md)
5133
5134### 属性
5135
5136**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
5137
5138| 名称    | 类型                                 | 只读 | 可选 | 说明               |
5139| ------- | ------------------------------------ | ---- | ---- | ------------------ |
5140| fdSrc<sup>12+</sup>                                  | [AVFileDescriptor](#avfiledescriptor9)                       |  否  | 否   | 源媒体文件描述,通过该属性设置数据源。<br/> **使用示例**:<br/>假设一个连续存储的媒体文件,地址偏移:0,字节长度:100。其文件描述为 AVFileDescriptor { fd = 资源句柄; offset = 0; length = 100; }。<br>**说明:** <br> - 将资源句柄(fd)传递给 AVTranscoder 实例之后,请不要通过该资源句柄做其他读写操作,包括但不限于将同一个资源句柄传递给多个 AVPlayer / AVMetadataExtractor / AVImageGenerator / AVTranscoder。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致视频转码数据获取异常。 |
5141| fdDst<sup>12+</sup>                               | number                 |  否  | 否   | 目标媒体文件描述,通过该属性设置数据输出。在创建AVTranscoder实例后,必须设置fdSrc和fdDst属性。<br>**说明:** <br> - 将资源句柄(fd)传递给 AVTranscoder 实例之后,请不要通过该资源句柄做其他读写操作,包括但不限于将同一个资源句柄传递给多个 AVPlayer / AVMetadataExtractor / AVImageGenerator / AVTranscoder。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致视频转码数据获取异常。 |
5142
5143### prepare<sup>12+</sup>
5144
5145prepare(config: AVTranscoderConfig): Promise\<void>
5146
5147异步方式进行视频转码的参数设置。通过Promise获取返回值。
5148
5149**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
5150
5151**参数:**
5152
5153| 参数名 | 类型                                   | 必填 | 说明                       |
5154| ------ | -------------------------------------- | ---- | -------------------------- |
5155| config | [AVTranscoderConfig](#avtranscoderconfig12) | 是   | 配置视频转码的相关参数。 <!--RP1--><!--RP1End-->|
5156
5157**返回值:**
5158
5159| 类型           | 说明                                       |
5160| -------------- | ------------------------------------------ |
5161| Promise\<void> | 异步视频转码prepare方法的Promise返回值。 |
5162
5163**错误码:**
5164
5165以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
5166
5167| 错误码ID | 错误信息                               |
5168| -------- | -------------------------------------- |
5169| 401  | The parameter check failed. Return by promise. |
5170| 5400102  | Operation not allowed. Return by promise. |
5171| 5400103  | IO error. Return by promise.              |
5172| 5400105  | Service died. Return by promise.       |
5173| 5400106  | Unsupported format. Returned by promise.  |
5174
5175**示例:**
5176
5177```ts
5178import { BusinessError } from '@kit.BasicServicesKit';
5179
5180// 配置参数以实际硬件设备支持的范围为准。
5181let avTranscoderConfig: media.AVTranscoderConfig = {
5182  audioBitrate : 200000,
5183  audioCodec : media.CodecMimeType.AUDIO_AAC,
5184  fileFormat : media.ContainerFormatType.CFT_MPEG_4,
5185  videoBitrate : 3000000,
5186  videoCodec : media.CodecMimeType.VIDEO_AVC,
5187};
5188
5189avTranscoder.prepare(avTranscoderConfig).then(() => {
5190  console.info('prepare success');
5191}).catch((err: BusinessError) => {
5192  console.error('prepare failed and catch error is ' + err.message);
5193});
5194```
5195
5196### start<sup>12+</sup>
5197
5198start(): Promise\<void>
5199
5200异步方式开始视频转码。通过Promise获取返回值。
5201
5202需要[prepare()](#prepare12)事件成功触发后,才能调用start方法。
5203
5204**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
5205
5206**返回值:**
5207
5208| 类型           | 说明                                  |
5209| -------------- | ------------------------------------- |
5210| Promise\<void> | 异步开始视频转码方法的Promise返回值。 |
5211
5212**错误码:**
5213
5214以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
5215
5216| 错误码ID | 错误信息                               |
5217| -------- | -------------------------------------- |
5218| 5400102  | Operation not allowed. Return by promise. |
5219| 5400103  | IO error. Return by promise.           |
5220| 5400105  | Service died. Return by promise.       |
5221
5222**示例:**
5223
5224```ts
5225import { BusinessError } from '@kit.BasicServicesKit';
5226
5227avTranscoder.start().then(() => {
5228  console.info('start AVTranscoder success');
5229}).catch((err: BusinessError) => {
5230  console.error('start AVTranscoder failed and catch error is ' + err.message);
5231});
5232```
5233
5234### pause<sup>12+</sup>
5235
5236pause(): Promise\<void>
5237
5238异步方式暂停视频转码。通过Promise获取返回值。
5239
5240需要[start()](#start12)事件成功触发后,才能调用pause方法,可以通过调用[resume()](#resume12)接口来恢复转码。
5241
5242**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
5243
5244**返回值:**
5245
5246| 类型           | 说明                                  |
5247| -------------- | ------------------------------------- |
5248| Promise\<void> | 异步暂停视频转码方法的Promise返回值。 |
5249
5250**错误码:**
5251
5252以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
5253
5254| 错误码ID | 错误信息                               |
5255| -------- | -------------------------------------- |
5256| 5400102  | Operation not allowed. Return by promise. |
5257| 5400103  | IO error. Return by promise.           |
5258| 5400105  | Service died. Return by promise.       |
5259
5260**示例:**
5261
5262```ts
5263import { BusinessError } from '@kit.BasicServicesKit';
5264
5265avTranscoder.pause().then(() => {
5266  console.info('pause AVTranscoder success');
5267}).catch((err: BusinessError) => {
5268  console.error('pause AVTranscoder failed and catch error is ' + err.message);
5269});
5270```
5271
5272### resume<sup>12+</sup>
5273
5274resume(): Promise\<void>
5275
5276异步方式恢复视频转码。通过Promise获取返回值。
5277
5278需要在[pause()](#pause12)事件成功触发后,才能调用resume方法。
5279
5280**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
5281
5282**返回值:**
5283
5284| 类型           | 说明                                  |
5285| -------------- | ------------------------------------- |
5286| Promise\<void> | 异步恢复视频转码方法的Promise返回值。 |
5287
5288**错误码:**
5289
5290以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
5291
5292| 错误码ID | 错误信息                               |
5293| -------- | -------------------------------------- |
5294| 5400102  | Operation not allowed. Return by promise. |
5295| 5400103  | IO error. Return by promise.           |
5296| 5400105  | Service died. Return by promise.       |
5297
5298**示例:**
5299
5300```ts
5301import { BusinessError } from '@kit.BasicServicesKit';
5302
5303avTranscoder.resume().then(() => {
5304  console.info('resume AVTranscoder success');
5305}).catch((err: BusinessError) => {
5306  console.error('resume AVTranscoder failed and catch error is ' + err.message);
5307});
5308```
5309
5310### cancel<sup>12+</sup>
5311
5312cancel(): Promise\<void>
5313
5314异步方式取消视频转码。通过Promise获取返回值。
5315
5316需要在[prepare()](#prepare12)、[start()](#start12)、[pause()](#pause12)或[resume()](#resume12)事件成功触发后,才能调用cancel方法。
5317
5318**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
5319
5320**返回值:**
5321
5322| 类型           | 说明                                  |
5323| -------------- | ------------------------------------- |
5324| Promise\<void> | 异步取消视频转码方法的Promise返回值。 |
5325
5326**错误码:**
5327
5328以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
5329
5330| 错误码ID | 错误信息                               |
5331| -------- | -------------------------------------- |
5332| 5400102  | Operation not allowed. Return by promise. |
5333| 5400103  | IO error. Return by promise.           |
5334| 5400105  | Service died. Return by promise.       |
5335
5336**示例:**
5337
5338```ts
5339import { BusinessError } from '@kit.BasicServicesKit';
5340
5341avTranscoder.cancel().then(() => {
5342  console.info('cancel AVTranscoder success');
5343}).catch((err: BusinessError) => {
5344  console.error('cancel AVTranscoder failed and catch error is ' + err.message);
5345});
5346```
5347
5348### release<sup>12+</sup>
5349
5350release(): Promise\<void>
5351
5352异步方式释放视频转码资源。通过Promise获取返回值。
5353
5354释放视频转码资源之后,该AVTranscoder实例不能再进行任何操作。
5355
5356**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
5357
5358**返回值:**
5359
5360| 类型           | 说明                                        |
5361| -------------- | ------------------------------------------- |
5362| Promise\<void> | 异步释放视频转码资源方法的Promise返回值。 |
5363
5364**错误码:**
5365
5366以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
5367
5368| 错误码ID | 错误信息                          |
5369| -------- | --------------------------------- |
5370| 5400102  | Operation not allowed. Return by promise. |
5371| 5400105  | Service died. Return by promise. |
5372
5373**示例:**
5374
5375```ts
5376import { BusinessError } from '@kit.BasicServicesKit';
5377
5378avTranscoder.release().then(() => {
5379  console.info('release AVTranscoder success');
5380}).catch((err: BusinessError) => {
5381  console.error('release AVTranscoder failed and catch error is ' + err.message);
5382});
5383```
5384
5385### on('progressUpdate')<sup>12+</sup>
5386
5387on(type: 'progressUpdate', callback: Callback\<number>): void
5388
5389注册转码进度更新事件,并通过注册的回调方法通知开发者。开发者只能注册一个进度更新事件的回调方法,当开发者重复注册时,以最后一次注册的回调接口为准。
5390
5391**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
5392
5393**参数:**
5394
5395| 参数名   | 类型     | 必填 | 说明                                                         |
5396| -------- | -------- | ---- | ------------------------------------------------------------ |
5397| type     | string   | 是   | 进度更新事件回调类型,支持的事件:'progressUpdate',在转码过程中系统会自动触发此事件。 |
5398| callback | [Callback\<number>](../apis-basic-services-kit/js-apis-base.md#callback) | 是   | 进度更新事件回调方法,progress: number,表示当前转码进度。 |
5399
5400**示例:**
5401
5402```ts
5403avTranscoder.on('progressUpdate', (progress: number) => {
5404  console.info('avTranscoder progressUpdate = ' + progress);
5405});
5406```
5407
5408### off('progressUpdate')<sup>12+</sup>
5409
5410off(type:'progressUpdate', callback?: Callback\<number>): void
5411
5412取消注册转码进度更新事件。
5413
5414**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
5415
5416**参数:**
5417
5418| 参数名 | 类型   | 必填 | 说明                                                         |
5419| ------ | ------ | ---- | ------------------------------------------------------------ |
5420| type   | string | 是   | 进度更新事件回调类型,支持的事件:'progressUpdate'。 |
5421| callback | [Callback\<number>](../apis-basic-services-kit/js-apis-base.md#callback) | 否   | 已注册的进度更新事件回调。由于当前回调注册时,仅会保留最后一次注册的回调,建议此参数缺省。 |
5422
5423**示例:**
5424
5425```ts
5426avTranscoder.off('progressUpdate');
5427```
5428
5429### on('error')<sup>12+</sup>
5430
5431on(type: 'error', callback: ErrorCallback): void
5432
5433注册AVtranscoder的错误事件,该事件仅用于错误提示。如果AVTranscoder上报error事件,开发者需要通过[release()](#release12)退出转码操作。
5434
5435开发者只能订阅一个错误事件的回调方法,当开发者重复订阅时,以最后一次订阅的回调接口为准。
5436
5437**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
5438
5439**参数:**
5440
5441| 参数名   | 类型          | 必填 | 说明                                                         |
5442| -------- | ------------- | ---- | ------------------------------------------------------------ |
5443| type     | string        | 是   | 转码错误事件回调类型'error'。 <br>- 'error':录制过程中发生错误,触发该事件。 |
5444| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 转码错误事件回调方法。                                       |
5445
5446**错误码:**
5447
5448以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
5449
5450| 错误码ID | 错误信息                                   |
5451| -------- | ------------------------------------------ |
5452| 401      | The parameter check failed. |
5453| 801      | Capability not supported. |
5454| 5400101  | No memory.            |
5455| 5400102  | Operation not allowed. |
5456| 5400103  | I/O error.              |
5457| 5400104  | Time out.            |
5458| 5400105  | Service died.           |
5459| 5400106  | Unsupported format.      |
5460
5461**示例:**
5462
5463```ts
5464import { BusinessError } from '@kit.BasicServicesKit';
5465
5466avTranscoder.on('error', (err: BusinessError) => {
5467  console.info('case avTranscoder.on(error) called, errMessage is ' + err.message);
5468});
5469```
5470
5471### off('error')<sup>12+</sup>
5472
5473off(type:'error', callback?: ErrorCallback): void
5474
5475取消注册转码错误事件,取消后不再接收到AVTranscoder的错误事件。
5476
5477**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
5478
5479**参数:**
5480
5481| 参数名 | 类型   | 必填 | 说明                                                         |
5482| ------ | ------ | ---- | ------------------------------------------------------------ |
5483| type   | string | 是   | 转码错误事件回调类型'error'。 <br>- 'error':转码过程中发生错误,触发该事件。 |
5484| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否   | 错误事件回调方法。 |
5485
5486**示例:**
5487
5488```ts
5489avTranscoder.off('error');
5490```
5491
5492### on('complete')<sup>12+</sup>
5493
5494on(type: 'complete', callback: Callback\<void>): void
5495
5496注册转码完成事件,并通过注册的回调方法通知开发者。开发者只能注册一个进度更新事件的回调方法,当开发者重复注册时,以最后一次注册的回调接口为准。
5497
5498当AVTranscoder上报complete事件时,当前转码操作已完成,开发者需要通过[release()](#release12)退出转码操作。
5499
5500**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
5501
5502**参数:**
5503
5504| 参数名   | 类型     | 必填 | 说明                                                         |
5505| -------- | -------- | ---- | ------------------------------------------------------------ |
5506| type     | string   | 是   | 完成事件回调类型,支持的事件:'complete',在转码过程中系统会自动触发此事件。 |
5507| callback | [Callback\<void>](../apis-basic-services-kit/js-apis-base.md#callback) | 是   | 完成事件回调方法。 |
5508
5509**示例:**
5510
5511```ts
5512avTranscoder.on('complete', async () => {
5513  console.info('avTranscoder complete');
5514  // 开发者须在此监听转码完成事件
5515  // 须等待avTranscoder.release()之后,再对转码后的文件进行转发、上传、转存等处理
5516  await avTranscoder.release();
5517  avTranscoder = undefined;
5518});
5519```
5520
5521### off('complete')<sup>12+</sup>
5522
5523off(type:'complete', callback?: Callback\<void>): void
5524
5525取消注册转码完成事件。
5526
5527**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
5528
5529**参数:**
5530
5531| 参数名 | 类型   | 必填 | 说明                                                         |
5532| ------ | ------ | ---- | ------------------------------------------------------------ |
5533| type   | string | 是   | 转码完成事件回调类型,支持的事件:'complete'。 |
5534| callback | [Callback\<void>](../apis-basic-services-kit/js-apis-base.md#callback) | 否   | 完成事件回调方法。 |
5535
5536**示例:**
5537
5538```ts
5539avTranscoder.off('complete');
5540```
5541
5542## AVTranscoderConfig<sup>12+</sup>
5543
5544表示视频转码的参数设置。
5545
5546**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
5547
5548| 名称            | 类型                                    | 只读 | 可选 | 说明                                                         |
5549| --------------- | ---------------------------------------- |---- | ---- | ------------------------------------------------------------ |
5550| audioBitrate | number     | 否 | 是 | 输出音频的码率,单位为比特率(bps),支持范围[1-500000]。默认设置为48Kbps。|
5551| audioCodec | [CodecMimeType](#codecmimetype8)     | 否 | 是  | 输出音频的编码格式,当前仅支持AAC。默认设置为AAC。                   |
5552| fileFormat         | [ContainerFormatType](#containerformattype8) | 否 | 否   | 输出视频文件的封装格式,当前视频文件仅支持MP4。|
5553| videoBitrate         | number | 否 |  是  | 输出视频的码率,单位为比特率(bps)。默认码率按输出视频的分辨率设置,[240p,480P]默认码率值为1Mbps,(480P,720P]默认码率值为2Mbps,(720P,1080P]默认码率值为4Mbps,1080P及以上默认值为8Mbps。|
5554| videoCodec        | [CodecMimeType](#codecmimetype8) | 否 | 是   | 输出视频的编码格式,当前仅支持AVC和HEVC。若源视频编码格式为HEVC,则默认设置为HEVC,否则默认设置为AVC。|
5555| videoFrameWidth        | number | 否 |  是   | 输出视频帧的宽,单位为像素(px),支持范围[240-3840]。默认设置为源视频帧的宽。|
5556| videoFrameHeight        | number | 否 |  是   | 输出视频帧的高,单位为像素(px),支持范围[240-2160]。默认设置为源视频帧的高。|
5557
5558
5559
5560## AVMetadataExtractor<sup>11+</sup>
5561
5562元数据获取类,用于从媒体资源中获取元数据。在调用AVMetadataExtractor的方法前,需要先通过[createAVMetadataExtractor()](#mediacreateavmetadataextractor11)构建一个AVMetadataExtractor实例。
5563
5564获取音频或视频元数据的demo可参考:[获取音视频元数据开发指导](../../media/media/avmetadataextractor.md)。
5565
5566### 属性
5567
5568**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5569
5570| 名称                                                | 类型                                                         | 可读 | 可写 | 说明                                                         |
5571| --------------------------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
5572| 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。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致音视频元数据获取异常。 |
5573| dataSrc<sup>11+</sup>                               | [AVDataSrcDescriptor](#avdatasrcdescriptor10)                | 是   | 是   | 流式媒体资源描述,通过该属性设置数据源。在获取元数据之前,必须设置数据源属性,只能设置fdSrc和dataSrc的其中一个。<br/> 当应用从远端获取音视频媒体文件,在应用未下载完整音视频资源时,可以设置dataSrc提前获取该资源的元数据。|
5574
5575### fetchMetadata<sup>11+</sup>
5576
5577fetchMetadata(callback: AsyncCallback\<AVMetadata>): void
5578
5579异步方式获取媒体元数据。通过注册回调函数获取返回值。
5580
5581**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5582
5583**参数:**
5584
5585| 参数名   | 类型                                         | 必填 | 说明                                |
5586| -------- | -------------------------------------------- | ---- | ----------------------------------- |
5587| callback | AsyncCallback\<[AVMetadata](#avmetadata11)>       | 是   | 回调函数。异步返回音视频元数据对象(AVMetadata)。|
5588
5589**错误码:**
5590
5591以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
5592
5593| 错误码ID | 错误信息                                   |
5594| -------- | ------------------------------------------ |
5595| 5400102  | Operation not allowed. Returned by callback. |
5596| 5400106  | Unsupported format. Returned by callback.  |
5597
5598**示例:**
5599
5600```ts
5601import { BusinessError } from '@kit.BasicServicesKit';
5602
5603avMetadataExtractor.fetchMetadata((error: BusinessError, metadata: media.AVMetadata) => {
5604  if (error) {
5605    console.error(`Failed to fetch Metadata, err = ${JSON.stringify(error)}`);
5606    return;
5607  }
5608  console.info(`Succeeded in fetching Metadata, genre: ${metadata.genre}`);
5609});
5610```
5611
5612### fetchMetadata<sup>11+</sup>
5613
5614fetchMetadata(): Promise\<AVMetadata>
5615
5616异步方式获取媒体元数据。通过Promise获取返回值。
5617
5618**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5619
5620**返回值:**
5621
5622| 类型           | 说明                                     |
5623| -------------- | ---------------------------------------- |
5624| Promise\<[AVMetadata](#avmetadata11)>  | Promise对象。异步返回音视频元数据对象(AVMetadata)。 |
5625
5626**错误码:**
5627
5628以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
5629
5630| 错误码ID | 错误信息                                  |
5631| -------- | ----------------------------------------- |
5632| 5400102  | Operation not allowed. Returned by promise. |
5633| 5400106  | Unsupported format. Returned by promise.  |
5634
5635**示例:**
5636
5637```ts
5638import { BusinessError } from '@kit.BasicServicesKit';
5639
5640avMetadataExtractor.fetchMetadata().then((metadata: media.AVMetadata) => {
5641  console.info(`Succeeded in fetching Metadata, genre: ${metadata.genre}`);
5642}).catch((error: BusinessError) => {
5643  console.error(`Failed to fetch Metadata, error message:${error.message}`);
5644});
5645```
5646
5647### fetchAlbumCover<sup>11+</sup>
5648
5649fetchAlbumCover(callback: AsyncCallback\<image.PixelMap>): void
5650
5651异步方式获取音频专辑封面。通过注册回调函数获取返回值。
5652
5653**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5654
5655**参数:**
5656
5657| 参数名   | 类型                                         | 必填 | 说明                                |
5658| -------- | -------------------------------------------- | ---- | ----------------------------------- |
5659| callback | AsyncCallback\<[image.PixelMap](../apis-image-kit/arkts-apis-image-PixelMap.md)>    | 是   | 回调函数。异步返回专辑封面。 |
5660
5661**错误码:**
5662
5663以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
5664
5665| 错误码ID | 错误信息                                   |
5666| -------- | ------------------------------------------ |
5667| 5400102  | Operation not allowed. Return by callback. |
5668| 5400106  | Unsupported format. Returned by callback.  |
5669
5670**示例:**
5671
5672```ts
5673import { BusinessError } from '@kit.BasicServicesKit';
5674import { image } from '@kit.ImageKit';
5675
5676let pixel_map : image.PixelMap | undefined = undefined;
5677
5678avMetadataExtractor.fetchAlbumCover((error: BusinessError, pixelMap: image.PixelMap) => {
5679  if (error) {
5680    console.error(`Failed to fetch AlbumCover, error = ${JSON.stringify(error)}`);
5681    return;
5682  }
5683  pixel_map = pixelMap;
5684});
5685```
5686
5687### fetchAlbumCover<sup>11+</sup>
5688
5689fetchAlbumCover(): Promise\<image.PixelMap>
5690
5691异步方式获取专辑封面。通过Promise获取返回值。
5692
5693**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5694
5695**返回值:**
5696
5697| 类型           | 说明                                     |
5698| -------------- | ---------------------------------------- |
5699| Promise\<[image.PixelMap](../apis-image-kit/arkts-apis-image-PixelMap.md)> |  Promise对象。异步返回专辑封面。 |
5700
5701**错误码:**
5702
5703以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
5704
5705| 错误码ID | 错误信息                                  |
5706| -------- | ----------------------------------------- |
5707| 5400102  | Operation not allowed. Returned by promise. |
5708| 5400106  | Unsupported format. Returned by promise.  |
5709
5710**示例:**
5711
5712```ts
5713import { BusinessError } from '@kit.BasicServicesKit';
5714import { image } from '@kit.ImageKit';
5715
5716let pixel_map : image.PixelMap | undefined = undefined;
5717
5718avMetadataExtractor.fetchAlbumCover().then((pixelMap: image.PixelMap) => {
5719  pixel_map = pixelMap;
5720}).catch((error: BusinessError) => {
5721  console.error(`Failed to fetch AlbumCover, error message:${error.message}`);
5722});
5723```
5724
5725### release<sup>11+</sup>
5726
5727release(callback: AsyncCallback\<void>): void
5728
5729异步方式释放资源。通过注册回调函数获取返回值。
5730
5731**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5732
5733**参数:**
5734
5735| 参数名   | 类型                                         | 必填 | 说明                                |
5736| -------- | -------------------------------------------- | ---- | ----------------------------------- |
5737| callback | AsyncCallback\<void>                   | 是   |回调函数。当释放资源成功,err为undefined,否则为错误对象。 |
5738
5739**错误码:**
5740
5741以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
5742
5743| 错误码ID | 错误信息                                   |
5744| -------- | ------------------------------------------ |
5745| 5400102  | Operation not allowed. Returned by callback. |
5746
5747**示例:**
5748
5749```ts
5750import { BusinessError } from '@kit.BasicServicesKit';
5751
5752avMetadataExtractor.release((error: BusinessError) => {
5753  if (error) {
5754    console.error(`Failed to release, err = ${JSON.stringify(error)}`);
5755    return;
5756  }
5757  console.info(`Succeeded in releasing.`);
5758});
5759```
5760
5761### release<sup>11+</sup>
5762
5763release(): Promise\<void>
5764
5765异步方式释放资源。通过Promise获取返回值。
5766
5767**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5768
5769**返回值:**
5770
5771| 类型           | 说明                                     |
5772| -------------- | ---------------------------------------- |
5773| Promise\<void> | 异步方式释放资源release方法的Promise返回值。 |
5774
5775**错误码:**
5776
5777以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
5778
5779| 错误码ID | 错误信息                                  |
5780| -------- | ----------------------------------------- |
5781| 5400102  | Operation not allowed. Returned by promise. |
5782
5783**示例:**
5784
5785```ts
5786import { BusinessError } from '@kit.BasicServicesKit';
5787
5788avMetadataExtractor.release().then(() => {
5789  console.info(`Succeeded in releasing.`);
5790}).catch((error: BusinessError) => {
5791  console.error(`Failed to release, error message:${error.message}`);
5792});
5793```
5794
5795## AVMetadata<sup>11+</sup>
5796
5797音视频元数据,包含各个元数据字段。在[AVRecorderConfig](#avrecorderconfig9)中使用时未声明为当前版本只读的参数可以作为使用[AVRecorder](#avrecorder9)录制时的入参。
5798
5799**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5800
5801| 名称   | 类型   | 必填 | 说明                                                         |
5802| ------ | ------ | ---- | ------------------------------------------------------------ |
5803| album     | string | 否   | 专辑的标题。当前版本为只读参数。     |
5804| albumArtist | string | 否   | 专辑的艺术家。当前版本为只读参数。 |
5805| artist | string | 否   | 媒体资源的艺术家。当前版本为只读参数。 |
5806| author | string | 否   | 媒体资源的作者。当前版本为只读参数。 |
5807| dateTime | string | 否   | 媒体资源的创建时间。当前版本为只读参数。 |
5808| dateTimeFormat | string | 否   | 媒体资源的创建时间,按YYYY-MM-DD HH:mm:ss格式输出。当前版本为只读参数。 |
5809| composer | string | 否   | 媒体资源的作曲家。当前版本为只读参数。 |
5810| duration | string | 否   | 媒体资源的时长。当前版本为只读参数。 |
5811| genre | string | 否   | 媒体资源的类型或体裁。|
5812| hasAudio | string | 否   | 媒体资源是否包含音频。当前版本为只读参数。 |
5813| hasVideo | string | 否   | 媒体资源是否包含视频。当前版本为只读参数。 |
5814| mimeType | string | 否   | 媒体资源的mime类型。当前版本为只读参数。 |
5815| trackCount | string | 否   | 媒体资源的轨道数量。当前版本为只读参数。 |
5816| sampleRate | string | 否   | 音频的采样率,单位为赫兹(Hz)。当前版本为只读参数。 |
5817| title | string | 否   | 媒体资源的标题。当前版本为只读参数。当前版本为只读参数。 |
5818| videoHeight | string | 否   | 视频的高度,单位为像素。当前版本为只读参数。 |
5819| videoWidth | string | 否   | 视频的宽度,单位为像素。当前版本为只读参数。 |
5820| videoOrientation | string | 否   | 视频的旋转方向,单位为度(°)。|
5821| hdrType<sup>12+</sup> | [HdrType](#hdrtype12) | 否   | 媒体资源的HDR类型。当前版本为只读参数。 |
5822| location<sup>12+</sup> | [Location](#location) | 否 | 视频的地理位置信息。 |
5823| customInfo<sup>12+</sup> | Record<string, string> | 否 | 从moov.meta.list 获取的自定义参数键值映射。|
5824
5825## HdrType<sup>12+</sup>
5826
5827表示视频HDR类型的枚举。
5828
5829**系统能力:** SystemCapability.Multimedia.Media.Core
5830
5831| 名称                      | 值   | 说明                   |
5832| ------------------------- | ---- | ---------------------- |
5833| AV_HDR_TYPE_NONE          | 0    | 表示无HDR类型。 |
5834| AV_HDR_TYPE_VIVID         | 1    | 表示为HDR VIVID类型。 |
5835
5836## media.createAudioPlayer<sup>(deprecated)</sup>
5837
5838createAudioPlayer(): AudioPlayer
5839
5840同步方式创建音频播放实例。
5841
5842> **说明:**
5843> 从API version 6开始支持,从API version 9开始废弃,建议使用[createAVPlayer](#mediacreateavplayer9)替代。
5844
5845**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5846
5847**返回值:**
5848
5849| 类型                        | 说明                                                         |
5850| --------------------------- | ------------------------------------------------------------ |
5851| [AudioPlayer](#audioplayerdeprecated) | 返回AudioPlayer类实例,失败时返回null。可用于音频播放、暂停、停止等操作。 |
5852
5853**示例:**
5854
5855```ts
5856let audioPlayer: media.AudioPlayer = media.createAudioPlayer();
5857```
5858
5859## media.createVideoPlayer<sup>(deprecated)</sup>
5860
5861createVideoPlayer(callback: AsyncCallback\<VideoPlayer>): void
5862
5863异步方式创建视频播放实例,通过注册回调函数获取返回值。
5864
5865> **说明:**
5866> 从API version 8开始支持,从API version 9开始废弃,建议使用[createAVPlayer](#mediacreateavplayer9)替代。
5867
5868**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
5869
5870**参数:**
5871
5872| 参数名   | 类型                                       | 必填 | 说明                                                         |
5873| -------- | ------------------------------------------ | ---- | ------------------------------------------------------------ |
5874| callback | AsyncCallback<[VideoPlayer](#videoplayerdeprecated)> | 是   | 回调函数。创建VideoPlayer实例成功时,err为undefined,data为获取到的VideoPlayer实例,否则为错误对象。 |
5875
5876**示例:**
5877
5878```ts
5879import { BusinessError } from '@kit.BasicServicesKit';
5880
5881let videoPlayer: media.VideoPlayer;
5882media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => {
5883  if (video != null) {
5884    videoPlayer = video;
5885    console.info('Succeeded in creating VideoPlayer');
5886  } else {
5887    console.error(`Failed to create VideoPlayer, error:${error}`);
5888  }
5889});
5890```
5891
5892## media.createVideoPlayer<sup>(deprecated)</sup>
5893
5894createVideoPlayer(): Promise\<VideoPlayer>
5895
5896异步方式创建视频播放实例,通过Promise获取返回值。
5897
5898> **说明:**
5899> 从API version 8开始支持,从API version 9开始废弃,建议使用[createAVPlayer](#mediacreateavplayer9-1)替代。
5900
5901**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
5902
5903**返回值:**
5904
5905| 类型                                 | 说明                                                         |
5906| ------------------------------------ | ------------------------------------------------------------ |
5907| Promise<[VideoPlayer](#videoplayerdeprecated)> | Promise对象。异步返回VideoPlayer实例,失败时返回null。可用于管理和播放视频媒体。 |
5908
5909**示例:**
5910
5911```ts
5912import { BusinessError } from '@kit.BasicServicesKit';
5913
5914let videoPlayer: media.VideoPlayer;
5915media.createVideoPlayer().then((video: media.VideoPlayer) => {
5916  if (video != null) {
5917    videoPlayer = video;
5918    console.info('Succeeded in creating VideoPlayer');
5919  } else {
5920    console.error('Failed to create VideoPlayer');
5921  }
5922}).catch((error: BusinessError) => {
5923  console.error(`Failed to create VideoPlayer, error:${error}`);
5924});
5925```
5926
5927## media.createAudioRecorder<sup>(deprecated)</sup>
5928
5929createAudioRecorder(): AudioRecorder
5930
5931创建音频录制的实例来控制音频的录制。
5932一台设备只允许创建一个录制实例。
5933
5934> **说明:**
5935> 从API version 6开始支持,从API version 9开始废弃,建议使用[createAVRecorder](#mediacreateavrecorder9)替代。
5936
5937**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
5938
5939**返回值:**
5940
5941| 类型                            | 说明                                                         |
5942| ------------------------------- | ------------------------------------------------------------ |
5943| [AudioRecorder](#audiorecorderdeprecated) | 返回AudioRecorder类实例,失败时返回null。可用于录制音频媒体。 |
5944
5945**示例:**
5946
5947```ts
5948let audioRecorder: media.AudioRecorder = media.createAudioRecorder();
5949```
5950
5951## MediaErrorCode<sup>(deprecated)</sup>
5952
5953媒体服务错误类型枚举。
5954
5955> **说明:**
5956> 从API version 8开始支持,从API version 11开始废弃,建议使用[媒体错误码](#averrorcode9)替代。
5957
5958**系统能力:** SystemCapability.Multimedia.Media.Core
5959
5960| 名称                       | 值   | 说明                                   |
5961| -------------------------- | ---- | -------------------------------------- |
5962| MSERR_OK                   | 0    | 表示操作成功。                         |
5963| MSERR_NO_MEMORY            | 1    | 表示申请内存失败,系统可能无可用内存。 |
5964| MSERR_OPERATION_NOT_PERMIT | 2    | 表示无权限执行此操作。                 |
5965| MSERR_INVALID_VAL          | 3    | 表示传入入参无效。                     |
5966| MSERR_IO                   | 4    | 表示发生IO错误。                       |
5967| MSERR_TIMEOUT              | 5    | 表示操作超时。                         |
5968| MSERR_UNKNOWN              | 6    | 表示未知错误。                         |
5969| MSERR_SERVICE_DIED         | 7    | 表示服务端失效。                       |
5970| MSERR_INVALID_STATE        | 8    | 表示在当前状态下,不允许执行此操作。   |
5971| MSERR_UNSUPPORTED          | 9    | 表示在当前版本下,不支持此操作。       |
5972
5973## AudioPlayer<sup>(deprecated)</sup>
5974
5975> **说明:**
5976> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer](#avplayer9)替代。
5977
5978音频播放管理类,用于管理和播放音频媒体。在调用AudioPlayer的方法前,需要先通过[createAudioPlayer()](#mediacreateaudioplayerdeprecated)构建一个AudioPlayer实例。
5979
5980### 属性<sup>(deprecated)</sup>
5981
5982**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5983
5984| 名称                            | 类型                                                   | 只读 | 可选 | 说明                                                         |
5985| ------------------------------- | ------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
5986| 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。 |
5987| 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/> |
5988| loop                            | boolean                                                | 否   | 否  | 音频循环播放属性,设置为'true'表示循环播放。                 |
5989| audioInterruptMode<sup>9+</sup> | [audio.InterruptMode](../apis-audio-kit/js-apis-audio.md#interruptmode9) | 是   | 是   | 音频焦点模型。                                               |
5990| currentTime                     | number                                                 | 是   | 否   | 音频的当前播放位置,单位为毫秒(ms)。                       |
5991| duration                        | number                                                 | 是   | 否   | 音频时长,单位为毫秒(ms)。                                 |
5992| state                           | [AudioState](#audiostatedeprecated)                              | 是   | 否   | 可以查询音频播放的状态,该状态不可作为调用play/pause/stop等状态切换的触发条件。 |
5993
5994### play<sup>(deprecated)</sup>
5995
5996play(): void
5997
5998开始播放音频资源,需在'dataLoad'事件成功触发后,才能调用。
5999
6000> **说明:**
6001> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.play](#play9)替代。
6002
6003**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
6004
6005**示例:**
6006
6007```ts
6008audioPlayer.on('play', () => {    //设置'play'事件回调。
6009  console.info('audio play called');
6010});
6011audioPlayer.play();
6012```
6013
6014### pause<sup>(deprecated)</sup>
6015
6016pause(): void
6017
6018暂停播放音频资源。
6019
6020> **说明:**
6021> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.pause](#pause9)替代。
6022
6023**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
6024
6025**示例:**
6026
6027```ts
6028audioPlayer.on('pause', () => {    //设置'pause'事件回调。
6029  console.info('audio pause called');
6030});
6031audioPlayer.pause();
6032```
6033
6034### stop<sup>(deprecated)</sup>
6035
6036stop(): void
6037
6038停止播放音频资源。
6039
6040> **说明:**
6041> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.stop](#stop9)替代。
6042
6043**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
6044
6045**示例:**
6046
6047```ts
6048audioPlayer.on('stop', () => {    //设置'stop'事件回调。
6049  console.info('audio stop called');
6050});
6051audioPlayer.stop();
6052```
6053
6054### reset<sup>(deprecated)</sup>
6055
6056reset(): void
6057
6058重置播放音频资源。
6059
6060> **说明:**
6061> 从API version 7开始支持,从API version 9开始废弃,建议使用[AVPlayer.reset](#reset9)替代。
6062
6063**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
6064
6065**示例:**
6066
6067```ts
6068audioPlayer.on('reset', () => {    //设置'reset'事件回调。
6069  console.info('audio reset called');
6070});
6071audioPlayer.reset();
6072```
6073
6074### seek<sup>(deprecated)</sup>
6075
6076seek(timeMs: number): void
6077
6078跳转到指定播放位置。
6079
6080> **说明:**
6081> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。
6082
6083**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
6084
6085**参数:**
6086
6087| 参数名 | 类型   | 必填 | 说明                                                        |
6088| ------ | ------ | ---- | ----------------------------------------------------------- |
6089| timeMs | number | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围[0, duration]。 |
6090
6091**示例:**
6092
6093```ts
6094audioPlayer.on('timeUpdate', (seekDoneTime: number) => {    //设置'timeUpdate'事件回调。
6095  if (seekDoneTime == null) {
6096    console.error('Failed to seek');
6097    return;
6098  }
6099  console.info('Succeeded in seek. seekDoneTime: ' + seekDoneTime);
6100});
6101audioPlayer.seek(30000);    //seek到30000ms的位置。
6102```
6103
6104### setVolume<sup>(deprecated)</sup>
6105
6106setVolume(vol: number): void
6107
6108设置音量。
6109
6110> **说明:**
6111> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.setVolume](#setvolume9)替代。
6112
6113**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
6114
6115**参数:**
6116
6117| 参数名 | 类型   | 必填 | 说明                                                         |
6118| ------ | ------ | ---- | ------------------------------------------------------------ |
6119| vol    | number | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
6120
6121**示例:**
6122
6123```ts
6124audioPlayer.on('volumeChange', () => {    //设置'volumeChange'事件回调。
6125  console.info('audio volumeChange called');
6126});
6127audioPlayer.setVolume(1);    //设置音量到100%。
6128```
6129
6130### release<sup>(deprecated)</sup>
6131
6132release(): void
6133
6134释放音频资源。
6135
6136> **说明:**
6137> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.release](#release9)替代。
6138
6139**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
6140
6141**示例:**
6142
6143```ts
6144audioPlayer.release();
6145audioPlayer = undefined;
6146```
6147
6148### getTrackDescription<sup>(deprecated)</sup>
6149
6150getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void
6151
6152获取音频轨道信息。需在'dataLoad'事件成功触发后,才能调用。通过回调函数获取返回值。
6153
6154> **说明:**
6155> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9)替代。
6156
6157**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
6158
6159**参数:**
6160
6161| 参数名   | 类型                                                         | 必填 | 说明                                       |
6162| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------ |
6163| callback | AsyncCallback\<Array\<[MediaDescription](#mediadescription8)>> | 是   | 回调函数。获取音频轨道信息成功时,err为undefined,data为获取到的MediaDescription数组,否则为错误对象。 |
6164
6165**示例:**
6166
6167```ts
6168import { BusinessError } from '@kit.BasicServicesKit';
6169
6170audioPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => {
6171  if (arrList != null) {
6172    console.info('Succeeded in getting TrackDescription');
6173  } else {
6174    console.error(`Failed to get TrackDescription, error:${error}`);
6175  }
6176});
6177```
6178
6179### getTrackDescription<sup>(deprecated)</sup>
6180
6181getTrackDescription(): Promise\<Array\<MediaDescription>>
6182
6183获取音频轨道信息。需在'dataLoad'事件成功触发后,才能调用。通过Promise获取返回值。
6184
6185> **说明:**
6186> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9-1)替代。
6187
6188**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
6189
6190**返回值:**
6191
6192| 类型                                                   | 说明                                            |
6193| ------------------------------------------------------ | ----------------------------------------------- |
6194| Promise<Array<[MediaDescription](#mediadescription8)>> | 音频轨道信息MediaDescription数组Promise返回值。 |
6195
6196**示例:**
6197
6198```ts
6199import { BusinessError } from '@kit.BasicServicesKit';
6200
6201audioPlayer.getTrackDescription().then((arrList: Array<media.MediaDescription>) => {
6202  console.info('Succeeded in getting TrackDescription');
6203}).catch((error: BusinessError) => {
6204  console.error(`Failed to get TrackDescription, error:${error}`);
6205});
6206```
6207
6208### on('bufferingUpdate')<sup>(deprecated)</sup>
6209
6210on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: number) => void): void
6211
6212开始订阅音频缓存更新事件。仅网络播放支持该订阅事件。
6213
6214> **说明:**
6215> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('bufferingUpdate')](#onbufferingupdate9)替代。
6216
6217**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
6218
6219**参数:**
6220
6221| 参数名   | 类型     | 必填 | 说明                                                         |
6222| -------- | -------- | ---- | ------------------------------------------------------------ |
6223| type     | string   | 是   | 音频缓存事件回调类型,支持的事件:'bufferingUpdate'。        |
6224| callback | function | 是   | 音频缓存事件回调方法。<br>[BufferingInfoType](#bufferinginfotype8)value值固定为0。 |
6225
6226**示例:**
6227
6228```ts
6229audioPlayer.on('bufferingUpdate', (infoType: media.BufferingInfoType, value: number) => {
6230  console.info('audio bufferingInfo type: ' + infoType);
6231  console.info('audio bufferingInfo value: ' + value);
6232});
6233```
6234
6235### on('play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange')<sup>(deprecated)</sup>
6236
6237on(type: 'play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange', callback: () => void): void
6238
6239开始订阅音频播放事件。
6240
6241> **说明:**
6242> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('stateChange')](#onstatechange9)替代。
6243
6244**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
6245
6246**参数:**
6247
6248| 参数名   | 类型       | 必填 | 说明                                                         |
6249| -------- | ---------- | ---- | ------------------------------------------------------------ |
6250| 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)调用,播放音量改变后触发该事件。 |
6251| callback | () => void | 是   | 播放事件回调方法。                                           |
6252
6253**示例:**
6254
6255```ts
6256import { fileIo as fs } from '@kit.CoreFileKit';
6257import { BusinessError } from '@kit.BasicServicesKit';
6258
6259let audioPlayer: media.AudioPlayer = media.createAudioPlayer();  //创建一个音频播放实例。
6260audioPlayer.on('dataLoad', () => {            //设置'dataLoad'事件回调,src属性设置成功后,触发此回调。
6261  console.info('audio set source called');
6262  audioPlayer.play();                       //开始播放,并触发'play'事件回调。
6263});
6264audioPlayer.on('play', () => {                //设置'play'事件回调。
6265  console.info('audio play called');
6266  audioPlayer.seek(30000);                  //调用seek方法,并触发'timeUpdate'事件回调。
6267});
6268audioPlayer.on('pause', () => {               //设置'pause'事件回调。
6269  console.info('audio pause called');
6270  audioPlayer.stop();                       //停止播放,并触发'stop'事件回调。
6271});
6272audioPlayer.on('reset', () => {               //设置'reset'事件回调。
6273  console.info('audio reset called');
6274  audioPlayer.release();                    //释放播放实例资源。
6275  audioPlayer = undefined;
6276});
6277audioPlayer.on('timeUpdate', (seekDoneTime: number) => {  //设置'timeUpdate'事件回调。
6278  if (seekDoneTime == null) {
6279    console.error('Failed to seek');
6280    return;
6281  }
6282  console.info('Succeeded in seek, and seek time is ' + seekDoneTime);
6283  audioPlayer.setVolume(0.5);                //设置音量为50%,并触发'volumeChange'事件回调。
6284});
6285audioPlayer.on('volumeChange', () => {         //设置'volumeChange'事件回调。
6286  console.info('audio volumeChange called');
6287  audioPlayer.pause();                       //暂停播放,并触发'pause'事件回调。
6288});
6289audioPlayer.on('finish', () => {               //设置'finish'事件回调。
6290  console.info('audio play finish');
6291  audioPlayer.stop();                        //停止播放,并触发'stop'事件回调。
6292});
6293audioPlayer.on('error', (error: BusinessError) => {  //设置'error'事件回调。
6294  console.error(`audio error called, error: ${error}`);
6295});
6296
6297// 用户选择音频设置fd(本地播放)。
6298let fdPath = 'fd://';
6299// path路径的码流可通过"hdc file send D:\xxx\01.mp3 /data/accounts/account_0/appdata" 命令,将其推送到设备上。
6300let path = '/data/accounts/account_0/appdata/ohos.xxx.xxx.xxx/01.mp3';
6301fs.open(path).then((file) => {
6302  fdPath = fdPath + '' + file.fd;
6303  console.info('Succeeded in opening fd, fd is' + fdPath);
6304  audioPlayer.src = fdPath;  //设置src属性,并触发'dataLoad'事件回调。
6305}, (err: BusinessError) => {
6306  console.error('Failed to open fd, err is' + err);
6307}).catch((err: BusinessError) => {
6308  console.error('Failed to open fd, err is' + err);
6309});
6310```
6311
6312### on('timeUpdate')<sup>(deprecated)</sup>
6313
6314on(type: 'timeUpdate', callback: Callback\<number>): void
6315
6316开始订阅音频播放时间更新事件。处于播放状态时,每隔1s上报一次该事件。
6317
6318> **说明:**
6319> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('timeUpdate')](#ontimeupdate9)替代。
6320
6321**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
6322
6323**参数:**
6324
6325| 参数名   | 类型              | 必填 | 说明                                                         |
6326| -------- | ----------------- | ---- | ------------------------------------------------------------ |
6327| type     | string            | 是   | 播放事件回调类型,支持的事件包括:'timeUpdate'。<br>- 'timeUpdate':音频播放时间戳更新,开始播放后自动触发该事件。 |
6328| callback | Callback\<number> | 是   | 播放事件回调方法。回调方法入参为更新后的时间戳。             |
6329
6330**示例:**
6331
6332```ts
6333audioPlayer.on('timeUpdate', (newTime: number) => {    //设置'timeUpdate'事件回调。
6334  if (newTime == null) {
6335    console.error('Failed to do timeUpadate');
6336    return;
6337  }
6338  console.info('Succeeded in doing timeUpadate. seekDoneTime: ' + newTime);
6339});
6340audioPlayer.play();    //开始播放后,自动触发时间戳更新事件。
6341```
6342
6343### on('audioInterrupt')<sup>(deprecated)</sup>
6344
6345on(type: 'audioInterrupt', callback: (info: audio.InterruptEvent) => void): void
6346
6347监听音频焦点变化事件,参考[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)。
6348
6349> **说明:**
6350> 从API version 9开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('audioInterrupt')](#onaudiointerrupt9)替代。
6351
6352**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
6353
6354**参数:**
6355
6356| 参数名   | 类型                                                         | 必填 | 说明                                                     |
6357| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------------------- |
6358| type     | string                                                       | 是   | 音频焦点变化事件回调类型,支持的事件:'audioInterrupt'。 |
6359| callback | function  | 是   | 音频焦点变化事件回调方法。                               |
6360
6361**示例:**
6362
6363```ts
6364import { audio } from '@kit.AudioKit';
6365
6366audioPlayer.on('audioInterrupt', (info: audio.InterruptEvent) => {
6367  console.info('audioInterrupt called,and InterruptEvent info is:' + info);
6368});
6369```
6370
6371### on('error')<sup>(deprecated)</sup>
6372
6373on(type: 'error', callback: ErrorCallback): void
6374
6375开始订阅音频播放错误事件,当上报error错误事件后,用户需处理error事件,退出播放操作。
6376
6377> **说明:**
6378> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('error')](#onerror9)替代。
6379
6380**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
6381
6382**参数:**
6383
6384| 参数名   | 类型          | 必填 | 说明                                                         |
6385| -------- | ------------- | ---- | ------------------------------------------------------------ |
6386| type     | string        | 是   | 播放错误事件回调类型,支持的事件包括:'error'。<br>- 'error':音频播放中发生错误,触发该事件。 |
6387| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 播放错误事件回调方法。                                       |
6388
6389**示例:**
6390
6391```ts
6392import { BusinessError } from '@kit.BasicServicesKit';
6393
6394audioPlayer.on('error', (error: BusinessError) => {  //设置'error'事件回调。
6395  console.error(`audio error called, error: ${error}`);
6396});
6397audioPlayer.setVolume(3);  //设置volume为无效值,触发'error'事件。
6398```
6399
6400## AudioState<sup>(deprecated)</sup>
6401
6402type AudioState = 'idle' | 'playing' | 'paused' | 'stopped' | 'error'
6403
6404音频播放的状态机。可通过state属性获取当前状态。
6405
6406> **说明:**
6407> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayerState](#avplayerstate9)替代。
6408
6409**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
6410
6411| 类型    | 说明                                           |
6412| ------- | ---------------------------------------------- |
6413| 'idle'    | 音频播放空闲,dataload/reset成功后处于此状态。 |
6414| 'playing' | 音频正在播放,play成功后处于此状态。           |
6415| 'paused'  | 音频暂停播放,pause成功后处于此状态。          |
6416| 'stopped' | 音频播放停止,stop/播放结束后处于此状态。      |
6417| 'error'   | 错误状态。                                     |
6418
6419## VideoPlayer<sup>(deprecated)</sup>
6420
6421> **说明:**
6422> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer](#avplayer9)替代。
6423
6424视频播放管理类,用于管理和播放视频媒体。在调用VideoPlayer的方法前,需要先通过[createVideoPlayer()](#mediacreatevideoplayerdeprecated)构建一个VideoPlayer实例。
6425
6426### 属性
6427
6428**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6429
6430| 名称                            | 类型                                                   | 只读 | 可选 | 说明                                                         |
6431| ------------------------------- | ------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
6432| 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。 |
6433| 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/> |
6434| loop<sup>8+</sup>               | boolean                                                | 否   | 否   | 视频循环播放属性,设置为'true'表示循环播放。                 |
6435| videoScaleType<sup>9+</sup>     | [VideoScaleType](#videoscaletype9)                     | 否   | 是   | 视频缩放模式。默认值为VIDEO_SCALE_TYPE_FIT。                                               |
6436| audioInterruptMode<sup>9+</sup> | [audio.InterruptMode](../apis-audio-kit/js-apis-audio.md#interruptmode9) | 否   | 是   | 音频焦点模型。                                               |
6437| currentTime<sup>8+</sup>        | number                                                 | 是   | 否   | 视频的当前播放位置,单位为毫秒(ms)。                       |
6438| duration<sup>8+</sup>           | number                                                 | 是   | 否   | 视频时长,单位为毫秒(ms),返回-1表示直播模式。             |
6439| state<sup>8+</sup>              | [VideoPlayState](#videoplaystatedeprecated)                    | 是   | 否   | 视频播放的状态。                                             |
6440| width<sup>8+</sup>              | number                                                 | 是   | 否   | 视频宽,单位为像素(px)。                                   |
6441| height<sup>8+</sup>             | number                                                 | 是   | 否   | 视频高,单位为像素(px)。                                   |
6442
6443### setDisplaySurface<sup>(deprecated)</sup>
6444
6445setDisplaySurface(surfaceId: string, callback: AsyncCallback\<void>): void
6446
6447设置SurfaceId。通过回调函数获取返回值。
6448
6449*注意:SetDisplaySurface需要在设置url和Prepare之间,无音频的视频流必须设置Surface否则Prepare失败。
6450
6451> **说明:**
6452> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.surfaceId](#属性)替代。
6453
6454**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6455
6456**参数:**
6457
6458| 参数名    | 类型                 | 必填 | 说明                      |
6459| --------- | -------------------- | ---- | ------------------------- |
6460| surfaceId | string               | 是   | SurfaceId.                 |
6461| callback  | AsyncCallback\<void> | 是   | 回调函数。当设置SurfaceId成功,err为undefined,否则为错误对象。 |
6462
6463**示例:**
6464
6465```ts
6466import { BusinessError } from '@kit.BasicServicesKit';
6467
6468let surfaceId: string = '';
6469videoPlayer.setDisplaySurface(surfaceId, (err: BusinessError) => {
6470  if (err) {
6471    console.error('Failed to set DisplaySurface!');
6472  } else {
6473    console.info('Succeeded in setting DisplaySurface!');
6474  }
6475});
6476```
6477
6478### setDisplaySurface<sup>(deprecated)</sup>
6479
6480setDisplaySurface(surfaceId: string): Promise\<void>
6481
6482设置SurfaceId。通过Promise获取返回值。
6483
6484*注意:SetDisplaySurface需要在设置url和Prepare之间,无音频的视频流必须设置Surface否则Prepare失败。
6485
6486> **说明:**
6487> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.surfaceId](#属性)替代。
6488
6489**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6490
6491**参数:**
6492
6493| 参数名    | 类型   | 必填 | 说明      |
6494| --------- | ------ | ---- | --------- |
6495| surfaceId | string | 是   | SurfaceId. |
6496
6497**返回值:**
6498
6499| 类型           | 说明                           |
6500| -------------- | ------------------------------ |
6501| Promise\<void> | 设置SurfaceId的Promise返回值。 |
6502
6503**示例:**
6504
6505```ts
6506import { BusinessError } from '@kit.BasicServicesKit';
6507
6508let surfaceId: string = '';
6509videoPlayer.setDisplaySurface(surfaceId).then(() => {
6510  console.info('Succeeded in setting DisplaySurface');
6511}).catch((error: BusinessError) => {
6512  console.error(`video catchCallback, error:${error}`);
6513});
6514```
6515
6516### prepare<sup>(deprecated)</sup>
6517
6518prepare(callback: AsyncCallback\<void>): void
6519
6520准备播放视频。通过回调函数获取返回值。
6521
6522> **说明:**
6523> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.prepare](#prepare9)替代。
6524
6525**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6526
6527**参数:**
6528
6529| 参数名   | 类型                 | 必填 | 说明                     |
6530| -------- | -------------------- | ---- | ------------------------ |
6531| callback | AsyncCallback\<void> | 是   | 回调函数。当准备播放视频成功,err为undefined,否则为错误对象。|
6532
6533**示例:**
6534
6535```ts
6536import { BusinessError } from '@kit.BasicServicesKit';
6537
6538videoPlayer.prepare((err: BusinessError) => {
6539  if (err) {
6540    console.error('Failed to prepare!');
6541  } else {
6542    console.info('Succeeded in preparing!');
6543  }
6544});
6545```
6546
6547### prepare<sup>(deprecated)</sup>
6548
6549prepare(): Promise\<void>
6550
6551准备播放视频。通过Promise获取返回值。
6552
6553> **说明:**
6554> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.prepare](#prepare9-1)替代。
6555
6556**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6557
6558**返回值:**
6559
6560| 类型           | 说明                          |
6561| -------------- | ----------------------------- |
6562| Promise\<void> | 准备播放视频的Promise返回值。 |
6563
6564**示例:**
6565
6566```ts
6567import { BusinessError } from '@kit.BasicServicesKit';
6568
6569videoPlayer.prepare().then(() => {
6570  console.info('Succeeded in preparing');
6571}).catch((error: BusinessError) => {
6572  console.error(`video catchCallback, error:${error}`);
6573});
6574```
6575
6576### play<sup>(deprecated)</sup>
6577
6578play(callback: AsyncCallback\<void>): void
6579
6580开始播放视频。通过回调函数获取返回值。
6581
6582> **说明:**
6583> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.play](#play9)替代。
6584
6585**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6586
6587**参数:**
6588
6589| 参数名   | 类型                 | 必填 | 说明                     |
6590| -------- | -------------------- | ---- | ------------------------ |
6591| callback | AsyncCallback\<void> | 是   | 回调函数。当开始播放视频成功,err为undefined,否则为错误对象。 |
6592
6593**示例:**
6594
6595```ts
6596import { BusinessError } from '@kit.BasicServicesKit';
6597
6598videoPlayer.play((err: BusinessError) => {
6599  if (err) {
6600    console.error('Failed to play!');
6601  } else {
6602    console.info('Succeeded in playing!');
6603  }
6604});
6605```
6606
6607### play<sup>(deprecated)</sup>
6608
6609play(): Promise\<void>
6610
6611开始播放视频。通过Promise获取返回值。
6612
6613> **说明:**
6614> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.play](#play9-1)替代。
6615
6616**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6617
6618**返回值:**
6619
6620| 类型           | 说明                          |
6621| -------------- | ----------------------------- |
6622| Promise\<void> | 开始播放视频的Promise返回值。 |
6623
6624**示例:**
6625
6626```ts
6627import { BusinessError } from '@kit.BasicServicesKit';
6628
6629videoPlayer.play().then(() => {
6630  console.info('Succeeded in playing');
6631}).catch((error: BusinessError) => {
6632  console.error(`video catchCallback, error:${error}`);
6633});
6634```
6635
6636### pause<sup>(deprecated)</sup>
6637
6638pause(callback: AsyncCallback\<void>): void
6639
6640通过回调方式暂停播放视频。通过回调函数获取返回值。
6641
6642> **说明:**
6643> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.pause](#pause9)替代。
6644
6645**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6646
6647**参数:**
6648
6649| 参数名   | 类型                 | 必填 | 说明                     |
6650| -------- | -------------------- | ---- | ------------------------ |
6651| callback | AsyncCallback\<void> | 是   | 回调函数。当暂停播放视频成功,err为undefined,否则为错误对象。 |
6652
6653**示例:**
6654
6655```ts
6656import { BusinessError } from '@kit.BasicServicesKit';
6657
6658videoPlayer.pause((err: BusinessError) => {
6659  if (err) {
6660    console.error('Failed to pause!');
6661  } else {
6662    console.info('Succeeded in pausing!');
6663  }
6664});
6665```
6666
6667### pause<sup>(deprecated)</sup>
6668
6669pause(): Promise\<void>
6670
6671暂停播放视频。通过Promise获取返回值。
6672
6673> **说明:**
6674> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.pause](#pause9-1)替代。
6675
6676**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6677
6678**返回值:**
6679
6680| 类型           | 说明                          |
6681| -------------- | ----------------------------- |
6682| Promise\<void> | 暂停播放视频的Promise返回值。 |
6683
6684**示例:**
6685
6686```ts
6687import { BusinessError } from '@kit.BasicServicesKit';
6688
6689videoPlayer.pause().then(() => {
6690  console.info('Succeeded in pausing');
6691}).catch((error: BusinessError) => {
6692  console.error(`video catchCallback, error:${error}`);
6693});
6694```
6695
6696### stop<sup>(deprecated)</sup>
6697
6698stop(callback: AsyncCallback\<void>): void
6699
6700通过回调方式停止播放视频。通过回调函数获取返回值。
6701
6702> **说明:**
6703> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.stop](#stop9)替代。
6704
6705**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6706
6707**参数:**
6708
6709| 参数名   | 类型                 | 必填 | 说明                     |
6710| -------- | -------------------- | ---- | ------------------------ |
6711| callback | AsyncCallback\<void> | 是   | 回调函数。当停止播放视频成功,err为undefined,否则为错误对象。 |
6712
6713**示例:**
6714
6715```ts
6716import { BusinessError } from '@kit.BasicServicesKit';
6717
6718videoPlayer.stop((err: BusinessError) => {
6719  if (err) {
6720    console.error('Failed to stop!');
6721  } else {
6722    console.info('Succeeded in stopping!');
6723  }
6724});
6725```
6726
6727### stop<sup>(deprecated)</sup>
6728
6729stop(): Promise\<void>
6730
6731停止播放视频。通过Promise获取返回值。
6732
6733> **说明:**
6734> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.stop](#stop9-1)替代。
6735
6736**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6737
6738**返回值:**
6739
6740| 类型           | 说明                          |
6741| -------------- | ----------------------------- |
6742| Promise\<void> | 停止播放视频的Promise返回值。 |
6743
6744**示例:**
6745
6746```ts
6747import { BusinessError } from '@kit.BasicServicesKit';
6748
6749videoPlayer.stop().then(() => {
6750  console.info('Succeeded in stopping');
6751}).catch((error: BusinessError) => {
6752  console.error(`video catchCallback, error:${error}`);
6753});
6754```
6755
6756### reset<sup>(deprecated)</sup>
6757
6758reset(callback: AsyncCallback\<void>): void
6759
6760重置播放视频。通过回调函数获取返回值。
6761
6762> **说明:**
6763> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.reset](#reset9)替代。
6764
6765**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6766
6767**参数:**
6768
6769| 参数名   | 类型                 | 必填 | 说明                     |
6770| -------- | -------------------- | ---- | ------------------------ |
6771| callback | AsyncCallback\<void> | 是   | 回调函数。当重置播放视频成功,err为undefined,否则为错误对象。 |
6772
6773**示例:**
6774
6775```ts
6776import { BusinessError } from '@kit.BasicServicesKit';
6777
6778videoPlayer.reset((err: BusinessError) => {
6779  if (err) {
6780    console.error('Failed to reset!');
6781  } else {
6782    console.info('Succeeded in resetting!');
6783  }
6784});
6785```
6786
6787### reset<sup>(deprecated)</sup>
6788
6789reset(): Promise\<void>
6790
6791重置播放视频。通过Promise获取返回值。
6792
6793> **说明:**
6794> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.reset](#reset9-1)替代。
6795
6796**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6797
6798**返回值:**
6799
6800| 类型           | 说明                          |
6801| -------------- | ----------------------------- |
6802| Promise\<void> | Promise对象。无返回结果的Promise对象。 |
6803
6804**示例:**
6805
6806```ts
6807import { BusinessError } from '@kit.BasicServicesKit';
6808
6809videoPlayer.reset().then(() => {
6810  console.info('Succeeded in resetting');
6811}).catch((error: BusinessError) => {
6812  console.error(`video catchCallback, error:${error}`);
6813});
6814```
6815
6816### seek<sup>(deprecated)</sup>
6817
6818seek(timeMs: number, callback: AsyncCallback\<number>): void
6819
6820跳转到指定播放位置,默认跳转到指定时间点的上一个关键帧。通过回调函数获取返回值。
6821
6822> **说明:**
6823> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。
6824
6825**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6826
6827**参数:**
6828
6829| 参数名   | 类型                   | 必填 | 说明                                                         |
6830| -------- | ---------------------- | ---- | ------------------------------------------------------------ |
6831| timeMs   | number                 | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, duration]。 |
6832| callback | AsyncCallback\<number> | 是   | 回调函数。跳转到指定播放位置成功时,err为undefined,data为获取到的跳转到的播放位置,否则为错误对象。                               |
6833
6834**示例:**
6835
6836```ts
6837import { BusinessError } from '@kit.BasicServicesKit';
6838
6839let videoPlayer: media.VideoPlayer;
6840media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => {
6841  if (video != null) {
6842    videoPlayer = video;
6843    console.info('Succeeded in creating VideoPlayer');
6844  } else {
6845    console.error(`Failed to create VideoPlayer, error:${error}`);
6846  }
6847});
6848
6849let seekTime: number = 5000;
6850videoPlayer.seek(seekTime, (err: BusinessError, result: number) => {
6851  if (err) {
6852    console.error('Failed to do seek!');
6853  } else {
6854    console.info('Succeeded in doing seek!');
6855  }
6856});
6857```
6858
6859### seek<sup>(deprecated)</sup>
6860
6861seek(timeMs: number, mode:SeekMode, callback: AsyncCallback\<number>): void
6862
6863跳转到指定播放位置。通过回调函数获取返回值。
6864
6865> **说明:**
6866> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。
6867
6868**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6869
6870**参数:**
6871
6872| 参数名   | 类型                   | 必填 | 说明                                                         |
6873| -------- | ---------------------- | ---- | ------------------------------------------------------------ |
6874| timeMs   | number                 | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, duration]。 |
6875| mode     | [SeekMode](#seekmode8) | 是   | 跳转模式。                                                   |
6876| callback | AsyncCallback\<number> | 是   | 回调函数。跳转到指定播放位置成功时,err为undefined,data为获取到的跳转到的播放位置,否则为错误对象。                               |
6877
6878**示例:**
6879
6880```ts
6881import { BusinessError } from '@kit.BasicServicesKit';
6882
6883let videoPlayer: media.VideoPlayer | null = null;
6884media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => {
6885  if (video != null) {
6886    videoPlayer = video;
6887    console.info('Succeeded in creating VideoPlayer');
6888  } else {
6889    console.error(`Failed to create VideoPlayer, error:${error}`);
6890  }
6891});
6892let seekTime: number = 5000;
6893if (videoPlayer) {
6894  (videoPlayer as media.VideoPlayer).seek(seekTime, media.SeekMode.SEEK_NEXT_SYNC, (err: BusinessError, result: number) => {
6895    if (err) {
6896      console.error('Failed to do seek!');
6897    } else {
6898      console.info('Succeeded in doing seek!');
6899    }
6900  });
6901}
6902```
6903
6904### seek<sup>(deprecated)</sup>
6905
6906seek(timeMs: number, mode?:SeekMode): Promise\<number>
6907
6908跳转到指定播放位置,如果没有设置mode则跳转到指定时间点的上一个关键帧。通过Promise获取返回值。
6909
6910> **说明:**
6911> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。
6912
6913**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6914
6915**参数:**
6916
6917| 参数名 | 类型                   | 必填 | 说明                                                         |
6918| ------ | ---------------------- | ---- | ------------------------------------------------------------ |
6919| timeMs | number                 | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, duration]。 |
6920| mode   | [SeekMode](#seekmode8) | 否   | 基于视频I帧的跳转模式,默认为SEEK_PREV_SYNC模式。            |
6921
6922**返回值:**
6923
6924| 类型             | 说明                                        |
6925| ---------------- | ------------------------------------------- |
6926| Promise\<number> | 跳转到指定播放位置的Promise返回值,单位ms。 |
6927
6928**示例:**
6929
6930```ts
6931import { BusinessError } from '@kit.BasicServicesKit';
6932
6933let videoPlayer: media.VideoPlayer | null = null;
6934media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => {
6935  if (video != null) {
6936    videoPlayer = video;
6937    console.info('Succeeded in creating VideoPlayer');
6938  } else {
6939    console.error(`Failed to create VideoPlayer, error:${error}`);
6940  }
6941});
6942let seekTime: number = 5000;
6943if (videoPlayer) {
6944  (videoPlayer as media.VideoPlayer).seek(seekTime).then((seekDoneTime: number) => { // seekDoneTime表示seek完成后的时间点。
6945    console.info('Succeeded in doing seek');
6946  }).catch((error: BusinessError) => {
6947    console.error(`video catchCallback, error:${error}`);
6948  });
6949
6950  (videoPlayer as media.VideoPlayer).seek(seekTime, media.SeekMode.SEEK_NEXT_SYNC).then((seekDoneTime: number) => {
6951    console.info('Succeeded in doing seek');
6952  }).catch((error: BusinessError) => {
6953    console.error(`video catchCallback, error:${error}`);
6954  });
6955}
6956```
6957
6958### setVolume<sup>(deprecated)</sup>
6959
6960setVolume(vol: number, callback: AsyncCallback\<void>): void
6961
6962设置音量。通过回调函数获取返回值。
6963
6964> **说明:**
6965> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setVolume](#setvolume9)替代。
6966
6967**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6968
6969**参数:**
6970
6971| 参数名   | 类型                 | 必填 | 说明                                                         |
6972| -------- | -------------------- | ---- | ------------------------------------------------------------ |
6973| vol      | number               | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
6974| callback | AsyncCallback\<void> | 是   | 回调函数。当设置音量成功,err为undefined,否则为错误对象。 |
6975
6976**示例:**
6977
6978```ts
6979import { BusinessError } from '@kit.BasicServicesKit';
6980
6981let vol: number = 0.5;
6982videoPlayer.setVolume(vol, (err: BusinessError) => {
6983  if (err) {
6984    console.error('Failed to set Volume!');
6985  } else {
6986    console.info('Succeeded in setting Volume!');
6987  }
6988});
6989```
6990
6991### setVolume<sup>(deprecated)</sup>
6992
6993setVolume(vol: number): Promise\<void>
6994
6995设置音量。通过Promise获取返回值。
6996
6997> **说明:**
6998> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setVolume](#setvolume9)替代。
6999
7000**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
7001
7002**参数:**
7003
7004| 参数名 | 类型   | 必填 | 说明                                                         |
7005| ------ | ------ | ---- | ------------------------------------------------------------ |
7006| vol    | number | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
7007
7008**返回值:**
7009
7010| 类型           | 说明                      |
7011| -------------- | ------------------------- |
7012| Promise\<void> | 设置音量的Promise返回值。 |
7013
7014**示例:**
7015
7016```ts
7017import { BusinessError } from '@kit.BasicServicesKit';
7018
7019let vol: number = 0.5;
7020videoPlayer.setVolume(vol).then(() => {
7021  console.info('Succeeded in setting Volume');
7022}).catch((error: BusinessError) => {
7023  console.error(`video catchCallback, error:${error}`);
7024});
7025```
7026
7027### release<sup>(deprecated)</sup>
7028
7029release(callback: AsyncCallback\<void>): void
7030
7031释放视频资源。通过回调函数获取返回值。
7032
7033> **说明:**
7034> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.release](#release9)替代。
7035
7036**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
7037
7038**参数:**
7039
7040| 参数名   | 类型                 | 必填 | 说明                     |
7041| -------- | -------------------- | ---- | ------------------------ |
7042| callback | AsyncCallback\<void> | 是   | 回调函数。当释放视频资源成功,err为undefined,否则为错误对象。 |
7043
7044**示例:**
7045
7046```ts
7047import { BusinessError } from '@kit.BasicServicesKit';
7048
7049videoPlayer.release((err: BusinessError) => {
7050  if (err) {
7051    console.error('Failed to release!');
7052  } else {
7053    console.info('Succeeded in releasing!');
7054  }
7055});
7056```
7057
7058### release<sup>(deprecated)</sup>
7059
7060release(): Promise\<void>
7061
7062释放视频资源。通过Promise获取返回值。
7063
7064> **说明:**
7065> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.release](#release9-1)替代。
7066
7067**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
7068
7069**返回值:**
7070
7071| 类型           | 说明                          |
7072| -------------- | ----------------------------- |
7073| Promise\<void> | 释放视频资源的Promise返回值。 |
7074
7075**示例:**
7076
7077```ts
7078import { BusinessError } from '@kit.BasicServicesKit';
7079
7080videoPlayer.release().then(() => {
7081  console.info('Succeeded in releasing');
7082}).catch((error: BusinessError) => {
7083  console.error(`video catchCallback, error:${error}`);
7084});
7085```
7086
7087### getTrackDescription<sup>(deprecated)</sup>
7088
7089getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void
7090
7091获取视频轨道信息。通过回调函数获取返回值。
7092
7093> **说明:**
7094> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9)替代。
7095
7096**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
7097
7098**参数:**
7099
7100| 参数名   | 类型                                                         | 必填 | 说明                                       |
7101| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------ |
7102| callback | AsyncCallback\<Array\<[MediaDescription](#mediadescription8)>> | 是   | 回调函数。获取视频轨道信息成功时,err为undefined,data为获取到的视频轨道信息MediaDescription数组,否则为错误对象。 |
7103
7104**示例:**
7105
7106```ts
7107import { BusinessError } from '@kit.BasicServicesKit';
7108
7109videoPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => {
7110  if ((arrList) != null) {
7111    console.info('Succeeded in getting TrackDescription');
7112  } else {
7113    console.error(`Failed to get TrackDescription, error:${error}`);
7114  }
7115});
7116```
7117
7118### getTrackDescription<sup>(deprecated)</sup>
7119
7120getTrackDescription(): Promise\<Array\<MediaDescription>>
7121
7122获取视频轨道信息。通过Promise获取返回值。
7123
7124> **说明:**
7125> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9-1)替代。
7126
7127**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
7128
7129**返回值:**
7130
7131| 类型                                                   | 说明                                            |
7132| ------------------------------------------------------ | ----------------------------------------------- |
7133| Promise<Array<[MediaDescription](#mediadescription8)>> | Promise对象,返回获取的视频轨道信息MediaDescription数组。 |
7134
7135**示例:**
7136
7137```ts
7138import { BusinessError } from '@kit.BasicServicesKit';
7139
7140videoPlayer.getTrackDescription().then((arrList: Array<media.MediaDescription>) => {
7141  if (arrList != null) {
7142    console.info('Succeeded in getting TrackDescription');
7143  } else {
7144    console.error('Failed to get TrackDescription');
7145  }
7146}).catch((error: BusinessError) => {
7147  console.error(`video catchCallback, error:${error}`);
7148});
7149```
7150
7151### setSpeed<sup>(deprecated)</sup>
7152
7153setSpeed(speed: number, callback: AsyncCallback\<number>): void
7154
7155设置播放速度。通过回调函数获取返回值。
7156
7157> **说明:**
7158> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setSpeed](#setspeed9)替代。
7159
7160**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
7161
7162**参数:**
7163
7164| 参数名   | 类型                   | 必填 | 说明                                                       |
7165| -------- | ---------------------- | ---- | ---------------------------------------------------------- |
7166| speed    | number                 | 是   | 指定播放视频速度,具体见[PlaybackSpeed](#playbackspeed8)。 |
7167| callback | AsyncCallback\<number> | 是   | 回调函数。设置播放速度成功时,err为undefined,data为设置的播放速度,否则为错误对象。                                   |
7168
7169**示例:**
7170
7171```ts
7172import { BusinessError } from '@kit.BasicServicesKit';
7173
7174let videoPlayer: media.VideoPlayer | null = null;
7175media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => {
7176  if (video != null) {
7177    videoPlayer = video;
7178    console.info('Succeeded in creating VideoPlayer');
7179  } else {
7180    console.error(`Failed to create VideoPlayer, error:${error}`);
7181  }
7182});
7183let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X;
7184if (videoPlayer) {
7185  (videoPlayer as media.VideoPlayer).setSpeed(speed, (err: BusinessError, result: number) => {
7186    if (err) {
7187      console.error('Failed to set Speed!');
7188    } else {
7189      console.info('Succeeded in setting Speed!');
7190    }
7191  });
7192}
7193```
7194
7195### setSpeed<sup>(deprecated)</sup>
7196
7197setSpeed(speed: number): Promise\<number>
7198
7199设置播放速度。通过Promise获取返回值。
7200
7201> **说明:**
7202> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setSpeed](#setspeed9)替代。
7203
7204**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
7205
7206**参数:**
7207
7208| 参数名 | 类型   | 必填 | 说明                                                       |
7209| ------ | ------ | ---- | ---------------------------------------------------------- |
7210| speed  | number | 是   | 指定播放视频速度,具体见[PlaybackSpeed](#playbackspeed8)。 |
7211
7212**返回值:**
7213
7214| 类型             | 说明                                                         |
7215| ---------------- | ------------------------------------------------------------ |
7216| Promise\<number> | Promise对象,返回设置的播放速度,具体见[PlaybackSpeed](#playbackspeed8)。 |
7217
7218**示例:**
7219
7220```ts
7221import { BusinessError } from '@kit.BasicServicesKit';
7222
7223let videoPlayer: media.VideoPlayer | null = null;
7224media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => {
7225  if (video != null) {
7226    videoPlayer = video;
7227    console.info('Succeeded in creating VideoPlayer');
7228  } else {
7229    console.error(`Failed to create VideoPlayer, error:${error}`);
7230  }
7231});
7232let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X;
7233if (videoPlayer) {
7234  (videoPlayer as media.VideoPlayer).setSpeed(speed).then((result: number) => {
7235    console.info('Succeeded in setting Speed');
7236  }).catch((error: BusinessError) => {
7237    console.error(`Failed to set Speed, error:${error}`);//todo:: error.
7238  });
7239}
7240```
7241
7242### on('playbackCompleted')<sup>(deprecated)</sup>
7243
7244on(type: 'playbackCompleted', callback: Callback\<void>): void
7245
7246开始监听视频播放完成事件。
7247
7248> **说明:**
7249> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('stateChange')](#onstatechange9)替代。
7250
7251**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
7252
7253**参数:**
7254
7255| 参数名   | 类型     | 必填 | 说明                                                        |
7256| -------- | -------- | ---- | ----------------------------------------------------------- |
7257| type     | string   | 是   | 视频播放完成事件回调类型,支持的事件:'playbackCompleted'。 |
7258| callback | Callback\<void> | 是   | 视频播放完成事件回调方法。                                  |
7259
7260**示例:**
7261
7262```ts
7263videoPlayer.on('playbackCompleted', () => {
7264  console.info('playbackCompleted called!');
7265});
7266```
7267
7268### on('bufferingUpdate')<sup>(deprecated)</sup>
7269
7270on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: number) => void): void
7271
7272开始监听视频缓存更新事件。仅网络播放支持该订阅事件。
7273
7274> **说明:**
7275> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('bufferingUpdate')](#onbufferingupdate9)替代。
7276
7277**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
7278
7279**参数:**
7280
7281| 参数名   | 类型     | 必填 | 说明                                                         |
7282| -------- | -------- | ---- | ------------------------------------------------------------ |
7283| type     | string   | 是   | 视频缓存事件回调类型,支持的事件:'bufferingUpdate'。        |
7284| callback | function | 是   | 视频缓存事件回调方法。<br>[BufferingInfoType](#bufferinginfotype8)value值固定为0。 |
7285
7286**示例:**
7287
7288```ts
7289videoPlayer.on('bufferingUpdate', (infoType: media.BufferingInfoType, value: number) => {
7290  console.info('video bufferingInfo type: ' + infoType);
7291  console.info('video bufferingInfo value: ' + value);
7292});
7293```
7294
7295### on('startRenderFrame')<sup>(deprecated)</sup>
7296
7297on(type: 'startRenderFrame', callback: Callback\<void>): void
7298
7299开始监听视频播放首帧送显上报事件。
7300
7301> **说明:**
7302> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('startRenderFrame')](#onstartrenderframe9)替代。
7303
7304**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
7305
7306**参数:**
7307
7308| 参数名   | 类型            | 必填 | 说明                                                         |
7309| -------- | --------------- | ---- | ------------------------------------------------------------ |
7310| type     | string          | 是   | 视频播放首帧送显上报事件回调类型,支持的事件:'startRenderFrame'。 |
7311| callback | Callback\<void> | 是   | 视频播放首帧送显上报事件回调方法。                           |
7312
7313**示例:**
7314
7315```ts
7316videoPlayer.on('startRenderFrame', () => {
7317  console.info('startRenderFrame called!');
7318});
7319```
7320
7321### on('videoSizeChanged')<sup>(deprecated)</sup>
7322
7323on(type: 'videoSizeChanged', callback: (width: number, height: number) => void): void
7324
7325开始监听视频播放宽高变化事件。
7326
7327> **说明:**
7328> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('videoSizeChange')](#onvideosizechange9)替代。
7329
7330**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
7331
7332**参数:**
7333
7334| 参数名   | 类型     | 必填 | 说明                                                         |
7335| -------- | -------- | ---- | ------------------------------------------------------------ |
7336| type     | string   | 是   | 视频播放宽高变化事件回调类型,支持的事件:'videoSizeChanged'。 |
7337| callback | function | 是   | 视频播放宽高变化事件回调方法,width表示宽,height表示高。    |
7338
7339**示例:**
7340
7341```ts
7342videoPlayer.on('videoSizeChanged', (width: number, height: number) => {
7343  console.info('video width is: ' + width);
7344  console.info('video height is: ' + height);
7345});
7346```
7347### on('audioInterrupt')<sup>(deprecated)</sup>
7348
7349on(type: 'audioInterrupt', callback: (info: audio.InterruptEvent) => void): void
7350
7351监听音频焦点变化事件,参考[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)。
7352
7353> **说明:**
7354> 从API version 9开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('audioInterrupt')](#onaudiointerrupt9)替代。
7355
7356**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
7357
7358**参数:**
7359
7360| 参数名   | 类型                                                         | 必填 | 说明                                                     |
7361| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------------------- |
7362| type     | string                                                       | 是   | 音频焦点变化事件回调类型,支持的事件:'audioInterrupt'。 |
7363| callback | function | 是   | 音频焦点变化事件回调方法。                               |
7364
7365**示例:**
7366
7367```ts
7368import { audio } from '@kit.AudioKit';
7369
7370videoPlayer.on('audioInterrupt', (info: audio.InterruptEvent) => {
7371  console.info('audioInterrupt called,and InterruptEvent info is:' + info);
7372});
7373```
7374
7375### on('error')<sup>(deprecated)</sup>
7376
7377on(type: 'error', callback: ErrorCallback): void
7378
7379开始监听视频播放错误事件,当上报error错误事件后,用户需处理error事件,退出播放操作。
7380
7381> **说明:**
7382> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('error')](#onerror9)替代。
7383
7384**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
7385
7386**参数:**
7387
7388| 参数名   | 类型          | 必填 | 说明                                                         |
7389| -------- | ------------- | ---- | ------------------------------------------------------------ |
7390| type     | string        | 是   | 播放错误事件回调类型,支持的事件包括:'error'。<br>- 'error':视频播放中发生错误,触发该事件。 |
7391| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 播放错误事件回调方法。                                       |
7392
7393**示例:**
7394
7395```ts
7396import { BusinessError } from '@kit.BasicServicesKit';
7397
7398videoPlayer.on('error', (error: BusinessError) => {  // 设置'error'事件回调。
7399  console.error(`video error called, error: ${error}`);
7400});
7401videoPlayer.url = 'fd://error';  //设置错误的播放地址,触发'error'事件。
7402```
7403
7404## VideoPlayState<sup>(deprecated)</sup>
7405
7406type VideoPlayState = 'idle' | 'prepared' | 'playing' | 'paused' | 'stopped' | 'error'
7407
7408视频播放的状态机,可通过state属性获取当前状态。
7409
7410> **说明:**
7411> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayerState](#avplayerstate9)替代。
7412
7413**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
7414
7415| 类型     | 说明           |
7416| -------- | -------------- |
7417| 'idle'     | 视频播放空闲。 |
7418| 'prepared' | 视频播放准备。 |
7419| 'playing'  | 视频正在播放。 |
7420| 'paused'   | 视频暂停播放。 |
7421| 'stopped'  | 视频播放停止。 |
7422| 'error'    | 错误状态。     |
7423
7424## AudioRecorder<sup>(deprecated)</sup>
7425
7426> **说明:**
7427> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder](#avrecorder9)替代。
7428
7429音频录制管理类,用于录制音频媒体。在调用AudioRecorder的方法前,需要先通过[createAudioRecorder()](#mediacreateaudiorecorderdeprecated) 构建一个AudioRecorder实例。
7430
7431### prepare<sup>(deprecated)</sup>
7432
7433prepare(config: AudioRecorderConfig): void
7434
7435录音准备。
7436
7437> **说明:**
7438> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.prepare](#prepare9-2)替代。
7439
7440**需要权限:** ohos.permission.MICROPHONE
7441
7442**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7443
7444**参数:**
7445
7446| 参数名 | 类型                                        | 必填 | 说明                                                         |
7447| ------ | ------------------------------------------- | ---- | ------------------------------------------------------------ |
7448| config | [AudioRecorderConfig](#audiorecorderconfigdeprecated) | 是   | 配置录音的相关参数,包括音频输出URI、编码格式、采样率、声道数、输出格式等。 |
7449
7450**错误码:**
7451
7452以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7453
7454| 错误码ID | 错误信息              |
7455| -------- | --------------------- |
7456| 201      | permission denied     |
7457
7458**示例:**
7459
7460```ts
7461let audioRecorderConfig: media.AudioRecorderConfig = {
7462  audioEncoder : media.AudioEncoder.AAC_LC,
7463  audioEncodeBitRate : 22050,
7464  audioSampleRate : 22050,
7465  numberOfChannels : 2,
7466  format : media.AudioOutputFormat.AAC_ADTS,
7467  uri : 'fd://1',       // 文件需先由调用者创建,并给予适当的权限。
7468  location : { latitude : 30, longitude : 130},
7469};
7470audioRecorder.on('prepare', () => {    //设置'prepare'事件回调。
7471  console.info('prepare called');
7472});
7473audioRecorder.prepare(audioRecorderConfig);
7474```
7475
7476### start<sup>(deprecated)</sup>
7477
7478start(): void
7479
7480开始录制,需在'prepare'事件成功触发后,才能调用start方法。
7481
7482> **说明:**
7483> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.start](#start9)替代。
7484
7485**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7486
7487**示例:**
7488
7489```ts
7490audioRecorder.on('start', () => {    //设置'start'事件回调。
7491  console.info('audio recorder start called');
7492});
7493audioRecorder.start();
7494```
7495
7496### pause<sup>(deprecated)</sup>
7497
7498pause():void
7499
7500暂停录制,需要在'start'事件成功触发后,才能调用pause方法。
7501
7502> **说明:**
7503> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.pause](#pause9-2)替代。
7504
7505**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7506
7507**示例:**
7508
7509```ts
7510audioRecorder.on('pause', () => {    //设置'pause'事件回调。
7511  console.info('audio recorder pause called');
7512});
7513audioRecorder.pause();
7514```
7515
7516### resume<sup>(deprecated)</sup>
7517
7518resume():void
7519
7520恢复录制,需要在'pause'事件成功触发后,才能调用resume方法。
7521
7522> **说明:**
7523> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.resume](#resume9)替代。
7524
7525**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7526
7527**示例:**
7528
7529```ts
7530audioRecorder.on('resume', () => {    //设置'resume'事件回调。
7531  console.info('audio recorder resume called');
7532});
7533audioRecorder.resume();
7534```
7535
7536### stop<sup>(deprecated)</sup>
7537
7538stop(): void
7539
7540停止录音。
7541
7542> **说明:**
7543> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.stop](#stop9-2)替代。
7544
7545**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7546
7547**示例:**
7548
7549```ts
7550audioRecorder.on('stop', () => {    //设置'stop'事件回调。
7551  console.info('audio recorder stop called');
7552});
7553audioRecorder.stop();
7554```
7555
7556### release<sup>(deprecated)</sup>
7557
7558release(): void
7559
7560释放录音资源。
7561
7562> **说明:**
7563> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.release](#release9-2)替代。
7564
7565**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7566
7567**示例:**
7568
7569```ts
7570audioRecorder.on('release', () => {    //设置'release'事件回调。
7571  console.info('audio recorder release called');
7572});
7573audioRecorder.release();
7574audioRecorder = undefined;
7575```
7576
7577### reset<sup>(deprecated)</sup>
7578
7579reset(): void
7580
7581重置录音。
7582
7583进行重置录音之前,需要先调用stop()停止录音。重置录音之后,需要调用prepare()设置录音参数项,才能再次进行录音。
7584
7585> **说明:**
7586> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.reset](#reset9-2)替代。
7587
7588**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7589
7590**示例:**
7591
7592```ts
7593audioRecorder.on('reset', () => {    //设置'reset'事件回调。
7594  console.info('audio recorder reset called');
7595});
7596audioRecorder.reset();
7597```
7598
7599### on('prepare' | 'start' | 'pause' | 'resume' | 'stop' | 'release' | 'reset')<sup>(deprecated)</sup>
7600
7601on(type: 'prepare' | 'start' | 'pause' | 'resume' | 'stop' | 'release' | 'reset', callback: () => void): void
7602
7603开始订阅音频录制事件。
7604
7605> **说明:**
7606> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.on('stateChange')](#onstatechange9-1)替代。
7607
7608**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7609
7610**参数:**
7611
7612| 参数名   | 类型     | 必填 | 说明                                                         |
7613| -------- | -------- | ---- | ------------------------------------------------------------ |
7614| 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调用,音频重置为初始状态,触发该事件。 |
7615| callback | ()=>void | 是   | 录制事件回调方法。                                           |
7616
7617**示例:**
7618
7619```ts
7620import { BusinessError } from '@kit.BasicServicesKit';
7621
7622let audioRecorder: media.AudioRecorder = media.createAudioRecorder();  // 创建一个音频录制实例。
7623let audioRecorderConfig: media.AudioRecorderConfig = {
7624  audioEncoder : media.AudioEncoder.AAC_LC,
7625  audioEncodeBitRate : 22050,
7626  audioSampleRate : 22050,
7627  numberOfChannels : 2,
7628  format : media.AudioOutputFormat.AAC_ADTS,
7629  uri : 'fd://xx',  // 文件需先由调用者创建,并给予适当的权限。
7630  location : { latitude : 30, longitude : 130}
7631};
7632audioRecorder.on('error', (error: BusinessError) => {  // 设置'error'事件回调。
7633  console.error(`audio error called, error: ${error}`);
7634});
7635audioRecorder.on('prepare', () => {  // 设置'prepare'事件回调。
7636  console.info('prepare called');
7637  audioRecorder.start();  // 开始录制,并触发'start'事件回调。
7638});
7639audioRecorder.on('start', () => {  // 设置'start'事件回调。
7640  console.info('audio recorder start called');
7641});
7642audioRecorder.on('pause', () => {  // 设置'pause'事件回调。
7643  console.info('audio recorder pause called');
7644});
7645audioRecorder.on('resume', () => {  // 设置'resume'事件回调。
7646  console.info('audio recorder resume called');
7647});
7648audioRecorder.on('stop', () => {  // 设置'stop'事件回调。
7649  console.info('audio recorder stop called');
7650});
7651audioRecorder.on('release', () => {  // 设置'release'事件回调。
7652  console.info('audio recorder release called');
7653});
7654audioRecorder.on('reset', () => {  // 设置'reset'事件回调。
7655  console.info('audio recorder reset called');
7656});
7657audioRecorder.prepare(audioRecorderConfig)  // 设置录制参数 ,并触发'prepare'事件回调。
7658```
7659
7660### on('error')<sup>(deprecated)</sup>
7661
7662on(type: 'error', callback: ErrorCallback): void
7663
7664开始订阅音频录制错误事件,当上报error错误事件后,用户需处理error事件,退出录制操作。
7665
7666> **说明:**
7667> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.on('error')](#onerror9-1)替代。
7668
7669**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7670
7671**参数:**
7672
7673| 参数名   | 类型          | 必填 | 说明                                                         |
7674| -------- | ------------- | ---- | ------------------------------------------------------------ |
7675| type     | string        | 是   | 录制错误事件回调类型'error'。<br/>-&nbsp;'error':音频录制过程中发生错误,触发该事件。 |
7676| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 录制错误事件回调方法。                                       |
7677
7678**示例:**
7679
7680```ts
7681import { BusinessError } from '@kit.BasicServicesKit';
7682
7683let audioRecorderConfig: media.AudioRecorderConfig = {
7684  audioEncoder : media.AudioEncoder.AAC_LC,
7685  audioEncodeBitRate : 22050,
7686  audioSampleRate : 22050,
7687  numberOfChannels : 2,
7688  format : media.AudioOutputFormat.AAC_ADTS,
7689  uri : 'fd://xx',   // 文件需先由调用者创建,并给予适当的权限。
7690  location : { latitude : 30, longitude : 130}
7691};
7692audioRecorder.on('error', (error: BusinessError) => {  // 设置'error'事件回调。
7693  console.error(`audio error called, error: ${error}`);
7694});
7695audioRecorder.prepare(audioRecorderConfig);  // prepare不设置参数,触发'error'事件。
7696```
7697
7698## AudioRecorderConfig<sup>(deprecated)</sup>
7699
7700> **说明:**
7701> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorderConfig](#avrecorderconfig9)替代。
7702
7703表示音频的录音配置。
7704
7705**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7706
7707| 名称                                | 类型                                         | 必填 | 说明                                                         |
7708| ----------------------------------- | -------------------------------------------- | ---- | ------------------------------------------------------------ |
7709| audioEncoder                        | [AudioEncoder](#audioencoderdeprecated)                | 否   | 音频编码格式,默认设置为AAC_LC。<br/>**说明:** 从API version 8开始废弃,建议使用audioEncoderMime替代。 |
7710| audioEncodeBitRate                  | number                                       | 否   | 音频编码比特率,默认值为48000。                              |
7711| audioSampleRate                     | number                                       | 否   | 音频采集采样率,默认值为48000。<br>可变比特率模式,码率仅作参考。                              |
7712| numberOfChannels                    | number                                       | 否   | 音频采集声道数,默认值为2。                                  |
7713| format                              | [AudioOutputFormat](#audiooutputformatdeprecated)      | 否   | 音频输出封装格式,默认设置为MPEG_4。<br/>**说明:** 从API version 8开始废弃,建议使用fileFormat替代。 |
7714| location                            | [Location](#location)                        | 否   | 音频采集的地理位置。                                         |
7715| uri                                 | string                                       | 是   | 音频输出URI:fd://xx&nbsp;(fd&nbsp;number)<br/>![](figures/zh-cn_image_url.png) <br/>文件需要由调用者创建,并赋予适当的权限。 |
7716| audioEncoderMime<sup>8+</sup>       | [CodecMimeType](#codecmimetype8)             | 否   | 容器编码格式。                                               |
7717| fileFormat<sup>8+</sup>             | [ContainerFormatType](#containerformattype8) | 否   | 音频编码格式。                                               |
7718
7719## AudioEncoder<sup>(deprecated)</sup>
7720
7721> **说明:**
7722> 从API version 6开始支持,从API version 8开始废弃,建议使用[CodecMimeType](#codecmimetype8)替代。
7723
7724表示音频编码格式的枚举。
7725
7726**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7727
7728| 名称    | 值   | 说明                                                         |
7729| ------- | ---- | ------------------------------------------------------------ |
7730| DEFAULT | 0    | 默认编码格式。<br/>仅做接口定义,暂不支持使用。              |
7731| AMR_NB  | 1    | AMR-NB(Adaptive Multi Rate-Narrow Band Speech Codec) 编码格式。<br/>仅做接口定义,暂不支持使用。 |
7732| AMR_WB  | 2    | AMR-WB(Adaptive Multi Rate-Wide Band Speech Codec) 编码格式。<br/>仅做接口定义,暂不支持使用。 |
7733| AAC_LC  | 3    | AAC-LC(Advanced&nbsp;Audio&nbsp;Coding&nbsp;Low&nbsp;Complexity)编码格式。 |
7734| HE_AAC  | 4    | HE_AAC(High-Efficiency Advanced&nbsp;Audio&nbsp;Coding)编码格式。<br/>仅做接口定义,暂不支持使用。 |
7735
7736## AudioOutputFormat<sup>(deprecated)</sup>
7737
7738> **说明:**
7739> 从API version 6开始支持,从API version 8 开始废弃,建议使用[ContainerFormatType](#containerformattype8)替代。
7740
7741表示音频封装格式的枚举。
7742
7743**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7744
7745| 名称     | 值   | 说明                                                         |
7746| -------- | ---- | ------------------------------------------------------------ |
7747| DEFAULT  | 0    | 默认封装格式。<br/>仅做接口定义,暂不支持使用。              |
7748| MPEG_4   | 2    | 封装为MPEG-4格式。                                           |
7749| AMR_NB   | 3    | 封装为AMR_NB格式。<br/>仅做接口定义,暂不支持使用。          |
7750| AMR_WB   | 4    | 封装为AMR_WB格式。<br/>仅做接口定义,暂不支持使用。          |
7751| AAC_ADTS | 6    | 封装为ADTS(Audio&nbsp;Data&nbsp;Transport&nbsp;Stream)格式,是AAC音频的传输流格式。 |
7752
7753
7754## media.createAVImageGenerator<sup>12+</sup>
7755
7756createAVImageGenerator(callback: AsyncCallback\<AVImageGenerator>): void
7757
7758创建AVImageGenerator实例,通过回调函数获取返回值。
7759
7760**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7761
7762**参数:**
7763
7764| 参数名   | 类型                                  | 必填 | 说明                                                         |
7765| -------- | ------------------------------------- | ---- | ------------------------------------------------------------ |
7766| callback | AsyncCallback\<[AVImageGenerator](#avimagegenerator12)> | 是   | 回调函数。异步返回AVImageGenerator实例,失败时返回null。可用于获取视频缩略图。 |
7767
7768**错误码:**
7769
7770以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7771
7772| 错误码ID | 错误信息                       |
7773| -------- | ------------------------------ |
7774| 5400101  | No memory. Returned by callback. |
7775
7776**示例:**
7777
7778```ts
7779import { BusinessError } from '@kit.BasicServicesKit';
7780
7781let avImageGenerator: media.AVImageGenerator;
7782media.createAVImageGenerator((error: BusinessError, generator: media.AVImageGenerator) => {
7783  if (generator != null) {
7784    avImageGenerator = generator;
7785    console.info('Succeeded in creating AVImageGenerator');
7786  } else {
7787    console.error(`Failed to creat AVImageGenerator, error message:${error.message}`);
7788  }
7789});
7790```
7791
7792## media.createAVImageGenerator<sup>12+</sup>
7793
7794createAVImageGenerator(): Promise\<AVImageGenerator>
7795
7796创建AVImageGenerator对象,通过Promise获取返回值。
7797
7798**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7799
7800**返回值:**
7801
7802| 类型                            | 说明                                                         |
7803| ------------------------------- | ------------------------------------------------------------ |
7804| Promise\<[AVImageGenerator](#avimagegenerator12)> | Promise对象。异步返回AVImageGenerator实例,失败时返回null。可用于获取视频缩略图。 |
7805
7806**错误码:**
7807
7808以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7809
7810| 错误码ID | 错误信息                      |
7811| -------- | ----------------------------- |
7812| 5400101  | No memory. Returned by promise. |
7813
7814**示例:**
7815
7816```ts
7817import { BusinessError } from '@kit.BasicServicesKit';
7818
7819let avImageGenerator: media.AVImageGenerator;
7820media.createAVImageGenerator().then((generator: media.AVImageGenerator) => {
7821  if (generator != null) {
7822    avImageGenerator = generator;
7823    console.info('Succeeded in creating AVImageGenerator');
7824  } else {
7825    console.error('Failed to creat AVImageGenerator');
7826  }
7827}).catch((error: BusinessError) => {
7828  console.error(`Failed to creat AVImageGenerator, error message:${error.message}`);
7829});
7830```
7831
7832## AVImageGenerator<sup>12+</sup>
7833
7834视频缩略图获取类,用于从视频资源中获取缩略图。在调用AVImageGenerator的方法前,需要先通过[createAVImageGenerator()](#mediacreateavimagegenerator12)构建一个AVImageGenerator实例。
7835
7836获取视频缩略图的demo可参考:[获取视频缩略图开发指导](../../media/media/avimagegenerator.md)。
7837
7838### 属性
7839
7840**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7841
7842| 名称                                                | 类型                                                         | 可读 | 可写 | 说明                                                         |
7843| --------------------------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
7844| 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。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致视频缩略图数据获取异常。 |
7845
7846### fetchFrameByTime<sup>12+</sup>
7847
7848fetchFrameByTime(timeUs: number, options: AVImageQueryOptions, param: PixelMapParams, callback: AsyncCallback\<image.PixelMap>): void
7849
7850异步方式获取视频缩略图。通过注册回调函数获取返回值。
7851
7852**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7853
7854**参数:**
7855
7856| 参数名   | 类型                                         | 必填 | 说明                                |
7857| -------- | -------------------------------------------- | ---- | ----------------------------------- |
7858| timeUs | number                   | 是   | 需要获取的缩略图在视频中的时间点,单位为微秒(μs)。 |
7859| options | [AVImageQueryOptions](#avimagequeryoptions12)     | 是   | 需要获取的缩略图时间点与视频帧的对应关系。 |
7860| param | [PixelMapParams](#pixelmapparams12)     | 是   | 需要获取的缩略图的格式参数。 |
7861| callback | AsyncCallback\<[image.PixelMap](../apis-image-kit/arkts-apis-image-PixelMap.md)>   | 是   | 回调函数。获取缩略图成功时,err为undefined,data为PixelMap实例,否则为错误对象。 |
7862
7863**错误码:**
7864
7865以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7866
7867| 错误码ID | 错误信息                                   |
7868| -------- | ------------------------------------------ |
7869| 5400102  | Operation not allowed. Returned by callback. |
7870| 5400106  | Unsupported format. Returned by callback.  |
7871
7872**示例:**
7873
7874```ts
7875import { BusinessError } from '@kit.BasicServicesKit';
7876import { image } from '@kit.ImageKit';
7877
7878let avImageGenerator: media.AVImageGenerator | undefined = undefined;
7879let pixel_map : image.PixelMap | undefined = undefined;
7880
7881// 初始化入参。
7882let timeUs: number = 0;
7883
7884let queryOption: media.AVImageQueryOptions = media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC;
7885
7886let param: media.PixelMapParams = {
7887  width : 300,
7888  height : 300,
7889};
7890
7891// 获取缩略图。
7892media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => {
7893  if(generator != null){
7894    avImageGenerator = generator;
7895    console.info(`Succeeded in creating AVImageGenerator`);
7896    avImageGenerator.fetchFrameByTime(timeUs, queryOption, param, (error: BusinessError, pixelMap) => {
7897      if (error) {
7898        console.error(`Failed to fetch FrameByTime, err = ${JSON.stringify(error)}`);
7899        return;
7900      }
7901      pixel_map = pixelMap;
7902    });
7903  } else {
7904    console.error(`Failed to creat AVImageGenerator, error message:${err.message}`);
7905  };
7906});
7907```
7908
7909### fetchFrameByTime<sup>12+</sup>
7910
7911fetchFrameByTime(timeUs: number, options: AVImageQueryOptions, param: PixelMapParams): Promise<image.PixelMap>
7912
7913异步方式获取视频缩略图。通过Promise获取返回值。
7914
7915**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7916
7917**参数:**
7918
7919| 参数名   | 类型                                         | 必填 | 说明                                |
7920| -------- | -------------------------------------------- | ---- | ----------------------------------- |
7921| timeUs | number                   | 是   | 需要获取的缩略图在视频中的时间点,单位为微秒(μs)。 |
7922| options | [AVImageQueryOptions](#avimagequeryoptions12)     | 是   | 需要获取的缩略图时间点与视频帧的对应关系。 |
7923| param | [PixelMapParams](#pixelmapparams12)    | 是   | 需要获取的缩略图的格式参数。 |
7924
7925**返回值:**
7926
7927| 类型           | 说明                                     |
7928| -------------- | ---------------------------------------- |
7929| Promise\<[image.PixelMap](../apis-image-kit/arkts-apis-image-PixelMap.md)> | Promise对象,返回视频缩略图对象。 |
7930
7931**错误码:**
7932
7933以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7934
7935| 错误码ID | 错误信息                                  |
7936| -------- | ----------------------------------------- |
7937| 5400102  | Operation not allowed. Returned by promise. |
7938| 5400106  | Unsupported format. Returned by promise.  |
7939
7940**示例:**
7941
7942```ts
7943import { BusinessError } from '@kit.BasicServicesKit';
7944import { image } from '@kit.ImageKit';
7945
7946let avImageGenerator: media.AVImageGenerator | undefined = undefined;
7947let pixel_map : image.PixelMap | undefined = undefined;
7948
7949// 初始化入参。
7950let timeUs: number = 0;
7951
7952let queryOption: media.AVImageQueryOptions = media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC;
7953
7954let param: media.PixelMapParams = {
7955  width : 300,
7956  height : 300,
7957};
7958
7959// 获取缩略图。
7960media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => {
7961  if(generator != null){
7962    avImageGenerator = generator;
7963    console.info(`Succeeded in creating AVImageGenerator`);
7964    avImageGenerator.fetchFrameByTime(timeUs, queryOption, param).then((pixelMap: image.PixelMap) => {
7965      pixel_map = pixelMap;
7966    }).catch((error: BusinessError) => {
7967      console.error(`Failed to fetch FrameByTime, error message:${error.message}`);
7968    });
7969  } else {
7970    console.error(`Failed to creat AVImageGenerator, error message:${err.message}`);
7971  };
7972});
7973```
7974
7975### fetchScaledFrameByTime<sup>20+</sup>
7976
7977fetchScaledFrameByTime(timeUs: number, queryMode: AVImageQueryOptions, outputSize?: OutputSize):Promise\<image.PixelMap\>
7978
7979支持按比例缩放提取视频缩略图。使用Promise异步回调。
7980
7981**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7982
7983**参数:**
7984
7985| 参数名     | 类型                                          | 必填 | 说明                                                 |
7986| ---------- | --------------------------------------------- | ---- | ---------------------------------------------------- |
7987| timeUs     | number                                        | 是   | 在视频中需要获取的缩略图的时间点,单位为微秒(μs)。 |
7988| queryMode  | [AVImageQueryOptions](#avimagequeryoptions12) | 是   | 需要获取的缩略图时间点与视频帧的对应关系。           |
7989| outputSize | [OutputSize ](#outputsize20)                  | 否   | 定义帧的输出大小。默认按原图大小显示。               |
7990
7991**返回值:**
7992
7993| 类型                                                         | 说明                              |
7994| ------------------------------------------------------------ | --------------------------------- |
7995| Promise\<[image.PixelMap](../apis-image-kit/arkts-apis-image-PixelMap.md)> | Promise对象。返回视频缩略图对象。 |
7996
7997**错误码:**
7998
7999以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
8000
8001| 错误码ID | 错误信息                                    |
8002| -------- | ------------------------------------------- |
8003| 5400102  | Operation not allowed. Returned by promise. |
8004| 5400106  | Unsupported format. Returned by promise.    |
8005
8006**示例:**
8007
8008```ts
8009import { BusinessError } from '@kit.BasicServicesKit';
8010import { image } from '@kit.ImageKit';
8011import { media } from '@kit.MediaKit';
8012let avImageGenerator: media.AVImageGenerator | undefined = undefined;
8013let pixel_map : image.PixelMap | undefined = undefined;
8014// 初始化入参。
8015let timeUs: number = 0;
8016let queryOption: media.AVImageQueryOptions = media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC;
8017let outputSize: media.OutputSize = {
8018  width : 300,
8019  height : 300,
8020};
8021// 获取缩略图。
8022media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => {
8023  if(generator != null){
8024    avImageGenerator = generator;
8025    console.info(`Succeeded in creating AVImageGenerator`);
8026    avImageGenerator.fetchScaledFrameByTime(timeUs, queryOption, outputSize).then((pixelMap: image.PixelMap) => {
8027      pixel_map = pixelMap;
8028    }).catch((error: BusinessError) => {
8029      console.error(`Failed to fetch ScaledFrameByTime, error message:${error.message}`);
8030    });
8031  } else {
8032    console.error(`Failed to creat AVImageGenerator, error message:${err.message}`);
8033  };
8034});
8035```
8036
8037### release<sup>12+</sup>
8038
8039release(callback: AsyncCallback\<void>): void
8040
8041异步方式释放资源。通过注册回调函数获取返回值。
8042
8043**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
8044
8045**参数:**
8046
8047| 参数名   | 类型                                         | 必填 | 说明                                |
8048| -------- | -------------------------------------------- | ---- | ----------------------------------- |
8049| callback | AsyncCallback\<void>                   | 是   | 回调函数。当释放资源成功,err为undefined,否则为错误对象。 |
8050
8051**错误码:**
8052
8053以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
8054
8055| 错误码ID | 错误信息                                   |
8056| -------- | ------------------------------------------ |
8057| 5400102  | Operation not allowed. Returned by callback. |
8058
8059**示例:**
8060
8061```ts
8062import { BusinessError } from '@kit.BasicServicesKit';
8063
8064let avImageGenerator: media.AVImageGenerator | undefined = undefined;
8065
8066//释放资源。
8067media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => {
8068  if(generator != null){
8069    avImageGenerator = generator;
8070    console.info(`Succeeded in creating AVImageGenerator`);
8071    avImageGenerator.release((error: BusinessError) => {
8072      if (error) {
8073        console.error(`Failed to release, err = ${JSON.stringify(error)}`);
8074        return;
8075      }
8076      console.info(`Succeeded in releasing`);
8077    });
8078  } else {
8079    console.error(`Failed to creat AVImageGenerator, error message:${err.message}`);
8080  };
8081});
8082```
8083
8084### release<sup>12+</sup>
8085
8086release(): Promise\<void>
8087
8088异步方式释放资源。通过Promise获取返回值。
8089
8090**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
8091
8092**返回值:**
8093
8094| 类型           | 说明                                     |
8095| -------------- | ---------------------------------------- |
8096| Promise\<void> | 异步方式释放资源release方法的Promise返回值。 |
8097
8098**错误码:**
8099
8100以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
8101
8102| 错误码ID | 错误信息                                  |
8103| -------- | ----------------------------------------- |
8104| 5400102  | Operation not allowed. Returned by promise. |
8105
8106**示例:**
8107
8108```ts
8109import { BusinessError } from '@kit.BasicServicesKit';
8110
8111let avImageGenerator: media.AVImageGenerator | undefined = undefined;
8112
8113//释放资源
8114media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => {
8115  if(generator != null){
8116    avImageGenerator = generator;
8117    console.info(`Succeeded in creating AVImageGenerator`);
8118    avImageGenerator.release().then(() => {
8119      console.info(`Succeeded in releasing.`);
8120    }).catch((error: BusinessError) => {
8121      console.error(`Failed to release, error message:${error.message}`);
8122    });
8123  } else {
8124    console.error(`Failed to creat AVImageGenerator, error message:${err.message}`);
8125  };
8126});
8127```
8128
8129## AVImageQueryOptions<sup>12+</sup>
8130
8131需要获取的缩略图时间点与视频帧的对应关系。
8132
8133在获取视频缩略图时,传入的时间点与实际取得的视频帧所在时间点不一定相等,需要指定传入的时间点与实际取得的视频帧的时间关系。
8134
8135**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
8136
8137| 名称                     | 值              | 说明                                                         |
8138| ------------------------ | --------------- | ------------------------------------------------------------ |
8139| AV_IMAGE_QUERY_NEXT_SYNC       | 0   | 表示选取传入时间点或之后的关键帧。                       |
8140| AV_IMAGE_QUERY_PREVIOUS_SYNC        | 1    | 表示选取传入时间点或之前的关键帧。 |
8141| AV_IMAGE_QUERY_CLOSEST_SYNC        | 2    | 表示选取离传入时间点最近的关键帧。                 |
8142| AV_IMAGE_QUERY_CLOSEST             | 3    | 表示选取离传入时间点最近的帧,该帧不一定是关键帧。 |
8143
8144## PixelMapParams<sup>12+</sup>
8145
8146获取视频缩略图时,输出缩略图的格式参数。
8147
8148**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
8149
8150| 名称   | 类型   | 可读 | 可写 | 说明                                                                            |
8151|--------|--------|------|------|---------------------------------------------------------------------------------|
8152| width  | number | 是   | 是   | 输出的缩略图宽度。应保证大于0且不大于原始视频宽度。否则返回的缩略图不会进行缩放。 |
8153| height | number | 是   | 是   | 输出的缩略图高度。应保证大于0且不大于原始视频高度。否则返回的缩略图不会进行缩放。 |
8154
8155## OutputSize<sup>20+</sup>
8156
8157用于获取视频缩略图时,来定义输出图像大小。
8158
8159**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
8160
8161| 名称   | 类型   | 只读 | 可选 | 说明                                                         |
8162| ------ | ------ | ---- | ---- | ------------------------------------------------------------ |
8163| width  | number | 否   | 是   | 输出的缩略图宽度。<br/>- 如果该值小于0,宽度是视频的原始宽度。<br/>- 如果值为0或未分配任何值,缩放比例同高度比例。 |
8164| height | number | 否   | 是   | 输出的缩略图高度。<br/>- 如果该值小于0,高度是视频的原始高度。<br/>- 如果值为0或未分配任何值,缩放比例同宽度比例。 |
8165
8166## media.createMediaSourceWithUrl<sup>12+</sup>
8167
8168createMediaSourceWithUrl(url: string, headers?: Record\<string, string>): MediaSource
8169
8170创建流媒体预下载媒体来源实例方法。
8171
8172**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。
8173
8174**系统能力:** SystemCapability.Multimedia.Media.Core
8175
8176**参数:**
8177
8178| 参数名   | 类型     | 必填 | 说明                 |
8179| -------- | -------- | ---- | -------------------- |
8180| url | string | 是   | - 流媒体预下载媒体来源url,支持的流媒体格式:HLS、HTTP-FLV、Dash、Https。<br> - 本地m3u8的fd路径。  |
8181| headers | Record\<string, string> | 否   | 支持流媒体预下载HttpHeader自定义。 |
8182
8183**返回值:**
8184
8185| 类型           | 说明                                       |
8186| -------------- | ------------------------------------------ |
8187| [MediaSource](#mediasource12) | MediaSource返回值。 |
8188
8189**错误码:**
8190
8191以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
8192
8193| 错误码ID | 错误信息                                  |
8194| -------- | ----------------------------------------- |
8195| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.      |
8196| 5400101  | No memory.  |
8197
8198**示例1:**
8199
8200```ts
8201let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"};
8202let mediaSource : media.MediaSource = media.createMediaSourceWithUrl("http://xxx",  headers);
8203```
8204
8205**示例2:**
8206
8207<!--code_no_check-->
8208```ts
8209import { common } from '@kit.AbilityKit';
8210import { resourceManager } from '@kit.LocalizationKit';
8211
8212private context: Context | undefined;
8213constructor(context: Context) {
8214  this.context = context; // this.getUIContext().getHostContext();
8215}
8216let mgr = this.context.resourceManager;
8217let fileDescriptor = await mgr.getRawFd("xxx.m3u8");
8218
8219let fd:string = fileDescriptor.fd.toString();
8220let offset:string = fileDescriptor.offset.toString();
8221let length:string = fileDescriptor.length.toString();
8222let fdUrl:string = "fd://" + fd + "?offset=" + offset + "&size=" + length;
8223
8224let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"};
8225let mediaSource : media.MediaSource = media.createMediaSourceWithUrl(fdUrl,  headers);
8226
8227let mimeType : media.AVMimeTypes = media.AVMimeTypes.APPLICATION_M3U8;
8228mediaSource.setMimeType(mimeType);
8229
8230```
8231## media.createMediaSourceWithStreamData<sup>19+</sup>
8232
8233createMediaSourceWithStreamData(streams: Array\<MediaStream>): MediaSource
8234
8235创建流媒体多码率媒体来源实例方法,当前仅支持HTTP-FLV协议格式多码率。
8236
8237**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
8238
8239**系统能力:** SystemCapability.Multimedia.Media.Core
8240
8241**参数:**
8242
8243| 参数名  | 类型                                 | 必填 | 说明                                                  |
8244| ------- | ------------------------------------ | ---- | ----------------------------------------------------- |
8245| streams | Array<[MediaStream](#mediastream19)> | 是 | 可设置MediaStream数组,支持的流媒体格式:HTTP-FLV。 |
8246
8247**返回值:**
8248
8249| 类型                          | 说明                |
8250| ----------------------------- | ------------------- |
8251| [MediaSource](#mediasource12) | 返回MediaSource,用于媒体资源设置。 |
8252
8253**示例1:**
8254
8255```ts
8256let streams : Array<media.MediaStream> = [];
8257streams.push({url: "http://xxx/480p.flv", width: 854, height: 480, bitrate: 800000});
8258streams.push({url: "http://xxx/720p.flv", width: 1280, height: 720, bitrate: 2000000});
8259streams.push({url: "http://xxx/1080p.flv", width: 1280, height: 720, bitrate: 2000000});
8260let mediaSource : media.MediaSource = media.createMediaSourceWithStreamData(streams);
8261```
8262
8263## MediaStream<sup>19+</sup>
8264
8265媒体流数据信息。
8266
8267**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
8268
8269**系统能力:** SystemCapability.Multimedia.Media.Core
8270
8271| 名称  | 类型   | 只读 | 可选 | 说明                                                         |
8272| ------- | ------ | ---- | ---- | ------------------------------------------------------------ |
8273| url     | string | 否   | 否   | 媒体资源链接,当前仅支持http或者https。                                                 |
8274| width   | number | 否   | 否   | 媒体资源视频宽像素值。未知时可以填0,此时将无法通过[PlaybackStrategy](#playbackstrategy12)优选匹配。 |
8275| height  | number | 否   | 否   | 媒体资源视频高像素值。未知时可以填0,此时将无法通过[PlaybackStrategy](#playbackstrategy12)优选匹配。 |
8276| bitrate | number | 否   | 否   | 媒体资源码率值,单位bps。                                        |
8277
8278## MediaSource<sup>12+</sup>
8279
8280媒体数据信息。来源自[createMediaSourceWithUrl](#mediacreatemediasourcewithurl12)。
8281
8282**系统能力:** SystemCapability.Multimedia.Media.Core
8283
8284### setMimeType<sup>12+</sup>
8285
8286setMimeType(mimeType: AVMimeTypes): void
8287
8288设置媒体MIME类型,以帮助播放器处理扩展的媒体源。
8289
8290**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
8291
8292**系统能力:** SystemCapability.Multimedia.Media.Core
8293
8294**参数:**
8295
8296| 参数名   | 类型     | 必填 | 说明                 |
8297| -------- | -------- | ---- | -------------------- |
8298| mimeType | [AVMimeTypes](#mediasource12) | 是   | 媒体MIME类型。 |
8299
8300### setMediaResourceLoaderDelegate<sup>18+</sup>
8301
8302setMediaResourceLoaderDelegate(resourceLoader: MediaSourceLoader): void
8303
8304设置MediaSourceLoader,帮助播放器请求媒体数据。
8305
8306**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
8307
8308**系统能力:** SystemCapability.Multimedia.Media.Core
8309
8310**参数:**
8311
8312| 参数名   | 类型     | 必填 | 说明                 |
8313| -------- | -------- | ---- | -------------------- |
8314| resourceLoader | [MediaSourceLoader](#mediasourceloader18) | 是   | 应用实现的媒体数据获取接口,方便播放器获取数据。 |
8315
8316**示例:**
8317
8318```ts
8319import HashMap from '@ohos.util.HashMap';
8320
8321let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"};
8322let mediaSource : media.MediaSource = media.createMediaSourceWithUrl("http://xxx",  headers);
8323let uuid: number = 1;
8324let requests: HashMap<number, media.MediaSourceLoadingRequest> = new HashMap();
8325
8326let sourceOpenCallback: media.SourceOpenCallback = (request: media.MediaSourceLoadingRequest) => {
8327  console.log(`Opening resource: ${request.url}`);
8328  // 成功打开资源,返回唯一的句柄, 保证uuid和request对应。
8329  uuid += 1;
8330  requests.set(uuid, request);
8331  return uuid;
8332};
8333
8334let sourceReadCallback: media.SourceReadCallback = (uuid: number, requestedOffset: number, requestedLength: number) => {
8335  console.log(`Reading resource with handle ${uuid}, offset: ${requestedOffset}, length: ${requestedLength}`);
8336  // 判断uuid是否合法、存储read请求,不要在read请求阻塞去推送数据和头信息。
8337};
8338
8339let sourceCloseCallback: media.SourceCloseCallback = (uuid: number) => {
8340  console.log(`Closing resource with handle ${uuid}`);
8341  // 清除当前uuid相关资源。
8342  requests.remove(uuid);
8343};
8344
8345// 应用按需实现。
8346let resourceLoader: media.MediaSourceLoader = {
8347  open: sourceOpenCallback,
8348  read: sourceReadCallback,
8349  close: sourceCloseCallback
8350};
8351
8352mediaSource.setMediaResourceLoaderDelegate(resourceLoader);
8353```
8354
8355## SourceOpenCallback<sup>18+</sup>
8356
8357type SourceOpenCallback = (request: MediaSourceLoadingRequest) => number
8358
8359由应用实现此回调函数,应用需处理传入的资源打开请求,并返回所打开资源对应的唯一句柄。
8360>
8361>**注意:** 客户端在处理完请求后应立刻返回。
8362>
8363
8364**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
8365
8366**系统能力:** SystemCapability.Multimedia.Media.Core
8367
8368**参数:**
8369
8370| 参数名   | 类型     | 必填 | 说明                 |
8371| -------- | -------- | ---- | -------------------- |
8372| request | [MediaSourceLoadingRequest](#mediasourceloadingrequest18) | 是  | 	打开请求参数,包含请求资源的具体信息和数据推送方式。 |
8373
8374**返回值:**
8375
8376| 类型   | 说明                 |
8377| -------- | -------------------- |
8378| number  | 当前资源打开请求的句柄。大于0表示请求成功,小于或等于0表示请求失败。<br/> - request对象对应句柄唯一。|
8379
8380**示例:**
8381
8382```ts
8383import HashMap from '@ohos.util.HashMap';
8384
8385let uuid: number = 1;
8386let requests: HashMap<number, media.MediaSourceLoadingRequest> = new HashMap();
8387
8388let sourceOpenCallback: media.SourceOpenCallback = (request: media.MediaSourceLoadingRequest) => {
8389  console.log(`Opening resource: ${request.url}`);
8390  // 成功打开资源,返回唯一的句柄, 保证uuid和request对应。
8391  uuid += 1;
8392  requests.set(uuid, request);
8393  return uuid;
8394};
8395```
8396
8397## SourceReadCallback<sup>18+</sup>
8398
8399type SourceReadCallback = (uuid: number, requestedOffset: number, requestedLength: number) => void
8400
8401由应用实现此回调函数,应用需记录读取请求,并在数据充足时通过对应的MediaSourceLoadingRequest对象的[respondData](#responddata18)方法推送数据。
8402>
8403>**注意:** 客户端在处理完请求后应立刻返回。
8404>
8405
8406**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
8407
8408**系统能力:** SystemCapability.Multimedia.Media.Core
8409
8410**参数:**
8411
8412| 参数名   | 类型     | 必填 | 说明                 |
8413| -------- | -------- | ---- | -------------------- |
8414| uuid | number | 是  | 	资源句柄的标识。 |
8415| requestedOffset | number | 是  | 	当前媒体数据相对于资源起始位置的偏移量。 |
8416| requestedLength | number | 是  | 	当前请求的长度。值为-1时,表示到达资源末尾,此时推送完成后需通过[finishLoading](#finishloading18)方法通知播放器推送结束。 |
8417
8418**示例:**
8419
8420```ts
8421let sourceReadCallback: media.SourceReadCallback = (uuid: number, requestedOffset: number, requestedLength: number) => {
8422  console.log(`Reading resource with handle ${uuid}, offset: ${requestedOffset}, length: ${requestedLength}`);
8423  // 判断uuid是否合法、存储read请求,不要在read请求阻塞去推送数据和头信息。
8424};
8425```
8426
8427## SourceCloseCallback<sup>18+</sup>
8428
8429type SourceCloseCallback = (uuid: number) => void
8430
8431由应用实现此回调函数,应用应释放相关资源。
8432>
8433>**注意:** 客户端在处理完请求后应立刻返回。
8434>
8435
8436**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
8437
8438**系统能力:** SystemCapability.Multimedia.Media.Core
8439
8440**参数:**
8441
8442| 参数名   | 类型     | 必填 | 说明                 |
8443| -------- | -------- | ---- | -------------------- |
8444| uuid      | number | 是  | 	资源句柄的标识。 |
8445
8446**示例:**
8447
8448```ts
8449import HashMap from '@ohos.util.HashMap';
8450
8451let requests: HashMap<number, media.MediaSourceLoadingRequest> = new HashMap();
8452
8453let sourceCloseCallback: media.SourceCloseCallback = (uuid: number) => {
8454  console.log(`Closing resource with handle ${uuid}`);
8455  // 清除当前uuid相关资源。
8456  requests.remove(uuid);
8457};
8458```
8459
8460## MediaSourceLoader<sup>18+</sup>
8461
8462用于定义媒体数据加载器,需要应用程序对其进行实现。
8463
8464**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
8465
8466**系统能力:** SystemCapability.Multimedia.Media.Core
8467
8468| 名称   | 类型     | 必填 | 说明                 |
8469| -------- | -------- | ---- | -------------------- |
8470| open | [SourceOpenCallback](#sourceopencallback18) | 是  | 由应用程序实现的回调函数,用于处理资源打开请求。 |
8471| read | [SourceReadCallback](#sourcereadcallback18) | 是  | 由应用程序实现的回调函数,用于处理资源读取请求。 |
8472| close | [SourceCloseCallback](#sourceclosecallback18) | 是  | 由应用程序实现的回调函数,用于处理资源关闭请求。 |
8473
8474**示例:**
8475
8476```ts
8477import HashMap from '@ohos.util.HashMap';
8478
8479let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"};
8480let mediaSource : media.MediaSource = media.createMediaSourceWithUrl("http://xxx",  headers);
8481let uuid: number = 1;
8482let requests: HashMap<number, media.MediaSourceLoadingRequest> = new HashMap();
8483let mediaSourceLoader: media.MediaSourceLoader = {
8484  open: (request: media.MediaSourceLoadingRequest) => {
8485    console.log(`Opening resource: ${request.url}`);
8486    // 成功打开资源,返回唯一的句柄, 保证uuid和request对应。
8487    uuid += 1;
8488    requests.set(uuid, request);
8489    return uuid;
8490  },
8491  read: (uuid: number, requestedOffset: number, requestedLength: number) => {
8492    console.log(`Reading resource with handle ${uuid}, offset: ${requestedOffset}, length: ${requestedLength}`);
8493    // 判断uuid是否合法、存储read请求,不要在read请求阻塞去推送数据和头信息。
8494  },
8495  close: (uuid: number) => {
8496    console.log(`Closing resource with handle ${uuid}`);
8497    // 清除当前uuid相关资源。
8498    requests.remove(uuid);
8499  }
8500};
8501
8502mediaSource.setMediaResourceLoaderDelegate(mediaSourceLoader);
8503let playStrategy : media.PlaybackStrategy = {
8504  preferredBufferDuration: 20,
8505};
8506
8507async function setupPlayer() {
8508  let player = await media.createAVPlayer();
8509  player.setMediaSource(mediaSource, playStrategy);
8510}
8511```
8512
8513## MediaSourceLoadingRequest<sup>18+</sup>
8514
8515用于定义加载请求的对象。应用程序通过该对象来获取请求的资源位置,通过该对象和播放器进行数据交互。
8516
8517**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
8518
8519### 属性
8520
8521**系统能力:** SystemCapability.Multimedia.Media.Core
8522
8523| 名称   | 类型    | 只读   | 可选   | 说明                |
8524| --------------------------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
8525| url        | string                        | 否   | 否   | 资源url,需要应用程序打开的资源路径。 |
8526| header     | Record<string, string>        | 否   | 是   | 网络请求标头,如果存在需要应用在下载数据是将头信息设置到http请求中。 |
8527
8528### respondData<sup>18+</sup>
8529
8530respondData(uuid: number, offset: number, buffer: ArrayBuffer): number
8531
8532用于应用程序向播放器发送数据。
8533
8534**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
8535
8536**系统能力:** SystemCapability.Multimedia.Media.Core
8537
8538**参数:**
8539
8540| 参数名   | 类型     | 必填 | 说明                 |
8541| -------- | -------- | ---- | -------------------- |
8542| uuid | number | 是  | 	资源句柄的标识。 |
8543| offset | number | 是  | 	当前媒体数据相对于资源起始位置的偏移量。 |
8544| buffer | ArrayBuffer | 是  | 	响应播放器的媒体数据。<br/>**注意:** 不要传输无关数据,会影响正常数据解析和播放。 |
8545
8546**返回值:**
8547
8548| 类型           | 说明                                |
8549| -------------- | ----------------------------------- |
8550| number | 当前服务端接受的字节数。<br>- 返回值小于0表示操作失败。<br>- 返回值为-2时,表示播放器不再需要当前数据,客户端应停止当前读取过程。<br>- 返回值为-3时,表示播放器的缓冲区已满,客户端应等待下一次读取。 |
8551
8552**示例:**
8553
8554```ts
8555import HashMap from '@ohos.util.HashMap';
8556let requests: HashMap<number, media.MediaSourceLoadingRequest> = new HashMap();
8557let uuid = 1;
8558
8559let request = requests.get(uuid);
8560let offset = 0; // 当前媒体数据相对于资源起始位置的偏移量
8561let buf = new ArrayBuffer(0); // 由应用定义,推送给播放器的数据
8562let num = request.respondData(uuid, offset, buf);
8563```
8564
8565### respondHeader<sup>18+</sup>
8566
8567respondHeader(uuid: number, header?: Record<string, string>, redirectUrl?: string): void
8568
8569用于应用程序向播放器发送响应头信息,应在第一次调用[respondData](#responddata18)方法之前调用。
8570
8571**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
8572
8573**系统能力:** SystemCapability.Multimedia.Media.Core
8574
8575**参数:**
8576
8577| 参数名   | 类型     | 必填 | 说明                 |
8578| -------- | -------- | ---- | -------------------- |
8579| uuid | number | 是  | 	资源句柄的标识。 |
8580| header | Record<string, string> | 否  | HTTP响应中的头部信息。应用可将头部信息字段与底层支持解析字段取交集传递或直接传入对应的所有头部信息。<br> - 底层播放需要解析的字段包括Transfer-Encoding、Location、Content-Type、Content-Range、Content-Encode、Accept-Ranges、content-length。 |
8581| redirectUrl | string | 否  | 	如果存在,为HTTP响应中的重定向URL。 |
8582
8583**示例:**
8584
8585```ts
8586import HashMap from '@ohos.util.HashMap';
8587let requests: HashMap<number, media.MediaSourceLoadingRequest> = new HashMap();
8588let uuid = 1;
8589
8590// 应用根据情况填充。
8591let header:Record<string, string> = {
8592  'Transfer-Encoding':'xxx',
8593  'Location' : 'xxx',
8594  'Content-Type' : 'xxx',
8595  'Content-Range' : 'xxx',
8596  'Content-Encode' : 'xxx',
8597  'Accept-Ranges' : 'xxx',
8598  'content-length' : 'xxx'
8599};
8600let request = requests.get(uuid);
8601request.respondHeader(uuid, header);
8602```
8603
8604### finishLoading<sup>18+</sup>
8605
8606finishLoading(uuid: number, state: LoadingRequestError): void
8607
8608应用程序用于通知播放器当前请求状态的接口。针对服务侧请求的单个资源,推送完全部资源后需要发送LOADING_ERROR_SUCCESS状态告知该资源推送结束。
8609
8610**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
8611
8612**系统能力:** SystemCapability.Multimedia.Media.Core
8613
8614**参数:**
8615
8616| 参数名   | 类型     | 必填 | 说明                 |
8617| -------- | -------- | ---- | -------------------- |
8618| uuid | number | 是  | 	资源句柄的标识。 |
8619| state  | [LoadingRequestError](#loadingrequesterror18) | 是  | 请求的状态。 |
8620
8621**示例:**
8622
8623```ts
8624import HashMap from '@ohos.util.HashMap';
8625let requests: HashMap<number, media.MediaSourceLoadingRequest> = new HashMap();
8626let uuid = 1;
8627
8628let request = requests.get(uuid);
8629let loadingError = media.LoadingRequestError.LOADING_ERROR_SUCCESS;
8630request.finishLoading(uuid, loadingError);
8631```
8632
8633## LoadingRequestError<sup>18+</sup>
8634
8635枚举,数据加载过程中状态变化的原因。
8636
8637**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
8638
8639**系统能力:** SystemCapability.Multimedia.Media.Core
8640
8641| 名称                 | 值   | 说明                           |
8642| -------------------- | ---- | ------------------------------ |
8643| LOADING_ERROR_SUCCESS | 0    | 由客户端返回,表示已经推送到资源末尾。 |
8644| LOADING_ERROR_NOT_READY | 1    | 由客户端返回,表示资源尚未准备好可供访问。|
8645| LOADING_ERROR_NO_RESOURCE | 2    | 由客户端返回,表示请求的资源URL不存在。 |
8646| LOADING_ERROR_INVAID_HANDLE | 3    | 由客户端返回,表示请求的资源句柄uuid无效。 |
8647| LOADING_ERROR_ACCESS_DENIED | 4    | 由客户端返回,表示客户端没有权限请求该资源。 |
8648| LOADING_ERROR_ACCESS_TIMEOUT | 5    | 由客户端返回,表示访问资源过程超时。 |
8649| LOADING_ERROR_AUTHORIZE_FAILED | 6    | 由客户端返回,表示授权失败。 |
8650
8651## AVMimeTypes<sup>12+</sup>
8652
8653媒体MIME类型,通过[setMimeType](#setmimetype12)设置。
8654
8655**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
8656
8657**系统能力:** SystemCapability.Multimedia.Media.Core
8658
8659
8660| 名称       | 值   | 说明                                                         |
8661| ---------- | ---- | ------------------------------------------------------------ |
8662| APPLICATION_M3U8       | application/m3u8    | 表示m3u8本地文件。 |
8663
8664
8665## PlaybackStrategy<sup>12+</sup>
8666
8667播放策略。
8668
8669**系统能力:** SystemCapability.Multimedia.Media.Core
8670
8671| 名称  | 类型     | 必填 | 说明                 |
8672| -------- | -------- | ---- | -------------------- |
8673| preferredWidth| number | 否   | 播放策略首选宽度,设置范围为大于0的整数,如1080,单位为像素(px)。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
8674| preferredHeight | number | 否   | 播放策略首选高度,设置范围为大于0的整数,如1920,单位为像素(px)。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
8675| preferredBufferDuration | number | 否  | 播放策略首选缓冲持续时间,单位s,取值范围1-20。<br>具体使用方式可参考[在线视频播放卡顿优化实践](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-online-video-playback-lags-practice)。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
8676| preferredHdr | boolean | 否   | 播放策略true是hdr,false非hdr,默认非hdr。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
8677| enableSuperResolution<sup>18+</sup> | boolean | 否   | 表示是否使能超分功能。true表示使能超分,false表示不使能超分,默认为false。<br>若不使能超分,则后续不能调用超分相关接口。若使能超分,则超分功能默认开启,默认目标分辨率为1920x1080,单位为像素。<br>**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 |
8678| showFirstFrameOnPrepare<sup>17+</sup> | boolean | 否   | 播放策略true是Prepare之后显示视频起播首帧,false是Prepare之后不显示视频起播首帧,默认不显示。<br>**原子化服务API:** 从API version 17开始,该接口支持在原子化服务中使用。 |
8679| mutedMediaType | [MediaType](#mediatype8) | 否 | 静音播放的媒体类型,仅支持设置 MediaType.MEDIA_TYPE_AUD。 |
8680| preferredAudioLanguage<sup>13+</sup> | string | 否 | 播放策略首选音轨语言。dash场景下应用可按需设置。非dash场景暂不支持,建议缺省。<br>**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。 |
8681| preferredSubtitleLanguage<sup>13+</sup> | string | 否 | 播放策略首选字幕语言。dash场景下应用可按需设置。非dash场景暂不支持,建议缺省。<br>**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。 |
8682| preferredBufferDurationForPlaying<sup>18+</sup> | number | 否 | 播放策略首选起播缓冲水线。当起播缓冲时间超过该值,开始播放。单位s,取值范围0-20。<br>**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 |
8683| thresholdForAutoQuickPlay<sup>18+</sup> | number | 否 | 智能追帧水线,单位为s,取值应不小于2s,且需大于起播缓冲水线,默认设置为5s。<br>播放策略可以通过设置智能追帧水线来保证直播的实时性。flv直播场景下应用可按需设置,非flv直播场景暂不支持。网络状态的变化可能会导致播放器在某段时间内积压大量数据。播放器会定期检查当前播放时间与缓存中最新的帧时间戳之间的差值,当这个差值过大时,播放器将以1.2倍速开始智能追帧。[speedDone事件](#onspeeddone9)会回调特定值100,表示智能追帧开启成功。当差值小于起播缓冲水线时,则停止追帧并恢复到正常播放速度。<br>**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 |
8684
8685## AVScreenCaptureRecordPreset<sup>12+</sup>
8686
8687进行屏幕录制时的编码、封装格式参数的枚举。
8688
8689**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
8690
8691| 名称                              | 值   | 说明                                         |
8692| --------------------------------- | ---- | -------------------------------------------- |
8693| SCREEN_RECORD_PRESET_H264_AAC_MP4 | 0    | 使用视频H264编码,音频AAC编码,MP4封装格式。 |
8694| SCREEN_RECORD_PRESET_H265_AAC_MP4 | 1    | 使用视频H265编码,音频AAC编码,MP4封装格式。 |
8695
8696## AVScreenCaptureStateCode<sup>12+</sup>
8697
8698屏幕录制的状态回调。
8699
8700**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
8701
8702| 名称                                     | 值   | 说明                     |
8703| ---------------------------------------- | ---- | ------------------------ |
8704| SCREENCAPTURE_STATE_STARTED              | 0    | 录屏已开始。             |
8705| SCREENCAPTURE_STATE_CANCELED             | 1    | 录屏被取消。             |
8706| SCREENCAPTURE_STATE_STOPPED_BY_USER      | 2    | 录屏被用户手动停止。     |
8707| SCREENCAPTURE_STATE_INTERRUPTED_BY_OTHER | 3    | 录屏被其他录屏打断。     |
8708| SCREENCAPTURE_STATE_STOPPED_BY_CALL      | 4    | 录屏被来电打断。         |
8709| SCREENCAPTURE_STATE_MIC_UNAVAILABLE      | 5    | 录屏无法使用麦克风收音。 |
8710| SCREENCAPTURE_STATE_MIC_MUTED_BY_USER    | 6    | 麦克风被用户关闭。       |
8711| SCREENCAPTURE_STATE_MIC_UNMUTED_BY_USER  | 7    | 麦克风被用户打开。       |
8712| SCREENCAPTURE_STATE_ENTER_PRIVATE_SCENE  | 8    | 录屏进入隐私页面。       |
8713| SCREENCAPTURE_STATE_EXIT_PRIVATE_SCENE   | 9    | 录屏退出隐私页面。       |
8714| SCREENCAPTURE_STATE_STOPPED_BY_USER_SWITCHES   | 10    | 系统用户切换,录屏中断。       |
8715
8716## AVScreenCaptureFillMode<sup>18+</sup>
8717
8718进行屏幕录制时视频填充模式的枚举。
8719
8720**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
8721
8722| 名称                              | 值   | 说明                                         |
8723| --------------------------------- | ---- | -------------------------------------------- |
8724| PRESERVE_ASPECT_RATIO | 0    | 保持与原始图像相同的宽高比例,即与物理屏幕宽高比例一致。 |
8725| SCALE_TO_FILL | 1    | 进行图像拉伸填充,适配设置的宽度和高度。 |
8726
8727## AVScreenCaptureStrategy<sup>20+</sup>
8728
8729录屏策略。
8730
8731**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
8732
8733| 名称                  | 类型    | 必填 | 说明                 |
8734| --------------------- | ------- | --- | -------------------- |
8735| keepCaptureDuringCall | boolean | 否  | 蜂窝通话时是否保持录屏。 |
8736
8737## AVScreenCaptureRecordConfig<sup>12+</sup>
8738
8739表示录屏参数配置。
8740
8741**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
8742
8743| 名称              | 类型                                                         | 必填 | 说明                                                         |
8744| ----------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
8745| fd                | number                                                       | 是   | 录制输出的文件fd。                                           |
8746| frameWidth        | number                                                       | 否   | 录屏的视频宽度,默认屏幕宽度,根据不同屏幕默认值不同,单位px。 |
8747| frameHeight       | number                                                       | 否   | 录屏的视频高度,默认屏幕高度,根据不同屏幕默认值不同,单位px。 |
8748| videoBitrate      | number                                                       | 否   | 录屏的视频比特率,默认10000000。                             |
8749| audioSampleRate   | number                                                       | 否   | 录屏的音频采样率,内录的系统音和外录的麦克风都是用此采样率,默认48000,仅支持设置48000或16000。 |
8750| audioChannelCount | number                                                       | 否   | 录屏的音频通道数,内录的系统音和外录的麦克风都是用此通道数,默认2声道,仅支持设置1或2声道。 |
8751| audioBitrate      | number                                                       | 否   | 录屏的音频比特率,内录的系统音和外录的麦克风都是用此比特率,默认96000。 |
8752| preset            | [AVScreenCaptureRecordPreset](#avscreencapturerecordpreset12) | 否   | 录屏使用的编码和封装格式,默认SCREEN_RECORD_PRESET_H264_AAC_MP4格式。 |
8753| displayId<sup>15+</sup>            | number | 否   | 指定录屏使用的屏幕,默认主屏幕。 |
8754| fillMode<sup>18+</sup>            | [AVScreenCaptureFillMode](#avscreencapturefillmode18)| 否   | 录屏时视频流的填充模式。 |
8755| strategy<sup>20+</sup>            | [AVScreenCaptureStrategy](#avscreencapturestrategy20)| 否   | 录屏策略。 |
8756
8757## AVScreenCaptureRecorder<sup>12+</sup>
8758
8759屏幕录制管理类,用于进行屏幕录制。在调用AVScreenCaptureRecorder的方法前,需要先通过[createAVScreenCaptureRecorder()](#mediacreateavscreencapturerecorder12)创建一个AVScreenCaptureRecorder实例。
8760
8761### init<sup>12+</sup>
8762
8763init(config: AVScreenCaptureRecordConfig): Promise\<void>
8764
8765异步方式进行录屏初始化,设置录屏参数。通过Promise获取返回值。
8766
8767**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
8768
8769**参数:**
8770
8771| 参数名 | 类型                                                         | 必填 | 说明                     |
8772| ------ | ------------------------------------------------------------ | ---- | ------------------------ |
8773| config | [AVScreenCaptureRecordConfig](#avscreencapturerecordconfig12) | 是   | 配置屏幕录制的相关参数。 |
8774
8775**返回值:**
8776
8777| 类型           | 说明                                |
8778| -------------- | ----------------------------------- |
8779| Promise\<void> | 异步录屏初始化方法的Promise返回值。 |
8780
8781**错误码:**
8782
8783| 错误码ID | 错误信息                                       |
8784| -------- | ---------------------------------------------- |
8785| 401      | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. Return by promise. |
8786| 5400103  | IO error. Return by promise.                   |
8787| 5400105  | Service died. Return by promise.               |
8788
8789**示例:**
8790
8791```ts
8792import { BusinessError } from '@kit.BasicServicesKit';
8793
8794let avCaptureConfig: media.AVScreenCaptureRecordConfig = {
8795    fd: 0, // 文件需要先有调用者创建,赋予写权限,将文件fd传给此参数。
8796    frameWidth: 640,
8797    frameHeight: 480
8798    // 补充其他参数。
8799};
8800
8801avScreenCaptureRecorder.init(avCaptureConfig).then(() => {
8802    console.info('Succeeded in initing avScreenCaptureRecorder');
8803}).catch((err: BusinessError) => {
8804    console.info('Failed to init avScreenCaptureRecorder, error: ' + err.message);
8805});
8806```
8807
8808### startRecording<sup>12+</sup>
8809
8810startRecording(): Promise\<void>
8811
8812异步方式开始录屏。通过Promise获取返回值。
8813
8814**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
8815
8816**返回值:**
8817
8818| 类型           | 说明                             |
8819| -------------- | -------------------------------- |
8820| Promise\<void> | 异步开始录屏方法的Promise返回值. |
8821
8822**错误码:**
8823
8824| 错误码ID | 错误信息                         |
8825| -------- | -------------------------------- |
8826| 5400103  | IO error. Return by promise.     |
8827| 5400105  | Service died. Return by promise. |
8828
8829**示例:**
8830
8831```ts
8832import { BusinessError } from '@kit.BasicServicesKit';
8833
8834avScreenCaptureRecorder.startRecording().then(() => {
8835    console.info('Succeeded in starting avScreenCaptureRecorder');
8836}).catch((err: BusinessError) => {
8837    console.info('Failed to start avScreenCaptureRecorder, error: ' + err.message);
8838});
8839```
8840
8841### stopRecording<sup>12+</sup>
8842
8843stopRecording(): Promise\<void>
8844
8845异步方式结束录屏。通过Promise获取返回值。
8846
8847**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
8848
8849**返回值:**
8850
8851| 类型           | 说明                              |
8852| -------------- | --------------------------------- |
8853| Promise\<void> | 异步结束录屏方法的Promise返回值。 |
8854
8855**错误码:**
8856
8857| 错误码ID | 错误信息                         |
8858| -------- | -------------------------------- |
8859| 5400103  | IO error. Return by promise.     |
8860| 5400105  | Service died. Return by promise. |
8861
8862**示例:**
8863
8864```ts
8865import { BusinessError } from '@kit.BasicServicesKit';
8866
8867avScreenCaptureRecorder.stopRecording().then(() => {
8868    console.info('Succeeded in stopping avScreenCaptureRecorder');
8869}).catch((err: BusinessError) => {
8870    console.info('Failed to stop avScreenCaptureRecorder, error: ' + err.message);
8871});
8872```
8873
8874### skipPrivacyMode<sup>12+</sup>
8875
8876skipPrivacyMode(windowIDs: Array\<number>): Promise\<void>
8877
8878录屏时,应用可对本应用的隐私窗口做安全豁免。通过Promise获取返回值。
8879如录屏时,用户在本应用进行输入密码等操作,应用不会进行黑屏处理。
8880
8881**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
8882
8883**参数:**
8884
8885| 参数名 | 类型    | 必填 | 说明                                                      |
8886| ------ | ------- | ---- | --------------------------------------------------------- |
8887| windowIDs | Array\<number> | 是   | 需要豁免隐私的窗口列表,包括主窗口id和子窗口id,窗口属性获取方法可以参考[窗口API引用](../apis-arkui/arkts-apis-window-Window.md#getwindowproperties9)。 |
8888
8889**返回值:**
8890
8891| 类型           | 说明                             |
8892| -------------- | -------------------------------- |
8893| Promise\<void> | 豁免隐私窗口的Promise返回值. |
8894
8895**错误码:**
8896
8897| 错误码ID | 错误信息                         |
8898| -------- | -------------------------------- |
8899| 5400103  | IO error. Return by promise.     |
8900| 5400105  | Service died. Return by promise. |
8901
8902**示例:**
8903
8904```ts
8905import { BusinessError } from '@kit.BasicServicesKit';
8906
8907let windowIDs = [];
8908avScreenCaptureRecorder.skipPrivacyMode(windowIDs).then(() => {
8909    console.info('Succeeded in skipping privacy mode');
8910}).catch((err: BusinessError) => {
8911    console.info('Failed to skip privacy mode, error: ' + err.message);
8912});
8913```
8914
8915### setMicEnabled<sup>12+</sup>
8916
8917setMicEnabled(enable: boolean): Promise\<void>
8918
8919异步方式设置麦克风开关。通过Promise获取返回值。
8920
8921**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
8922
8923**参数:**
8924
8925| 参数名 | 类型    | 必填 | 说明                                                      |
8926| ------ | ------- | ---- | --------------------------------------------------------- |
8927| enable | boolean | 是   | 麦克风开关控制,true代表麦克风打开,false代表麦克风关闭。 |
8928
8929**返回值:**
8930
8931| 类型           | 说明                                    |
8932| -------------- | --------------------------------------- |
8933| Promise\<void> | 异步设置麦克风开关方法的Promise返回值。 |
8934
8935**错误码:**
8936
8937| 错误码ID | 错误信息                         |
8938| -------- | -------------------------------- |
8939| 5400103  | IO error. Return by promise.     |
8940| 5400105  | Service died. Return by promise. |
8941
8942**示例:**
8943
8944```ts
8945import { BusinessError } from '@kit.BasicServicesKit';
8946
8947avScreenCaptureRecorder.setMicEnabled(true).then(() => {
8948    console.info('Succeeded in setMicEnabled avScreenCaptureRecorder');
8949}).catch((err: BusinessError) => {
8950    console.info('Failed to setMicEnabled avScreenCaptureRecorder, error: ' + err.message);
8951});
8952```
8953
8954### release<sup>12+</sup>
8955
8956release(): Promise\<void>
8957
8958异步方式释放录屏。通过Promise获取返回值。
8959
8960**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
8961
8962**返回值:**
8963
8964| 类型           | 说明                              |
8965| -------------- | --------------------------------- |
8966| Promise\<void> | 异步释放录屏方法的Promise返回值。 |
8967
8968**错误码:**
8969
8970| 错误码ID | 错误信息                         |
8971| -------- | -------------------------------- |
8972| 5400103  | IO error. Return by promise.     |
8973| 5400105  | Service died. Return by promise. |
8974
8975**示例:**
8976
8977```ts
8978import { BusinessError } from '@kit.BasicServicesKit';
8979
8980avScreenCaptureRecorder.release().then(() => {
8981    console.info('Succeeded in releasing avScreenCaptureRecorder');
8982}).catch((err: BusinessError) => {
8983    console.info('Faile to release avScreenCaptureRecorder, error: ' + err.message);
8984});
8985```
8986
8987### on('stateChange')<sup>12+</sup>
8988
8989on(type: 'stateChange', callback: Callback\<AVScreenCaptureStateCode>): void
8990
8991订阅录屏状态切换的事件,当状态发生的时候,会通过订阅的回调通知用户。用户只能订阅一个状态切换的回调方法,重复订阅时,以最后一次订阅的回调接口为准。
8992
8993**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
8994
8995**参数:**
8996
8997| 参数名   | 类型     | 必填 | 说明                                                         |
8998| -------- | -------- | ---- | ------------------------------------------------------------ |
8999| type     | string   | 是   | 状态切换事件回调类型,支持的事件:'stateChange'。            |
9000| callback | function | 是   | 状态切换事件回调方法,[AVScreenCaptureStateCode](#avscreencapturestatecode12)表示切换到的状态。 |
9001
9002**示例:**
9003
9004```ts
9005avScreenCaptureRecorder.on('stateChange', (state: media.AVScreenCaptureStateCode) => {
9006    console.info('avScreenCaptureRecorder stateChange to ' + state);
9007});
9008```
9009
9010### on('error')<sup>12+</sup>
9011
9012on(type: 'error', callback: ErrorCallback): void
9013
9014订阅AVScreenCaptureRecorder的错误事件,用户可以根据应用自身逻辑对错误事件进行处理。用户只能订阅一个错误事件的回调方法,重复订阅时,以最后一次订阅的回调接口为准。
9015
9016**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
9017
9018**参数:**
9019
9020| 参数名   | 类型          | 必填 | 说明                                    |
9021| -------- | ------------- | ---- | --------------------------------------- |
9022| type     | string        | 是   | 错误事件回调类型,支持的事件:'error'。 |
9023| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 录屏错误事件回调方法。                  |
9024
9025**错误码:**
9026
9027| 错误码ID | 错误信息                         |
9028| -------- | -------------------------------- |
9029| 201      | permission denied.     |
9030| 5400103  | IO error. Return by ErrorCallback. |
9031| 5400105  | Service died. Return by ErrorCallback. |
9032
9033**示例:**
9034
9035```ts
9036avScreenCaptureRecorder.on('error', (err: BusinessError) => {
9037    console.error('avScreenCaptureRecorder error:' + err.message);
9038});
9039```
9040
9041### off('stateChange')<sup>12+</sup>
9042
9043 off(type: 'stateChange', callback?: Callback\<AVScreenCaptureStateCode>): void
9044
9045取消订阅状态切换回调事件。用户可以指定填入状态切换的回调方法来取消订阅。
9046
9047**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
9048
9049**参数:**
9050
9051| 参数名   | 类型     | 必填 | 说明                                                         |
9052| -------- | -------- | ---- | ------------------------------------------------------------ |
9053| type     | string   | 是   | 状态切换事件回调类型,支持的事件:'stateChange'。            |
9054| callback | function | 否   | 状态切换事件回调方法,[AVScreenCaptureStateCode](#avscreencapturestatecode12)表示切换到的状态,不填此参数则会取消最后一次订阅事件。 |
9055
9056**示例:**
9057
9058```ts
9059avScreenCaptureRecorder.off('stateChange');
9060```
9061
9062### off('error')<sup>12+</sup>
9063
9064off(type: 'error', callback?: ErrorCallback): void
9065
9066取消订阅错误回调事件。用户可以指定填入错误回调方法来取消订阅。
9067
9068**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
9069
9070**参数:**
9071
9072| 参数名   | 类型     | 必填 | 说明                                                       |
9073| -------- | -------- | ---- | ---------------------------------------------------------- |
9074| type     | string   | 是   | 状态切换事件回调类型,支持的事件:'error'。                |
9075| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否   | 录屏错误事件回调方法,不填此参数则会取消最后一次订阅事件。 |
9076
9077**示例:**
9078
9079```ts
9080avScreenCaptureRecorder.off('error');
9081```