• 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> - 可创建的音视频录制实例不能超过2个。
129> - 由于设备共用音频通路,一个设备仅能有一个实例进行音频录制。创建第二个实例录制音频时,将会因为音频通路冲突导致创建失败。
130
131**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
132
133**参数:**
134
135| 参数名   | 类型                                       | 必填 | 说明                                                         |
136| -------- | ------------------------------------------ | ---- | ------------------------------------------------------------ |
137| callback | AsyncCallback\<[AVRecorder](#avrecorder9)> | 是   | 回调函数。异步返回AVRecorder实例,失败时返回null。可用于录制音视频媒体。 |
138
139**错误码:**
140
141以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
142
143| 错误码ID | 错误信息                       |
144| -------- | ------------------------------ |
145| 5400101  | No memory. Return by callback. |
146
147**示例:**
148
149```ts
150import { BusinessError } from '@kit.BasicServicesKit';
151let avRecorder: media.AVRecorder;
152
153media.createAVRecorder((error: BusinessError, recorder: media.AVRecorder) => {
154  if (recorder != null) {
155    avRecorder = recorder;
156    console.info('Succeeded in creating AVRecorder');
157  } else {
158    console.error(`Failed to create AVRecorder, error message:${error.message}`);
159  }
160});
161```
162
163## media.createAVRecorder<sup>9+</sup>
164
165createAVRecorder(): Promise\<AVRecorder>
166
167异步方式创建音视频录制实例。通过Promise获取返回值。
168
169> **说明:**
170>
171> - 可创建的音视频录制实例不能超过2个。
172> - 由于设备共用音频通路,一个设备仅能有一个实例进行音频录制。创建第二个实例录制音频时,将会因为音频通路冲突导致创建失败。
173
174**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
175
176**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
177
178**返回值:**
179
180| 类型                                 | 说明                                                         |
181| ------------------------------------ | ------------------------------------------------------------ |
182| Promise\<[AVRecorder](#avrecorder9)> | Promise对象。异步返回AVRecorder实例,失败时返回null。可用于录制音视频媒体。 |
183
184**错误码:**
185
186以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
187
188| 错误码ID | 错误信息                      |
189| -------- | ----------------------------- |
190| 5400101  | No memory. Return by promise. |
191
192**示例:**
193
194```ts
195import { BusinessError } from '@kit.BasicServicesKit';
196
197let avRecorder: media.AVRecorder;
198media.createAVRecorder().then((recorder: media.AVRecorder) => {
199  if (recorder != null) {
200    avRecorder = recorder;
201    console.info('Succeeded in creating AVRecorder');
202  } else {
203    console.error('Failed to create AVRecorder');
204  }
205}).catch((error: BusinessError) => {
206  console.error(`Failed to create AVRecorder, error message:${error.message}`);
207});
208```
209
210## media.createAVTranscoder<sup>12+</sup>
211
212createAVTranscoder(): Promise\<AVTranscoder>
213
214异步方式创建视频转码实例,通过Promise获取返回值。
215
216> **说明:**
217
218> 可创建的视频转码实例不能超过2个。
219
220**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
221
222**返回值:**
223
224| 类型                            | 说明                                                         |
225| ------------------------------- | ------------------------------------------------------------ |
226| Promise\<[AVTranscoder](#avtranscoder12)> | Promise对象。异步返回AVTranscoder实例,失败时返回null。可用于视频转码。 |
227
228**错误码:**
229
230以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
231
232| 错误码ID | 错误信息                      |
233| -------- | ----------------------------- |
234| 5400101  | No memory. Return by promise. |
235
236**示例:**
237
238```ts
239import { BusinessError } from '@kit.BasicServicesKit';
240
241let avTranscoder: media.AVTranscoder;
242media.createAVTranscoder().then((transcoder: media.AVTranscoder) => {
243  if (transcoder != null) {
244    avTranscoder = transcoder;
245    console.info('Succeeded in creating AVTranscoder');
246  } else {
247    console.error('Failed to create AVTranscoder');
248  }
249}).catch((error: BusinessError) => {
250  console.error(`Failed to create AVTranscoder, error message:${error.message}`);
251});
252```
253
254## media.createAVMetadataExtractor<sup>11+</sup>
255
256createAVMetadataExtractor(callback: AsyncCallback\<AVMetadataExtractor>): void
257
258异步方式创建AVMetadataExtractor实例,通过注册回调函数获取返回值。
259
260**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
261
262**参数:**
263
264| 参数名   | 类型                                  | 必填 | 说明                                                         |
265| -------- | ------------------------------------- | ---- | ------------------------------------------------------------ |
266| callback | AsyncCallback\<[AVMetadataExtractor](#avmetadataextractor11)> | 是   | 回调函数。当创建AVMetadataExtractor实例成功,err为undefined,data为获取到的AVMetadataExtractor实例,否则为错误对象。 |
267
268**错误码:**
269
270以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
271
272| 错误码ID | 错误信息                       |
273| -------- | ------------------------------ |
274| 5400101  | No memory. Returned by callback. |
275
276**示例:**
277
278```ts
279import { BusinessError } from '@kit.BasicServicesKit';
280
281let avMetadataExtractor: media.AVMetadataExtractor;
282media.createAVMetadataExtractor((error: BusinessError, extractor: media.AVMetadataExtractor) => {
283  if (extractor != null) {
284    avMetadataExtractor = extractor;
285    console.info('Succeeded in creating AVMetadataExtractor');
286  } else {
287    console.error(`Failed to create AVMetadataExtractor, error message:${error.message}`);
288  }
289});
290```
291
292## media.createAVMetadataExtractor<sup>11+</sup>
293
294createAVMetadataExtractor(): Promise\<AVMetadataExtractor>
295
296异步方式创建AVMetadataExtractor实例,通过Promise获取返回值。
297
298**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
299
300**错误码:**
301
302以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
303
304| 错误码ID | 错误信息                       |
305| -------- | ------------------------------ |
306| 5400101  | No memory. Returned by promise. |
307
308**示例:**
309
310```ts
311import { BusinessError } from '@kit.BasicServicesKit';
312
313let avMetadataExtractor: media.AVMetadataExtractor;
314media.createAVMetadataExtractor().then((extractor: media.AVMetadataExtractor) => {
315  if (extractor != null) {
316    avMetadataExtractor = extractor;
317    console.info('Succeeded in creating AVMetadataExtractor');
318  } else {
319    console.error(`Failed to create AVMetadataExtractor`);
320  }
321}).catch((error: BusinessError) => {
322  console.error(`Failed to create AVMetadataExtractor, error message:${error.message}`);
323});
324```
325
326## media.createSoundPool<sup>10+</sup>
327
328createSoundPool(maxStreams: number, audioRenderInfo: audio.AudioRendererInfo, callback: AsyncCallback\<SoundPool>): void
329
330创建音频池实例,使用callback方式异步获取返回值。
331
332**系统能力:** SystemCapability.Multimedia.Media.SoundPool
333
334**参数:**
335
336| 参数名   | 类型                                            | 必填 | 说明                                                         |
337| -------- | ----------------------------------------------- | ---- | ------------------------------------------------------------ |
338| maxStreams | number | 是   | soundPool实例的最大播放的流数 |
339| 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播放短音时为混音模式,不会打断其他音频播放。 |
340| callback | AsyncCallback<[SoundPool](js-apis-inner-multimedia-soundPool.md)> | 是   | 回调函数。异步返回SoundPool实例,失败时返回null。用于音频池实例的加载播放功能。 |
341
342**错误码:**
343
344以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
345
346| 错误码ID | 错误信息                       |
347| -------- | ------------------------------ |
348| 5400101  | No memory. Return by callback. |
349
350**示例:**
351
352```js
353import { audio } from '@kit.AudioKit';
354
355let soundPool: media.SoundPool;
356let audioRendererInfo: audio.AudioRendererInfo = {
357  usage : audio.StreamUsage.STREAM_USAGE_MUSIC,
358  rendererFlags : 0
359}
360
361media.createSoundPool(5, audioRendererInfo, (error, soundPool_: media.SoundPool) => {
362  if (error) {
363    console.error(`Failed to createSoundPool`)
364    return;
365  } else {
366    soundPool = soundPool_;
367    console.info(`Succeeded in createSoundPool`)
368  }
369});
370```
371
372## media.createSoundPool<sup>10+</sup>
373
374createSoundPool(maxStreams: number, audioRenderInfo: audio.AudioRendererInfo): Promise\<SoundPool>
375
376创建音频池实例,通过Promise获取返回值。
377
378**系统能力:** SystemCapability.Multimedia.Media.SoundPool
379
380**参数:**
381
382| 参数名   | 类型                                            | 必填 | 说明                                                         |
383| -------- | ----------------------------------------------- | ---- | ------------------------------------------------------------ |
384| maxStreams | number | 是   | soundPool实例的最大播放的流数 |
385| audioRenderInfo | [audio.AudioRendererInfo](../apis-audio-kit/js-apis-audio.md#audiorendererinfo8)  | 是   | 音频播放参数信息 |
386
387**返回值:**
388
389| 类型                                      | 说明                                                         |
390| ----------------------------------------- | ------------------------------------------------------------ |
391| Promise<[SoundPool](js-apis-inner-multimedia-soundPool.md)> | Promise对象。异步返回SoundPool实例,失败时返回null。用于音频池实例的加载播放功能。 |
392
393**错误码:**
394
395以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
396
397| 错误码ID | 错误信息                      |
398| -------- | ----------------------------- |
399| 5400101  | No memory. Return by promise. |
400
401**示例:**
402
403```js
404import { audio } from '@kit.AudioKit';
405import { BusinessError } from '@kit.BasicServicesKit';
406
407let soundPool: media.SoundPool;
408let audioRendererInfo: audio.AudioRendererInfo = {
409  usage : audio.StreamUsage.STREAM_USAGE_MUSIC,
410  rendererFlags : 0
411}
412
413media.createSoundPool(5, audioRendererInfo).then((soundpool_: media.SoundPool) => {
414  if (soundpool_ != null) {
415    soundPool = soundpool_;
416    console.info('Succceeded in creating SoundPool');
417  } else {
418    console.error('Failed to create SoundPool');
419  }
420}, (error: BusinessError) => {
421  console.error(`soundpool catchCallback, error message:${error.message}`);
422});
423```
424
425## media.createAVScreenCaptureRecorder<sup>12+</sup>
426
427createAVScreenCaptureRecorder(): Promise\<AVScreenCaptureRecorder>
428
429创建屏幕录制实例,通过Promise获取返回值。
430
431**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
432
433**返回值:**
434
435| 类型                                                         | 说明                                                         |
436| ------------------------------------------------------------ | ------------------------------------------------------------ |
437| Promise\<[AVScreenCaptureRecorder](#avscreencapturerecorder12)> | Promise对象。异步返回AVScreenCaptureRecorder实例,失败时返回null。可用于进行屏幕录制。 |
438
439**错误码:**
440
441| 错误码ID | 错误信息                       |
442| -------- | ------------------------------ |
443| 5400101  | No memory. Return by promise. |
444
445**示例:**
446
447```ts
448import { BusinessError } from '@kit.BasicServicesKit';
449
450let avScreenCaptureRecorder: media.AVScreenCaptureRecorder;
451media.createAVScreenCaptureRecorder().then((captureRecorder: media.AVScreenCaptureRecorder) => {
452  if (captureRecorder != null) {
453    avScreenCaptureRecorder = captureRecorder;
454    console.info('Succeeded in createAVScreenCaptureRecorder');
455  } else {
456    console.error('Failed to createAVScreenCaptureRecorder');
457  }
458}).catch((error: BusinessError) => {
459  console.error(`createAVScreenCaptureRecorder catchCallback, error message:${error.message}`);
460});
461```
462
463## AVErrorCode<sup>9+</sup>
464
465[媒体错误码](errorcode-media.md)类型枚举
466
467**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
468
469**系统能力:** SystemCapability.Multimedia.Media.Core
470
471| 名称                                  | 值      | 说明                                 |
472| :------------------------------------ | ------- | ------------------------------------ |
473| AVERR_OK                              | 0       | 表示操作成功。                       |
474| AVERR_NO_PERMISSION                   | 201     | 表示无权限执行此操作。               |
475| AVERR_INVALID_PARAMETER               | 401     | 表示传入入参无效。                   |
476| AVERR_UNSUPPORT_CAPABILITY            | 801     | 表示当前版本不支持该API能力。        |
477| AVERR_NO_MEMORY                       | 5400101 | 表示系统内存不足或服务数量达到上限。 |
478| AVERR_OPERATE_NOT_PERMIT              | 5400102 | 表示当前状态不允许或无权执行此操作。 |
479| AVERR_IO                              | 5400103 | 表示数据流异常信息。                 |
480| AVERR_TIMEOUT                         | 5400104 | 表示系统或网络响应超时。             |
481| AVERR_SERVICE_DIED                    | 5400105 | 表示服务进程死亡。                   |
482| AVERR_UNSUPPORT_FORMAT                | 5400106 | 表示不支持当前媒体资源的格式。       |
483| AVERR_AUDIO_INTERRUPTED<sup>11+</sup> | 5400107 | 表示音频焦点被抢占                   |
484
485## MediaType<sup>8+</sup>
486
487媒体类型枚举。
488
489**系统能力:** SystemCapability.Multimedia.Media.Core
490
491| 名称           | 值                    | 说明                 |
492| -------------- | --------------------- | ------------------- |
493| MEDIA_TYPE_AUD | 0                     | 表示音频。 <br> **原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。           |
494| MEDIA_TYPE_VID | 1                     | 表示视频。  <br> **原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。          |
495| MEDIA_TYPE_SUBTITLE<sup>12+</sup> | 2    | 表示字幕。 <br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
496
497## CodecMimeType<sup>8+</sup>
498
499Codec MIME类型枚举。
500
501**系统能力:** SystemCapability.Multimedia.Media.Core
502
503| 名称         | 值                    | 说明                     |
504| ------------ | --------------------- | ------------------------ |
505| VIDEO_H263   | 'video/h263'          | 表示视频/h263类型。      |
506| VIDEO_AVC    | 'video/avc'           | 表示视频/avc类型。       |
507| VIDEO_MPEG2  | 'video/mpeg2'         | 表示视频/mpeg2类型。     |
508| VIDEO_MPEG4  | 'video/mp4v-es'         | 表示视频/mpeg4类型。     |
509| VIDEO_VP8    | 'video/x-vnd.on2.vp8' | 表示视频/vp8类型。       |
510| VIDEO_HEVC<sup>11+</sup>   | 'video/hevc'          | 表示视频/H265类型。|
511| AUDIO_AAC    | 'audio/mp4a-latm'     | 表示音频/mp4a-latm类型。 <br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
512| AUDIO_VORBIS | 'audio/vorbis'        | 表示音频/vorbis类型。    |
513| AUDIO_FLAC   | 'audio/flac'          | 表示音频/flac类型。      |
514| AUDIO_MP3<sup>12+</sup>   | 'audio/mpeg'          | 表示音频/mpeg类型。      |
515| AUDIO_G711MU<sup>12+</sup>   | 'audio/g711mu'     | 表示音频/G711-mulaw类型。 |
516
517## MediaDescriptionKey<sup>8+</sup>
518
519媒体信息描述枚举。
520
521**系统能力:** SystemCapability.Multimedia.Media.Core
522
523| 名称                     | 值              | 说明                                                         |
524| ------------------------ | --------------- | ------------------------------------------------------------ |
525| MD_KEY_TRACK_INDEX       | 'track_index'   | 表示轨道序号,其对应键值类型为number。 <br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
526| MD_KEY_TRACK_TYPE        | 'track_type'    | 表示轨道类型,其对应键值类型为number,参考[MediaType](#mediatype8)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
527| MD_KEY_CODEC_MIME        | 'codec_mime'    | 表示codec_mime类型,其对应键值类型为string。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
528| MD_KEY_DURATION          | 'duration'      | 表示媒体时长,其对应键值类型为number,单位为毫秒(ms)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
529| MD_KEY_BITRATE           | 'bitrate'       | 表示比特率,其对应键值类型为number,单位为比特率(bps)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
530| MD_KEY_WIDTH             | 'width'         | 表示视频宽度,其对应键值类型为number,单位为像素(px)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
531| MD_KEY_HEIGHT            | 'height'        | 表示视频高度,其对应键值类型为number,单位为像素(px)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
532| MD_KEY_FRAME_RATE        | 'frame_rate'    | 表示视频帧率,其对应键值类型为number,单位为每100秒的帧数。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
533| MD_KEY_AUD_CHANNEL_COUNT | 'channel_count' | 表示声道数,其对应键值类型为number。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
534| MD_KEY_AUD_SAMPLE_RATE   | 'sample_rate'   | 表示采样率,其对应键值类型为number,单位为赫兹(Hz)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
535| MD_KEY_AUD_SAMPLE_DEPTH<sup>12+</sup>  | 'sample_depth'  | 表示位深,其对应键值类型为number,单位为位(bit)。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
536| MD_KEY_TRACK_NAME<sup>12+</sup>  | 'track_name'  | 表示track名称,其对应键值类型为string。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
537| MD_KEY_HDR_TYPE<sup>12+</sup>  | 'hdr_type'  | 表示视频轨类型,其对应键值类型为string。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
538
539## PlaybackInfoKey<sup>12+</sup>
540
541播放信息描述枚举。
542
543**系统能力:** SystemCapability.Multimedia.Media.Core
544
545| 名称                     | 值              | 说明                                                         |
546| ------------------------ | --------------- | ------------------------------------------------------------ |
547| SERVER_IP_ADDRESS        | 'server_ip_address'    | 表示服务器IP地址,其对应键值类型为string。 |
548| AVG_DOWNLOAD_RATE        | 'average_download_rate'| 表示平均下载速率,其对应键值类型为number,单位为比特率(bps)。 |
549| DOWNLOAD_RATE            | 'download_rate'        | 表示1s的下载速率,其对应键值类型为number,单位为比特率(bps)。|
550| IS_DOWNLOADING           | 'is_downloading'       | 表示下载状态,1表示在下载状态,0表示非下载状态(下载完成),其对应键值类型为number。|
551| BUFFER_DURATION          | 'buffer_duration'      | 表示缓存数据的可播放时长,其对应键值类型为number,单位为秒(s)。|
552
553## BufferingInfoType<sup>8+</sup>
554
555缓存事件类型枚举。
556
557**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
558
559**系统能力:** SystemCapability.Multimedia.Media.Core
560
561| 名称              | 值   | 说明                             |
562| ----------------- | ---- | -------------------------------- |
563| BUFFERING_START   | 1    | 表示开始缓存。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                   |
564| BUFFERING_END     | 2    | 表示结束缓存。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                   |
565| BUFFERING_PERCENT | 3    | 表示缓存百分比。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                 |
566| CACHED_DURATION   | 4    | 表示缓存时长,单位为毫秒(ms)。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。  |
567
568## StateChangeReason<sup>9+</sup>
569
570表示播放或录制实例状态机切换原因的枚举,伴随state一起上报。
571
572**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
573
574**系统能力:** SystemCapability.Multimedia.Media.Core
575
576| 名称       | 值   | 说明                                                         |
577| ---------- | ---- | ------------------------------------------------------------ |
578| USER       | 1    | 表示用户行为造成的状态切换,由用户或客户端主动调用接口产生。 |
579| BACKGROUND | 2    | 表示后台系统行为造成的状态切换,比如应用未注册播控中心权限,退到后台时被系统强制暂停或停止。 |
580
581## AVPlayer<sup>9+</sup>
582
583播放管理类,用于管理和播放媒体资源。在调用AVPlayer的方法前,需要先通过[createAVPlayer()](#mediacreateavplayer9)构建一个AVPlayer实例。
584
585Audio/Video播放demo可参考:[音频播放开发指导](../../media/media/using-avplayer-for-playback.md)、[视频播放开发指导](../../media/media/video-playback.md)。
586
587> **说明:**
588>
589> 在使用AVPlayer实例的方法时,建议开发者注册相关回调,主动获取当前状态变化。
590> - [on('stateChange')](#onstatechange9):监听播放状态机AVPlayerState切换。
591> - [on('error')](#onerror9):监听错误事件。
592
593### 属性
594
595**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
596
597| 名称                                                | 类型                                                         | 只读 | 可选 | 说明                                                         |
598| --------------------------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
599| 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开始,该接口支持在原子化服务中使用。 |
600| 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开始,该接口支持在原子化服务中使用。 |
601| 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开始,该接口支持在原子化服务中使用。 |
602| surfaceId<sup>9+</sup>                              | string                                                       | 否   | 是   | 视频窗口ID,默认无窗口。<br/>支持在**initialized**状态下设置。<br/>支持在**prepared**/**playing**/**paused**/**completed**/**stopped**状态下重新设置,重新设置时确保已经在**initialized**状态下进行设置,否则重新设置失败,重新设置后视频播放在新的窗口渲染。<br/>使用场景:视频播放的窗口渲染,纯音频播放不用设置。<br/>**使用示例**:<br/>[通过XComponent创建surfaceId](../apis-arkui/arkui-ts/ts-basic-components-xcomponent.md#getxcomponentsurfaceid)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
603| loop<sup>9+</sup>                                   | boolean                                                      | 否   | 否   | 视频循环播放属性,默认'false',设置为'true'表示循环播放,动态属性。<br/>只允许在**prepared**/**playing**/**paused**/**completed**状态下设置。<br/>直播场景不支持loop设置。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
604| videoScaleType<sup>9+</sup>                         | [VideoScaleType](#videoscaletype9)                           | 否   | 是   | 视频缩放模式,默认VIDEO_SCALE_TYPE_FIT,动态属性。<br/>只允许在**prepared**/**playing**/**paused**/**completed**状态下设置。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
605| 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开始,该接口支持在原子化服务中使用。|
606| 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开始,该接口支持在原子化服务中使用。|
607| 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开始,该接口支持在原子化服务中使用。|
608| state<sup>9+</sup>                                  | [AVPlayerState](#avplayerstate9)                             | 是   | 否   | 音视频播放的状态,全状态有效,可查询参数。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                  |
609| currentTime<sup>9+</sup>                            | number                                                       | 是   | 否   | 视频的当前播放位置,单位为毫秒(ms),可查询参数。<br/>返回为(-1)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。<br/>直播场景默认返回(-1)。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
610| duration<sup>9+</sup> | number                                                       | 是   | 否   | 视频时长,单位为毫秒(ms),可查询参数。<br/>返回为(-1)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。<br/>直播场景默认返回(-1)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
611| width<sup>9+</sup>                                  | number                                                       | 是   | 否   | 视频宽,单位为像素(px),可查询参数。<br/>返回为(0)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
612| height<sup>9+</sup>                                 | number                                                       | 是   | 否   | 视频高,单位为像素(px),可查询参数。<br/>返回为(0)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
613
614### on('stateChange')<sup>9+</sup>
615
616on(type: 'stateChange', callback: OnAVPlayerStateChangeHandle): void
617
618监听播放状态机AVPlayerState切换的事件。
619
620**原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。
621
622**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
623
624**参数:**
625
626| 参数名   | 类型     | 必填 | 说明                                                         |
627| -------- | -------- | ---- | ------------------------------------------------------------ |
628| type     | string   | 是   | 状态机切换事件回调类型,支持的事件:'stateChange',用户操作和系统都会触发此事件。 |
629| callback | [OnAVPlayerStateChangeHandle](#onavplayerstatechangehandle12) | 是   | 状态机切换事件回调方法。 |
630
631**示例:**
632
633```ts
634avPlayer.on('stateChange', async (state: string, reason: media.StateChangeReason) => {
635  switch (state) {
636    case 'idle':
637      console.info('state idle called');
638      break;
639    case 'initialized':
640      console.info('initialized prepared called');
641      break;
642    case 'prepared':
643      console.info('state prepared called');
644      break;
645    case 'playing':
646      console.info('state playing called');
647      break;
648    case 'paused':
649      console.info('state paused called');
650      break;
651    case 'completed':
652      console.info('state completed called');
653      break;
654    case 'stopped':
655      console.info('state stopped called');
656      break;
657    case 'released':
658      console.info('state released called');
659      break;
660    case 'error':
661      console.info('state error called');
662      break;
663    default:
664      console.info('unknown state :' + state);
665      break;
666  }
667})
668```
669
670### off('stateChange')<sup>9+</sup>
671
672off(type: 'stateChange', callback?: OnAVPlayerStateChangeHandle): void
673
674取消监听播放状态机[AVPlayerState](#avplayerstate9)切换的事件。
675
676**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
677
678**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
679
680**参数:**
681
682| 参数名 | 类型   | 必填 | 说明                                                  |
683| ------ | ------ | ---- | ----------------------------------------------------- |
684| type   | string | 是   | 状态机切换事件回调类型,取消注册的事件:'stateChange' |
685| callback   | [OnAVPlayerStateChangeHandle](#onavplayerstatechangehandle12) | 否   | 状态机切换事件回调方法。<br/>从API version 12开始支持此参数。 |
686
687**示例:**
688
689```ts
690avPlayer.off('stateChange')
691```
692
693### on('error')<sup>9+</sup>
694
695on(type: 'error', callback: ErrorCallback): void
696
697监听[AVPlayer](#avplayer9)的错误事件,该事件仅用于错误提示,不需要用户停止播控动作。如果此时[AVPlayerState](#avplayerstate9)也切至error状态,用户需要通过[reset()](#reset9)或者[release()](#release9)退出播放操作。
698
699**原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。
700
701**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
702
703**参数:**
704
705| 参数名   | 类型     | 必填 | 说明                                                         |
706| -------- | -------- | ---- | ------------------------------------------------------------ |
707| type     | string   | 是   | 错误事件回调类型,支持的事件:'error',用户操作和系统都会触发此事件。 |
708| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 错误事件回调方法,使用播放器的过程中发生错误,会提供错误码ID和错误信息。 |
709
710**错误码:**
711
712以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
713
714| 错误码ID | 错误信息              |
715| -------- | --------------------- |
716| 201      | Permission denied     |
717| 401      | The parameter check failed. |
718| 801      | Capability not supported. |
719| 5400101  | No memory. |
720| 5400102  | Operation not allowed.|
721| 5400103  | I/O error             |
722| 5400104  | Time out              |
723| 5400105  | Service died.         |
724| 5400106  | Unsupported format.     |
725
726**示例:**
727
728```ts
729import { BusinessError } from '@kit.BasicServicesKit';
730
731avPlayer.on('error', (error: BusinessError) => {
732  console.info('error happened,and error message is :' + error.message)
733  console.info('error happened,and error code is :' + error.code)
734})
735```
736
737### off('error')<sup>9+</sup>
738
739off(type: 'error', callback?: ErrorCallback): void
740
741取消监听播放的错误事件。
742
743**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
744
745**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
746
747**参数:**
748
749| 参数名 | 类型   | 必填 | 说明                                      |
750| ------ | ------ | ---- | ----------------------------------------- |
751| type   | string | 是   | 错误事件回调类型,取消注册的事件:'error' |
752| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否   | 错误事件回调方法,使用播放器的过程中发生错误,会提供错误码ID和错误信息。<br/>从API version 12开始支持此参数。 |
753
754**示例:**
755
756```ts
757avPlayer.off('error')
758```
759
760### setMediaSource<sup>12+</sup>
761
762setMediaSource(src:MediaSource, strategy?: PlaybackStrategy): Promise\<void>
763
764流媒体预下载资源设置,下载url对应的流媒体数据,并暂存在内存中。[视频播放开发指导](../../media/media/video-playback.md)。通过Promise获取返回值。
765
766**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
767
768**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
769
770**参数:**
771
772| 参数名   | 类型     | 必填 | 说明                 |
773| -------- | -------- | ---- | -------------------- |
774| src | [MediaSource](#mediasource12) | 是   | 流媒体预下载媒体来源。 |
775| strategy | [PlaybackStrategy](#playbackstrategy12) | 否   | 流媒体预下载播放策略。 |
776
777**返回值:**
778
779| 类型           | 说明                                       |
780| -------------- | ------------------------------------------ |
781| Promise\<void> | Promise对象。无返回结果的Promise对象。 |
782
783**错误码:**
784
785以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
786
787| 错误码ID | 错误信息                                  |
788| -------- | ----------------------------------------- |
789| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.      |
790| 5400102  | Operation not allowed. Return by promise. |
791
792**示例:**
793
794```ts
795import { media } from '@kit.MediaKit';
796
797let player = await media.createAVPlayer();
798let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"};
799let mediaSource : media.MediaSource = media.createMediaSourceWithUrl("http://xxx",  headers);
800let playStrategy : media.PlaybackStrategy = {preferredWidth: 1, preferredHeight: 2, preferredBufferDuration: 3, preferredHdr: false};
801player.setMediaSource(mediaSource, playStrategy);
802```
803
804### setPlaybackStrategy<sup>12+</sup>
805
806setPlaybackStrategy(strategy: PlaybackStrategy): Promise\<void>
807
808设置播放策略,只能在initialized状态下调用。
809
810**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
811
812**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
813
814**参数:**
815
816| 参数名   | 类型     | 必填 | 说明                 |
817| -------- | -------- | ---- | -------------------- |
818| strategy | [PlaybackStrategy](#playbackstrategy12) | 是   | 播放策略。 |
819
820**返回值:**
821
822| 类型           | 说明                                  |
823| -------------- | ------------------------------------ |
824| Promise\<void> | Promise对象。无返回结果的Promise对象。 |
825
826**错误码:**
827
828以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
829
830| 错误码ID | 错误信息                                  |
831| -------- | ----------------------------------------- |
832| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed. |
833| 5400102  | Operation not allowed. Return by promise. |
834
835**示例:**
836
837```ts
838import { media } from '@kit.MediaKit';
839import { common } from '@kit.AbilityKit';
840
841let player = await media.createAVPlayer();
842let context = getContext(this) as common.UIAbilityContext
843let fileDescriptor = await context.resourceManager.getRawFd('xxx.mp4')
844player.fdSrc = fileDescriptor
845let playStrategy : media.PlaybackStrategy = {preferredWidth: 1, preferredHeight: 2, preferredBufferDuration: 3,
846  preferredHdr: false, mutedMediaType: media.MediaType.MEDIA_TYPE_AUD};
847player.setPlaybackStrategy(playStrategy);
848```
849
850### prepare<sup>9+</sup>
851
852prepare(callback: AsyncCallback\<void>): void
853
854准备播放音频/视频,需在[stateChange](#onstatechange9)事件成功触发至initialized状态后,才能调用。使用callback方式异步获取返回值。
855
856**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
857
858**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
859
860**参数:**
861
862| 参数名   | 类型     | 必填 | 说明                 |
863| -------- | -------- | ---- | -------------------- |
864| callback | AsyncCallback\<void> | 是   | 准备播放的回调方法。 |
865
866**错误码:**
867
868以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
869
870| 错误码ID | 错误信息                                   |
871| -------- | ------------------------------------------ |
872| 5400102  | Operation not allowed. Return by callback. |
873| 5400106  | Unsupported format. Return by callback.      |
874
875**示例:**
876
877```ts
878import { BusinessError } from '@kit.BasicServicesKit';
879
880avPlayer.prepare((err: BusinessError) => {
881  if (err) {
882    console.error('Failed to prepare,error message is :' + err.message)
883  } else {
884    console.info('Succeeded in preparing');
885  }
886})
887```
888
889### prepare<sup>9+</sup>
890
891prepare(): Promise\<void>
892
893准备播放音频/视频,需在[stateChange](#onstatechange9)事件成功触发至initialized状态后,才能调用。通过Promise获取返回值。
894
895**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
896
897**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
898
899**返回值:**
900
901| 类型           | 说明                      |
902| -------------- | ------------------------- |
903| Promise\<void> | 准备播放的Promise返回值。 |
904
905**错误码:**
906
907以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
908
909| 错误码ID | 错误信息                                  |
910| -------- | ----------------------------------------- |
911| 5400102  | Operation not allowed. Return by promise. |
912| 5400106  | Unsupported format. Return by promise.      |
913
914**示例:**
915
916```ts
917import { BusinessError } from '@kit.BasicServicesKit';
918
919avPlayer.prepare().then(() => {
920  console.info('Succeeded in preparing');
921}, (err: BusinessError) => {
922  console.error('Failed to prepare,error message is :' + err.message)
923})
924```
925
926### setMediaMuted<sup>12+</sup>
927
928setMediaMuted(mediaType: MediaType,  muted: boolean ): Promise\<void>
929
930设置音频静音/取消音频静音。只能在prepared/playing/paused/completed状态下调用。仅支持设置mediaType为音频格式。
931
932**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
933
934**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
935
936**参数:**
937
938| 参数名   | 类型     | 必填 | 说明                 |
939| -------- | -------- | ---- | -------------------- |
940| mediaType | [MediaType](#mediatype8) | 是   | 播放策略。 |
941| muted | boolean | 是   | 是否静音播放。 |
942
943**返回值:**
944
945| 类型           | 说明                      |
946| -------------- | ------------------------- |
947| Promise\<void> | 准备播放的Promise返回值。 |
948
949**错误码:**
950
951以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
952
953| 错误码ID | 错误信息 |
954| -------- | ----------------------------------------- |
955| 401 | The parameter check failed. Return by promise. |
956| 5400102 | Operation not allowed. Return by promise. |
957
958**示例:**
959
960```ts
961import { BusinessError } from '@kit.BasicServicesKit';
962
963avPlayer.prepare().then(() => {
964  console.info('Succeeded in preparing');
965  avPlayer.setMediaMuted(media.MediaType.MEDIA_TYPE_AUD, true)
966}, (err: BusinessError) => {
967  console.error('Failed to prepare,error message is :' + err.message)
968})
969```
970
971### play<sup>9+</sup>
972
973play(callback: AsyncCallback\<void>): void
974
975开始播放音视频资源,只能在prepared/paused/completed状态调用。使用callback方式异步获取返回值。
976
977**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
978
979**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
980
981**参数:**
982
983| 参数名   | 类型     | 必填 | 说明                 |
984| -------- | -------- | ---- | -------------------- |
985| callback | AsyncCallback\<void> | 是   | 开始播放的回调方法。 |
986
987**错误码:**
988
989以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
990
991| 错误码ID | 错误信息                                   |
992| -------- | ------------------------------------------ |
993| 5400102  | Operation not allowed. Return by callback. |
994
995**示例:**
996
997```ts
998import { BusinessError } from '@kit.BasicServicesKit';
999
1000avPlayer.play((err: BusinessError) => {
1001  if (err) {
1002    console.error('Failed to play,error message is :' + err.message)
1003  } else {
1004    console.info('Succeeded in playing');
1005  }
1006})
1007```
1008
1009### play<sup>9+</sup>
1010
1011play(): Promise\<void>
1012
1013开始播放音视频资源,只能在prepared/paused/completed状态调用。通过Promise获取返回值。
1014
1015**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1016
1017**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1018
1019**返回值:**
1020
1021| 类型           | 说明                      |
1022| -------------- | ------------------------- |
1023| Promise\<void> | 开始播放的Promise返回值。 |
1024
1025**错误码:**
1026
1027以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1028
1029| 错误码ID | 错误信息                                  |
1030| -------- | ----------------------------------------- |
1031| 5400102  | Operation not allowed. Return by promise. |
1032
1033**示例:**
1034
1035```ts
1036import { BusinessError } from '@kit.BasicServicesKit';
1037
1038avPlayer.play().then(() => {
1039  console.info('Succeeded in playing');
1040}, (err: BusinessError) => {
1041  console.error('Failed to play,error message is :' + err.message)
1042})
1043```
1044
1045### pause<sup>9+</sup>
1046
1047pause(callback: AsyncCallback\<void>): void
1048
1049暂停播放音视频资源,只能在playing状态调用。使用callback方式异步获取返回值。
1050
1051**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1052
1053**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1054
1055**参数:**
1056
1057| 参数名   | 类型     | 必填 | 说明                 |
1058| -------- | -------- | ---- | -------------------- |
1059| callback | AsyncCallback\<void> | 是   | 暂停播放的回调方法。 |
1060
1061**错误码:**
1062
1063以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1064
1065| 错误码ID | 错误信息                                   |
1066| -------- | ------------------------------------------ |
1067| 5400102  | Operation not allowed. Return by callback. |
1068
1069**示例:**
1070
1071```ts
1072import { BusinessError } from '@kit.BasicServicesKit';
1073
1074avPlayer.pause((err: BusinessError) => {
1075  if (err) {
1076    console.error('Failed to pause,error message is :' + err.message)
1077  } else {
1078    console.info('Succeeded in pausing');
1079  }
1080})
1081```
1082
1083### pause<sup>9+</sup>
1084
1085pause(): Promise\<void>
1086
1087暂停播放音视频资源,只能在playing状态调用。通过Promise获取返回值。
1088
1089**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1090
1091**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1092
1093**返回值:**
1094
1095| 类型           | 说明                      |
1096| -------------- | ------------------------- |
1097| Promise\<void> | 暂停播放的Promise返回值。 |
1098
1099**错误码:**
1100
1101以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1102
1103| 错误码ID | 错误信息                                  |
1104| -------- | ----------------------------------------- |
1105| 5400102  | Operation not allowed. Return by promise. |
1106
1107**示例:**
1108
1109```ts
1110import { BusinessError } from '@kit.BasicServicesKit';
1111
1112avPlayer.pause().then(() => {
1113  console.info('Succeeded in pausing');
1114}, (err: BusinessError) => {
1115  console.error('Failed to pause,error message is :' + err.message)
1116})
1117```
1118
1119### stop<sup>9+</sup>
1120
1121stop(callback: AsyncCallback\<void>): void
1122
1123停止播放音视频资源,只能在prepared/playing/paused/completed状态调用。使用callback方式异步获取返回值。
1124
1125**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1126
1127**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1128
1129**参数:**
1130
1131| 参数名   | 类型     | 必填 | 说明                 |
1132| -------- | -------- | ---- | -------------------- |
1133| callback | AsyncCallback\<void> | 是   | 停止播放的回调方法。 |
1134
1135**错误码:**
1136
1137以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1138
1139| 错误码ID | 错误信息                                   |
1140| -------- | ------------------------------------------ |
1141| 5400102  | Operation not allowed. Return by callback. |
1142
1143**示例:**
1144
1145```ts
1146import { BusinessError } from '@kit.BasicServicesKit';
1147
1148avPlayer.stop((err: BusinessError) => {
1149  if (err) {
1150    console.error('Failed to stop,error message is :' + err.message)
1151  } else {
1152    console.info('Succeeded in stopping');
1153  }
1154})
1155```
1156
1157### stop<sup>9+</sup>
1158
1159stop(): Promise\<void>
1160
1161停止播放音视频资源,只能在prepared/playing/paused/completed状态调用。通过Promise获取返回值。
1162
1163**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1164
1165**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1166
1167**返回值:**
1168
1169| 类型           | 说明                      |
1170| -------------- | ------------------------- |
1171| Promise\<void> | 停止播放的Promise返回值。 |
1172
1173**错误码:**
1174
1175以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1176
1177| 错误码ID | 错误信息                                  |
1178| -------- | ----------------------------------------- |
1179| 5400102  | Operation not allowed. Return by promise. |
1180
1181**示例:**
1182
1183```ts
1184import { BusinessError } from '@kit.BasicServicesKit';
1185
1186avPlayer.stop().then(() => {
1187  console.info('Succeeded in stopping');
1188}, (err: BusinessError) => {
1189  console.error('Failed to stop,error message is :' + err.message)
1190})
1191```
1192
1193### reset<sup>9+</sup>
1194
1195reset(callback: AsyncCallback\<void>): void
1196
1197重置播放,只能在initialized/prepared/playing/paused/completed/stopped/error状态调用。使用callback方式异步获取返回值。
1198
1199**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1200
1201**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1202
1203**参数:**
1204
1205| 参数名   | 类型     | 必填 | 说明                 |
1206| -------- | -------- | ---- | -------------------- |
1207| callback | AsyncCallback\<void> | 是   | 重置播放的回调方法。 |
1208
1209**错误码:**
1210
1211以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1212
1213| 错误码ID | 错误信息                                   |
1214| -------- | ------------------------------------------ |
1215| 5400102  | Operation not allowed. Return by callback. |
1216
1217**示例:**
1218
1219```ts
1220import { BusinessError } from '@kit.BasicServicesKit';
1221
1222avPlayer.reset((err: BusinessError) => {
1223  if (err) {
1224    console.error('Failed to reset,error message is :' + err.message)
1225  } else {
1226    console.info('Succeeded in resetting');
1227  }
1228})
1229```
1230
1231### reset<sup>9+</sup>
1232
1233reset(): Promise\<void>
1234
1235重置播放,只能在initialized/prepared/playing/paused/completed/stopped/error状态调用。通过Promise获取返回值。
1236
1237**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1238
1239**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1240
1241**返回值:**
1242
1243| 类型           | 说明                      |
1244| -------------- | ------------------------- |
1245| Promise\<void> | 重置播放的Promise返回值。 |
1246
1247**错误码:**
1248
1249以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1250
1251| 错误码ID | 错误信息                                  |
1252| -------- | ----------------------------------------- |
1253| 5400102  | Operation not allowed. Return by promise. |
1254
1255**示例:**
1256
1257```ts
1258import { BusinessError } from '@kit.BasicServicesKit';
1259
1260avPlayer.reset().then(() => {
1261  console.info('Succeeded in resetting');
1262}, (err: BusinessError) => {
1263  console.error('Failed to reset,error message is :' + err.message)
1264})
1265```
1266
1267### release<sup>9+</sup>
1268
1269release(callback: AsyncCallback\<void>): void
1270
1271销毁播放资源,除released状态外,均可以调用。使用callback方式异步获取返回值。
1272
1273**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1274
1275**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1276
1277**参数:**
1278
1279| 参数名   | 类型     | 必填 | 说明                 |
1280| -------- | -------- | ---- | -------------------- |
1281| callback | AsyncCallback\<void> | 是   | 销毁播放的回调方法。 |
1282
1283**错误码:**
1284
1285以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1286
1287| 错误码ID | 错误信息                                   |
1288| -------- | ------------------------------------------ |
1289| 5400102  | Operation not allowed. Return by callback. |
1290
1291**示例:**
1292
1293```ts
1294import { BusinessError } from '@kit.BasicServicesKit';
1295
1296avPlayer.release((err: BusinessError) => {
1297  if (err) {
1298    console.error('Failed to release,error message is :' + err.message)
1299  } else {
1300    console.info('Succeeded in releasing');
1301  }
1302})
1303```
1304
1305### release<sup>9+</sup>
1306
1307release(): Promise\<void>
1308
1309销毁播放资源,除released状态,都可以调用。通过Promise获取返回值。
1310
1311**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1312
1313**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1314
1315**返回值:**
1316
1317| 类型           | 说明                      |
1318| -------------- | ------------------------- |
1319| Promise\<void> | 销毁播放的Promise返回值。 |
1320
1321**错误码:**
1322
1323以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1324
1325| 错误码ID | 错误信息                                  |
1326| -------- | ----------------------------------------- |
1327| 5400102  | Operation not allowed. Return by promise. |
1328
1329**示例:**
1330
1331```ts
1332import { BusinessError } from '@kit.BasicServicesKit';
1333
1334avPlayer.release().then(() => {
1335  console.info('Succeeded in releasing');
1336}, (err: BusinessError) => {
1337  console.error('Failed to release,error message is :' + err.message)
1338})
1339```
1340
1341### getTrackDescription<sup>9+</sup>
1342
1343getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void
1344
1345获取音视频轨道信息,可以在prepared/playing/paused状态调用。获取所有音视轨道信息,应在数据加载回调后调用。使用callback方式异步获取返回值。
1346
1347**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1348
1349**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1350
1351**参数:**
1352
1353| 参数名   | 类型                                                         | 必填 | 说明                                         |
1354| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------- |
1355| callback | AsyncCallback<Array<[MediaDescription](#mediadescription8)>> | 是   | 回调函数,当获取音频轨道信息成功,err为undefined,data为获取到的MediaDescription数组;否则为错误对象。|
1356
1357**错误码:**
1358
1359以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1360
1361| 错误码ID | 错误信息                                   |
1362| -------- | ------------------------------------------ |
1363| 5400102  | Operation not allowed. Return by callback. |
1364
1365**示例:**
1366
1367```ts
1368import { BusinessError } from '@kit.BasicServicesKit';
1369
1370avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => {
1371  if ((arrList) != null) {
1372    console.info('Succeeded in doing getTrackDescription');
1373  } else {
1374    console.error(`Failed to do getTrackDescription, error:${error}`);
1375  }
1376});
1377```
1378
1379### getTrackDescription<sup>9+</sup>
1380
1381getTrackDescription(): Promise\<Array\<MediaDescription>>
1382
1383获取音视频轨道信息,可以在prepared/playing/paused状态调用。通过Promise获取返回值。
1384
1385**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1386
1387**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1388
1389**返回值:**
1390
1391| 类型                                                   | 说明                                              |
1392| ------------------------------------------------------ | ------------------------------------------------- |
1393| Promise<Array<[MediaDescription](#mediadescription8)>> | Promise对象,返回音视频轨道信息MediaDescription数组。 |
1394
1395**错误码:**
1396
1397以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1398
1399| 错误码ID | 错误信息                                  |
1400| -------- | ----------------------------------------- |
1401| 5400102  | Operation not allowed. Return by promise. |
1402
1403**示例:**
1404
1405```ts
1406import { BusinessError } from '@kit.BasicServicesKit';
1407
1408avPlayer.getTrackDescription().then((arrList: Array<media.MediaDescription>) => {
1409  console.info('Succeeded in getting TrackDescription');
1410}).catch((error: BusinessError) => {
1411  console.error(`Failed to get TrackDescription, error:${error}`);
1412});
1413```
1414
1415### getSelectedTracks<sup>12+</sup>
1416
1417getSelectedTracks(): Promise\<Array\<number>>
1418
1419获取已选择的音视频轨道索引,可以在prepared/playing/paused状态调用。通过Promise获取返回值。
1420
1421**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1422
1423**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1424
1425**返回值:**
1426
1427| 类型                                                   | 说明                                              |
1428| ------------------------------------------------------ | ------------------------------------------------- |
1429| Promise<Array<[number]>> | Promise对象,返回已选择音视频轨道索引数组。 |
1430
1431**错误码:**
1432
1433以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1434
1435| 错误码ID | 错误信息                                  |
1436| -------- | ----------------------------------------- |
1437| 5400102  | Operation not allowed. |
1438
1439**示例:**
1440
1441```ts
1442import { BusinessError } from '@kit.BasicServicesKit';
1443
1444avPlayer.getSelectedTracks().then((arrList: Array<number>) => {
1445  console.info('Succeeded in getting SelectedTracks');
1446}).catch((error: BusinessError) => {
1447  console.error(`Failed to get SelectedTracks, error:${error}`);
1448});
1449```
1450
1451### getPlaybackInfo<sup>12+</sup>
1452
1453getPlaybackInfo(): Promise\<PlaybackInfo>
1454
1455获取播放过程信息,可以在prepared/playing/paused状态调用。通过Promise获取返回值。
1456
1457**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1458
1459**返回值:**
1460
1461| 类型                                                   | 说明                                              |
1462| ------------------------------------------------------ | ------------------------------------------------- |
1463| Promise<[PlaybackInfo](#playbackinfo12)> | Promise对象,返回播放器信息PlaybackInfo。 |
1464
1465**示例:**
1466
1467```ts
1468import { BusinessError } from '@kit.BasicServicesKit';
1469import { media } from '@kit.MediaKit';
1470
1471let avPlayer: media.AVPlayer | undefined = undefined;
1472let playbackInfo: media.PlaybackInfo | undefined = undefined;
1473media.createAVPlayer(async (err: BusinessError, player: media.AVPlayer) => {
1474  if (player != null) {
1475    avPlayer = player;
1476    console.info(`Succeeded in creating AVPlayer`);
1477    if (avPlayer) {
1478      try {
1479        playbackInfo = await avPlayer.getPlaybackInfo();
1480        console.info(`AVPlayer getPlaybackInfo = ${JSON.stringify(playbackInfo)}`); // 打印整个PlaybackInfo的值
1481      } catch (error) {
1482        console.error(`error = ${error}`);
1483      }
1484    }
1485  } else {
1486    console.error(`Failed to create AVPlayer, error message:${err.message}`);
1487  }
1488});
1489```
1490
1491### selectTrack<sup>12+</sup>
1492
1493selectTrack(index: number, mode?: SwitchMode): Promise\<void>
1494
1495使用AVPlayer播放多音视频轨资源时,选择指定轨道播放,通过Promise获取返回值。
1496
1497**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1498
1499**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1500
1501**参数:**
1502
1503| 参数名   | 类型     | 必填 | 说明                 |
1504| -------- | -------- | ---- | -------------------- |
1505| index | number | 是   | 多音视频资源的轨道索引,可通过[getTrackDescription](#gettrackdescription9-1)接口获取当前资源的所有轨道信息[MediaDescription](#mediadescription8)。 |
1506| mode   | [SwitchMode](#switchmode12) | 否   | 切换视频轨道模式,默认为SMOOTH模式,**仅在DASH协议网络流视频轨切换时生效**,其他场景当前暂不支持。 |
1507
1508**返回值:**
1509
1510| 类型           | 说明                      |
1511| -------------- | ------------------------- |
1512| Promise\<void> | 选择轨道完成的Promise返回值。 |
1513
1514**错误码:**
1515
1516以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
1517
1518| 错误码ID | 错误信息                                  |
1519| -------- | ----------------------------------------- |
1520| 401      | The parameter check failed. Return by promise.      |
1521| 5400102  | Operation not allowed. Return by promise. |
1522
1523**示例:**
1524
1525```ts
1526import { BusinessError } from '@kit.BasicServicesKit';
1527import { media } from '@kit.MediaKit';
1528
1529let avPlayer: media.AVPlayer = await media.createAVPlayer();
1530let audioTrackIndex: Object = 0;
1531avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => {
1532  if (arrList != null) {
1533    for (let i = 0; i < arrList.length; i++) {
1534      if (i != 0) {
1535        // 获取音频轨道列表
1536        audioTrackIndex = arrList[i][media.MediaDescriptionKey.MD_KEY_TRACK_INDEX];
1537      }
1538    }
1539  } else {
1540    console.error(`Failed to get TrackDescription, error:${error}`);
1541  }
1542});
1543
1544// 选择其中一个音频轨道
1545avPlayer.selectTrack(parseInt(audioTrackIndex.toString()));
1546```
1547
1548### deselectTrack<sup>12+</sup>
1549
1550deselectTrack(index: number): Promise\<void>
1551
1552使用AVPlayer播放多音轨视频时取消指定音视频轨道播放,通过Promise获取返回值。
1553
1554**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1555
1556**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1557
1558**参数:**
1559
1560| 参数名   | 类型     | 必填 | 说明                 |
1561| -------- | -------- | ---- | -------------------- |
1562| index | number | 是   | 多音视频资源的轨道索引,来自[getTrackDescription](#gettrackdescription9-1)接口所获取的轨道信息[MediaDescription](#mediadescription8)。 |
1563
1564**返回值:**
1565
1566| 类型           | 说明                      |
1567| -------------- | ------------------------- |
1568| Promise\<void> | 取消选择曲目完成的Promise返回值。 |
1569
1570**错误码:**
1571
1572以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
1573
1574| 错误码ID | 错误信息                                  |
1575| -------- | ----------------------------------------- |
1576| 401      | The parameter check failed. Return by promise.        |
1577| 5400102  | Operation not allowed. Return by promise. |
1578
1579**示例:**
1580
1581```ts
1582import { BusinessError } from '@kit.BasicServicesKit';
1583import { media } from '@kit.MediaKit';
1584
1585let avPlayer: media.AVPlayer = await media.createAVPlayer();
1586let audioTrackIndex: Object = 0;
1587avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => {
1588  if (arrList != null) {
1589    for (let i = 0; i < arrList.length; i++) {
1590      if (i != 0) {
1591        // 获取音频轨道列表
1592        audioTrackIndex = arrList[i][media.MediaDescriptionKey.MD_KEY_TRACK_INDEX];
1593      }
1594    }
1595  } else {
1596    console.error(`Failed to get TrackDescription, error:${error}`);
1597  }
1598});
1599
1600// 选择其中一个音频轨道
1601avPlayer.selectTrack(parseInt(audioTrackIndex.toString()));
1602// 取消选择上次选中的音频轨道,并恢复到默认音频轨道。
1603avPlayer.deselectTrack(parseInt(audioTrackIndex.toString()));
1604```
1605
1606### setDecryptionConfig<sup>11+</sup>
1607
1608setDecryptionConfig(mediaKeySession: drm.MediaKeySession, secureVideoPath: boolean): void
1609
1610设置解密配置。当收到[mediaKeySystemInfoUpdate事件](#onmediakeysysteminfoupdate11)时,需根据事件上报的信息创建相关配置并设置解密配置,否则无法播放。
1611
1612**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1613
1614**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1615
1616**参数:**
1617
1618| 参数名   | 类型                                                         | 必填 | 说明                                         |
1619| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------- |
1620| mediaKeySession | [drm.MediaKeySession](../apis-drm-kit/js-apis-drm.md#mediakeysession) | 是   | 解密会话 |
1621| secureVideoPath | boolean | 是 | 安全视频通路,true表示选择安全视频通路,false表示选择非安全视频通路 |
1622
1623**错误码:**
1624
1625以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
1626
1627| 错误码ID | 错误信息                                  |
1628| -------- | ----------------------------------------- |
1629| 401  | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
1630
1631**示例:**
1632
1633关于drm模块的示例具体可见[js-apis-drm.md](../apis-drm-kit/js-apis-drm.md)。
1634```ts
1635import { drm } from '@kit.DrmKit';
1636
1637// 创建MediaKeySystem系统
1638let keySystem:drm.MediaKeySystem = drm.createMediaKeySystem('com.clearplay.drm');
1639// 创建MediaKeySession解密会话
1640let keySession:drm.MediaKeySession = keySystem.createMediaKeySession(drm.ContentProtectionLevel.CONTENT_PROTECTION_LEVEL_SW_CRYPTO);
1641// 生成许可证请求、设置许可证响应等
1642// 安全视频通路标志
1643let secureVideoPath:boolean = false;
1644// 设置解密配置
1645avPlayer.setDecryptionConfig(keySession, secureVideoPath);
1646```
1647
1648### getMediaKeySystemInfos<sup>11+</sup>
1649
1650getMediaKeySystemInfos(): Array\<drm.MediaKeySystemInfo>
1651
1652获取当前播放的媒体资源的MediaKeySystemInfo。需要在[mediaKeySystemInfoUpdate事件](#onmediakeysysteminfoupdate11)触发成功后才能调用。
1653
1654**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1655
1656**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1657
1658**返回值:**
1659
1660| 类型                                                   | 说明                                              |
1661| ------------------------------------------------------ | ------------------------------------------------- |
1662|  Array<[drm.MediaKeySystemInfo](../apis-drm-kit/js-apis-drm.md#mediakeysysteminfo)> | MediaKeySystemInfo数组,MediaKeySystemInfo具有uuid和pssh两个属性。 |
1663
1664**示例:**
1665
1666```ts
1667import { drm } from '@kit.DrmKit';
1668
1669const infos = avPlayer.getMediaKeySystemInfos();
1670console.info('GetMediaKeySystemInfos count: ' + infos.length);
1671for (let i = 0; i < infos.length; i++) {
1672  console.info('GetMediaKeySystemInfos uuid: ' + infos[i]["uuid"]);
1673  console.info('GetMediaKeySystemInfos pssh: ' + infos[i]["pssh"]);
1674}
1675```
1676
1677### seek<sup>9+</sup>
1678
1679seek(timeMs: number, mode?:SeekMode): void
1680
1681跳转到指定播放位置,只能在prepared/playing/paused/completed状态调用,可以通过[seekDone事件](#onseekdone9)确认是否生效。
1682注:直播场景不支持seek。
1683
1684**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1685
1686**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1687
1688**参数:**
1689
1690| 参数名 | 类型                   | 必填 | 说明                                                         |
1691| ------ | ---------------------- | ---- | ------------------------------------------------------------ |
1692| timeMs | number                 | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, [duration](#属性)]。 |
1693| mode   | [SeekMode](#seekmode8) | 否   | 基于视频I帧的跳转模式,默认为SEEK_PREV_SYNC模式,**仅在视频资源播放时设置**。 |
1694
1695**示例:**
1696
1697```ts
1698let seekTime: number = 1000
1699avPlayer.seek(seekTime, media.SeekMode.SEEK_PREV_SYNC)
1700```
1701
1702### on('seekDone')<sup>9+</sup>
1703
1704on(type: 'seekDone', callback: Callback\<number>): void
1705
1706监听seek生效的事件。
1707
1708**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1709
1710**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1711
1712**参数:**
1713
1714| 参数名   | 类型     | 必填 | 说明                                                         |
1715| -------- | -------- | ---- | ------------------------------------------------------------ |
1716| type     | string   | 是   | seek生效的事件回调类型,支持的事件:'seekDone',每次调用seek后都会回调此事件。 |
1717| callback | Callback\<number> | 是   | 回调函数。seek生效的事件回调方法,只会上报用户请求的time位置。<br/>**视频播放:**[SeekMode](#seekmode8)会造成实际跳转位置与用户设置产生偏差,精准位置需要通过currentTime获取,事件回调的time仅代表完成用户某一次请求。 |
1718
1719**示例:**
1720
1721```ts
1722avPlayer.on('seekDone', (seekDoneTime:number) => {
1723  console.info('seekDone called,and seek time is:' + seekDoneTime)
1724})
1725```
1726
1727### off('seekDone')<sup>9+</sup>
1728
1729off(type: 'seekDone', callback?: Callback\<number>): void
1730
1731取消监听seek生效的事件。
1732
1733**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1734
1735**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1736
1737**参数:**
1738
1739| 参数名 | 类型   | 必填 | 说明                                                 |
1740| ------ | ------ | ---- | ---------------------------------------------------- |
1741| type   | string | 是   | seek生效的事件回调类型,取消注册的事件:'seekDone'。 |
1742| callback | Callback\<number> | 否   | 回调函数。seek生效的事件回调方法,只会上报用户请求的time位置。<br/>**视频播放:**[SeekMode](#seekmode8)会造成实际跳转位置与用户设置产生偏差,精准位置需要通过currentTime获取,事件回调的time仅代表完成用户某一次请求。<br/>从API version 12开始支持此参数。 |
1743
1744**示例:**
1745
1746```ts
1747avPlayer.off('seekDone')
1748```
1749
1750### setSpeed<sup>9+</sup>
1751
1752setSpeed(speed: PlaybackSpeed): void
1753
1754设置倍速模式,只能在prepared/playing/paused/completed状态调用,可以通过[speedDone事件](#onspeeddone9)确认是否生效。
1755注:直播场景不支持setSpeed。
1756
1757**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1758
1759**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1760
1761**参数:**
1762
1763| 参数名 | 类型                             | 必填 | 说明               |
1764| ------ | -------------------------------- | ---- | ------------------ |
1765| speed  | [PlaybackSpeed](#playbackspeed8) | 是   | 指定播放倍速模式。 |
1766
1767**示例:**
1768
1769```ts
1770avPlayer.setSpeed(media.PlaybackSpeed.SPEED_FORWARD_2_00_X)
1771```
1772
1773### on('speedDone')<sup>9+</sup>
1774
1775on(type: 'speedDone', callback: Callback\<number>): void
1776
1777监听setSpeed生效的事件
1778
1779**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1780
1781**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1782
1783**参数:**
1784
1785| 参数名   | 类型     | 必填 | 说明                                                         |
1786| -------- | -------- | ---- | ------------------------------------------------------------ |
1787| type     | string   | 是   | setSpeed生效的事件回调类型,支持的事件:'speedDone',每次调用setSpeed后都会回调此事件。 |
1788| callback | Callback\<number> | 是   | 回调函数。当setSpeed成功,上报生效的倍速模式,具体见[PlaybackSpeed](#playbackspeed8)。 |
1789
1790**示例:**
1791
1792```ts
1793avPlayer.on('speedDone', (speed:number) => {
1794  console.info('speedDone called,and speed value is:' + speed)
1795})
1796```
1797
1798### off('speedDone')<sup>9+</sup>
1799
1800off(type: 'speedDone', callback?: Callback\<number>): void
1801
1802取消监听setSpeed生效的事件。
1803
1804**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1805
1806**参数:**
1807
1808| 参数名 | 类型   | 必填 | 说明                                                      |
1809| ------ | ------ | ---- | --------------------------------------------------------- |
1810| type   | string | 是   | setSpeed生效的事件回调类型,取消注册的事件:'speedDone'。 |
1811| callback | Callback\<number> | 否   | 回调函数。当setSpeed成功,上报生效的倍速模式,具体见[PlaybackSpeed](#playbackspeed8)。<br/>从API version 12开始支持此参数。 |
1812
1813**示例:**
1814
1815```ts
1816avPlayer.off('speedDone')
1817```
1818
1819### setBitrate<sup>9+</sup>
1820
1821setBitrate(bitrate: number): void
1822
1823设置比特率,以播放所指定比特率的流媒体资源,当前仅对**HLS/DASH协议网络流**有效。默认情况下,AVPlayer会根据网络连接速度选择合适的比特率。只能在prepared/playing/paused/completed状态调用,可以通过[bitrateDone](#onbitratedone9)事件确认是否生效。
1824
1825**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1826
1827**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1828
1829**参数:**
1830
1831| 参数名  | 类型   | 必填 | 说明                                                         |
1832| ------- | ------ | ---- | ------------------------------------------------------------ |
1833| bitrate | number | 是   | 指定比特率,须通过[availableBitrates](#onavailablebitrates9)事件获得当前HLS/DASH协议网络流可用的比特率列表,如果用户指定的比特率不在此列表中,则播放器将从可用比特率列表中选择最接近的比特率。如果通过availableBitrates事件获得的比特率列表长度为0,则不支持指定比特率,也不会产生bitrateDone回调。 |
1834
1835**示例:**
1836
1837```ts
1838let bitrate: number = 96000
1839avPlayer.setBitrate(bitrate)
1840```
1841
1842### on('bitrateDone')<sup>9+</sup>
1843
1844on(type: 'bitrateDone', callback: Callback\<number>): void
1845
1846监听setBitrate生效的事件。
1847
1848**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1849
1850**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1851
1852**参数:**
1853
1854| 参数名   | 类型     | 必填 | 说明                                                         |
1855| -------- | -------- | ---- | ------------------------------------------------------------ |
1856| type     | string   | 是   | setBitrate生效的事件回调类型,支持的事件:'bitrateDone',每次调用setBitrate后都会回调此事件。 |
1857| callback | Callback\<number> | 是   | setBitrate生效的事件回调方法,上报生效的比特率。             |
1858
1859**示例:**
1860
1861```ts
1862avPlayer.on('bitrateDone', (bitrate:number) => {
1863  console.info('bitrateDone called,and bitrate value is:' + bitrate)
1864})
1865```
1866
1867### off('bitrateDone')<sup>9+</sup>
1868
1869off(type: 'bitrateDone', callback?: Callback\<number>): void
1870
1871取消监听setBitrate生效的事件。
1872
1873**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1874
1875**参数:**
1876
1877| 参数名 | 类型   | 必填 | 说明                                                         |
1878| ------ | ------ | ---- | ------------------------------------------------------------ |
1879| type   | string | 是   | setBitrate生效的事件回调类型,取消注册的事件:'bitrateDone'。 |
1880| callback | Callback\<number> | 否   | setBitrate生效的事件回调方法,上报生效的比特率。<br/>从API version 12开始支持此参数。             |
1881
1882**示例:**
1883
1884```ts
1885avPlayer.off('bitrateDone')
1886```
1887
1888### on('availableBitrates')<sup>9+</sup>
1889
1890on(type: 'availableBitrates', callback: Callback\<Array\<number>>): void
1891
1892监听HLS/DASH协议网络流可用的比特率列表,只会在切换prepared状态后上报。
1893
1894**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1895
1896**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1897
1898**参数:**
1899
1900| 参数名   | 类型     | 必填 | 说明                                                         |
1901| -------- | -------- | ---- | ------------------------------------------------------------ |
1902| type     | string   | 是   | HLS/DASH协议网络流可用比特率上报事件回调类型,支持的事件:'availableBitrates',只会在prepared之后上报一次。 |
1903| callback | Callback\<Array\<number>> | 是   | HLS/DASH协议网络流可用比特率上报事件回调方法,使用数组存放支持的比特率。如果数组长度为0,则不支持指定比特率。 |
1904
1905**示例:**
1906
1907```ts
1908avPlayer.on('availableBitrates', (bitrates: Array<number>) => {
1909  console.info('availableBitrates called,and availableBitrates length is:' + bitrates.length)
1910})
1911```
1912
1913### off('availableBitrates')<sup>9+</sup>
1914
1915off(type: 'availableBitrates', callback?: Callback\<Array\<number>>): void
1916
1917取消监听HLS/DASH协议网络流可用的比特率列表,调用[prepare](#prepare9)后,上报此事件。
1918
1919**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1920
1921**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1922
1923**参数:**
1924
1925| 参数名 | 类型   | 必填 | 说明                                                         |
1926| ------ | ------ | ---- | ------------------------------------------------------------ |
1927| type   | string | 是   | HLS/DASH协议网络流可用比特率上报事件回调类型,取消注册的事件:'availableBitrates'。 |
1928| callback | Callback\<Array\<number>> | 否   | HLS/DASH协议网络流可用比特率上报事件回调方法,使用数组存放支持的比特率。如果数组长度为0,则不支持指定比特率。<br/>从API version 12开始支持此参数。 |
1929
1930**示例:**
1931
1932```ts
1933avPlayer.off('availableBitrates')
1934```
1935
1936
1937### on('mediaKeySystemInfoUpdate')<sup>11+</sup>
1938
1939on(type: 'mediaKeySystemInfoUpdate', callback: Callback\<Array\<drm.MediaKeySystemInfo>>): void
1940
1941监听mediaKeySystemInfoUpdate事件。
1942
1943**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1944
1945**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1946
1947**参数:**
1948
1949| 参数名   | 类型     | 必填 | 说明                                                         |
1950| -------- | -------- | ---- | ------------------------------------------------------------ |
1951| type     | string   | 是   | 版权保护信息更新上报事件回调类型,支持的事件:'mediaKeySystemInfoUpdate',当播放内容的版权保护信息更新时上报事件。 |
1952| callback | Callback\<Array\<drm.[MediaKeySystemInfo](../apis-drm-kit/js-apis-drm.md#mediakeysysteminfo)>> | 是   | 版权保护信息更新上报事件回调方法,上报MediaKeySystemInfo数组。 |
1953
1954**示例:**
1955
1956```ts
1957import { drm } from '@kit.DrmKit';
1958
1959avPlayer.on('mediaKeySystemInfoUpdate', (mediaKeySystemInfo: Array<drm.MediaKeySystemInfo>) => {
1960    for (let i = 0; i < mediaKeySystemInfo.length; i++) {
1961      console.info('mediaKeySystemInfoUpdate happened uuid: ' + mediaKeySystemInfo[i]["uuid"]);
1962      console.info('mediaKeySystemInfoUpdate happened pssh: ' + mediaKeySystemInfo[i]["pssh"]);
1963    }
1964})
1965```
1966
1967### off('mediaKeySystemInfoUpdate')<sup>11+</sup>
1968
1969off(type: 'mediaKeySystemInfoUpdate', callback?: Callback\<Array\<drm.MediaKeySystemInfo>>): void;
1970
1971取消监听mediaKeySystemInfoUpdate事件。
1972
1973**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1974
1975**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1976
1977**参数:**
1978
1979| 参数名 | 类型   | 必填 | 说明                                                         |
1980| ------ | ------ | ---- | ------------------------------------------------------------ |
1981| type   | string | 是   | 版权保护信息更新上报事件回调类型,取消注册的事件:'mediaKeySystemInfoUpdate'。 |
1982| callback | Callback\<Array\<drm.[MediaKeySystemInfo](../apis-drm-kit/js-apis-drm.md#mediakeysysteminfo)>> | 否   | 版权保护信息更新上报事件回调方法,上报版权保护信息数组。如填写该参数,则仅取消注册此回调方法,否则取消注册mediaKeySystemInfoUpdate事件的所有回调方法。 |
1983
1984**示例:**
1985
1986```ts
1987avPlayer.off('mediaKeySystemInfoUpdate')
1988```
1989
1990### setVolume<sup>9+</sup>
1991
1992setVolume(volume: number): void
1993
1994设置媒体播放音量,只能在prepared/playing/paused/completed状态调用,可以通过[volumeChange事件](#onvolumechange9)确认是否生效。
1995
1996**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1997
1998**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
1999
2000**参数:**
2001
2002| 参数名 | 类型   | 必填 | 说明                                                         |
2003| ------ | ------ | ---- | ------------------------------------------------------------ |
2004| volume | number | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
2005
2006**示例:**
2007
2008```ts
2009let volume: number = 1.0
2010avPlayer.setVolume(volume)
2011```
2012
2013### on('volumeChange')<sup>9+</sup>
2014
2015on(type: 'volumeChange', callback: Callback\<number>): void
2016
2017监听setVolume生效的事件。
2018
2019**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2020
2021**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2022
2023**参数:**
2024
2025| 参数名   | 类型     | 必填 | 说明                                                         |
2026| -------- | -------- | ---- | ------------------------------------------------------------ |
2027| type     | string   | 是   | setVolume生效的事件回调类型,支持的事件:'volumeChange',每次调用setVolume后都会回调此事件。 |
2028| callback | Callback\<number> | 是   | setVolume生效的事件回调方法,上报生效的媒体音量。            |
2029
2030**示例:**
2031
2032```ts
2033avPlayer.on('volumeChange', (vol: number) => {
2034  console.info('volumeChange called,and new volume is :' + vol)
2035})
2036```
2037
2038### off('volumeChange')<sup>9+</sup>
2039
2040off(type: 'volumeChange', callback?: Callback\<number>): void
2041
2042取消监听setVolume生效的事件。
2043
2044**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2045
2046**参数:**
2047
2048| 参数名 | 类型   | 必填 | 说明                                                         |
2049| ------ | ------ | ---- | ------------------------------------------------------------ |
2050| type   | string | 是   | setVolume生效的事件回调类型,取消注册的事件:'volumeChange'。 |
2051| callback | Callback\<number> | 否   | setVolume生效的事件回调方法,上报生效的媒体音量。<br/>从API version 12开始支持此参数。            |
2052
2053**示例:**
2054
2055```ts
2056avPlayer.off('volumeChange')
2057```
2058
2059### on('endOfStream')<sup>9+</sup>
2060
2061on(type: 'endOfStream', callback: Callback\<void>): void
2062
2063监听资源播放至结尾的事件;如果用户设置[loop](#属性)=true,播放会跳转至开头重播;如果用户没有设置loop,会通过[stateChange](#onstatechange9)上报completed状态。
2064
2065**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2066
2067**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2068
2069**参数:**
2070
2071| 参数名   | 类型     | 必填 | 说明                                                         |
2072| -------- | -------- | ---- | ------------------------------------------------------------ |
2073| type     | string   | 是   | 资源播放至结尾的事件回调类型,支持的事件:'endOfStream',当播放至结尾时会上报此事件。 |
2074| callback | Callback\<void> | 是   | 资源播放至结尾的事件回调方法。                               |
2075
2076**示例:**
2077
2078```ts
2079avPlayer.on('endOfStream', () => {
2080  console.info('endOfStream called')
2081})
2082```
2083
2084### off('endOfStream')<sup>9+</sup>
2085
2086off(type: 'endOfStream', callback?: Callback\<void>): void
2087
2088取消监听资源播放至结尾的事件。
2089
2090**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2091
2092**参数:**
2093
2094| 参数名 | 类型   | 必填 | 说明                                                         |
2095| ------ | ------ | ---- | ------------------------------------------------------------ |
2096| type   | string | 是   | 资源播放至结尾的事件回调类型,取消注册的事件:'endOfStream'。 |
2097| callback | Callback\<void> | 否   | 资源播放至结尾的事件回调方法。<br/>从API version 12开始支持此参数。                               |
2098
2099**示例:**
2100
2101```ts
2102avPlayer.off('endOfStream')
2103```
2104
2105### on('timeUpdate')<sup>9+</sup>
2106
2107on(type: 'timeUpdate', callback: Callback\<number>): void
2108
2109监听资源播放当前时间,单位为毫秒(ms),用于刷新进度条当前位置,默认间隔100ms时间上报,因用户操作(seek)产生的时间变化会立刻上报。
2110
2111注:直播场景不支持timeUpdate上报。
2112
2113**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
2114
2115**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2116
2117**参数:**
2118
2119| 参数名   | 类型     | 必填 | 说明                                           |
2120| -------- | -------- | ---- | ---------------------------------------------- |
2121| type     | string   | 是   | 时间更新的回调类型,支持的事件:'timeUpdate'。 |
2122| callback | Callback\<number> | 是   | 回调函数。返回当前时间。                                     |
2123
2124**示例:**
2125
2126```ts
2127avPlayer.on('timeUpdate', (time:number) => {
2128  console.info('timeUpdate called,and new time is :' + time)
2129})
2130```
2131
2132### off('timeUpdate')<sup>9+</sup>
2133
2134off(type: 'timeUpdate', callback?: Callback\<number>): void
2135
2136取消监听资源播放当前时间。
2137
2138**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
2139
2140**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2141
2142**参数:**
2143
2144| 参数名 | 类型   | 必填 | 说明                                               |
2145| ------ | ------ | ---- | -------------------------------------------------- |
2146| type   | string | 是   | 时间更新的回调类型,取消注册的事件:'timeUpdate'。 |
2147| callback | Callback\<number> | 否   | 回调函数。返回当前时间。<br/>从API version 12开始支持此参数。             |
2148
2149**示例:**
2150
2151```ts
2152avPlayer.off('timeUpdate')
2153```
2154
2155### on('durationUpdate')<sup>9+</sup>
2156
2157
2158on(type: 'durationUpdate', callback: Callback\<number>): void
2159
2160监听资源播放资源的时长,单位为毫秒(ms),用于刷新进度条长度,默认只在prepared上报一次,同时允许一些特殊码流刷新多次时长。
2161注:直播场景不支持durationUpdate上报。
2162
2163**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2164
2165**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2166
2167**参数:**
2168
2169| 参数名   | 类型     | 必填 | 说明                                               |
2170| -------- | -------- | ---- | -------------------------------------------------- |
2171| type     | string   | 是   | 时长更新的回调类型,支持的事件:'durationUpdate'。 |
2172| callback | Callback\<number> | 是   | 回调函数。返回资源时长。        |
2173
2174**示例:**
2175
2176```ts
2177avPlayer.on('durationUpdate', (duration: number) => {
2178  console.info('durationUpdate called,new duration is :' + duration)
2179})
2180```
2181
2182### off('durationUpdate')<sup>9+</sup>
2183
2184off(type: 'durationUpdate', callback?: Callback\<number>): void
2185
2186取消监听资源播放资源的时长。
2187
2188**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2189
2190**参数:**
2191
2192| 参数名 | 类型   | 必填 | 说明                                                   |
2193| ------ | ------ | ---- | ------------------------------------------------------ |
2194| type   | string | 是   | 时长更新的回调类型,取消注册的事件:'durationUpdate'。 |
2195| callback | Callback\<number> | 否   | 回调函数。返回资源时长。<br/>从API version 12开始支持此参数。        |
2196
2197**示例:**
2198
2199```ts
2200avPlayer.off('durationUpdate')
2201```
2202
2203### on('bufferingUpdate')<sup>9+</sup>
2204
2205on(type: 'bufferingUpdate', callback: OnBufferingUpdateHandler): void
2206
2207订阅音视频缓存更新事件,仅网络播放支持该订阅事件。
2208
2209**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2210
2211**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2212
2213**参数:**
2214
2215| 参数名   | 类型     | 必填 | 说明                                                         |
2216| -------- | -------- | ---- | ------------------------------------------------------------ |
2217| type     | string   | 是   | 播放缓存事件回调类型,支持的事件:'bufferingUpdate'。        |
2218| callback | [OnBufferingUpdateHandler](#onbufferingupdatehandler12) | 是   | 播放缓存事件回调方法。 |
2219
2220**示例:**
2221
2222```ts
2223avPlayer.on('bufferingUpdate', (infoType: media.BufferingInfoType, value: number) => {
2224  console.info('bufferingUpdate called,and infoType value is:' + infoType + ', value is :' + value)
2225})
2226```
2227
2228### off('bufferingUpdate')<sup>9+</sup>
2229
2230off(type: 'bufferingUpdate', callback?: OnBufferingUpdateHandler): void
2231
2232取消监听音视频缓存更新事件。
2233
2234**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2235
2236**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2237
2238**参数:**
2239
2240| 参数名 | 类型   | 必填 | 说明                                                      |
2241| ------ | ------ | ---- | --------------------------------------------------------- |
2242| type   | string | 是   | 播放缓存事件回调类型,取消注册的事件:'bufferingUpdate'。 |
2243| callback | [OnBufferingUpdateHandler](#onbufferingupdatehandler12) | 否   | 播放缓存事件回调方法。 |
2244
2245**示例:**
2246
2247```ts
2248avPlayer.off('bufferingUpdate')
2249```
2250
2251### on('startRenderFrame')<sup>9+</sup>
2252
2253on(type: 'startRenderFrame', callback: Callback\<void>): void
2254
2255订阅视频播放开始首帧渲染的更新事件,仅视频播放支持该订阅事件,该事件仅代表播放服务将第一帧画面送显示模块,实际效果依赖显示服务渲染性能。
2256
2257**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2258
2259**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2260
2261**参数:**
2262
2263| 参数名   | 类型     | 必填 | 说明                                                         |
2264| -------- | -------- | ---- | ------------------------------------------------------------ |
2265| type     | string   | 是   | 视频播放开始首帧渲染事件回调类型,支持的事件:'startRenderFrame'。 |
2266| callback | Callback\<void> | 是   | 视频播放开始首帧渲染事件回调方法。                           |
2267
2268**示例:**
2269
2270```ts
2271avPlayer.on('startRenderFrame', () => {
2272  console.info('startRenderFrame called')
2273})
2274```
2275
2276### off('startRenderFrame')<sup>9+</sup>
2277
2278off(type: 'startRenderFrame', callback?: Callback\<void>): void
2279
2280取消监听视频播放开始首帧渲染的更新事件。
2281
2282**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2283
2284**参数:**
2285
2286| 参数名 | 类型   | 必填 | 说明                                                         |
2287| ------ | ------ | ---- | ------------------------------------------------------------ |
2288| type   | string | 是   | 视频播放开始首帧渲染事件回调类型,取消注册的事件:'startRenderFrame'。 |
2289| callback | Callback\<void> | 否   | 视频播放开始首帧渲染事件回调方法。<br/>从API version 12开始支持此参数。                   |
2290
2291**示例:**
2292
2293```ts
2294avPlayer.off('startRenderFrame')
2295```
2296
2297### on('videoSizeChange')<sup>9+</sup>
2298
2299on(type: 'videoSizeChange', callback: OnVideoSizeChangeHandler): void
2300
2301监听视频播放宽高变化事件,仅视频播放支持该订阅事件,默认只在prepared状态上报一次,但HLS协议码流会在切换分辨率时上报。
2302
2303**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2304
2305**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2306
2307**参数:**
2308
2309| 参数名   | 类型     | 必填 | 说明                                                         |
2310| -------- | -------- | ---- | ------------------------------------------------------------ |
2311| type     | string   | 是   | 视频播放宽高变化事件回调类型,支持的事件:'videoSizeChange'。 |
2312| callback | [OnVideoSizeChangeHandler](#onvideosizechangehandler12) | 是   | 视频播放宽高变化事件回调方法。    |
2313
2314**示例:**
2315
2316```ts
2317avPlayer.on('videoSizeChange', (width: number, height: number) => {
2318  console.info('videoSizeChange called,and width is:' + width + ', height is :' + height)
2319})
2320```
2321
2322### off('videoSizeChange')<sup>9+</sup>
2323
2324off(type: 'videoSizeChange', callback?: OnVideoSizeChangeHandler): void
2325
2326取消监听视频播放宽高变化事件。
2327
2328**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2329
2330**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2331
2332**参数:**
2333
2334| 参数名 | 类型   | 必填 | 说明                                                         |
2335| ------ | ------ | ---- | ------------------------------------------------------------ |
2336| type   | string | 是   | 视频播放宽高变化事件回调类型,取消注册的事件:'videoSizeChange'。 |
2337| callback | [OnVideoSizeChangeHandler](#onvideosizechangehandler12) | 否   | 视频播放宽高变化事件回调方法。<br/>从API version 12开始支持此参数。    |
2338
2339**示例:**
2340
2341```ts
2342avPlayer.off('videoSizeChange')
2343```
2344
2345### on('audioInterrupt')<sup>9+</sup>
2346
2347on(type: 'audioInterrupt', callback: Callback\<audio.InterruptEvent>): void
2348
2349监听音频焦点变化事件,多个音视频资源同时播放时,会根据音频焦点模型[audio.InterruptMode](../apis-audio-kit/js-apis-audio.md#interruptmode9)触发此事件。应用需根据不同焦点变化事件作相应处理。具体可参考[处理音频焦点事件](../../media/audio/audio-playback-concurrency.md)。
2350
2351**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2352
2353**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2354
2355**参数:**
2356
2357| 参数名   | 类型                                                         | 必填 | 说明                                                     |
2358| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------------------- |
2359| type     | string                                                       | 是   | 音频焦点变化事件回调类型,支持的事件:'audioInterrupt'。 |
2360| callback | Callback\<[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)> | 是   | 音频焦点变化事件回调方法。                           |
2361
2362**示例:**
2363
2364```ts
2365import { audio } from '@kit.AudioKit';
2366
2367avPlayer.on('audioInterrupt', (info: audio.InterruptEvent) => {
2368  console.info('audioInterrupt called,and InterruptEvent info is:' + info)
2369})
2370```
2371
2372### off('audioInterrupt')<sup>9+</sup>
2373
2374off(type: 'audioInterrupt', callback?: Callback<audio.InterruptEvent>): void
2375
2376取消监听音频焦点变化事件。
2377
2378**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2379
2380**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2381
2382**参数:**
2383
2384| 参数名 | 类型   | 必填 | 说明                                                         |
2385| ------ | ------ | ---- | ------------------------------------------------------------ |
2386| type   | string | 是   | 音频焦点变化事件回调类型,取消注册的事件:'audioInterrupt'。 |
2387| callback | Callback\<[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)> | 否   | 音频焦点变化事件回调方法。<br/>从API version 12开始支持此参数。             |
2388
2389**示例:**
2390
2391```ts
2392avPlayer.off('audioInterrupt')
2393```
2394
2395### on('audioOutputDeviceChangeWithInfo')<sup>11+</sup>
2396
2397on(type: 'audioOutputDeviceChangeWithInfo', callback: Callback\<audio.AudioStreamDeviceChangeInfo>): void
2398
2399订阅监听音频流输出设备变化及原因,使用callback方式返回结果。
2400
2401**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2402
2403**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2404
2405**参数:**
2406
2407| 参数名   | 类型                       | 必填 | 说明                                        |
2408| :------- | :------------------------- | :--- | :------------------------------------------ |
2409| type     | string                     | 是   | 事件回调类型,支持的事件为:'outputDeviceChangeWithInfo'。 |
2410| callback | Callback\<[audio.AudioStreamDeviceChangeInfo](../apis-audio-kit/js-apis-audio.md#audiostreamdevicechangeinfo11)> | 是   | 回调函数,返回当前音频流的输出设备描述信息及变化原因。 |
2411
2412**错误码:**
2413
2414| 错误码ID | 错误信息                                   |
2415| -------- | ------------------------------------------ |
2416| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.       |
2417
2418**示例:**
2419
2420```ts
2421import { audio } from '@kit.AudioKit';
2422
2423avPlayer.on('audioOutputDeviceChangeWithInfo', (data: audio.AudioStreamDeviceChangeInfo) => {
2424  console.info(`${JSON.stringify(data)}`);
2425});
2426```
2427
2428### off('audioOutputDeviceChangeWithInfo')<sup>11+</sup>
2429
2430off(type: 'audioOutputDeviceChangeWithInfo', callback?: Callback\<audio.AudioStreamDeviceChangeInfo>): void
2431
2432取消订阅监听音频流输出设备变化及原因,使用callback方式返回结果。
2433
2434**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2435
2436**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2437
2438**参数:**
2439
2440| 参数名   | 类型                       | 必填 | 说明                                        |
2441| :------- | :------------------------- | :--- | :------------------------------------------ |
2442| type     | string                     | 是   | 事件回调类型,支持的事件为:'outputDeviceChange'。 |
2443| callback | Callback\<[audio.AudioStreamDeviceChangeInfo](../apis-audio-kit/js-apis-audio.md#audiostreamdevicechangeinfo11)> | 否   | 回调函数,返回当前音频流的输出设备描述信息及变化原因。 |
2444
2445**错误码:**
2446
2447| 错误码ID | 错误信息                                   |
2448| -------- | ------------------------------------------ |
2449| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.      |
2450
2451**示例:**
2452
2453```ts
2454avPlayer.off('audioOutputDeviceChangeWithInfo');
2455```
2456
2457### addSubtitleFromFd<sup>12+</sup>
2458
2459addSubtitleFromFd(fd: number, offset?: number, length?: number): Promise\<void>
2460
2461依据fd为视频添加外挂字幕,当前仅支持与视频资源同时设置(在avplayer设置fdSrc视频资源后设置外挂字幕)。使用Promise方式返回结果。
2462
2463**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2464
2465**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2466
2467**参数:**
2468
2469| 参数名 | 类型                   | 必填 | 说明                                                         |
2470| ------ | ---------------------- | ---- | ------------------------------------------------------------ |
2471| fd | number   | 是   | 资源句柄,通过[resourceManager.getRawFd](../apis-localization-kit/js-apis-resource-manager.md#getrawfd9)获取。 |
2472| offset | number | 否   | 资源偏移量,需要基于预置资源的信息输入,非法值会造成字幕频资源解析错误。 |
2473| length | number | 否   | 资源长度,默认值为文件中从偏移量开始的剩余字节,需要基于预置资源的信息输入,非法值会造成字幕频资源解析错误。 |
2474
2475**返回值:**
2476
2477| 类型           | 说明                                       |
2478| -------------- | ------------------------------------------ |
2479| Promise\<void> | 添加外挂字幕addSubtitleFromFd方法的Promise返回值。 |
2480
2481**错误码:**
2482
2483| 错误码ID | 错误信息                                   |
2484| -------- | ------------------------------------------ |
2485| 401      | The parameter check failed. Return by promise. |
2486| 5400102  | Operation not allowed. Return by promise. |
2487
2488**示例:**
2489
2490```ts
2491import { media } from '@kit.MediaKit'
2492import { common } from '@kit.AbilityKit'
2493
2494let context = getContext(this) as common.UIAbilityContext
2495let fileDescriptor = await context.resourceManager.getRawFd('xxx.srt')
2496
2497avPlayer.addSubtitleFromFd(fileDescriptor.fd, fileDescriptor.offset, fileDescriptor.length)
2498```
2499
2500### addSubtitleFromUrl<sup>12+</sup>
2501
2502addSubtitleFromUrl(url: string): Promise\<void>
2503
2504依据url为视频添加外挂字幕,当前仅支持与视频资源同时设置(在avplayer设置fdSrc视频资源后设置外挂字幕)。使用Promise方式返回结果。
2505
2506**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2507
2508**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2509
2510**参数:**
2511
2512| 参数名 | 类型   | 必填 | 说明                                                         |
2513| ------ | ------ | ---- | ------------------------------------------------------------ |
2514| url    | string | 是   | 外挂字幕文件地址。 |
2515
2516**返回值:**
2517
2518| 类型           | 说明                                       |
2519| -------------- | ------------------------------------------ |
2520| Promise\<void> | 添加外挂字幕addSubtitleFromUrl方法的Promise返回值。 |
2521
2522**错误码:**
2523
2524| 错误码ID | 错误信息                                   |
2525| -------- | ------------------------------------------ |
2526| 401      | The parameter check failed. Return by promise. |
2527| 5400102  | Operation not allowed. Return by promise. |
2528
2529**示例:**
2530
2531```ts
2532import { media } from '@kit.MediaKit'
2533
2534let fdUrl:string = 'http://xxx.xxx.xxx/xx/index.srt'
2535
2536let avPlayer: media.AVPlayer = await media.createAVPlayer()
2537avPlayer.addSubtitleFromUrl(fdUrl)
2538```
2539
2540### on('subtitleUpdate')<sup>12+</sup>
2541
2542on(type: 'subtitleUpdate', callback: Callback\<SubtitleInfo>): void
2543
2544订阅获取外挂字幕的事件,当有外挂字幕时,会通过订阅的回调方法通知用户。用户只能订阅一个外挂字幕事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
2545
2546**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2547
2548**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2549
2550**参数:**
2551
2552| 参数名   | 类型     | 必填 | 说明                                                         |
2553| -------- | -------- | ---- | ------------------------------------------------------------ |
2554| type | string | 是   | 事件回调类型,支持的事件为:'subtitleUpdate'。 |
2555| callback | function | 是   | 外挂字幕事件回调方法。 |
2556
2557**示例:**
2558
2559```ts
2560avPlayer.on('subtitleUpdate', async (info: media.SubtitleInfo) => {
2561  if (info) {
2562    let text = (!info.text) ? '' : info.text
2563    let startTime = (!info.startTime) ? 0 : info.startTime
2564    let duration = (!info.duration) ? 0 : info.duration
2565    console.info('subtitleUpdate info: text=' + text + ' startTime=' + startTime +' duration=' + duration)
2566  } else {
2567    console.info('subtitleUpdate info is null')
2568  }
2569})
2570```
2571
2572### off('subtitleUpdate')<sup>12+</sup>
2573
2574off(type: 'subtitleUpdate', callback?: Callback\<SubtitleInfo>): void
2575
2576取消订阅获取外挂字幕的事件。
2577
2578**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2579
2580**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2581
2582**参数:**
2583
2584| 参数名   | 类型     | 必填 | 说明                                                         |
2585| -------- | -------- | ---- | ------------------------------------------------------------ |
2586| type | string | 是   | 事件回调类型,支持的事件为:'subtitleUpdate'。 |
2587| callback | function | 否   | 取消外挂字幕事件的回调方法。 |
2588
2589**示例:**
2590
2591```ts
2592avPlayer.off('subtitleUpdate')
2593```
2594
2595### on('trackChange')<sup>12+</sup>
2596
2597on(type: 'trackChange', callback: OnTrackChangeHandler): void
2598
2599订阅获取轨道变更的事件,当播放的轨道变更时,会通过订阅的回调方法通知用户。用户只能订阅一个轨道变更事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
2600
2601**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2602
2603**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2604
2605**参数:**
2606
2607| 参数名   | 类型     | 必填 | 说明                                                         |
2608| -------- | -------- | ---- | ------------------------------------------------------------ |
2609| type | string | 是   | 事件回调类型,支持的事件为:'trackChange'。 |
2610| callback | [OnTrackChangeHandler](#ontrackchangehandler12) | 是   | 轨道变更事件回调方法。 |
2611
2612**示例:**
2613
2614```ts
2615avPlayer.on('trackChange', (index: number, isSelect: boolean) => {
2616  console.info('trackChange info: index=' + index + ' isSelect=' + isSelect)
2617})
2618```
2619
2620### off('trackChange')<sup>12+</sup>
2621
2622off(type: 'trackChange', callback?: OnTrackChangeHandler): void
2623
2624取消订阅获取轨道变更的事件。
2625
2626**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2627
2628**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2629
2630**参数:**
2631
2632| 参数名   | 类型     | 必填 | 说明                                                         |
2633| -------- | -------- | ---- | ------------------------------------------------------------ |
2634| type | string | 是   | 事件回调类型,支持的事件为:'trackChange'。 |
2635| callback | [OnTrackChangeHandler](#ontrackchangehandler12) | 否   | 取消轨道变更事件的回调方法。 |
2636
2637**示例:**
2638
2639```ts
2640avPlayer.off('trackChange')
2641```
2642
2643### on('trackInfoUpdate')<sup>12+</sup>
2644
2645on(type: 'trackInfoUpdate', callback: Callback\<Array\<MediaDescription>>): void
2646
2647订阅获取轨道信息更新的事件,当播放的轨道有更新时,会通过订阅的回调方法通知用户。用户只能订阅一个轨道变更事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
2648
2649**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2650
2651**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2652
2653**参数:**
2654
2655| 参数名   | 类型     | 必填 | 说明                                                         |
2656| -------- | -------- | ---- | ------------------------------------------------------------ |
2657| type | string | 是   | 事件回调类型,支持的事件为:'trackInfoUpdate'。 |
2658| callback | Callback\<Array\<[MediaDescription](#mediadescription8)>> | 是   | 轨道信息更新事件回调方法。 |
2659
2660**示例:**
2661
2662```ts
2663avPlayer.on('trackInfoUpdate', (info: Array<media.MediaDescription>) => {
2664  if (info) {
2665    for (let i = 0; i < info.length; i++) {
2666      let propertyIndex: Object = info[i][media.MediaDescriptionKey.MD_KEY_TRACK_INDEX];
2667      let propertyType: Object = info[i][media.MediaDescriptionKey.MD_KEY_TRACK_TYPE];
2668      console.info('track info: index=' + propertyIndex + ' tracktype=' + propertyType)
2669    }
2670  } else {
2671    console.info('track info is null')
2672  }
2673})
2674```
2675
2676### off('trackInfoUpdate')<sup>12+</sup>
2677
2678off(type: 'trackInfoUpdate', callback?: Callback\<Array\<MediaDescription>>): void
2679
2680取消订阅获取轨道变更的事件。
2681
2682**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2683
2684**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2685
2686**参数:**
2687
2688| 参数名   | 类型     | 必填 | 说明                                                         |
2689| -------- | -------- | ---- | ------------------------------------------------------------ |
2690| type | string | 是   | 事件回调类型,支持的事件为:'trackInfoUpdate'。 |
2691| callback | Callback\<Array\<[MediaDescription](#mediadescription8)>> | 否   | 取消轨道信息更新事件的回调方法。 |
2692
2693**示例:**
2694
2695```ts
2696avPlayer.off('trackInfoUpdate')
2697```
2698
2699### on('amplitudeUpdate')<sup>13+</sup>
2700
2701on(type: 'amplitudeUpdate', callback: Callback\<Array\<number>>): void
2702
2703订阅音频最大电平值,音频资源播放时定时上报。
2704
2705**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2706
2707**参数:**
2708
2709| 参数名   | 类型     | 必填 | 说明                                                         |
2710| -------- | -------- | ---- | ------------------------------------------------------------ |
2711| type     | string   | 是   | 事件回调类型,支持的事件为:'amplitudeUpdate'。 |
2712| callback | Callback\<Array\<number>> | 是   | 音频最大电平值更新事件回调方法。 |
2713
2714**示例:**
2715
2716```ts
2717avPlayer.on('amplitudeUpdate', (value: Array<number>) => {
2718  console.info('amplitudeUpdate called,and amplitudeUpdate = ${value}')
2719})
2720```
2721
2722### off('amplitudeUpdate')<sup>13+</sup>
2723
2724off(type: 'amplitudeUpdate', callback?: Callback\<Array\<number>>): void
2725
2726取消订阅获取音频最大电平值事件。
2727
2728**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2729
2730**参数:**
2731
2732| 参数名 | 类型   | 必填 | 说明                                                         |
2733| ------ | ------ | ---- | ------------------------------------------------------------ |
2734| type   | string | 是   | 事件回调类型,支持的事件为:'amplitudeUpdate'。 |
2735| callback | Callback\<Array\<number>> | 否   | 取消音频最大电平值更新事件回调方法。 |
2736
2737**示例:**
2738
2739```ts
2740avPlayer.off('amplitudeUpdate')
2741```
2742
2743## AVPlayerState<sup>9+</sup>
2744
2745type AVPlayerState = 'idle' | 'initialized' | 'prepared' | 'playing' | 'paused' | 'completed' | 'stopped' | 'released' | 'error'
2746
2747[AVPlayer](#avplayer9)的状态机,可通过state属性主动获取当前状态,也可通过监听[stateChange](#onstatechange9)事件上报当前状态,状态机之间的切换规则,可参考[音频播放开发指导](../../media/media/using-avplayer-for-playback.md)。
2748
2749**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
2750
2751**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2752
2753|              类型               | 说明                                                         |
2754| :-----------------------------: | :----------------------------------------------------------- |
2755|              '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属性会被重置,其他用户设置的属性将被保留。 |
2756|           'initialized'           | 资源初始化,在Idle 状态设置 url<sup>9+</sup> 或 fdSrc<sup>9+</sup>属性,AVPlayer会进入initialized状态,此时可以配置窗口、音频等静态属性。 |
2757|            'prepared'             | 已准备状态,在initialized状态调用[prepare()](#prepare9)方法,AVPlayer会进入prepared状态,此时播放引擎的资源已准备就绪。 |
2758|             'playing'             | 正在播放状态,在prepared/paused/completed状态调用[play()](#play9)方法,AVPlayer会进入playing状态。 |
2759|             'paused'              | 暂停状态,在playing状态调用pause方法,AVPlayer会进入paused状态。 |
2760|            'completed'            | 播放至结尾状态,当媒体资源播放至结尾时,如果用户未设置循环播放(loop = true),AVPlayer会进入completed状态,此时调用[play()](#play9)会进入playing状态和重播,调用[stop()](#stop9)会进入stopped状态。 |
2761|             'stopped'             | 停止状态,在prepared/playing/paused/completed状态调用[stop()](#stop9)方法,AVPlayer会进入stopped状态,此时播放引擎只会保留属性,但会释放内存资源,可以调用[prepare()](#prepare9)重新准备,也可以调用[reset()](#reset9)重置,或者调用[release()](#release9)彻底销毁。 |
2762|            'released'             | 销毁状态,销毁与当前AVPlayer关联的播放引擎,无法再进行状态转换,调用[release()](#release9)方法后,会进入released状态,结束流程。 |
2763| '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:播放过程发现码流问题,导致容器、解码短暂异常,不影响连续播放和播控操作的,不需要客户端设计容错机制。 |
2764
2765## OnTrackChangeHandler<sup>12+</sup>
2766
2767type OnTrackChangeHandler = (index: number, isSelected: boolean) => void
2768
2769track变更事件回调方法。
2770
2771**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2772
2773**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2774
2775| 参数名   | 类型   | 必填 | 说明                                                         |
2776| ------ | ------ | ------ | ---------------------------------------------------------- |
2777| index  | number | 是 | 当前选中的track索引。     |
2778| isSelected | boolean | 是 | 当前索引的选中状态。 |
2779
2780## OnAVPlayerStateChangeHandle<sup>12+</sup>
2781
2782type OnAVPlayerStateChangeHandle = (state: AVPlayerState, reason: StateChangeReason) => void
2783
2784状态机切换事件回调方法。
2785
2786**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2787
2788**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2789
2790| 参数名   | 类型   | 必填 | 说明                                                         |
2791| ------ | ------ | ------ | ---------------------------------------------------------- |
2792| state  | [AVPlayerState](#avplayerstate9) | 是 | 当前播放状态。     |
2793| reason | [StateChangeReason](#statechangereason9) | 是 | 当前播放状态的切换原因。 |
2794
2795## OnBufferingUpdateHandler<sup>12+</sup>
2796
2797type OnBufferingUpdateHandler = (infoType: BufferingInfoType, value: number) => void
2798
2799播放缓存事件回调方法。
2800
2801**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2802
2803**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2804
2805| 参数名   | 类型   | 必填 | 说明                                                         |
2806| ------ | ------ | ------ | ------------------------------------------------------------ |
2807| infoType  | [BufferingInfoType](#bufferinginfotype8) | 是 | 缓存时间类型。     |
2808| value | number | 是 | value值固定为0。 |
2809
2810## OnVideoSizeChangeHandler<sup>12+</sup>
2811
2812type OnVideoSizeChangeHandler = (width: number, height: number) => void
2813
2814视频播放宽高变化事件回调方法。
2815
2816**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2817
2818**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2819
2820| 参数名   | 类型   | 必填 | 说明                                                         |
2821| ------ | ------ | ------ | ------------------------------------------------------------ |
2822| width  | number | 是 | 视频宽度。     |
2823| height | number | 是 | 视频高度。 |
2824
2825## AVFileDescriptor<sup>9+</sup>
2826
2827音视频文件资源描述,一种特殊资源的播放方式,使用场景:应用中的音频资源被连续存储在同一个文件中,需要根据偏移量和长度进行播放。
2828
2829**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
2830
2831**系统能力:** SystemCapability.Multimedia.Media.Core
2832
2833| 名称   | 类型   | 必填 | 说明                                                         |
2834| ------ | ------ | ---- | ------------------------------------------------------------ |
2835| 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)获取。    |
2836| offset | number | 否   | 资源偏移量,默认值为0,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 |
2837| length | number | 否   | 资源长度,默认值为文件中从偏移量开始的剩余字节,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 |
2838
2839## AVDataSrcDescriptor<sup>10+</sup>
2840
2841音视频文件资源描述,用于DataSource播放方式,使用场景:应用在未获取完整音视频资源时,允许用户创建播放实例并开始播放,达到提前播放的目的。
2842
2843**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
2844
2845**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
2846
2847| 名称   | 类型   | 必填 | 说明                                                         |
2848| ------ | ------ | ---- | ------------------------------------------------------------ |
2849| fileSize     | number | 是   | 待播放文件大小(字节),-1代表大小未知。如果fileSize设置为-1, 播放模式类似于直播,不能进行seek及setSpeed操作,不能设置loop属性,因此不能重新播放。 |
2850| 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类型,返回要填充数据的长度。 |
2851
2852## SubtitleInfo<sup>12+</sup>
2853
2854外挂字幕信息,使用场景:订阅外挂字幕事件,回调返回外挂字幕详细信息。
2855
2856**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2857
2858**系统能力:** SystemCapability.Multimedia.Media.Core
2859
2860| 名称   | 类型   | 必填 | 说明                                                         |
2861| ------ | ------ | ---- | ------------------------------------------------------------ |
2862| text | string | 否  | 字幕文本信息。 |
2863| startTime | number | 否  | 显示当前字幕文本的开始时间(单位:毫秒)。 |
2864| duration | number | 否 | 显示当前字幕文本的持续时间(单位:毫秒)。 |
2865
2866## SeekMode<sup>8+</sup>
2867
2868视频播放的Seek模式枚举,可通过seek方法作为参数传递下去。
2869
2870**系统能力:** SystemCapability.Multimedia.Media.Core
2871
2872| 名称           | 值   | 说明                                                         |
2873| -------------- | ---- | ------------------------------------------------------------ |
2874| SEEK_NEXT_SYNC | 0    | 表示跳转到指定时间点的下一个关键帧,建议向后快进的时候用这个枚举值。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
2875| SEEK_PREV_SYNC | 1    | 表示跳转到指定时间点的上一个关键帧,建议向前快进的时候用这个枚举值。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
2876| SEEK_CLOSEST<sup>12+</sup> | 2    | 表示跳转到距离指定时间点最近的帧,建议精准跳转进度的时候用这个枚举值。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2877
2878## SwitchMode<sup>12+</sup>
2879
2880视频播放的selectTrack模式枚举,可通过selectTrack方法作为参数传递下去,当前仅DASH协议视频轨支持该扩展参数。
2881
2882**系统能力:** SystemCapability.Multimedia.Media.Core
2883
2884| 名称           | 值   | 说明                                                         |
2885| -------------- | ---- | ------------------------------------------------------------ |
2886| SMOOTH | 0    | 表示切换后视频平滑播放,该模式切换存在延迟,不会立即生效。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2887| SEGMENT | 1    | 表示切换后从当前分片开始位置播放,该模式立即切换,会有重复播放。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2888| CLOSEST | 2    | 表示从距离当前播放时间点最近的帧开始播放,该模式立即切换,切换后会卡住3到5s,然后恢复播放。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2889
2890## PlaybackSpeed<sup>8+</sup>
2891
2892视频播放的倍速枚举,可通过setSpeed方法作为参数传递下去。
2893
2894**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2895
2896**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
2897
2898| 名称                 | 值   | 说明                           |
2899| -------------------- | ---- | ------------------------------ |
2900| SPEED_FORWARD_0_75_X | 0    | 表示视频播放正常播速的0.75倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2901| SPEED_FORWARD_1_00_X | 1    | 表示视频播放正常播速。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。         |
2902| SPEED_FORWARD_1_25_X | 2    | 表示视频播放正常播速的1.25倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2903| SPEED_FORWARD_1_75_X | 3    | 表示视频播放正常播速的1.75倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2904| SPEED_FORWARD_2_00_X | 4    | 表示视频播放正常播速的2.00倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2905| SPEED_FORWARD_0_50_X<sup>12+</sup> | 5    | 表示视频播放正常播速的0.50倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2906| SPEED_FORWARD_1_50_X<sup>12+</sup> | 6    | 表示视频播放正常播速的1.50倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2907| SPEED_FORWARD_3_00_X<sup>13+</sup> | 7    | 表示视频播放正常播速的3.00倍。<br>**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。 |
2908| SPEED_FORWARD_0_25_X<sup>12+</sup> | 8    | 表示视频播放正常播速的0.25倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2909| SPEED_FORWARD_0_125_X<sup>12+</sup> | 9    | 表示视频播放正常播速的0.125倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
2910
2911## VideoScaleType<sup>9+</sup>
2912
2913枚举,视频缩放模式。
2914
2915**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2916
2917**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
2918
2919| 名称                      | 值   | 说明                                             |
2920| ------------------------- | ---- | ------------------------------------------------ |
2921| VIDEO_SCALE_TYPE_FIT      | 0    | 默认比例类型,视频拉伸至与窗口等大。              |
2922| VIDEO_SCALE_TYPE_FIT_CROP | 1    | 保持视频宽高比拉伸至填满窗口,内容可能会有裁剪。 |
2923
2924## MediaDescription<sup>8+</sup>
2925
2926通过key-value方式获取媒体信息。
2927
2928**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
2929
2930**系统能力:** SystemCapability.Multimedia.Media.Core
2931
2932| 名称          | 类型   | 必填 | 说明                                                         |
2933| ------------- | ------ | ---- | ------------------------------------------------------------ |
2934| [key: string] | Object | 是   | 该键值对支持的key取值范围,请参考[MediaDescriptionKey](#mediadescriptionkey8);每个key值的Object类型和范围,请参考[MediaDescriptionKey](#mediadescriptionkey8)对应Key值的说明 |
2935
2936**示例:**
2937
2938```ts
2939import { BusinessError } from '@kit.BasicServicesKit';
2940import { media } from '@kit.MediaKit';
2941
2942function printfItemDescription(obj: media.MediaDescription, key: string) {
2943  let property: Object = obj[key];
2944  console.info('audio key is ' + key); // 通过key值获取对应的value。key值具体可见[MediaDescriptionKey]
2945  console.info('audio value is ' + property); //对应key值得value。其类型可为任意类型,具体key对应value的类型可参考[MediaDescriptionKey]
2946}
2947
2948let avPlayer: media.AVPlayer | undefined = undefined;
2949media.createAVPlayer((err: BusinessError, player: media.AVPlayer) => {
2950  if(player != null) {
2951    avPlayer = player;
2952    console.info(`Succeeded in creating AVPlayer`);
2953    avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => {
2954      if (arrList != null) {
2955        for (let i = 0; i < arrList.length; i++) {
2956          printfItemDescription(arrList[i], media.MediaDescriptionKey.MD_KEY_TRACK_TYPE);  //打印出每条轨道MD_KEY_TRACK_TYPE的值
2957        }
2958      } else {
2959        console.error(`Failed to get TrackDescription, error:${error}`);
2960      }
2961    });
2962  } else {
2963    console.error(`Failed to create AVPlayer, error message:${err.message}`);
2964  }
2965});
2966```
2967
2968## PlaybackInfo<sup>12+</sup>
2969
2970通过key-value方式获取播放信息。
2971
2972**系统能力:** SystemCapability.Multimedia.Media.Core
2973
2974| 名称          | 类型   | 必填 | 说明                                                         |
2975| ------------- | ------ | ---- | ------------------------------------------------------------ |
2976| [key: string] | Object | 是   | 该键值对支持的key取值范围,请参考[PlaybackInfoKey](#playbackinfokey12);每个key值的Object类型和范围,请参考[PlaybackInfoKey](#playbackinfokey12)对应Key值的说明。 |
2977
2978**示例:**
2979
2980```ts
2981import { BusinessError } from '@kit.BasicServicesKit';
2982import { media } from '@kit.MediaKit';
2983
2984function printfPlaybackInfo(obj: media.PlaybackInfo, key: string) {
2985  let property: Object = obj[key];
2986  console.info('key is ' + key); // 通过key值获取对应的value。key值具体可见[PlaybackInfoKey]
2987  console.info('value is ' + property); //对应key值得value。其类型可为任意类型,具体key对应value的类型可参考[PlaybackInfoKey]
2988}
2989
2990let avPlayer: media.AVPlayer | undefined = undefined;
2991let playbackInfo: media.PlaybackInfo | undefined = undefined;
2992media.createAVPlayer(async (err: BusinessError, player: media.AVPlayer) => {
2993  if (player != null) {
2994    avPlayer = player;
2995    console.info(`Succeeded in creating AVPlayer`);
2996    if (avPlayer) {
2997      try {
2998        playbackInfo = await avPlayer.getPlaybackInfo();
2999        console.info(`AVPlayer getPlaybackInfo = ${JSON.stringify(playbackInfo)}`); // 打印整个PlaybackInfo的值
3000        printfPlaybackInfo(playbackInfo, media.PlaybackInfoKey.SERVER_IP_ADDRESS); // 打印ip的值
3001      } catch (error) {
3002        console.error(`error = ${error}`);
3003      }
3004    }
3005  } else {
3006    console.error(`Failed to create AVPlayer, error message:${err.message}`);
3007  }
3008});
3009```
3010
3011## AVRecorder<sup>9+</sup>
3012
3013音视频录制管理类,用于音视频媒体录制。在调用AVRecorder的方法前,需要先通过[createAVRecorder()](#mediacreateavrecorder9)构建一个AVRecorder实例。
3014
3015音视频录制demo可参考:[音频录制开发指导](../../media/media/using-avrecorder-for-recording.md)、[视频录制开发指导](../../media/media/video-recording.md)。
3016
3017> **说明:**
3018>
3019> 使用相机进行视频录制时,需要与相机模块配合,相机模块接口的使用详情见[相机管理](../apis-camera-kit/js-apis-camera.md)。
3020
3021### 属性
3022
3023**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3024
3025| 名称    | 类型                                 | 只读 | 可选 | 说明               |
3026| ------- | ------------------------------------ | ---- | ---- | ------------------ |
3027| state9+ | [AVRecorderState](#avrecorderstate9) | 是   | 否   | 音视频录制的状态。<br>**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
3028
3029### prepare<sup>9+</sup>
3030
3031prepare(config: AVRecorderConfig, callback: AsyncCallback\<void>): void
3032
3033异步方式进行音视频录制的参数设置。通过注册回调函数获取返回值。
3034
3035**需要权限:** ohos.permission.MICROPHONE
3036
3037不涉及音频录制时,可以不需要获取ohos.permission.MICROPHONE权限。
3038
3039使用相机视频录制还需要与相机模块配合,相机模块接口的使用详情见[相机管理](../apis-camera-kit/js-apis-camera.md)。
3040
3041**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3042
3043**参数:**
3044
3045| 参数名   | 类型                                   | 必填 | 说明                                  |
3046| -------- | -------------------------------------- | ---- | ------------------------------------- |
3047| config   | [AVRecorderConfig](#avrecorderconfig9) | 是   | 配置音视频录制的相关参数。            |
3048| callback | AsyncCallback\<void>                   | 是   | 回调函数。当prepare方法成功,err为undefined,否则为错误对象。 |
3049
3050**错误码:**
3051
3052以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3053
3054| 错误码ID | 错误信息                                |
3055| -------- | --------------------------------------- |
3056| 201      | Permission denied. Return by callback.  |
3057| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.    |
3058| 5400102  | Operate not permit. Return by callback. |
3059| 5400105  | Service died. Return by callback.       |
3060
3061**示例:**
3062
3063```ts
3064import { BusinessError } from '@kit.BasicServicesKit';
3065
3066// 配置参数以实际硬件设备支持的范围为准
3067let avRecorderProfile: media.AVRecorderProfile = {
3068  audioBitrate : 48000,
3069  audioChannels : 2,
3070  audioCodec : media.CodecMimeType.AUDIO_AAC,
3071  audioSampleRate : 48000,
3072  fileFormat : media.ContainerFormatType.CFT_MPEG_4,
3073  videoBitrate : 2000000,
3074  videoCodec : media.CodecMimeType.VIDEO_AVC,
3075  videoFrameWidth : 640,
3076  videoFrameHeight : 480,
3077  videoFrameRate : 30
3078}
3079let avRecorderConfig: media.AVRecorderConfig = {
3080  audioSourceType : media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC,
3081  videoSourceType : media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV,
3082  profile : avRecorderProfile,
3083  url : 'fd://', // 文件需先由调用者创建,赋予读写权限,将文件fd传给此参数,eg.fd://45
3084  rotation : 0, // 合理值0、90、180、270,非合理值prepare接口将报错
3085  location : { latitude : 30, longitude : 130 }
3086}
3087
3088avRecorder.prepare(avRecorderConfig, (err: BusinessError) => {
3089  if (err) {
3090    console.error('Failed to prepare and error is ' + err.message);
3091  } else {
3092    console.info('Succeeded in preparing');
3093  }
3094})
3095```
3096
3097### prepare<sup>9+</sup>
3098
3099prepare(config: AVRecorderConfig): Promise\<void>
3100
3101异步方式进行音视频录制的参数设置。通过Promise获取返回值。
3102
3103**需要权限:** ohos.permission.MICROPHONE
3104
3105不涉及音频录制时,可以不需要获ohos.permission.MICROPHONE权限。
3106
3107使用相机视频录制还需要与相机模块配合,相机模块接口的使用详情见[相机管理](../apis-camera-kit/js-apis-camera.md)。
3108
3109**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
3110
3111**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3112
3113**参数:**
3114
3115| 参数名 | 类型                                   | 必填 | 说明                       |
3116| ------ | -------------------------------------- | ---- | -------------------------- |
3117| config | [AVRecorderConfig](#avrecorderconfig9) | 是   | 配置音视频录制的相关参数。 |
3118
3119**返回值:**
3120
3121| 类型           | 说明                                       |
3122| -------------- | ------------------------------------------ |
3123| Promise\<void> | 异步音视频录制prepare方法的Promise返回值。 |
3124
3125**错误码:**
3126
3127以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3128
3129| 错误码ID | 错误信息                               |
3130| -------- | -------------------------------------- |
3131| 201      | Permission denied. Return by promise.  |
3132| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.    |
3133| 5400102  | Operate not permit. Return by promise. |
3134| 5400105  | Service died. Return by promise.       |
3135
3136**示例:**
3137
3138```ts
3139import { BusinessError } from '@kit.BasicServicesKit';
3140
3141// 配置参数以实际硬件设备支持的范围为准
3142let avRecorderProfile: media.AVRecorderProfile = {
3143  audioBitrate : 48000,
3144  audioChannels : 2,
3145  audioCodec : media.CodecMimeType.AUDIO_AAC,
3146  audioSampleRate : 48000,
3147  fileFormat : media.ContainerFormatType.CFT_MPEG_4,
3148  videoBitrate : 2000000,
3149  videoCodec : media.CodecMimeType.VIDEO_AVC,
3150  videoFrameWidth : 640,
3151  videoFrameHeight : 480,
3152  videoFrameRate : 30
3153}
3154let avRecorderConfig: media.AVRecorderConfig = {
3155  audioSourceType : media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC,
3156  videoSourceType : media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV,
3157  profile : avRecorderProfile,
3158  url : 'fd://',  // 文件需先由调用者创建,赋予读写权限,将文件fd传给此参数,eg.fd://45
3159  rotation : 0, // 合理值0、90、180、270,非合理值prepare接口报错
3160  location : { latitude : 30, longitude : 130 }
3161}
3162
3163avRecorder.prepare(avRecorderConfig).then(() => {
3164  console.info('Succeeded in preparing');
3165}).catch((err: BusinessError) => {
3166  console.error('Failed to prepare and catch error is ' + err.message);
3167});
3168```
3169
3170### getInputSurface<sup>9+</sup>
3171
3172getInputSurface(callback: AsyncCallback\<string>): void
3173
3174异步方式获得录制需要的surface。通过注册回调函数获取返回值。此surface提供给调用者,调用者从此surface中获取surfaceBuffer,填入相应的视频数据。
3175
3176应当注意,填入的视频数据需要携带时间戳(单位ns)和buffersize。时间戳的起始时间请以系统启动时间为基准。
3177
3178需在[prepare()](#prepare9-2)事件成功触发后,才能调用getInputSurface()方法。
3179
3180**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3181
3182**参数:**
3183
3184| 参数名   | 类型                   | 必填 | 说明                        |
3185| -------- | ---------------------- | ---- | --------------------------- |
3186| callback | AsyncCallback\<string> | 是   | 回调函数。当获取surface成功,err为undefined,data为获取到的surfaceId,否则为错误对象。 |
3187
3188**错误码:**
3189
3190以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
3191
3192| 错误码ID | 错误信息                                |
3193| -------- | --------------------------------------- |
3194| 5400102  | Operate not permit. Return by callback. |
3195| 5400103  | IO error. Return by callback.           |
3196| 5400105  | Service died. Return by callback.       |
3197
3198**示例:**
3199
3200```ts
3201import { BusinessError } from '@kit.BasicServicesKit';
3202let surfaceID: string; // 该surfaceID用于传递给相机接口创造videoOutput
3203
3204avRecorder.getInputSurface((err: BusinessError, surfaceId: string) => {
3205  if (err) {
3206    console.error('Failed to do getInputSurface and error is ' + err.message);
3207  } else {
3208    console.info('Succeeded in doing getInputSurface');
3209    surfaceID = surfaceId;
3210  }
3211});
3212
3213```
3214
3215### getInputSurface<sup>9+</sup>
3216
3217getInputSurface(): Promise\<string>
3218
3219异步方式获得录制需要的surface。通过Promise获取返回值。此surface提供给调用者,调用者从此surface中获取surfaceBuffer,填入相应的视频数据。
3220
3221应当注意,填入的视频数据需要携带时间戳(单位ns)和buffersize。时间戳的起始时间请以系统启动时间为基准。
3222
3223需在[prepare()](#prepare9-3)事件成功触发后,才能调用getInputSurface方法。
3224
3225**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3226
3227**返回值:**
3228
3229| 类型             | 说明                             |
3230| ---------------- | -------------------------------- |
3231| Promise\<string> | 异步获得surface的Promise返回值。 |
3232
3233**错误码:**
3234
3235以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
3236
3237| 错误码ID | 错误信息                               |
3238| -------- | -------------------------------------- |
3239| 5400102  | Operate not permit. Return by promise. |
3240| 5400103  | IO error. Return by promise.           |
3241| 5400105  | Service died. Return by promise.       |
3242
3243**示例:**
3244
3245```ts
3246import { BusinessError } from '@kit.BasicServicesKit';
3247let surfaceID: string; // 该surfaceID用于传递给相机接口创造videoOutput
3248
3249avRecorder.getInputSurface().then((surfaceId: string) => {
3250  console.info('Succeeded in getting InputSurface');
3251  surfaceID = surfaceId;
3252}).catch((err: BusinessError) => {
3253  console.error('Failed to get InputSurface and catch error is ' + err.message);
3254});
3255```
3256
3257### updateRotation<sup>12+</sup>
3258
3259updateRotation(rotation: number): Promise\<void>
3260
3261更新视频旋转角度。通过Promise获取返回值。
3262
3263当且仅当[prepare()](#prepare9-3)事件成功触发后,且在[start()](#start9)之前,才能调用updateRotation方法。
3264
3265**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3266
3267**参数:**
3268
3269| 参数名   | 类型                 | 必填 | 说明                        |
3270| -------- | -------------------- | ---- | --------------------------- |
3271| rotation | number | 是   | 旋转角度,取值仅支持0、90、180、270度。 |
3272
3273**返回值:**
3274
3275| 类型             | 说明                             |
3276| ---------------- | -------------------------------- |
3277| Promise\<void> | 异步返回函数执行结果。 |
3278
3279**错误码:**
3280
3281以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
3282
3283| 错误码ID | 错误信息                               |
3284| -------- | -------------------------------------- |
3285|   401    | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.   |
3286| 5400102  | Operation not allowed. Return by promise. |
3287| 5400103  | IO error. Return by promise.           |
3288| 5400105  | Service died. Return by promise.       |
3289
3290**示例:**
3291
3292```ts
3293import { BusinessError } from '@kit.BasicServicesKit';
3294
3295let rotation = 90
3296
3297avRecorder.updateRotation(rotation).then(() => {
3298  console.info('Succeeded in updateRotation');
3299}).catch((err: BusinessError) => {
3300  console.error('Failed to updateRotation and catch error is ' + err.message);
3301});
3302```
3303
3304### start<sup>9+</sup>
3305
3306start(callback: AsyncCallback\<void>): void
3307
3308异步方式开始视频录制。通过注册回调函数获取返回值。
3309
3310纯音频录制需在[prepare()](#prepare9-2)事件成功触发后,才能调用start方法。纯视频录制,音视频录制需在[getInputSurface()](#getinputsurface9)事件成功触发后,才能调用start方法。
3311
3312**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3313
3314**参数:**
3315
3316| 参数名   | 类型                 | 必填 | 说明                         |
3317| -------- | -------------------- | ---- | ---------------------------- |
3318| callback | AsyncCallback\<void> | 是   |回调函数。当开始录制视频成功,err为undefined,否则为错误对象。 |
3319
3320**错误码:**
3321
3322以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3323
3324| 错误码ID | 错误信息                                |
3325| -------- | --------------------------------------- |
3326| 5400102  | Operate not permit. Return by callback. |
3327| 5400103  | IO error. Return by callback.           |
3328| 5400105  | Service died. Return by callback.       |
3329
3330**示例:**
3331
3332```ts
3333import { BusinessError } from '@kit.BasicServicesKit';
3334
3335avRecorder.start((err: BusinessError) => {
3336  if (err) {
3337    console.error('Failed to start AVRecorder and error is ' + err.message);
3338  } else {
3339    console.info('Succeeded in starting AVRecorder');
3340  }
3341});
3342```
3343
3344### start<sup>9+</sup>
3345
3346start(): Promise\<void>
3347
3348异步方式开始视频录制。通过Promise获取返回值。
3349
3350纯音频录制需在[prepare()](#prepare9-3)事件成功触发后,才能调用start方法。纯视频录制,音视频录制需在[getInputSurface()](#getinputsurface9-1)事件成功触发后,才能调用start方法。
3351
3352**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
3353
3354**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3355
3356**返回值:**
3357
3358| 类型           | 说明                                  |
3359| -------------- | ------------------------------------- |
3360| Promise\<void> | 异步开始视频录制方法的Promise返回值。 |
3361
3362**错误码:**
3363
3364以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3365
3366| 错误码ID | 错误信息                               |
3367| -------- | -------------------------------------- |
3368| 5400102  | Operate not permit. Return by promise. |
3369| 5400103  | IO error. Return by promise.           |
3370| 5400105  | Service died. Return by promise.       |
3371
3372**示例:**
3373
3374```ts
3375import { BusinessError } from '@kit.BasicServicesKit';
3376
3377avRecorder.start().then(() => {
3378  console.info('Succeeded in starting AVRecorder');
3379}).catch((err: BusinessError) => {
3380  console.error('Failed to start AVRecorder and catch error is ' + err.message);
3381});
3382```
3383
3384### pause<sup>9+</sup>
3385
3386pause(callback: AsyncCallback\<void>): void
3387
3388异步方式暂停视频录制。通过注册回调函数获取返回值。
3389
3390需要[start()](#start9)事件成功触发后,才能调用pause方法,可以通过调用[resume()](#resume9)接口来恢复录制。
3391
3392**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3393
3394**参数:**
3395
3396| 参数名   | 类型                 | 必填 | 说明                        |
3397| -------- | -------------------- | ---- | --------------------------- |
3398| callback | AsyncCallback\<void> | 是   | 回调函数。当暂停视频录制成功,err为undefined,否则为错误对象。 |
3399
3400**错误码:**
3401
3402以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3403
3404| 错误码ID | 错误信息                                |
3405| -------- | --------------------------------------- |
3406| 5400102  | Operate not permit. Return by callback. |
3407| 5400103  | IO error. Return by callback.           |
3408| 5400105  | Service died. Return by callback.       |
3409
3410**示例:**
3411
3412```ts
3413import { BusinessError } from '@kit.BasicServicesKit';
3414
3415avRecorder.pause((err: BusinessError) => {
3416  if (err) {
3417    console.error('Failed to pause AVRecorder and error is ' + err.message);
3418  } else {
3419    console.info('Succeeded in pausing');
3420  }
3421});
3422```
3423
3424### pause<sup>9+</sup>
3425
3426pause(): Promise\<void>
3427
3428异步方式暂停视频录制。通过Promise获取返回值。
3429
3430需要[start()](#start9-1)事件成功触发后,才能调用pause方法,可以通过调用[resume()](#resume9-1)接口来恢复录制。
3431
3432**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
3433
3434**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3435
3436**返回值:**
3437
3438| 类型           | 说明                                  |
3439| -------------- | ------------------------------------- |
3440| Promise\<void> | 异步暂停视频录制方法的Promise返回值。 |
3441
3442**错误码:**
3443
3444以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3445
3446| 错误码ID | 错误信息                               |
3447| -------- | -------------------------------------- |
3448| 5400102  | Operate not permit. Return by promise. |
3449| 5400103  | IO error. Return by promise.           |
3450| 5400105  | Service died. Return by promise.       |
3451
3452**示例:**
3453
3454```ts
3455import { BusinessError } from '@kit.BasicServicesKit';
3456
3457avRecorder.pause().then(() => {
3458  console.info('Succeeded in pausing');
3459}).catch((err: BusinessError) => {
3460  console.error('Failed to pause AVRecorder and catch error is ' + err.message);
3461});
3462```
3463
3464### resume<sup>9+</sup>
3465
3466resume(callback: AsyncCallback\<void>): void
3467
3468异步方式恢复视频录制。通过注册回调函数获取返回值。
3469
3470需要在[pause()](#pause9-2)事件成功触发后,才能调用resume方法。
3471
3472**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3473
3474**参数:**
3475
3476| 参数名   | 类型                 | 必填 | 说明                         |
3477| -------- | -------------------- | ---- | ---------------------------- |
3478| callback | AsyncCallback\<void> | 是   | 回调函数。当恢复视频录制成功,err为undefined,否则为错误对象。 |
3479
3480**错误码:**
3481
3482以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3483
3484| 错误码ID | 错误信息                                |
3485| -------- | --------------------------------------- |
3486| 5400102  | Operate not permit. Return by callback. |
3487| 5400103  | IO error. Return by callback.           |
3488| 5400105  | Service died. Return by callback.       |
3489
3490**示例:**
3491
3492```ts
3493import { BusinessError } from '@kit.BasicServicesKit';
3494
3495avRecorder.resume((err: BusinessError) => {
3496  if (err) {
3497    console.error('Failed to resume AVRecorder and error is ' + err.message);
3498  } else {
3499    console.info('Succeeded in resuming AVRecorder');
3500  }
3501});
3502```
3503
3504### resume<sup>9+</sup>
3505
3506resume(): Promise\<void>
3507
3508异步方式恢复视频录制。通过Promise获取返回值。
3509
3510需要在[pause()](#pause9-3)事件成功触发后,才能调用resume方法。
3511
3512**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
3513
3514**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3515
3516**返回值:**
3517
3518| 类型           | 说明                                  |
3519| -------------- | ------------------------------------- |
3520| Promise\<void> | 异步恢复视频录制方法的Promise返回值。 |
3521
3522**错误码:**
3523
3524以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3525
3526| 错误码ID | 错误信息                               |
3527| -------- | -------------------------------------- |
3528| 5400102  | Operate not permit. Return by promise. |
3529| 5400103  | IO error. Return by promise.           |
3530| 5400105  | Service died. Return by promise.       |
3531
3532**示例:**
3533
3534```ts
3535import { BusinessError } from '@kit.BasicServicesKit';
3536
3537avRecorder.resume().then(() => {
3538  console.info('Succeeded in resuming AVRecorder');
3539}).catch((err: BusinessError) => {
3540  console.error('Failed to resume  AVRecorder failed and catch error is ' + err.message);
3541});
3542```
3543
3544### stop<sup>9+</sup>
3545
3546stop(callback: AsyncCallback\<void>): void
3547
3548异步方式停止视频录制。通过注册回调函数获取返回值。
3549
3550需要在[start()](#start9)或[pause()](#pause9-2)事件成功触发后,才能调用stop方法。
3551
3552纯音频录制时,需要重新调用[prepare()](#prepare9-2)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-2)和[getInputSurface()](#getinputsurface9)接口才能重新录制。
3553
3554**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3555
3556**参数:**
3557
3558| 参数名   | 类型                 | 必填 | 说明                         |
3559| -------- | -------------------- | ---- | ---------------------------- |
3560| callback | AsyncCallback\<void> | 是   | 回调函数。当停止视频录制成功,err为undefined,否则为错误对象。 |
3561
3562**错误码:**
3563
3564以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3565
3566| 错误码ID | 错误信息                                |
3567| -------- | --------------------------------------- |
3568| 5400102  | Operate not permit. Return by callback. |
3569| 5400103  | IO error. Return by callback.           |
3570| 5400105  | Service died. Return by callback.       |
3571
3572**示例:**
3573
3574```ts
3575import { BusinessError } from '@kit.BasicServicesKit';
3576
3577avRecorder.stop((err: BusinessError) => {
3578  if (err) {
3579    console.error('Failed to stop AVRecorder and error is ' + err.message);
3580  } else {
3581    console.info('Succeeded in stopping AVRecorder');
3582  }
3583});
3584```
3585
3586### stop<sup>9+</sup>
3587
3588stop(): Promise\<void>
3589
3590异步方式停止视频录制。通过Promise获取返回值。
3591
3592需要在[start()](#start9-1)或[pause()](#pause9-3)事件成功触发后,才能调用stop方法。
3593
3594纯音频录制时,需要重新调用[prepare()](#prepare9-3)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-3)和[getInputSurface()](#getinputsurface9-1)接口才能重新录制。
3595
3596**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
3597
3598**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3599
3600**返回值:**
3601
3602| 类型           | 说明                                  |
3603| -------------- | ------------------------------------- |
3604| Promise\<void> | 异步停止视频录制方法的Promise返回值。 |
3605
3606**错误码:**
3607
3608以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3609
3610| 错误码ID | 错误信息                               |
3611| -------- | -------------------------------------- |
3612| 5400102  | Operate not permit. Return by promise. |
3613| 5400103  | IO error. Return by promise.           |
3614| 5400105  | Service died. Return by promise.       |
3615
3616**示例:**
3617
3618```ts
3619import { BusinessError } from '@kit.BasicServicesKit';
3620
3621avRecorder.stop().then(() => {
3622  console.info('Succeeded in stopping AVRecorder');
3623}).catch((err: BusinessError) => {
3624  console.error('Failed to stop AVRecorder and catch error is ' + err.message);
3625});
3626```
3627
3628### reset<sup>9+</sup>
3629
3630reset(callback: AsyncCallback\<void>): void
3631
3632异步方式重置音视频录制。通过注册回调函数获取返回值。
3633
3634纯音频录制时,需要重新调用[prepare()](#prepare9-2)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-2)和[getInputSurface()](#getinputsurface9)接口才能重新录制。
3635
3636**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3637
3638**参数:**
3639
3640| 参数名   | 类型                 | 必填 | 说明                           |
3641| -------- | -------------------- | ---- | ------------------------------ |
3642| callback | AsyncCallback\<void> | 是   | 回调函数。当重置音视频录制成功,err为undefined,否则为错误对象。 |
3643
3644**错误码:**
3645
3646以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3647
3648| 错误码ID | 错误信息                          |
3649| -------- | --------------------------------- |
3650| 5400103  | IO error. Return by callback.     |
3651| 5400105  | Service died. Return by callback. |
3652
3653**示例:**
3654
3655```ts
3656import { BusinessError } from '@kit.BasicServicesKit';
3657
3658avRecorder.reset((err: BusinessError) => {
3659  if (err) {
3660    console.error('Failed to reset AVRecorder and error is ' + err.message);
3661  } else {
3662    console.info('Succeeded in resetting AVRecorder');
3663  }
3664});
3665```
3666
3667### reset<sup>9+</sup>
3668
3669reset(): Promise\<void>
3670
3671异步方式重置音视频录制。通过Promise获取返回值。
3672
3673纯音频录制时,需要重新调用[prepare()](#prepare9-3)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-3)和[getInputSurface()](#getinputsurface9-1)接口才能重新录制。
3674
3675**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3676
3677**返回值:**
3678
3679| 类型           | 说明                                    |
3680| -------------- | --------------------------------------- |
3681| Promise\<void> | 异步重置音视频录制方法的Promise返回值。 |
3682
3683**错误码:**
3684
3685以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3686
3687| 错误码ID | 错误信息                         |
3688| -------- | -------------------------------- |
3689| 5400103  | IO error. Return by promise.     |
3690| 5400105  | Service died. Return by promise. |
3691
3692**示例:**
3693
3694```ts
3695import { BusinessError } from '@kit.BasicServicesKit';
3696
3697avRecorder.reset().then(() => {
3698  console.info('Succeeded in resetting AVRecorder');
3699}).catch((err: BusinessError) => {
3700  console.error('Failed to reset and catch error is ' + err.message);
3701});
3702```
3703
3704### release<sup>9+</sup>
3705
3706release(callback: AsyncCallback\<void>): void
3707
3708异步方式释放音视频录制资源。通过注册回调函数获取返回值。
3709
3710释放音视频录制资源之后,该AVRecorder实例不能再进行任何操作。
3711
3712**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3713
3714**参数:**
3715
3716| 参数名   | 类型                 | 必填 | 说明                               |
3717| -------- | -------------------- | ---- | ---------------------------------- |
3718| callback | AsyncCallback\<void> | 是   | 回调函数。当释放音视频录制资源成功,err为undefined,否则为错误对象。 |
3719
3720**错误码:**
3721
3722以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3723
3724| 错误码ID | 错误信息                          |
3725| -------- | --------------------------------- |
3726| 5400105  | Service died. Return by callback. |
3727
3728**示例:**
3729
3730```ts
3731import { BusinessError } from '@kit.BasicServicesKit';
3732
3733avRecorder.release((err: BusinessError) => {
3734  if (err) {
3735    console.error('Failed to release AVRecorder and error is ' + err.message);
3736  } else {
3737    console.info('Succeeded in releasing AVRecorder');
3738  }
3739});
3740```
3741
3742### release<sup>9+</sup>
3743
3744release(): Promise\<void>
3745
3746异步方式释放音视频录制资源。通过Promise获取返回值。
3747
3748释放音视频录制资源之后,该AVRecorder实例不能再进行任何操作。
3749
3750**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
3751
3752**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
3753
3754**返回值:**
3755
3756| 类型           | 说明                                        |
3757| -------------- | ------------------------------------------- |
3758| Promise\<void> | 异步释放音视频录制资源方法的Promise返回值。 |
3759
3760**错误码:**
3761
3762以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3763
3764| 错误码ID | 错误信息                          |
3765| -------- | --------------------------------- |
3766| 5400105  | Service died. Return by callback. |
3767
3768**示例:**
3769
3770```ts
3771import { BusinessError } from '@kit.BasicServicesKit';
3772
3773avRecorder.release().then(() => {
3774  console.info('Succeeded in releasing AVRecorder');
3775}).catch((err: BusinessError) => {
3776  console.error('Failed to release AVRecorder and catch error is ' + err.message);
3777});
3778```
3779
3780### getCurrentAudioCapturerInfo<sup>11+</sup>
3781
3782getCurrentAudioCapturerInfo(callback: AsyncCallback\<audio.AudioCapturerChangeInfo>): void
3783
3784异步方式获取当前音频采集参数。通过注册回调函数获取返回值。
3785
3786在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。
3787
3788**系统能力**:SystemCapability.Multimedia.Media.AVRecorder
3789
3790**参数**:
3791
3792| 参数名   | 类型                                                         | 必填 | 说明                                 |
3793| -------- | ------------------------------------------------------------ | ---- | ------------------------------------ |
3794| callback | AsyncCallback\<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | 是   | 回调函数。当获取音频采集参数成功时,err为undefined,data为获取到的audio.AudioCapturerChangeInfo,否则为错误对象。 |
3795
3796**错误码**:
3797
3798以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3799
3800| 错误码ID | 错误信息                                   |
3801| -------- | ------------------------------------------ |
3802| 5400102  | Operation not allowed. |
3803| 5400103  | I/O error.             |
3804| 5400105  | Service died. Return by callback.          |
3805
3806**示例**:
3807
3808```ts
3809import { audio } from '@kit.AudioKit';
3810
3811let currentCapturerInfo: audio.AudioCapturerChangeInfo;
3812
3813avRecorder.getCurrentAudioCapturerInfo((err: BusinessError, capturerInfo: audio.AudioCapturerChangeInfo) => {
3814  if (err) {
3815    console.error('Failed to get CurrentAudioCapturerInfo and error is ' + err.message);
3816  } else {
3817    console.info('Succeeded in getting CurrentAudioCapturerInfo');
3818    currentCapturerInfo = capturerInfo;
3819  }
3820});
3821```
3822
3823### getCurrentAudioCapturerInfo<sup>11+</sup>
3824
3825getCurrentAudioCapturerInfo(): Promise\<audio.AudioCapturerChangeInfo>
3826
3827异步方式获取当前音频采集参数。通过Promise获取返回值。
3828
3829在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。
3830
3831**系统能力**:SystemCapability.Multimedia.Media.AVRecorder
3832
3833**返回值**:
3834
3835| 类型                                                         | 说明                                              |
3836| ------------------------------------------------------------ | ------------------------------------------------- |
3837| Promise\<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | Promise对象,返回获取的当前音频采集参数。 |
3838
3839**错误码**:
3840
3841以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3842
3843| 错误码ID | 错误信息                         |
3844| -------- | -------------------------------- |
3845| 5400102  | Operation not allowed.           |
3846| 5400103  | I/O error.                       |
3847| 5400105  | Service died. Return by promise. |
3848
3849**示例**:
3850
3851```ts
3852import { audio } from '@kit.AudioKit';
3853
3854let currentCapturerInfo: audio.AudioCapturerChangeInfo;
3855
3856avRecorder.getCurrentAudioCapturerInfo().then((capturerInfo: audio.AudioCapturerChangeInfo) => {
3857  console.info('Succeeded in getting CurrentAudioCapturerInfo');
3858  currentCapturerInfo = capturerInfo;
3859}).catch((err: BusinessError) => {
3860  console.error('Failed to get CurrentAudioCapturerInfo and catch error is ' + err.message);
3861});
3862```
3863
3864### getAudioCapturerMaxAmplitude<sup>11+</sup>
3865
3866getAudioCapturerMaxAmplitude(callback: AsyncCallback\<number>): void
3867
3868异步方式获取当前音频最大振幅。通过注册回调函数获取返回值。
3869
3870在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。
3871
3872调用接口时,获取到的返回值是上一次获取最大振幅的时刻到当前这段区间内的音频最大振幅。即,如果在1s的时刻获取了一次最大振幅,在2s时再获取到的最大振幅时1-2s这个区间里面的最大值。
3873
3874**系统能力**:SystemCapability.Multimedia.Media.AVRecorder
3875
3876**参数**:
3877
3878| 参数名   | 类型                   | 必填 | 说明                                 |
3879| -------- | ---------------------- | ---- | ------------------------------------ |
3880| callback | AsyncCallback\<number> | 是   |  回调函数。获取当前音频最大振幅成功时,err为undefined,data为获取到的最大振幅,否则为错误对象。 |
3881
3882**错误码**:
3883
3884以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3885
3886| 错误码ID | 错误信息                                   |
3887| -------- | ------------------------------------------ |
3888| 5400102  | Operation not allowed. |
3889| 5400105  | Service died. Return by callback.          |
3890
3891**示例**:
3892
3893```ts
3894let maxAmplitude: number;
3895
3896avRecorder.getAudioCapturerMaxAmplitude((err: BusinessError, amplitude: number) => {
3897  if (err) {
3898    console.error('Failed to get AudioCapturerMaxAmplitude and error is ' + err.message);
3899  } else {
3900    console.info('Succeeded in getting AudioCapturerMaxAmplitude');
3901    maxAmplitude = amplitude;
3902  }
3903});
3904```
3905
3906### getAudioCapturerMaxAmplitude<sup>11+</sup>
3907
3908getAudioCapturerMaxAmplitude(): Promise\<number>
3909
3910异步方式获取当前音频最大振幅参数。通过Promise获取返回值。
3911
3912在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。
3913
3914调用接口时,获取到的返回值是上一次获取最大振幅的时刻到当前这段区间内的音频最大振幅。即,如果在1s的时刻获取了一次最大振幅,在2s时再获取到的最大振幅时1-2s这个区间里面的最大值。
3915
3916**系统能力**:SystemCapability.Multimedia.Media.AVRecorder
3917
3918**返回值**:
3919
3920| 类型             | 说明                                              |
3921| ---------------- | ------------------------------------------------- |
3922| Promise\<number> | Promise对象,返回获取的当前音频最大振幅。 |
3923
3924**错误码**:
3925
3926以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3927
3928| 错误码ID | 错误信息                         |
3929| -------- | -------------------------------- |
3930| 5400102  | Operation not allowed.           |
3931| 5400105  | Service died. Return by promise. |
3932
3933**示例**:
3934
3935```ts
3936let maxAmplitude: number;
3937
3938avRecorder.getAudioCapturerMaxAmplitude().then((amplitude: number) => {
3939  console.info('Succeeded in getting AudioCapturerMaxAmplitude');
3940  maxAmplitude = amplitude;
3941}).catch((err: BusinessError) => {
3942  console.error('Failed to get AudioCapturerMaxAmplitude and catch error is ' + err.message);
3943});
3944```
3945
3946### getAvailableEncoder<sup>11+</sup>
3947
3948getAvailableEncoder(callback: AsyncCallback\<Array\<EncoderInfo>>): void
3949
3950异步方式获取可用的编码器参数。通过注册回调函数获取返回值。
3951
3952**系统能力**:SystemCapability.Multimedia.Media.AVRecorder
3953
3954**参数**:
3955
3956| 参数名   | 类型                                                  | 必填 | 说明                                 |
3957| -------- | ----------------------------------------------------- | ---- | ------------------------------------ |
3958| callback | AsyncCallback\<Array\<[EncoderInfo](#encoderinfo11)>> | 是   | 回调函数。获取可用的编码器参数成功时,err为undefined,data为获取到的编码器参数,否则为错误对象。 |
3959
3960**错误码**:
3961
3962以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
3963
3964| 错误码ID | 错误信息                                   |
3965| -------- | ------------------------------------------ |
3966| 5400102  | Operation not allowed. |
3967| 5400105  | Service died. Return by callback.          |
3968
3969**示例**:
3970
3971```ts
3972let encoderInfo: media.EncoderInfo;
3973
3974avRecorder.getAvailableEncoder((err: BusinessError, info: media.EncoderInfo[]) => {
3975  if (err) {
3976    console.error('Failed to get AvailableEncoder and error is ' + err.message);
3977  } else {
3978    console.info('Succeeded in getting AvailableEncoder');
3979    encoderInfo = info[0];
3980  }
3981});
3982```
3983
3984### getAvailableEncoder<sup>11+</sup>
3985
3986getAvailableEncoder(): Promise\<Array\<EncoderInfo>>
3987
3988异步方式获取可用的编码器参数。通过注册回调函数获取返回值。
3989
3990**系统能力**:SystemCapability.Multimedia.Media.AVRecorder
3991
3992**返回值**:
3993
3994| 类型                                            | 说明                                            |
3995| ----------------------------------------------- | ----------------------------------------------- |
3996| Promise\<Array\<[EncoderInfo](#encoderinfo11)>> | Promise对象,返回获取的可用的编码器参数。 |
3997
3998**错误码**:
3999
4000以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4001
4002| 错误码ID | 错误信息                         |
4003| -------- | -------------------------------- |
4004| 5400102  | Operation not allowed.           |
4005| 5400105  | Service died. Return by promise. |
4006
4007**示例**:
4008
4009```ts
4010let encoderInfo: media.EncoderInfo;
4011
4012avRecorder.getAvailableEncoder().then((info: media.EncoderInfo[]) => {
4013  console.info('Succeeded in getting AvailableEncoder');
4014  encoderInfo = info[0];
4015}).catch((err: BusinessError) => {
4016  console.error('Failed to get AvailableEncoder and catch error is ' + err.message);
4017});
4018```
4019
4020### getAVRecorderConfig<sup>11+</sup>
4021
4022getAVRecorderConfig(callback: AsyncCallback\<AVRecorderConfig>): void
4023
4024异步方式获取实时的配置参数。通过注册回调函数获取返回值。
4025
4026只能在[prepare()](#prepare9-2)接口调用后调用。
4027
4028**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4029
4030**参数:**
4031
4032| 参数名   | 类型                   | 必填 | 说明                        |
4033| -------- | ---------------------- | ---- | --------------------------- |
4034| callback | AsyncCallback\<[AVRecorderConfig](#avrecorderconfig9)> | 是   | 回调函数。获取实时配置的参数成功时,err为undefined,data为获取到的配置参数,否则为错误对象。 |
4035
4036**错误码:**
4037
4038以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
4039
4040| 错误码ID | 错误信息                                   |
4041| -------- | ------------------------------------------ |
4042| 5400102  | Operate not permit. Return by callback. |
4043| 5400103  | IO error. Return by callback.             |
4044| 5400105  | Service died. Return by callback.          |
4045
4046**示例:**
4047
4048```ts
4049import { BusinessError } from '@kit.BasicServicesKit';
4050
4051let avConfig: media.AVRecorderConfig;
4052
4053avRecorder.getAVRecorderConfig((err: BusinessError, config: media.AVRecorderConfig) => {
4054  if (err) {
4055    console.error('Failed to get avConfig and error is ' + err.message);
4056  } else {
4057    console.info('Succeeded in getting AVRecorderConfig');
4058    avConfig = config;
4059  }
4060});
4061```
4062
4063### getAVRecorderConfig<sup>11+</sup>
4064
4065getAVRecorderConfig(): Promise\<AVRecorderConfig>;
4066
4067异步方式获取实时的配置参数。通过Promise获取返回值。
4068
4069只能在[prepare()](#prepare9-3)接口调用后调用。
4070
4071**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4072
4073**返回值:**
4074
4075| 类型             | 说明                             |
4076| ---------------- | -------------------------------- |
4077| Promise\<[AVRecorderConfig](#avrecorderconfig9)> | 异步获得实时配置参数的回调方法。 |
4078
4079**错误码:**
4080
4081以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
4082
4083| 错误码ID | 错误信息                                  |
4084| -------- | ----------------------------------------- |
4085| 5400102  | Operate not permit. Return by promise. |
4086| 5400103  | IO error. Return by promise.             |
4087| 5400105  | Service died. Return by promise.          |
4088
4089**示例:**
4090
4091```ts
4092import { BusinessError } from '@kit.BasicServicesKit';
4093
4094let avConfig: media.AVRecorderConfig;
4095
4096avRecorder.getAVRecorderConfig().then((config: media.AVRecorderConfig) => {
4097  console.info('Succeeded in getting AVRecorderConfig');
4098  avConfig = config;
4099}).catch((err: BusinessError) => {
4100  console.error('Failed to get AVRecorderConfig and catch error is ' + err.message);
4101});
4102```
4103
4104### on('stateChange')<sup>9+</sup>
4105
4106on(type: 'stateChange', callback: OnAVRecorderStateChangeHandler): void
4107
4108订阅录制状态机AVRecorderState切换的事件,当 AVRecorderState状态机发生变化时,会通过订阅的回调方法通知用户。用户只能订阅一个状态机切换事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
4109
4110**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4111
4112**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4113
4114**参数:**
4115
4116| 参数名   | 类型     | 必填 | 说明                                                         |
4117| -------- | -------- | ---- | ------------------------------------------------------------ |
4118| type     | string   | 是   | 状态机切换事件回调类型,支持的事件:'stateChange',用户操作和系统都会触发此事件。 |
4119| callback | [OnAVRecorderStateChangeHandler](#onavrecorderstatechangehandler12) | 是   | 状态机切换事件回调方法。 |
4120
4121**错误码:**
4122
4123以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4124
4125| 错误码ID | 错误信息                          |
4126| -------- | --------------------------------- |
4127| 5400103  | IO error. Return by callback.     |
4128| 5400105  | Service died. Return by callback. |
4129
4130**示例:**
4131
4132```ts
4133avRecorder.on('stateChange', async (state: media.AVRecorderState, reason: media.StateChangeReason) => {
4134  console.info('case state has changed, new state is :' + state + ',and new reason is : ' + reason);
4135});
4136```
4137
4138### off('stateChange')<sup>9+</sup>
4139
4140off(type: 'stateChange', callback?: OnAVRecorderStateChangeHandler): void
4141
4142取消订阅播放状态机[AVRecorderState](#avrecorderstate9)切换的事件。
4143
4144**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4145
4146**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4147
4148**参数:**
4149
4150| 参数名 | 类型   | 必填 | 说明                                                         |
4151| ------ | ------ | ---- | ------------------------------------------------------------ |
4152| type   | string | 是   | 状态机切换事件回调类型,支持的事件:'stateChange',用户操作和系统都会触发此事件。 |
4153| callback | [OnAVRecorderStateChangeHandler](#onavrecorderstatechangehandler12) | 否   | 状态机切换事件回调方法。<br/>从API version 12开始支持此参数。 |
4154
4155**示例:**
4156
4157```ts
4158avRecorder.off('stateChange');
4159```
4160
4161### on('error')<sup>9+</sup>
4162
4163on(type: 'error', callback: ErrorCallback): void
4164
4165订阅AVRecorder的错误事件,该事件仅用于错误提示,不需要用户停止播控动作。如果此时[AVRecorderState](#avrecorderstate9)也切至error状态,用户需要通过[reset()](#reset9-2)或者[release()](#release9-2)退出录制操作。
4166
4167用户只能订阅一个错误事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
4168
4169**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4170
4171**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4172
4173**参数:**
4174
4175| 参数名   | 类型          | 必填 | 说明                                                         |
4176| -------- | ------------- | ---- | ------------------------------------------------------------ |
4177| type     | string        | 是   | 录制错误事件回调类型'error'。 <br>- 'error':录制过程中发生错误,触发该事件。 |
4178| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 录制错误事件回调方法。                                       |
4179
4180**错误码:**
4181
4182以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4183
4184| 错误码ID | 错误信息                                   |
4185| -------- | ------------------------------------------ |
4186| 201      | Permission denied.     |
4187| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. |
4188| 801      | Capability not supported. |
4189| 5400101  | No memory.             |
4190| 5400102  | Operation not allowed. |
4191| 5400103  | I/O error.             |
4192| 5400104  | Time out.              |
4193| 5400105  | Service died.          |
4194| 5400106  | Unsupported format.    |
4195| 5400107  | Audio interrupted.     |
4196
4197**示例:**
4198
4199```ts
4200import { BusinessError } from '@kit.BasicServicesKit';
4201
4202avRecorder.on('error', (err: BusinessError) => {
4203  console.info('case avRecorder.on(error) called, errMessage is ' + err.message);
4204});
4205```
4206
4207### off('error')<sup>9+</sup>
4208
4209off(type: 'error', callback?: ErrorCallback): void
4210
4211取消订阅录制错误事件,取消后不再接收到AVRecorder的错误事件。
4212
4213**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4214
4215**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4216
4217**参数:**
4218
4219| 参数名 | 类型   | 必填 | 说明                                                         |
4220| ------ | ------ | ---- | ------------------------------------------------------------ |
4221| type   | string | 是   | 录制错误事件回调类型'error'。 <br>- 'error':录制过程中发生错误,触发该事件。 |
4222| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否   | 录制错误事件回调方法。<br/>从API version 12开始支持此参数。                   |
4223
4224**示例:**
4225
4226```ts
4227avRecorder.off('error');
4228```
4229
4230### on('audioCapturerChange')<sup>11+</sup>
4231
4232on(type: 'audioCapturerChange', callback: Callback<audio.AudioCapturerChangeInfo>): void
4233
4234订阅录音配置变化的回调,任意录音配置的变化会触发变化后的录音配置全量信息回调。
4235
4236当用户重复订阅时,以最后一次订阅的回调接口为准。
4237
4238**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4239
4240**参数:**
4241
4242| 参数名   | 类型     | 必填 | 说明                                                         |
4243| -------- | -------- | ---- | ------------------------------------------------------------ |
4244| type     | string   | 是   |录音配置变化的回调类型,支持的事件:'audioCapturerChange'。 |
4245| callback | Callback<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | 是 | 变化后的录音配置全量信息。|
4246
4247**错误码:**
4248
4249| 错误码ID | 错误信息                                   |
4250| -------- | ------------------------------------------ |
4251| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.      |
4252
4253**示例:**
4254
4255```ts
4256import { audio } from '@kit.AudioKit'
4257
4258let capturerChangeInfo: audio.AudioCapturerChangeInfo;
4259
4260avRecorder.on('audioCapturerChange',  (audioCapturerChangeInfo: audio.AudioCapturerChangeInfo) => {
4261  console.info('audioCapturerChange called');
4262  capturerChangeInfo = audioCapturerChangeInfo;
4263});
4264```
4265
4266### off('audioCapturerChange')<sup>11+</sup>
4267
4268off(type: 'audioCapturerChange', callback?: Callback<audio.AudioCapturerChangeInfo>): void
4269
4270取消订阅录音变化的回调事件。
4271
4272**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4273
4274**参数:**
4275
4276| 参数名 | 类型   | 必填 | 说明                                                         |
4277| ------ | ------ | ---- | ------------------------------------------------------------ |
4278| type   | string | 是   | 录音配置变化的回调类型,支持的事件:'audioCapturerChange'。 |
4279| callback | Callback<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | 否 | 变化后的录音配置全量信息。<br/>从API version 12开始支持此参数。|
4280
4281**示例:**
4282
4283```ts
4284avRecorder.off('audioCapturerChange');
4285```
4286
4287### on('photoAssetAvailable')<sup>12+</sup>
4288
4289on(type: 'photoAssetAvailable', callback: Callback\<photoAccessHelper.PhotoAsset>): void
4290
4291订阅媒体资源回调事件,当[FileGenerationMode](#filegenerationmode12)枚举设置为系统创建媒体文件时,会在[stop](#stop9-2)操作结束后把[PhotoAsset](../apis-media-library-kit/js-apis-photoAccessHelper.md#photoasset)对象回调给应用。
4292
4293当用户重复订阅时,以最后一次订阅的回调接口为准。
4294
4295**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4296
4297**参数:**
4298
4299| 参数名   | 类型     | 必填 | 说明                                                         |
4300| -------- | -------- | ---- | ------------------------------------------------------------ |
4301| type     | string   | 是   |录像资源的回调类型,支持的事件:'photoAssetAvailable'。 |
4302| callback | Callback<[photoAccessHelper.PhotoAsset](../apis-media-library-kit/js-apis-photoAccessHelper.md#photoasset)> | 是 | 系统创建的资源文件对应的PhotoAsset对象|
4303
4304**错误码:**
4305
4306| 错误码ID | 错误信息                                   |
4307| -------- | ------------------------------------------ |
4308| 5400103  | IO error. Return by callback.             |
4309| 5400105  | Service died. Return by callback.          |
4310
4311**示例:**
4312
4313```ts
4314import { photoAccessHelper } from '@kit.MediaLibraryKit';
4315import { common } from '@kit.AbilityKit'
4316let photoAsset: photoAccessHelper.PhotoAsset;
4317let context = getContext(this) as common.UIAbilityContext
4318
4319// 例:处理photoAsset回调,保存video
4320async function saveVideo(asset: photoAccessHelper.PhotoAsset) {
4321  console.info("saveVideo called");
4322  try {
4323    let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
4324    let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(asset);
4325    assetChangeRequest.saveCameraPhoto();
4326    await phAccessHelper.applyChanges(assetChangeRequest);
4327    console.info('apply saveVideo successfully');
4328  } catch (err) {
4329    console.error(`apply saveVideo failed with error: ${err.code}, ${err.message}`);
4330  }
4331}
4332// 注册photoAsset监听
4333avRecorder.on('photoAssetAvailable',  (asset: photoAccessHelper.PhotoAsset) => {
4334  console.info('photoAssetAvailable called');
4335  if (asset != undefined) {
4336    photoAsset = asset;
4337    // 处理photoAsset回调
4338    // 例: this.saveVideo(asset);
4339  } else {
4340    console.error('photoAsset is undefined');
4341  }
4342});
4343```
4344
4345### off('photoAssetAvailable')<sup>12+</sup>
4346
4347off(type: 'photoAssetAvailable', callback?: Callback<photoAccessHelper.PhotoAsset>): void
4348
4349取消订阅媒体资源的回调类型。
4350
4351**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4352
4353**参数:**
4354
4355| 参数名 | 类型   | 必填 | 说明                                                         |
4356| ------ | ------ | ---- | ------------------------------------------------------------ |
4357| type   | string | 是   | 录音配置变化的回调类型,支持的事件:'photoAssetAvailable'。 |
4358
4359**示例:**
4360
4361```ts
4362avRecorder.off('photoAssetAvailable');
4363```
4364
4365## AVRecorderState<sup>9+</sup>
4366
4367type AVRecorderState = 'idle' | 'prepared' | 'started' | 'paused' | 'stopped' | 'released' | 'error'
4368
4369音视频录制的状态机。可通过state属性获取当前状态。
4370
4371**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
4372
4373**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4374
4375| 类型     | 说明                                                         |
4376| -------- | ------------------------------------------------------------ |
4377| 'idle'     | 闲置状态。此时可以调用[AVRecorder.prepare()](#prepare9-2)方法设置录制参数,进入prepared状态。AVRecorder刚被创建,或者在任何非released状态下调用[AVRecorder.reset()](#reset9-2)方法,均进入idle状态。 |
4378| 'prepared' | 参数设置完成。此时可以调用[AVRecorder.start()](#start9)方法开始录制,进入started状态。 |
4379| 'started'  | 正在录制。此时可以调用[AVRecorder.pause()](#pause9-2)方法暂停录制,进入paused状态。也可以调用[AVRecorder.stop()](#stop9-2)方法结束录制,进入stopped状态。 |
4380| 'paused'   | 录制暂停。此时可以调用[AVRecorder.resume()](#resume9)方法继续录制,进入started状态。也可以调用[AVRecorder.stop()](#stop9-2)方法结束录制,进入stopped状态。 |
4381| 'stopped'  | 录制停止。此时可以调用[AVRecorder.prepare()](#prepare9-2)方法设置录制参数,重新进入prepared状态。 |
4382| 'released' | 录制资源释放。此时不能再进行任何操作。在任何其他状态下,均可以通过调用[AVRecorder.release()](#release9-2)方法进入released状态。 |
4383| 'error'    | 错误状态。当AVRecorder实例发生不可逆错误,会转换至当前状态。切换至error状态时会伴随[AVRecorder.on('error')事件](#onerror9-1),该事件会上报详细错误原因。在error状态时,用户需要调用[AVRecorder.reset()](#reset9-2)方法重置AVRecorder实例,或者调用[AVRecorder.release()](#release9-2)方法释放资源。 |
4384
4385## OnAVRecorderStateChangeHandler<sup>12+</sup>
4386
4387type OnAVRecorderStateChangeHandler = (state: AVRecorderState, reason: StateChangeReason) => void
4388
4389状态机切换事件回调方法。
4390
4391**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
4392
4393**系统能力:** SystemCapability.Multimedia.Media.AVPlayer
4394
4395| 参数名   | 类型   | 必填 | 说明                                                         |
4396| ------ | ------ | ------ | ------------------------------------------------------------ |
4397| state  | [AVRecorderState](#avrecorderstate9) | 必填 | 当前播放状态。     |
4398| reason | [StateChangeReason](#statechangereason9) | 必填 | 当前播放状态的切换原因。 |
4399
4400## AVRecorderConfig<sup>9+</sup>
4401
4402表示音视频录制的参数设置。
4403
4404通过audioSourceType和videoSourceType区分纯音频录制、纯视频录制或音视频录制。纯音频录制时,仅需要设置audioSourceType;纯视频录制时,仅需要设置videoSourceType;音视频录制时,audioSourceType和videoSourceType均需要设置。
4405
4406**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4407
4408| 名称            | 类型                                     | 必填 | 说明                                                         |
4409| --------------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
4410| audioSourceType | [AudioSourceType](#audiosourcetype9)     | 否   | 选择录制的音频源类型。选择音频录制时必填。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。|
4411| videoSourceType | [VideoSourceType](#videosourcetype9)     | 否   | 选择录制的视频源类型。选择视频录制时必填。                   |
4412| profile         | [AVRecorderProfile](#avrecorderprofile9) | 是   | 录制的profile,必要参数。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。|
4413| url             | string                                   | 是   | 录制输出URL:fd://xx (fd number) ![img](figures/zh-cn_image_url.png),必要参数。 <br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
4414|fileGenerationMode<sup>12+</sup> | [FileGenerationMode](#filegenerationmode12)  | 否   |  创建媒体文件的模式,配合[on('photoAssetAvailable')](#onphotoassetavailable12)监听使用。|
4415| rotation<sup>(deprecated)</sup>        | number                                   | 否   | 录制的视频旋转角度,mp4格式支持0,90,180,270,默认值为0。<br>从API version 6开始支持,从API version 12开始废弃。建议使用[AVMetadata](#avmetadata11).videoOrientation替代。如果同时设置两个值,将会采用[AVMetadata](#avmetadata11).videoOrientation。     |
4416| location<sup>(deprecated)</sup>        | [Location](#location)                    | 否   | 录制的地理位置,默认不记录地理位置信息。<br>从API version 6开始支持,从API version 12开始废弃。建议使用 [AVMetadata](#avmetadata11).location。如果同时设置两个值,将会采用[AVMetadata](#avmetadata11).location。 |
4417| metadata<sup>12+</sup>        | [AVMetadata](#avmetadata11)              | 否   | 设置元数据信息。详情见 [AVMetadata](#avmetadata11)。                  |
4418
4419## AVRecorderProfile<sup>9+</sup>
4420
4421音视频录制的配置文件。
4422
4423**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4424
4425| 名称             | 类型                                         | 必填 | 说明                                                         |
4426| ---------------- | -------------------------------------------- | ---- | ------------------------------------------------------------ |
4427| audioBitrate     | number                                       | 否   | 音频编码比特率,选择音频录制时必填。<br>支持范围:<br>- AAC编码格式支持比特率范围[32000 - 500000]。<br>- G711-mulaw编码格式支持比特率范围[64000 - 64000]。<br>- MP3编码格式支持范围[8000, 16000, 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 160000, 192000, 224000, 256000, 320000]。<br>当使用MP3编码格式时,采样率和比特率的映射关系: <br>- 采样率使用16K以下时,对应比特率范围为[8kbps - 64kbps]。<br>- 采样率使用16K~32K时对应的比特率范围为[8kbps - 160kbps]。<br>- 采样率使用32K以上时对应的比特率范围为[32kbps - 320kbps]。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
4428| audioChannels    | number                                       | 否   | 音频采集声道数,选择音频录制时必填。<br>- AAC编码格式支持范围[1 - 8]。<br>- G711-mulaw编码格式支持范围[1 - 1]。<br>- MP3编码格式支持范围[1 - 2]。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。       |
4429| audioCodec       | [CodecMimeType](#codecmimetype8)             | 否   | 音频编码格式,选择音频录制时必填。当前支持AUDIO_AAC,AUDIO_MP3,AUDIO_G711MU。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。     |
4430| audioSampleRate  | number                                       | 否   | 音频采样率,选择音频录制时必填。<br>支持范围:<br>- AAC编码支持采样率范围[8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000]。<br>- G711-mulaw编码支持采样率范围[8000 - 8000]。<br>- MP3编码支持采样率范围[8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000]。<br>可变比特率模式,码率仅作参考。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
4431| fileFormat       | [ContainerFormatType](#containerformattype8) | 是   | 文件的容器格式,必要参数。当前支持MP4、M4A、MP3、WAV封装格式,不支持在MP4封装格式下使用AUDIO_MP3编码格式。<br>**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。|
4432| videoBitrate     | number                                       | 否   | 视频编码比特率,选择视频录制时必填,支持范围[10000 - 100000000]。  |
4433| videoCodec       | [CodecMimeType](#codecmimetype8)             | 否   | 视频编码格式,选择视频录制时必填。当前支持VIDEO_AVC。|
4434| videoFrameWidth  | number                                       | 否   | 视频帧的宽,选择视频录制时必填,支持范围[176 - 4096]。         |
4435| videoFrameHeight | number                                       | 否   | 视频帧的高,选择视频录制时必填,支持范围[144 - 4096]。         |
4436| videoFrameRate   | number                                       | 否   | 视频帧率,选择视频录制时必填,支持范围[1 - 60]。             |
4437| isHdr<sup>11+</sup>            | boolean                        | 否   | HDR编码,选择视频录制时选填,isHdr默认为false,对应编码格式没有要求,isHdr为true时,对应的编码格式必须为video/hevc。|
4438| enableTemporalScale<sup>12+</sup>            | boolean                        | 否   | 视频录制是否支持时域分层编码功能,选择视频录制时选填,enableTemporalScale默认为false。设置为true时,编码输出的码流中部分帧可以支持跳过不编码。|
4439
4440## AudioSourceType<sup>9+</sup>
4441
4442表示视频录制中音频源类型的枚举。
4443
4444**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4445
4446| 名称                      | 值   | 说明                   |
4447| ------------------------- | ---- | ---------------------- |
4448| AUDIO_SOURCE_TYPE_DEFAULT | 0    | 默认的音频输入源类型。 |
4449| AUDIO_SOURCE_TYPE_MIC     | 1    | 表示MIC的音频输入源。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
4450| AUDIO_SOURCE_TYPE_VOICE_RECOGNITION<sup>12+</sup> | 2    | 表示语音识别场景的音频源。 |
4451| AUDIO_SOURCE_TYPE_VOICE_COMMUNICATION<sup>12+</sup>     | 7    | 表示语音通话场景的音频源。 |
4452| AUDIO_SOURCE_TYPE_VOICE_MESSAGE<sup>12+</sup> | 10    | 表示短语音消息的音频源。 |
4453| AUDIO_SOURCE_TYPE_CAMCORDER<sup>12+</sup>     | 13    | 表示相机录像的音频源。 |
4454
4455## VideoSourceType<sup>9+</sup>
4456
4457表示视频录制中视频源类型的枚举。
4458
4459**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4460
4461| 名称                          | 值   | 说明                            |
4462| ----------------------------- | ---- | ------------------------------- |
4463| VIDEO_SOURCE_TYPE_SURFACE_YUV | 0    | 输入surface中携带的是raw data。 |
4464| VIDEO_SOURCE_TYPE_SURFACE_ES  | 1    | 输入surface中携带的是ES data。  |
4465
4466## ContainerFormatType<sup>8+</sup>
4467
4468表示容器格式类型的枚举,缩写为CFT。
4469
4470**系统能力:** SystemCapability.Multimedia.Media.Core
4471
4472| 名称        | 值    | 说明                  |
4473| ----------- | ----- | --------------------- |
4474| CFT_MPEG_4  | 'mp4' | 视频的容器格式,MP4。 |
4475| CFT_MPEG_4A | 'm4a' | 音频的容器格式,M4A。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 |
4476| CFT_MP3<sup>12+</sup>  | 'mp3' | 音频的容器格式,MP3。 |
4477| CFT_WAV<sup>12+</sup>  | 'wav' | 音频的容器格式,WAV。 |
4478
4479## Location
4480
4481视频录制的地理位置。
4482
4483**系统能力:** SystemCapability.Multimedia.Media.Core
4484
4485| 名称      | 类型   | 必填 | 说明             |
4486| --------- | ------ | ---- | ---------------- |
4487| latitude  | number | 是   | 地理位置的纬度。 |
4488| longitude | number | 是   | 地理位置的经度。 |
4489
4490## EncoderInfo<sup>11+</sup>
4491
4492编码器和规格参数
4493
4494系统能力:SystemCapability.Multimedia.Media.AVRecorder
4495
4496| 名称       | 类型                             | 可读 | 可写 | 说明                                                         |
4497| ---------- | -------------------------------- | ---- | ---- | ------------------------------------------------------------ |
4498| mimeType   | [CodecMimeType](#codecmimetype8) | 是   | 否   | 编码器MIME类型名称                                           |
4499| type       | string                           | 是   | 否   | 编码器类型,audio表示音频编码器,video表示视频编码器         |
4500| bitRate    | [Range](#range11)                | 是   | 否   | 比特率,包含该编码器的最大和最小值                           |
4501| frameRate  | [Range](#range11)                | 是   | 否   | 视频帧率,包含帧率的最大和最小值,仅视频编码器拥有           |
4502| width      | [Range](#range11)                | 是   | 否   | 视频帧的宽度,包含宽度的最大和最小值,仅视频编码器拥有       |
4503| height     | [Range](#range11)                | 是   | 否   | 视频帧的高度,包含高度的最大和最小值,仅视频编码器拥有       |
4504| channels   | [Range](#range11)                | 是   | 否   | 音频采集声道数,包含声道数的最大和最小值,仅音频编码器拥有   |
4505| sampleRate | Array\<number>                    | 是   | 否   | 音频采样率,包含所有可以使用的音频采样率值,仅音频编码器拥有 |
4506
4507## Range<sup>11+</sup>
4508
4509表示一个类型的范围
4510
4511系统能力:SystemCapability.Multimedia.Media.AVRecorder
4512
4513| 名称 | 类型   | 可读 | 可写 | 说明         |
4514| ---- | ------ | ---- | ---- | ------------ |
4515| min  | number | 是   | 否   | 范围的最小值 |
4516| max  | number | 是   | 否   | 范围的最大值 |
4517
4518## FileGenerationMode<sup>12+</sup>
4519
4520表示创建媒体文件模式的枚举。
4521
4522**系统能力:** SystemCapability.Multimedia.Media.AVRecorder
4523
4524| 名称                          | 值   | 说明                            |
4525| ----------------------------- | ---- | ------------------------------- |
4526| APP_CREATE  | 0    | 由应用自行在沙箱创建媒体文件。 |
4527| AUTO_CREATE_CAMERA_SCENE  | 1    | 由系统创建媒体文件,当前仅在相机录制场景下生效,会忽略应用设置的url。 |
4528
4529## AVTranscoder<sup>12+</sup>
4530
4531视频转码管理类,用于视频转码。在调用AVTranscoder的方法前,需要先通过createAVTranscoder()构建一个AVTranscoder实例。
4532
4533视频转码demo可参考:[视频转码开发指导](../../media/media/using-avtranscoder-for-transcodering.md)
4534
4535### 属性
4536
4537**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4538
4539| 名称    | 类型                                 | 只读 | 可选 | 说明               |
4540| ------- | ------------------------------------ | ---- | ---- | ------------------ |
4541| fdSrc<sup>12+</sup>                                  | [AVFileDescriptor](#avfiledescriptor9)                       |  否  | 否   | 源媒体文件描述,通过该属性设置数据源。<br/> **使用示例**:<br/>假设一个连续存储的媒体文件,地址偏移:0,字节长度:100。其文件描述为 AVFileDescriptor { fd = 资源句柄; offset = 0; length = 100; }。<br>**说明:** <br> - 将资源句柄(fd)传递给 AVTranscoder 实例之后,请不要通过该资源句柄做其他读写操作,包括但不限于将同一个资源句柄传递给多个 AVPlayer / AVMetadataExtractor / AVImageGenerator / AVTranscoder。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致视频转码数据获取异常。 |
4542| fdDst<sup>12+</sup>                               | number                 |  否  | 否   | 目标媒体文件描述,通过该属性设置数据输出。在创建AVTranscoder实例后,必须设置fdSrc和fdDst属性。<br>**说明:** <br> - 将资源句柄(fd)传递给 AVTranscoder 实例之后,请不要通过该资源句柄做其他读写操作,包括但不限于将同一个资源句柄传递给多个 AVPlayer / AVMetadataExtractor / AVImageGenerator / AVTranscoder。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致视频转码数据获取异常。 |
4543
4544### prepare<sup>12+</sup>
4545
4546prepare(config: AVTranscoderConfig): Promise\<void>
4547
4548异步方式进行视频转码的参数设置。通过Promise获取返回值。
4549
4550**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4551
4552**参数:**
4553
4554| 参数名 | 类型                                   | 必填 | 说明                       |
4555| ------ | -------------------------------------- | ---- | -------------------------- |
4556| config | [AVTranscoderConfig](#avtranscoderconfig12) | 是   | 配置视频转码的相关参数。 |
4557
4558**返回值:**
4559
4560| 类型           | 说明                                       |
4561| -------------- | ------------------------------------------ |
4562| Promise\<void> | 异步视频转码prepare方法的Promise返回值。 |
4563
4564**错误码:**
4565
4566以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4567
4568| 错误码ID | 错误信息                               |
4569| -------- | -------------------------------------- |
4570| 401  | The parameter check failed. Return by promise. |
4571| 5400102  | Operation not allowed. Return by promise. |
4572| 5400105  | Service died. Return by promise.       |
4573| 5400106  | Unsupported format. Returned by promise.  |
4574
4575**示例:**
4576
4577```ts
4578import { BusinessError } from '@kit.BasicServicesKit';
4579
4580// 配置参数以实际硬件设备支持的范围为准
4581let avTranscoderConfig: media.AVTranscoderConfig = {
4582  audioBitrate : 200000,
4583  audioCodec : media.CodecMimeType.AUDIO_AAC,
4584  fileFormat : media.ContainerFormatType.CFT_MPEG_4,
4585  videoBitrate : 3000000,
4586  videoCodec : media.CodecMimeType.VIDEO_AVC,
4587  videoFrameWidth : 1280,
4588  videoFrameHeight : 720,
4589}
4590
4591avTranscoder.prepare(avTranscoderConfig).then(() => {
4592  console.info('prepare success');
4593}).catch((err: BusinessError) => {
4594  console.error('prepare failed and catch error is ' + err.message);
4595});
4596```
4597
4598### start<sup>12+</sup>
4599
4600start(): Promise\<void>
4601
4602异步方式开始视频转码。通过Promise获取返回值。
4603
4604需要[prepare()](#prepare12)事件成功触发后,才能调用start方法。
4605
4606**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4607
4608**返回值:**
4609
4610| 类型           | 说明                                  |
4611| -------------- | ------------------------------------- |
4612| Promise\<void> | 异步开始视频转码方法的Promise返回值。 |
4613
4614**错误码:**
4615
4616以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4617
4618| 错误码ID | 错误信息                               |
4619| -------- | -------------------------------------- |
4620| 5400102  | Operation not allowed. Return by promise.  |
4621| 5400103  | IO error. Return by promise.           |
4622| 5400105  | Service died. Return by promise.       |
4623
4624**示例:**
4625
4626```ts
4627import { BusinessError } from '@kit.BasicServicesKit';
4628
4629avTranscoder.start().then(() => {
4630  console.info('start AVTranscoder success');
4631}).catch((err: BusinessError) => {
4632  console.error('start AVTranscoder failed and catch error is ' + err.message);
4633});
4634```
4635
4636### pause<sup>12+</sup>
4637
4638pause(): Promise\<void>
4639
4640异步方式暂停视频转码。通过Promise获取返回值。
4641
4642需要[start()](#start12)事件成功触发后,才能调用pause方法,可以通过调用[resume()](#resume12)接口来恢复转码。
4643
4644**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4645
4646**返回值:**
4647
4648| 类型           | 说明                                  |
4649| -------------- | ------------------------------------- |
4650| Promise\<void> | 异步暂停视频转码方法的Promise返回值。 |
4651
4652**错误码:**
4653
4654以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4655
4656| 错误码ID | 错误信息                               |
4657| -------- | -------------------------------------- |
4658| 5400102  | Operation not allowed. Return by promise.  |
4659| 5400103  | IO error. Return by promise.           |
4660| 5400105  | Service died. Return by promise.       |
4661
4662**示例:**
4663
4664```ts
4665import { BusinessError } from '@kit.BasicServicesKit';
4666
4667avTranscoder.pause().then(() => {
4668  console.info('pause AVTranscoder success');
4669}).catch((err: BusinessError) => {
4670  console.error('pause AVTranscoder failed and catch error is ' + err.message);
4671});
4672```
4673
4674### resume<sup>12+</sup>
4675
4676resume(): Promise\<void>
4677
4678异步方式恢复视频转码。通过Promise获取返回值。
4679
4680需要在[pause()](#pause12)事件成功触发后,才能调用resume方法。
4681
4682**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4683
4684**返回值:**
4685
4686| 类型           | 说明                                  |
4687| -------------- | ------------------------------------- |
4688| Promise\<void> | 异步恢复视频转码方法的Promise返回值。 |
4689
4690**错误码:**
4691
4692以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4693
4694| 错误码ID | 错误信息                               |
4695| -------- | -------------------------------------- |
4696| 5400102  | Operation not allowed. Return by promise.  |
4697| 5400103  | IO error. Return by promise.           |
4698| 5400105  | Service died. Return by promise.       |
4699
4700**示例:**
4701
4702```ts
4703import { BusinessError } from '@kit.BasicServicesKit';
4704
4705avTranscoder.resume().then(() => {
4706  console.info('resume AVTranscoder success');
4707}).catch((err: BusinessError) => {
4708  console.error('resume AVTranscoder failed and catch error is ' + err.message);
4709});
4710```
4711
4712### cancel<sup>12+</sup>
4713
4714cancel(): Promise\<void>
4715
4716异步方式取消视频转码。通过Promise获取返回值。
4717
4718需要在[prepare()](#prepare12)、[start()](#start12)、[pause()](#pause12)或[resume()](#resume12)事件成功触发后,才能调用cancel方法。
4719
4720**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4721
4722**返回值:**
4723
4724| 类型           | 说明                                  |
4725| -------------- | ------------------------------------- |
4726| Promise\<void> | 异步取消视频转码方法的Promise返回值。 |
4727
4728**错误码:**
4729
4730以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4731
4732| 错误码ID | 错误信息                               |
4733| -------- | -------------------------------------- |
4734| 5400102  | Operation not allowed. Return by promise.  |
4735| 5400103  | IO error. Return by promise.           |
4736| 5400105  | Service died. Return by promise.       |
4737
4738**示例:**
4739
4740```ts
4741import { BusinessError } from '@kit.BasicServicesKit';
4742
4743avTranscoder.cancel().then(() => {
4744  console.info('cancel AVTranscoder success');
4745}).catch((err: BusinessError) => {
4746  console.error('cancel AVTranscoder failed and catch error is ' + err.message);
4747});
4748```
4749
4750### release<sup>12+</sup>
4751
4752release(): Promise\<void>
4753
4754异步方式释放视频转码资源。通过Promise获取返回值。
4755
4756释放视频转码资源之后,该AVTranscoder实例不能再进行任何操作。
4757
4758**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4759
4760**返回值:**
4761
4762| 类型           | 说明                                        |
4763| -------------- | ------------------------------------------- |
4764| Promise\<void> | 异步释放视频转码资源方法的Promise返回值。 |
4765
4766**错误码:**
4767
4768以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4769
4770| 错误码ID | 错误信息                          |
4771| -------- | --------------------------------- |
4772| 5400102  | Operation not allowed. Return by promise. |
4773| 5400105  | Service died. Return by promise. |
4774
4775**示例:**
4776
4777```ts
4778import { BusinessError } from '@kit.BasicServicesKit';
4779
4780avTranscoder.release().then(() => {
4781  console.info('release AVTranscoder success');
4782}).catch((err: BusinessError) => {
4783  console.error('release AVTranscoder failed and catch error is ' + err.message);
4784});
4785```
4786
4787### on('progressUpdate')<sup>12+</sup>
4788
4789on(type: 'progressUpdate', callback: Callback\<number>): void
4790
4791注册转码进度更新事件,并通过注册的回调方法通知用户。用户只能注册一个进度更新事件的回调方法,当用户重复注册时,以最后一次注册的回调接口为准。
4792
4793**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4794
4795**参数:**
4796
4797| 参数名   | 类型     | 必填 | 说明                                                         |
4798| -------- | -------- | ---- | ------------------------------------------------------------ |
4799| type     | string   | 是   | 进度更新事件回调类型,支持的事件:'progressUpdate',在转码过程中系统会自动触发此事件。 |
4800| callback | [Callback](../apis-basic-services-kit/js-apis-base.md#callback) | 是   | 进度更新事件回调方法,progress: number,表示当前转码进度 |
4801
4802**示例:**
4803
4804```ts
4805avTranscoder.on('progressUpdate', (progress: number) => {
4806  console.info('avTranscoder progressUpdate = ' + progress);
4807});
4808```
4809
4810### off('progressUpdate')<sup>12+</sup>
4811
4812off(type:'progressUpdate', callback?: Callback\<number>): void
4813
4814取消注册转码进度更新事件。
4815
4816**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4817
4818**参数:**
4819
4820| 参数名 | 类型   | 必填 | 说明                                                         |
4821| ------ | ------ | ---- | ------------------------------------------------------------ |
4822| type   | string | 是   | 进度更新事件回调类型,支持的事件:'progressUpdate',用户操作和系统都会触发此事件。 |
4823| callback | [Callback](../apis-basic-services-kit/js-apis-base.md#callback) | 否   | 进度更新事件回调方法,progress: number,表示当前转码进度 |
4824
4825**示例:**
4826
4827```ts
4828avTranscoder.off('progressUpdate');
4829```
4830
4831### on('error')<sup>12+</sup>
4832
4833on(type: 'error', callback: ErrorCallback): void
4834
4835注册AVtranscoder的错误事件,该事件仅用于错误提示。如果AVTranscoder上报error事件,用户需要通过[release()](#release12)退出转码操作。
4836
4837用户只能订阅一个错误事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。
4838
4839**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4840
4841**参数:**
4842
4843| 参数名   | 类型          | 必填 | 说明                                                         |
4844| -------- | ------------- | ---- | ------------------------------------------------------------ |
4845| type     | string        | 是   | 转码错误事件回调类型'error'。 <br>- 'error':录制过程中发生错误,触发该事件。 |
4846| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 转码错误事件回调方法。                                       |
4847
4848**错误码:**
4849
4850以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
4851
4852| 错误码ID | 错误信息                                   |
4853| -------- | ------------------------------------------ |
4854| 401      | The parameter check failed. |
4855| 801      | Capability not supported. |
4856| 5400101  | No memory.            |
4857| 5400102  | Operation not allowed. |
4858| 5400103  | I/O error.              |
4859| 5400104  | Time out.            |
4860| 5400105  | Service died.           |
4861| 5400106  | Unsupported format.      |
4862
4863**示例:**
4864
4865```ts
4866import { BusinessError } from '@kit.BasicServicesKit';
4867
4868avTranscoder.on('error', (err: BusinessError) => {
4869  console.info('case avTranscoder.on(error) called, errMessage is ' + err.message);
4870});
4871```
4872
4873### off('error')<sup>12+</sup>
4874
4875off(type:'error', callback?: ErrorCallback): void
4876
4877取消注册转码错误事件,取消后不再接收到AVTranscoder的错误事件。
4878
4879**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4880
4881**参数:**
4882
4883| 参数名 | 类型   | 必填 | 说明                                                         |
4884| ------ | ------ | ---- | ------------------------------------------------------------ |
4885| type   | string | 是   | 转码错误事件回调类型'error'。 <br>- 'error':转码过程中发生错误,触发该事件。 |
4886| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否   | 错误事件回调方法 |
4887
4888**示例:**
4889
4890```ts
4891avTranscoder.off('error');
4892```
4893
4894### on('complete')<sup>12+</sup>
4895
4896on(type: 'complete', callback: Callback\<void>): void
4897
4898注册转码完成事件,并通过注册的回调方法通知用户。用户只能注册一个进度更新事件的回调方法,当用户重复注册时,以最后一次注册的回调接口为准。
4899
4900当AVTranscoder上报complete事件时,当前转码操作已完成,用户可通过[release()](#release12)退出转码操作。
4901
4902**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4903
4904**参数:**
4905
4906| 参数名   | 类型     | 必填 | 说明                                                         |
4907| -------- | -------- | ---- | ------------------------------------------------------------ |
4908| type     | string   | 是   | 完成事件回调类型,支持的事件:'complete',在转码过程中系统会自动触发此事件。 |
4909| callback | [Callback](../apis-basic-services-kit/js-apis-base.md#callback) | 是   | 完成事件回调方法 |
4910
4911**示例:**
4912
4913```ts
4914avTranscoder.on('complete', () => {
4915  console.info('avTranscoder complete');
4916});
4917```
4918
4919### off('complete')<sup>12+</sup>
4920
4921off(type:'complete', callback?: Callback\<void>): void
4922
4923取消注册转码完成事件。
4924
4925**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4926
4927**参数:**
4928
4929| 参数名 | 类型   | 必填 | 说明                                                         |
4930| ------ | ------ | ---- | ------------------------------------------------------------ |
4931| type   | string | 是   | 转码完成事件回调类型,支持的事件:'complete',用户操作和系统都会触发此事件。 |
4932| callback | [Callback](../apis-basic-services-kit/js-apis-base.md#callback) | 否   | 完成事件回调方法 |
4933
4934**示例:**
4935
4936```ts
4937avTranscoder.off('complete');
4938```
4939
4940## AVTranscoderConfig<sup>12+</sup>
4941
4942表示视频转码的参数设置。
4943
4944**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder
4945
4946| 名称            | 类型                                    | 只读 | 可选 | 说明                                                         |
4947| --------------- | ---------------------------------------- |---- | ---- | ------------------------------------------------------------ |
4948| audioBitrate | number     | 否 | 是 | 输出音频的码率,单位为比特率(bps)。用户不设置,则默认设置为48Kbps|
4949| audioCodec | [CodecMimeType](#codecmimetype8)     | 否 | 是  | 输出音频的编码格式,当前仅支持AAC。                   |
4950| fileFormat         | [ContainerFormatType](#containerformattype8) | 否 | 否   | 输出视频文件的封装格式,当前视频文件仅支持MP4。|
4951| videoBitrate         | number | 否 |  是  | 输出视频的码率,单位为比特率(bps)。用户不设置,则默认码率按输出视频的分辨率设置,[240p,480P]默认码率值为1Mbps,(480P,720P]默认码率值为2Mbps,(720P,1080P]默认码率值为4Mbps,1080P及以上默认值为8Mbps。|
4952| videoCodec        | [CodecMimeType](#codecmimetype8) | 否 | 是   | 输出视频的编码格式,当前仅支持AVC和HEVC。|
4953| videoFrameWidth        | number | 否 |  是   | 输出视频帧的宽,单位为像素(px)。用户不设置,则默认设置为源视频帧的宽|
4954| videoFrameHeight        | number | 否 |  是   | 输出视频帧的高,单位为像素(px)。用户不设置,则默认设置为源视频帧的高|
4955
4956
4957
4958## AVMetadataExtractor<sup>11+</sup>
4959
4960元数据获取类,用于从媒体资源中获取元数据。在调用AVMetadataExtractor的方法前,需要先通过[createAVMetadataExtractor()](#mediacreateavmetadataextractor11)构建一个AVMetadataExtractor实例。
4961
4962获取音频或视频元数据的demo可参考:[获取音视频元数据开发指导](../../media/media/avmetadataextractor.md)。
4963
4964### 属性
4965
4966**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
4967
4968| 名称                                                | 类型                                                         | 可读 | 可写 | 说明                                                         |
4969| --------------------------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
4970| 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。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致音视频元数据获取异常。 |
4971| dataSrc<sup>11+</sup>                               | [AVDataSrcDescriptor](#avdatasrcdescriptor10)                | 是   | 是   | 流式媒体资源描述,通过该属性设置数据源。在获取元数据之前,必须设置数据源属性,只能设置fdSrc和dataSrc的其中一个。<br/> 当应用从远端获取音视频媒体文件,在应用未下载完整音视频资源时,可以设置dataSrc提前获取该资源的元数据。|
4972
4973### fetchMetadata<sup>11+</sup>
4974
4975fetchMetadata(callback: AsyncCallback\<AVMetadata>): void
4976
4977异步方式获取媒体元数据。通过注册回调函数获取返回值。
4978
4979**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
4980
4981**参数:**
4982
4983| 参数名   | 类型                                         | 必填 | 说明                                |
4984| -------- | -------------------------------------------- | ---- | ----------------------------------- |
4985| callback | AsyncCallback\<[AVMetadata](#avmetadata11)>       | 是   | 回调函数。异步返回音视频元数据对象(AVMetadata)。|
4986
4987**错误码:**
4988
4989以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
4990
4991| 错误码ID | 错误信息                                   |
4992| -------- | ------------------------------------------ |
4993| 5400102  | Operation not allowed. Returned by callback. |
4994| 5400106  | Unsupported format. Returned by callback.  |
4995
4996**示例:**
4997
4998```ts
4999import { BusinessError } from '@kit.BasicServicesKit';
5000
5001avMetadataExtractor.fetchMetadata((error: BusinessError, metadata: media.AVMetadata) => {
5002  if (error) {
5003    console.error(`Failed to fetch Metadata, err = ${JSON.stringify(error)}`);
5004    return;
5005  }
5006  console.info(`Succeeded in fetching Metadata, genre: ${metadata.genre}`);
5007});
5008```
5009
5010### fetchMetadata<sup>11+</sup>
5011
5012fetchMetadata(): Promise\<AVMetadata>
5013
5014异步方式获取媒体元数据。通过Promise获取返回值。
5015
5016**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5017
5018**返回值:**
5019
5020| 类型           | 说明                                     |
5021| -------------- | ---------------------------------------- |
5022| Promise\<[AVMetadata](#avmetadata11)>  | Promise对象。异步返回音视频元数据对象(AVMetadata)。 |
5023
5024**错误码:**
5025
5026以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
5027
5028| 错误码ID | 错误信息                                  |
5029| -------- | ----------------------------------------- |
5030| 5400102  | Operation not allowed. Returned by promise. |
5031| 5400106  | Unsupported format. Returned by promise.  |
5032
5033**示例:**
5034
5035```ts
5036import { BusinessError } from '@kit.BasicServicesKit';
5037
5038avMetadataExtractor.fetchMetadata().then((metadata: media.AVMetadata) => {
5039  console.info(`Succeeded in fetching Metadata, genre: ${metadata.genre}`)
5040}).catch((error: BusinessError) => {
5041  console.error(`Failed to fetch Metadata, error message:${error.message}`);
5042});
5043```
5044
5045### fetchAlbumCover<sup>11+</sup>
5046
5047fetchAlbumCover(callback: AsyncCallback\<image.PixelMap>): void
5048
5049异步方式获取音频专辑封面。通过注册回调函数获取返回值。
5050
5051**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5052
5053**参数:**
5054
5055| 参数名   | 类型                                         | 必填 | 说明                                |
5056| -------- | -------------------------------------------- | ---- | ----------------------------------- |
5057| callback | AsyncCallback\<[image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7)>    | 是   | 回调函数。异步返回专辑封面。 |
5058
5059**错误码:**
5060
5061以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
5062
5063| 错误码ID | 错误信息                                   |
5064| -------- | ------------------------------------------ |
5065| 5400102  | Operation not allowed. Return by callback. |
5066| 5400106  | Unsupported format. Returned by callback.  |
5067
5068**示例:**
5069
5070```ts
5071import { BusinessError } from '@kit.BasicServicesKit';
5072import { image } from '@kit.ImageKit';
5073
5074let pixel_map : image.PixelMap | undefined = undefined;
5075
5076avMetadataExtractor.fetchAlbumCover((error: BusinessError, pixelMap: image.PixelMap) => {
5077  if (error) {
5078    console.error(`Failed to fetch AlbumCover, error = ${JSON.stringify(error)}`);
5079    return;
5080  }
5081  pixel_map = pixelMap;
5082});
5083```
5084
5085### fetchAlbumCover<sup>11+</sup>
5086
5087fetchAlbumCover(): Promise\<image.PixelMap>
5088
5089异步方式获取专辑封面。通过Promise获取返回值。
5090
5091**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5092
5093**返回值:**
5094
5095| 类型           | 说明                                     |
5096| -------------- | ---------------------------------------- |
5097| Promise\<[image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7)> |  Promise对象。异步返回专辑封面。 |
5098
5099**错误码:**
5100
5101以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
5102
5103| 错误码ID | 错误信息                                  |
5104| -------- | ----------------------------------------- |
5105| 5400102  | Operation not allowed. Returned by promise. |
5106| 5400106  | Unsupported format. Returned by promise.  |
5107
5108**示例:**
5109
5110```ts
5111import { BusinessError } from '@kit.BasicServicesKit';
5112import { image } from '@kit.ImageKit';
5113
5114let pixel_map : image.PixelMap | undefined = undefined;
5115
5116avMetadataExtractor.fetchAlbumCover().then((pixelMap: image.PixelMap) => {
5117  pixel_map = pixelMap;
5118}).catch((error: BusinessError) => {
5119  console.error(`Failed to fetch AlbumCover, error message:${error.message}`);
5120});
5121```
5122
5123### release<sup>11+</sup>
5124
5125release(callback: AsyncCallback\<void>): void
5126
5127异步方式释放资源。通过注册回调函数获取返回值。
5128
5129**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5130
5131**参数:**
5132
5133| 参数名   | 类型                                         | 必填 | 说明                                |
5134| -------- | -------------------------------------------- | ---- | ----------------------------------- |
5135| callback | AsyncCallback\<void>                   | 是   |回调函数。当释放资源成功,err为undefined,否则为错误对象。 |
5136
5137**错误码:**
5138
5139以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
5140
5141| 错误码ID | 错误信息                                   |
5142| -------- | ------------------------------------------ |
5143| 5400102  | Operation not allowed. Returned by callback. |
5144
5145**示例:**
5146
5147```ts
5148import { BusinessError } from '@kit.BasicServicesKit';
5149
5150avMetadataExtractor.release((error: BusinessError) => {
5151  if (error) {
5152    console.error(`Failed to release, err = ${JSON.stringify(error)}`);
5153    return;
5154  }
5155  console.info(`Succeeded in releasing.`);
5156});
5157```
5158
5159### release<sup>11+</sup>
5160
5161release(): Promise\<void>
5162
5163异步方式释放资源。通过Promise获取返回值。
5164
5165**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5166
5167**返回值:**
5168
5169| 类型           | 说明                                     |
5170| -------------- | ---------------------------------------- |
5171| Promise\<void> | 异步方式释放资源release方法的Promise返回值。 |
5172
5173**错误码:**
5174
5175以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
5176
5177| 错误码ID | 错误信息                                  |
5178| -------- | ----------------------------------------- |
5179| 5400102  | Operation not allowed. Returned by promise. |
5180
5181**示例:**
5182
5183```ts
5184import { BusinessError } from '@kit.BasicServicesKit';
5185
5186avMetadataExtractor.release().then(() => {
5187  console.info(`Succeeded in releasing.`);
5188}).catch((error: BusinessError) => {
5189  console.error(`Failed to release, error message:${error.message}`);
5190});
5191```
5192
5193## AVMetadata<sup>11+</sup>
5194
5195音视频元数据,包含各个元数据字段。在[AVRecorderConfig](#avrecorderconfig9)中使用时未声明为当前版本只读的参数可以作为使用[AVRecorder](#avrecorder9)录制时的入参。
5196
5197**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor
5198
5199| 名称   | 类型   | 必填 | 说明                                                         |
5200| ------ | ------ | ---- | ------------------------------------------------------------ |
5201| album     | string | 否   | 专辑的标题。当前版本为只读参数。     |
5202| albumArtist | string | 否   | 专辑的艺术家。当前版本为只读参数。 |
5203| artist | string | 否   | 媒体资源的艺术家。当前版本为只读参数。 |
5204| author | string | 否   | 媒体资源的作者。当前版本为只读参数。 |
5205| dateTime | string | 否   | 媒体资源的创建时间。当前版本为只读参数。 |
5206| dateTimeFormat | string | 否   | 媒体资源的创建时间,按YYYY-MM-DD HH:mm:ss格式输出。当前版本为只读参数。 |
5207| composer | string | 否   | 媒体资源的作曲家。当前版本为只读参数。 |
5208| duration | string | 否   | 媒体资源的时长。当前版本为只读参数。 |
5209| genre | string | 否   | 媒体资源的类型或体裁。|
5210| hasAudio | string | 否   | 媒体资源是否包含音频。当前版本为只读参数。 |
5211| hasVideo | string | 否   | 媒体资源是否包含视频。当前版本为只读参数。 |
5212| mimeType | string | 否   | 媒体资源的mime类型。当前版本为只读参数。 |
5213| trackCount | string | 否   | 媒体资源的轨道数量。当前版本为只读参数。 |
5214| sampleRate | string | 否   | 音频的采样率,单位为赫兹(Hz)。当前版本为只读参数。 |
5215| title | string | 否   | 媒体资源的标题。当前版本为只读参数。当前版本为只读参数。 |
5216| videoHeight | string | 否   | 视频的高度,单位为像素。当前版本为只读参数。 |
5217| videoWidth | string | 否   | 视频的宽度,单位为像素。当前版本为只读参数。 |
5218| videoOrientation | string | 否   | 视频的旋转方向,单位为度(°)。|
5219| hdrType<sup>12+</sup> | [HdrType](#hdrtype12) | 否   | 媒体资源的HDR类型。当前版本为只读参数。 |
5220| location<sup>12+</sup> | [Location](#location) | 否 | 视频的地理位置信息。 |
5221| customInfo<sup>12+</sup> | Record<string, string> | 否 | 从moov.meta.list 获取的自定义参数键值映射。|
5222
5223## HdrType<sup>12+</sup>
5224
5225表示视频HDR类型的枚举。
5226
5227**系统能力:** SystemCapability.Multimedia.Media.Core
5228
5229| 名称                      | 值   | 说明                   |
5230| ------------------------- | ---- | ---------------------- |
5231| AV_HDR_TYPE_NONE          | 0    | 表示无HDR类型。 |
5232| AV_HDR_TYPE_VIVID         | 1    | 表示为HDR VIVID类型。 |
5233
5234## media.createAudioPlayer<sup>(deprecated)</sup>
5235
5236createAudioPlayer(): AudioPlayer
5237
5238同步方式创建音频播放实例。
5239
5240> **说明:**
5241> 从API version 6开始支持,从API version 9开始废弃,建议使用[createAVPlayer](#mediacreateavplayer9)替代。
5242
5243**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5244
5245**返回值:**
5246
5247| 类型                        | 说明                                                         |
5248| --------------------------- | ------------------------------------------------------------ |
5249| [AudioPlayer](#audioplayerdeprecated) | 返回AudioPlayer类实例,失败时返回null。可用于音频播放、暂停、停止等操作。 |
5250
5251**示例:**
5252
5253```ts
5254let audioPlayer: media.AudioPlayer = media.createAudioPlayer();
5255```
5256
5257## media.createVideoPlayer<sup>(deprecated)</sup>
5258
5259createVideoPlayer(callback: AsyncCallback\<VideoPlayer>): void
5260
5261异步方式创建视频播放实例,通过注册回调函数获取返回值。
5262
5263> **说明:**
5264> 从API version 8开始支持,从API version 9开始废弃,建议使用[createAVPlayer](#mediacreateavplayer9)替代。
5265
5266**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
5267
5268**参数:**
5269
5270| 参数名   | 类型                                       | 必填 | 说明                                                         |
5271| -------- | ------------------------------------------ | ---- | ------------------------------------------------------------ |
5272| callback | AsyncCallback<[VideoPlayer](#videoplayerdeprecated)> | 是   | 回调函数。创建VideoPlayer实例成功时,err为undefined,data为获取到的VideoPlayer实例,否则为错误对象。 |
5273
5274**示例:**
5275
5276```ts
5277import { BusinessError } from '@kit.BasicServicesKit';
5278
5279let videoPlayer: media.VideoPlayer;
5280media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => {
5281  if (video != null) {
5282    videoPlayer = video;
5283    console.info('Succeeded in creating VideoPlayer');
5284  } else {
5285    console.error(`Failed to create VideoPlayer, error:${error}`);
5286  }
5287});
5288```
5289
5290## media.createVideoPlayer<sup>(deprecated)</sup>
5291
5292createVideoPlayer(): Promise\<VideoPlayer>
5293
5294异步方式创建视频播放实例,通过Promise获取返回值。
5295
5296> **说明:**
5297> 从API version 8开始支持,从API version 9开始废弃,建议使用[createAVPlayer](#mediacreateavplayer9-1)替代。
5298
5299**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
5300
5301**返回值:**
5302
5303| 类型                                 | 说明                                                         |
5304| ------------------------------------ | ------------------------------------------------------------ |
5305| Promise<[VideoPlayer](#videoplayerdeprecated)> | Promise对象。异步返回VideoPlayer实例,失败时返回null。可用于管理和播放视频媒体。 |
5306
5307**示例:**
5308
5309```ts
5310import { BusinessError } from '@kit.BasicServicesKit';
5311
5312let videoPlayer: media.VideoPlayer;
5313media.createVideoPlayer().then((video: media.VideoPlayer) => {
5314  if (video != null) {
5315    videoPlayer = video;
5316    console.info('Succeeded in creating VideoPlayer');
5317  } else {
5318    console.error('Failed to create VideoPlayer');
5319  }
5320}).catch((error: BusinessError) => {
5321  console.error(`Failed to create VideoPlayer, error:${error}`);
5322});
5323```
5324
5325## media.createAudioRecorder<sup>(deprecated)</sup>
5326
5327createAudioRecorder(): AudioRecorder
5328
5329创建音频录制的实例来控制音频的录制。
5330一台设备只允许创建一个录制实例。
5331
5332> **说明:**
5333> 从API version 6开始支持,从API version 9开始废弃,建议使用[createAVRecorder](#mediacreateavrecorder9)替代。
5334
5335**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
5336
5337**返回值:**
5338
5339| 类型                            | 说明                                                         |
5340| ------------------------------- | ------------------------------------------------------------ |
5341| [AudioRecorder](#audiorecorderdeprecated) | 返回AudioRecorder类实例,失败时返回null。可用于录制音频媒体。 |
5342
5343**示例:**
5344
5345```ts
5346let audioRecorder: media.AudioRecorder = media.createAudioRecorder();
5347```
5348
5349## MediaErrorCode<sup>(deprecated)</sup>
5350
5351媒体服务错误类型枚举。
5352
5353> **说明:**
5354> 从API version 8开始支持,从API version 11开始废弃,建议使用[媒体错误码](#averrorcode9)替代。
5355
5356**系统能力:** SystemCapability.Multimedia.Media.Core
5357
5358| 名称                       | 值   | 说明                                   |
5359| -------------------------- | ---- | -------------------------------------- |
5360| MSERR_OK                   | 0    | 表示操作成功。                         |
5361| MSERR_NO_MEMORY            | 1    | 表示申请内存失败,系统可能无可用内存。 |
5362| MSERR_OPERATION_NOT_PERMIT | 2    | 表示无权限执行此操作。                 |
5363| MSERR_INVALID_VAL          | 3    | 表示传入入参无效。                     |
5364| MSERR_IO                   | 4    | 表示发生IO错误。                       |
5365| MSERR_TIMEOUT              | 5    | 表示操作超时。                         |
5366| MSERR_UNKNOWN              | 6    | 表示未知错误。                         |
5367| MSERR_SERVICE_DIED         | 7    | 表示服务端失效。                       |
5368| MSERR_INVALID_STATE        | 8    | 表示在当前状态下,不允许执行此操作。   |
5369| MSERR_UNSUPPORTED          | 9    | 表示在当前版本下,不支持此操作。       |
5370
5371## AudioPlayer<sup>(deprecated)</sup>
5372
5373> **说明:**
5374> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer](#avplayer9)替代。
5375
5376音频播放管理类,用于管理和播放音频媒体。在调用AudioPlayer的方法前,需要先通过[createAudioPlayer()](#mediacreateaudioplayerdeprecated)构建一个AudioPlayer实例。
5377
5378### 属性<sup>(deprecated)</sup>
5379
5380**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5381
5382| 名称                            | 类型                                                   | 只读 | 可选 | 说明                                                         |
5383| ------------------------------- | ------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
5384| 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。 |
5385| 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/> |
5386| loop                            | boolean                                                | 否   | 否  | 音频循环播放属性,设置为'true'表示循环播放。                 |
5387| audioInterruptMode<sup>9+</sup> | [audio.InterruptMode](../apis-audio-kit/js-apis-audio.md#interruptmode9) | 是   | 是   | 音频焦点模型。                                               |
5388| currentTime                     | number                                                 | 是   | 否   | 音频的当前播放位置,单位为毫秒(ms)。                       |
5389| duration                        | number                                                 | 是   | 否   | 音频时长,单位为毫秒(ms)。                                 |
5390| state                           | [AudioState](#audiostatedeprecated)                              | 是   | 否   | 可以查询音频播放的状态,该状态不可作为调用play/pause/stop等状态切换的触发条件。 |
5391
5392### play<sup>(deprecated)</sup>
5393
5394play(): void
5395
5396开始播放音频资源,需在'dataLoad'事件成功触发后,才能调用。
5397
5398> **说明:**
5399> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.play](#play9)替代。
5400
5401**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5402
5403**示例:**
5404
5405```ts
5406audioPlayer.on('play', () => {    //设置'play'事件回调
5407  console.info('audio play called');
5408});
5409audioPlayer.play();
5410```
5411
5412### pause<sup>(deprecated)</sup>
5413
5414pause(): void
5415
5416暂停播放音频资源。
5417
5418> **说明:**
5419> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.pause](#pause9)替代。
5420
5421**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5422
5423**示例:**
5424
5425```ts
5426audioPlayer.on('pause', () => {    //设置'pause'事件回调
5427  console.info('audio pause called');
5428});
5429audioPlayer.pause();
5430```
5431
5432### stop<sup>(deprecated)</sup>
5433
5434stop(): void
5435
5436停止播放音频资源。
5437
5438> **说明:**
5439> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.stop](#stop9)替代。
5440
5441**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5442
5443**示例:**
5444
5445```ts
5446audioPlayer.on('stop', () => {    //设置'stop'事件回调
5447  console.info('audio stop called');
5448});
5449audioPlayer.stop();
5450```
5451
5452### reset<sup>(deprecated)</sup>
5453
5454reset(): void
5455
5456重置播放音频资源。
5457
5458> **说明:**
5459> 从API version 7开始支持,从API version 9开始废弃,建议使用[AVPlayer.reset](#reset9)替代。
5460
5461**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5462
5463**示例:**
5464
5465```ts
5466audioPlayer.on('reset', () => {    //设置'reset'事件回调
5467  console.info('audio reset called');
5468});
5469audioPlayer.reset();
5470```
5471
5472### seek<sup>(deprecated)</sup>
5473
5474seek(timeMs: number): void
5475
5476跳转到指定播放位置。
5477
5478> **说明:**
5479> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。
5480
5481**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5482
5483**参数:**
5484
5485| 参数名 | 类型   | 必填 | 说明                                                        |
5486| ------ | ------ | ---- | ----------------------------------------------------------- |
5487| timeMs | number | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围[0, duration]。 |
5488
5489**示例:**
5490
5491```ts
5492audioPlayer.on('timeUpdate', (seekDoneTime: number) => {    //设置'timeUpdate'事件回调
5493  if (seekDoneTime == null) {
5494    console.error('Failed to seek');
5495    return;
5496  }
5497  console.info('Succeeded in seek. seekDoneTime: ' + seekDoneTime);
5498});
5499audioPlayer.seek(30000);    //seek到30000ms的位置
5500```
5501
5502### setVolume<sup>(deprecated)</sup>
5503
5504setVolume(vol: number): void
5505
5506设置音量。
5507
5508> **说明:**
5509> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.setVolume](#setvolume9)替代。
5510
5511**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5512
5513**参数:**
5514
5515| 参数名 | 类型   | 必填 | 说明                                                         |
5516| ------ | ------ | ---- | ------------------------------------------------------------ |
5517| vol    | number | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
5518
5519**示例:**
5520
5521```ts
5522audioPlayer.on('volumeChange', () => {    //设置'volumeChange'事件回调
5523  console.info('audio volumeChange called');
5524});
5525audioPlayer.setVolume(1);    //设置音量到100%
5526```
5527
5528### release<sup>(deprecated)</sup>
5529
5530release(): void
5531
5532释放音频资源。
5533
5534> **说明:**
5535> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.release](#release9)替代。
5536
5537**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5538
5539**示例:**
5540
5541```ts
5542audioPlayer.release();
5543audioPlayer = undefined;
5544```
5545
5546### getTrackDescription<sup>(deprecated)</sup>
5547
5548getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void
5549
5550获取音频轨道信息。需在'dataLoad'事件成功触发后,才能调用。通过回调函数获取返回值。
5551
5552> **说明:**
5553> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9)替代。
5554
5555**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5556
5557**参数:**
5558
5559| 参数名   | 类型                                                         | 必填 | 说明                                       |
5560| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------ |
5561| callback | AsyncCallback\<Array\<[MediaDescription](#mediadescription8)>> | 是   | 回调函数。获取音频轨道信息成功时,err为undefined,data为获取到的MediaDescription数组,否则为错误对象。 |
5562
5563**示例:**
5564
5565```ts
5566import { BusinessError } from '@kit.BasicServicesKit';
5567
5568audioPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => {
5569  if (arrList != null) {
5570    console.info('Succeeded in getting TrackDescription');
5571  } else {
5572    console.error(`Failed to get TrackDescription, error:${error}`);
5573  }
5574});
5575```
5576
5577### getTrackDescription<sup>(deprecated)</sup>
5578
5579getTrackDescription(): Promise\<Array\<MediaDescription>>
5580
5581获取音频轨道信息。需在'dataLoad'事件成功触发后,才能调用。通过Promise获取返回值。
5582
5583> **说明:**
5584> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9-1)替代。
5585
5586**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5587
5588**返回值:**
5589
5590| 类型                                                   | 说明                                            |
5591| ------------------------------------------------------ | ----------------------------------------------- |
5592| Promise<Array<[MediaDescription](#mediadescription8)>> | 音频轨道信息MediaDescription数组Promise返回值。 |
5593
5594**示例:**
5595
5596```ts
5597import { BusinessError } from '@kit.BasicServicesKit';
5598
5599audioPlayer.getTrackDescription().then((arrList: Array<media.MediaDescription>) => {
5600  console.info('Succeeded in getting TrackDescription');
5601}).catch((error: BusinessError) => {
5602  console.error(`Failed to get TrackDescription, error:${error}`);
5603});
5604```
5605
5606### on('bufferingUpdate')<sup>(deprecated)</sup>
5607
5608on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: number) => void): void
5609
5610开始订阅音频缓存更新事件。仅网络播放支持该订阅事件。
5611
5612> **说明:**
5613> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('bufferingUpdate')](#onbufferingupdate9)替代。
5614
5615**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5616
5617**参数:**
5618
5619| 参数名   | 类型     | 必填 | 说明                                                         |
5620| -------- | -------- | ---- | ------------------------------------------------------------ |
5621| type     | string   | 是   | 音频缓存事件回调类型,支持的事件:'bufferingUpdate'。        |
5622| callback | function | 是   | 音频缓存事件回调方法。<br>[BufferingInfoType](#bufferinginfotype8)value值固定为0。 |
5623
5624**示例:**
5625
5626```ts
5627audioPlayer.on('bufferingUpdate', (infoType: media.BufferingInfoType, value: number) => {
5628  console.info('audio bufferingInfo type: ' + infoType);
5629  console.info('audio bufferingInfo value: ' + value);
5630});
5631```
5632
5633### on('play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange')<sup>(deprecated)</sup>
5634
5635on(type: 'play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange', callback: () => void): void
5636
5637开始订阅音频播放事件。
5638
5639> **说明:**
5640> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('stateChange')](#onstatechange9)替代。
5641
5642**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5643
5644**参数:**
5645
5646| 参数名   | 类型       | 必填 | 说明                                                         |
5647| -------- | ---------- | ---- | ------------------------------------------------------------ |
5648| 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)调用,播放音量改变后触发该事件。 |
5649| callback | () => void | 是   | 播放事件回调方法。                                           |
5650
5651**示例:**
5652
5653```ts
5654import { fileIo as fs } from '@kit.CoreFileKit';
5655import { BusinessError } from '@kit.BasicServicesKit';
5656
5657let audioPlayer: media.AudioPlayer = media.createAudioPlayer();  //创建一个音频播放实例
5658audioPlayer.on('dataLoad', () => {            //设置'dataLoad'事件回调,src属性设置成功后,触发此回调
5659  console.info('audio set source called');
5660  audioPlayer.play();                       //开始播放,并触发'play'事件回调
5661});
5662audioPlayer.on('play', () => {                //设置'play'事件回调
5663  console.info('audio play called');
5664  audioPlayer.seek(30000);                  //调用seek方法,并触发'timeUpdate'事件回调
5665});
5666audioPlayer.on('pause', () => {               //设置'pause'事件回调
5667  console.info('audio pause called');
5668  audioPlayer.stop();                       //停止播放,并触发'stop'事件回调
5669});
5670audioPlayer.on('reset', () => {               //设置'reset'事件回调
5671  console.info('audio reset called');
5672  audioPlayer.release();                    //释放播放实例资源
5673  audioPlayer = undefined;
5674});
5675audioPlayer.on('timeUpdate', (seekDoneTime: number) => {  //设置'timeUpdate'事件回调
5676  if (seekDoneTime == null) {
5677    console.error('Failed to seek');
5678    return;
5679  }
5680  console.info('Succeeded in seek, and seek time is ' + seekDoneTime);
5681  audioPlayer.setVolume(0.5);                //设置音量为50%,并触发'volumeChange'事件回调
5682});
5683audioPlayer.on('volumeChange', () => {         //设置'volumeChange'事件回调
5684  console.info('audio volumeChange called');
5685  audioPlayer.pause();                       //暂停播放,并触发'pause'事件回调
5686});
5687audioPlayer.on('finish', () => {               //设置'finish'事件回调
5688  console.info('audio play finish');
5689  audioPlayer.stop();                        //停止播放,并触发'stop'事件回调
5690});
5691audioPlayer.on('error', (error: BusinessError) => {  //设置'error'事件回调
5692  console.error(`audio error called, error: ${error}`);
5693});
5694
5695// 用户选择音频设置fd(本地播放)
5696let fdPath = 'fd://';
5697// path路径的码流可通过"hdc file send D:\xxx\01.mp3 /data/accounts/account_0/appdata" 命令,将其推送到设备上
5698let path = '/data/accounts/account_0/appdata/ohos.xxx.xxx.xxx/01.mp3';
5699fs.open(path).then((file) => {
5700  fdPath = fdPath + '' + file.fd;
5701  console.info('Succeeded in opening fd, fd is' + fdPath);
5702  audioPlayer.src = fdPath;  //设置src属性,并触发'dataLoad'事件回调
5703}, (err: BusinessError) => {
5704  console.error('Failed to open fd, err is' + err);
5705}).catch((err: BusinessError) => {
5706  console.error('Failed to open fd, err is' + err);
5707});
5708```
5709
5710### on('timeUpdate')<sup>(deprecated)</sup>
5711
5712on(type: 'timeUpdate', callback: Callback\<number>): void
5713
5714开始订阅音频播放时间更新事件。处于播放状态时,每隔1s上报一次该事件。
5715
5716> **说明:**
5717> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('timeUpdate')](#ontimeupdate9)替代。
5718
5719**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5720
5721**参数:**
5722
5723| 参数名   | 类型              | 必填 | 说明                                                         |
5724| -------- | ----------------- | ---- | ------------------------------------------------------------ |
5725| type     | string            | 是   | 播放事件回调类型,支持的事件包括:'timeUpdate'。<br>- 'timeUpdate':音频播放时间戳更新,开始播放后自动触发该事件。 |
5726| callback | Callback\<number> | 是   | 播放事件回调方法。回调方法入参为更新后的时间戳。             |
5727
5728**示例:**
5729
5730```ts
5731audioPlayer.on('timeUpdate', (newTime: number) => {    //设置'timeUpdate'事件回调
5732  if (newTime == null) {
5733    console.error('Failed to do timeUpadate');
5734    return;
5735  }
5736  console.info('Succeeded in doing timeUpadate. seekDoneTime: ' + newTime);
5737});
5738audioPlayer.play();    //开始播放后,自动触发时间戳更新事件
5739```
5740
5741### on('audioInterrupt')<sup>(deprecated)</sup>
5742
5743on(type: 'audioInterrupt', callback: (info: audio.InterruptEvent) => void): void
5744
5745监听音频焦点变化事件,参考[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)。
5746
5747> **说明:**
5748> 从API version 9开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('audioInterrupt')](#onaudiointerrupt9)替代。
5749
5750**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5751
5752**参数:**
5753
5754| 参数名   | 类型                                                         | 必填 | 说明                                                     |
5755| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------------------- |
5756| type     | string                                                       | 是   | 音频焦点变化事件回调类型,支持的事件:'audioInterrupt'。 |
5757| callback | function  | 是   | 音频焦点变化事件回调方法。                               |
5758
5759**示例:**
5760
5761```ts
5762import { audio } from '@kit.AudioKit';
5763
5764audioPlayer.on('audioInterrupt', (info: audio.InterruptEvent) => {
5765  console.info('audioInterrupt called,and InterruptEvent info is:' + info)
5766})
5767```
5768
5769### on('error')<sup>(deprecated)</sup>
5770
5771on(type: 'error', callback: ErrorCallback): void
5772
5773开始订阅音频播放错误事件,当上报error错误事件后,用户需处理error事件,退出播放操作。
5774
5775> **说明:**
5776> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('error')](#onerror9)替代。
5777
5778**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5779
5780**参数:**
5781
5782| 参数名   | 类型          | 必填 | 说明                                                         |
5783| -------- | ------------- | ---- | ------------------------------------------------------------ |
5784| type     | string        | 是   | 播放错误事件回调类型,支持的事件包括:'error'。<br>- 'error':音频播放中发生错误,触发该事件。 |
5785| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 播放错误事件回调方法。                                       |
5786
5787**示例:**
5788
5789```ts
5790import { BusinessError } from '@kit.BasicServicesKit';
5791
5792audioPlayer.on('error', (error: BusinessError) => {  //设置'error'事件回调
5793  console.error(`audio error called, error: ${error}`);
5794});
5795audioPlayer.setVolume(3);  //设置volume为无效值,触发'error'事件
5796```
5797
5798## AudioState<sup>(deprecated)</sup>
5799
5800type AudioState = 'idle' | 'playing' | 'paused' | 'stopped' | 'error'
5801
5802音频播放的状态机。可通过state属性获取当前状态。
5803
5804> **说明:**
5805> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayerState](#avplayerstate9)替代。
5806
5807**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer
5808
5809| 类型    | 说明                                           |
5810| ------- | ---------------------------------------------- |
5811| 'idle'    | 音频播放空闲,dataload/reset成功后处于此状态。 |
5812| 'playing' | 音频正在播放,play成功后处于此状态。           |
5813| 'paused'  | 音频暂停播放,pause成功后处于此状态。          |
5814| 'stopped' | 音频播放停止,stop/播放结束后处于此状态。      |
5815| 'error'   | 错误状态。                                     |
5816
5817## VideoPlayer<sup>(deprecated)</sup>
5818
5819> **说明:**
5820> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer](#avplayer9)替代。
5821
5822视频播放管理类,用于管理和播放视频媒体。在调用VideoPlayer的方法前,需要先通过[createVideoPlayer()](#mediacreatevideoplayerdeprecated)构建一个VideoPlayer实例。
5823
5824### 属性
5825
5826**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
5827
5828| 名称                            | 类型                                                   | 只读 | 可选 | 说明                                                         |
5829| ------------------------------- | ------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
5830| 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。 |
5831| 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/> |
5832| loop<sup>8+</sup>               | boolean                                                | 否   | 否   | 视频循环播放属性,设置为'true'表示循环播放。                 |
5833| videoScaleType<sup>9+</sup>     | [VideoScaleType](#videoscaletype9)                     | 否   | 是   | 视频缩放模式。默认值为VIDEO_SCALE_TYPE_FIT。                                               |
5834| audioInterruptMode<sup>9+</sup> | [audio.InterruptMode](../apis-audio-kit/js-apis-audio.md#interruptmode9) | 否   | 是   | 音频焦点模型。                                               |
5835| currentTime<sup>8+</sup>        | number                                                 | 是   | 否   | 视频的当前播放位置,单位为毫秒(ms)。                       |
5836| duration<sup>8+</sup>           | number                                                 | 是   | 否   | 视频时长,单位为毫秒(ms),返回-1表示直播模式。             |
5837| state<sup>8+</sup>              | [VideoPlayState](#videoplaystatedeprecated)                    | 是   | 否   | 视频播放的状态。                                             |
5838| width<sup>8+</sup>              | number                                                 | 是   | 否   | 视频宽,单位为像素(px)。                                   |
5839| height<sup>8+</sup>             | number                                                 | 是   | 否   | 视频高,单位为像素(px)。                                   |
5840
5841### setDisplaySurface<sup>(deprecated)</sup>
5842
5843setDisplaySurface(surfaceId: string, callback: AsyncCallback\<void>): void
5844
5845设置SurfaceId。通过回调函数获取返回值。
5846
5847*注意:SetDisplaySurface需要在设置url和Prepare之间,无音频的视频流必须设置Surface否则Prepare失败。
5848
5849> **说明:**
5850> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.surfaceId](#属性)替代。
5851
5852**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
5853
5854**参数:**
5855
5856| 参数名    | 类型                 | 必填 | 说明                      |
5857| --------- | -------------------- | ---- | ------------------------- |
5858| surfaceId | string               | 是   | SurfaceId                 |
5859| callback  | AsyncCallback\<void> | 是   | 回调函数。当设置SurfaceId成功,err为undefined,否则为错误对象。 |
5860
5861**示例:**
5862
5863```ts
5864import { BusinessError } from '@kit.BasicServicesKit';
5865
5866let surfaceId: string = '';
5867videoPlayer.setDisplaySurface(surfaceId, (err: BusinessError) => {
5868  if (err) {
5869    console.error('Failed to set DisplaySurface!');
5870  } else {
5871    console.info('Succeeded in setting DisplaySurface!');
5872  }
5873});
5874```
5875
5876### setDisplaySurface<sup>(deprecated)</sup>
5877
5878setDisplaySurface(surfaceId: string): Promise\<void>
5879
5880设置SurfaceId。通过Promise获取返回值。
5881
5882*注意:SetDisplaySurface需要在设置url和Prepare之间,无音频的视频流必须设置Surface否则Prepare失败。
5883
5884> **说明:**
5885> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.surfaceId](#属性)替代。
5886
5887**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
5888
5889**参数:**
5890
5891| 参数名    | 类型   | 必填 | 说明      |
5892| --------- | ------ | ---- | --------- |
5893| surfaceId | string | 是   | SurfaceId |
5894
5895**返回值:**
5896
5897| 类型           | 说明                           |
5898| -------------- | ------------------------------ |
5899| Promise\<void> | 设置SurfaceId的Promise返回值。 |
5900
5901**示例:**
5902
5903```ts
5904import { BusinessError } from '@kit.BasicServicesKit';
5905
5906let surfaceId: string = '';
5907videoPlayer.setDisplaySurface(surfaceId).then(() => {
5908  console.info('Succeeded in setting DisplaySurface');
5909}).catch((error: BusinessError) => {
5910  console.error(`video catchCallback, error:${error}`);
5911});
5912```
5913
5914### prepare<sup>(deprecated)</sup>
5915
5916prepare(callback: AsyncCallback\<void>): void
5917
5918准备播放视频。通过回调函数获取返回值。
5919
5920> **说明:**
5921> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.prepare](#prepare9)替代。
5922
5923**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
5924
5925**参数:**
5926
5927| 参数名   | 类型                 | 必填 | 说明                     |
5928| -------- | -------------------- | ---- | ------------------------ |
5929| callback | AsyncCallback\<void> | 是   | 回调函数。当准备播放视频成功,err为undefined,否则为错误对象。|
5930
5931**示例:**
5932
5933```ts
5934import { BusinessError } from '@kit.BasicServicesKit';
5935
5936videoPlayer.prepare((err: BusinessError) => {
5937  if (err) {
5938    console.error('Failed to prepare!');
5939  } else {
5940    console.info('Succeeded in preparing!');
5941  }
5942});
5943```
5944
5945### prepare<sup>(deprecated)</sup>
5946
5947prepare(): Promise\<void>
5948
5949准备播放视频。通过Promise获取返回值。
5950
5951> **说明:**
5952> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.prepare](#prepare9-1)替代。
5953
5954**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
5955
5956**返回值:**
5957
5958| 类型           | 说明                          |
5959| -------------- | ----------------------------- |
5960| Promise\<void> | 准备播放视频的Promise返回值。 |
5961
5962**示例:**
5963
5964```ts
5965import { BusinessError } from '@kit.BasicServicesKit';
5966
5967videoPlayer.prepare().then(() => {
5968  console.info('Succeeded in preparing');
5969}).catch((error: BusinessError) => {
5970  console.error(`video catchCallback, error:${error}`);
5971});
5972```
5973
5974### play<sup>(deprecated)</sup>
5975
5976play(callback: AsyncCallback\<void>): void
5977
5978开始播放视频。通过回调函数获取返回值。
5979
5980> **说明:**
5981> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.play](#play9)替代。
5982
5983**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
5984
5985**参数:**
5986
5987| 参数名   | 类型                 | 必填 | 说明                     |
5988| -------- | -------------------- | ---- | ------------------------ |
5989| callback | AsyncCallback\<void> | 是   | 回调函数。当开始播放视频成功,err为undefined,否则为错误对象。 |
5990
5991**示例:**
5992
5993```ts
5994import { BusinessError } from '@kit.BasicServicesKit';
5995
5996videoPlayer.play((err: BusinessError) => {
5997  if (err) {
5998    console.error('Failed to play!');
5999  } else {
6000    console.info('Succeeded in playing!');
6001  }
6002});
6003```
6004
6005### play<sup>(deprecated)</sup>
6006
6007play(): Promise\<void>
6008
6009开始播放视频。通过Promise获取返回值。
6010
6011> **说明:**
6012> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.play](#play9-1)替代。
6013
6014**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6015
6016**返回值:**
6017
6018| 类型           | 说明                          |
6019| -------------- | ----------------------------- |
6020| Promise\<void> | 开始播放视频的Promise返回值。 |
6021
6022**示例:**
6023
6024```ts
6025import { BusinessError } from '@kit.BasicServicesKit';
6026
6027videoPlayer.play().then(() => {
6028  console.info('Succeeded in playing');
6029}).catch((error: BusinessError) => {
6030  console.error(`video catchCallback, error:${error}`);
6031});
6032```
6033
6034### pause<sup>(deprecated)</sup>
6035
6036pause(callback: AsyncCallback\<void>): void
6037
6038通过回调方式暂停播放视频。通过回调函数获取返回值。
6039
6040> **说明:**
6041> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.pause](#pause9)替代。
6042
6043**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6044
6045**参数:**
6046
6047| 参数名   | 类型                 | 必填 | 说明                     |
6048| -------- | -------------------- | ---- | ------------------------ |
6049| callback | AsyncCallback\<void> | 是   | 回调函数。当暂停播放视频成功,err为undefined,否则为错误对象。 |
6050
6051**示例:**
6052
6053```ts
6054import { BusinessError } from '@kit.BasicServicesKit';
6055
6056videoPlayer.pause((err: BusinessError) => {
6057  if (err) {
6058    console.error('Failed to pause!');
6059  } else {
6060    console.info('Succeeded in pausing!');
6061  }
6062});
6063```
6064
6065### pause<sup>(deprecated)</sup>
6066
6067pause(): Promise\<void>
6068
6069暂停播放视频。通过Promise获取返回值。
6070
6071> **说明:**
6072> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.pause](#pause9-1)替代。
6073
6074**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6075
6076**返回值:**
6077
6078| 类型           | 说明                          |
6079| -------------- | ----------------------------- |
6080| Promise\<void> | 暂停播放视频的Promise返回值。 |
6081
6082**示例:**
6083
6084```ts
6085import { BusinessError } from '@kit.BasicServicesKit';
6086
6087videoPlayer.pause().then(() => {
6088  console.info('Succeeded in pausing');
6089}).catch((error: BusinessError) => {
6090  console.error(`video catchCallback, error:${error}`);
6091});
6092```
6093
6094### stop<sup>(deprecated)</sup>
6095
6096stop(callback: AsyncCallback\<void>): void
6097
6098通过回调方式停止播放视频。通过回调函数获取返回值。
6099
6100> **说明:**
6101> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.stop](#stop9)替代。
6102
6103**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6104
6105**参数:**
6106
6107| 参数名   | 类型                 | 必填 | 说明                     |
6108| -------- | -------------------- | ---- | ------------------------ |
6109| callback | AsyncCallback\<void> | 是   | 回调函数。当停止播放视频成功,err为undefined,否则为错误对象。 |
6110
6111**示例:**
6112
6113```ts
6114import { BusinessError } from '@kit.BasicServicesKit';
6115
6116videoPlayer.stop((err: BusinessError) => {
6117  if (err) {
6118    console.error('Failed to stop!');
6119  } else {
6120    console.info('Succeeded in stopping!');
6121  }
6122});
6123```
6124
6125### stop<sup>(deprecated)</sup>
6126
6127stop(): Promise\<void>
6128
6129停止播放视频。通过Promise获取返回值。
6130
6131> **说明:**
6132> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.stop](#stop9-1)替代。
6133
6134**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6135
6136**返回值:**
6137
6138| 类型           | 说明                          |
6139| -------------- | ----------------------------- |
6140| Promise\<void> | 停止播放视频的Promise返回值。 |
6141
6142**示例:**
6143
6144```ts
6145import { BusinessError } from '@kit.BasicServicesKit';
6146
6147videoPlayer.stop().then(() => {
6148  console.info('Succeeded in stopping');
6149}).catch((error: BusinessError) => {
6150  console.error(`video catchCallback, error:${error}`);
6151});
6152```
6153
6154### reset<sup>(deprecated)</sup>
6155
6156reset(callback: AsyncCallback\<void>): void
6157
6158重置播放视频。通过回调函数获取返回值。
6159
6160> **说明:**
6161> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.reset](#reset9)替代。
6162
6163**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6164
6165**参数:**
6166
6167| 参数名   | 类型                 | 必填 | 说明                     |
6168| -------- | -------------------- | ---- | ------------------------ |
6169| callback | AsyncCallback\<void> | 是   | 回调函数。当重置播放视频成功,err为undefined,否则为错误对象。 |
6170
6171**示例:**
6172
6173```ts
6174import { BusinessError } from '@kit.BasicServicesKit';
6175
6176videoPlayer.reset((err: BusinessError) => {
6177  if (err) {
6178    console.error('Failed to reset!');
6179  } else {
6180    console.info('Succeeded in resetting!');
6181  }
6182});
6183```
6184
6185### reset<sup>(deprecated)</sup>
6186
6187reset(): Promise\<void>
6188
6189重置播放视频。通过Promise获取返回值。
6190
6191> **说明:**
6192> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.reset](#reset9-1)替代。
6193
6194**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6195
6196**返回值:**
6197
6198| 类型           | 说明                          |
6199| -------------- | ----------------------------- |
6200| Promise\<void> | Promise对象。无返回结果的Promise对象。 |
6201
6202**示例:**
6203
6204```ts
6205import { BusinessError } from '@kit.BasicServicesKit';
6206
6207videoPlayer.reset().then(() => {
6208  console.info('Succeeded in resetting');
6209}).catch((error: BusinessError) => {
6210  console.error(`video catchCallback, error:${error}`);
6211});
6212```
6213
6214### seek<sup>(deprecated)</sup>
6215
6216seek(timeMs: number, callback: AsyncCallback\<number>): void
6217
6218跳转到指定播放位置,默认跳转到指定时间点的上一个关键帧。通过回调函数获取返回值。
6219
6220> **说明:**
6221> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。
6222
6223**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6224
6225**参数:**
6226
6227| 参数名   | 类型                   | 必填 | 说明                                                         |
6228| -------- | ---------------------- | ---- | ------------------------------------------------------------ |
6229| timeMs   | number                 | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, duration]。 |
6230| callback | AsyncCallback\<number> | 是   | 回调函数。跳转到指定播放位置成功时,err为undefined,data为获取到的跳转到的播放位置,否则为错误对象。                               |
6231
6232**示例:**
6233
6234```ts
6235import { BusinessError } from '@kit.BasicServicesKit';
6236
6237let videoPlayer: media.VideoPlayer;
6238media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => {
6239  if (video != null) {
6240    videoPlayer = video;
6241    console.info('Succeeded in creating VideoPlayer');
6242  } else {
6243    console.error(`Failed to create VideoPlayer, error:${error}`);
6244  }
6245});
6246
6247let seekTime: number = 5000;
6248videoPlayer.seek(seekTime, (err: BusinessError, result: number) => {
6249  if (err) {
6250    console.error('Failed to do seek!');
6251  } else {
6252    console.info('Succeeded in doing seek!');
6253  }
6254});
6255```
6256
6257### seek<sup>(deprecated)</sup>
6258
6259seek(timeMs: number, mode:SeekMode, callback: AsyncCallback\<number>): void
6260
6261跳转到指定播放位置。通过回调函数获取返回值。
6262
6263> **说明:**
6264> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。
6265
6266**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6267
6268**参数:**
6269
6270| 参数名   | 类型                   | 必填 | 说明                                                         |
6271| -------- | ---------------------- | ---- | ------------------------------------------------------------ |
6272| timeMs   | number                 | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, duration]。 |
6273| mode     | [SeekMode](#seekmode8) | 是   | 跳转模式。                                                   |
6274| callback | AsyncCallback\<number> | 是   | 回调函数。跳转到指定播放位置成功时,err为undefined,data为获取到的跳转到的播放位置,否则为错误对象。                               |
6275
6276**示例:**
6277
6278```ts
6279import { BusinessError } from '@kit.BasicServicesKit';
6280
6281let videoPlayer: media.VideoPlayer | null = null;
6282media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => {
6283  if (video != null) {
6284    videoPlayer = video;
6285    console.info('Succeeded in creating VideoPlayer');
6286  } else {
6287    console.error(`Failed to create VideoPlayer, error:${error}`);
6288  }
6289});
6290let seekTime: number = 5000;
6291if (videoPlayer) {
6292  (videoPlayer as media.VideoPlayer).seek(seekTime, media.SeekMode.SEEK_NEXT_SYNC, (err: BusinessError, result: number) => {
6293    if (err) {
6294      console.error('Failed to do seek!');
6295    } else {
6296      console.info('Succeeded in doing seek!');
6297    }
6298  });
6299}
6300```
6301
6302### seek<sup>(deprecated)</sup>
6303
6304seek(timeMs: number, mode?:SeekMode): Promise\<number>
6305
6306跳转到指定播放位置,如果没有设置mode则跳转到指定时间点的上一个关键帧。通过Promise获取返回值。
6307
6308> **说明:**
6309> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。
6310
6311**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6312
6313**参数:**
6314
6315| 参数名 | 类型                   | 必填 | 说明                                                         |
6316| ------ | ---------------------- | ---- | ------------------------------------------------------------ |
6317| timeMs | number                 | 是   | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, duration]。 |
6318| mode   | [SeekMode](#seekmode8) | 否   | 基于视频I帧的跳转模式,默认为SEEK_PREV_SYNC模式。            |
6319
6320**返回值:**
6321
6322| 类型             | 说明                                        |
6323| ---------------- | ------------------------------------------- |
6324| Promise\<number> | 跳转到指定播放位置的Promise返回值,单位ms。 |
6325
6326**示例:**
6327
6328```ts
6329import { BusinessError } from '@kit.BasicServicesKit';
6330
6331let videoPlayer: media.VideoPlayer | null = null;
6332media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => {
6333  if (video != null) {
6334    videoPlayer = video;
6335    console.info('Succeeded in creating VideoPlayer');
6336  } else {
6337    console.error(`Failed to create VideoPlayer, error:${error}`);
6338  }
6339});
6340let seekTime: number = 5000;
6341if (videoPlayer) {
6342  (videoPlayer as media.VideoPlayer).seek(seekTime).then((seekDoneTime: number) => { // seekDoneTime表示seek完成后的时间点
6343    console.info('Succeeded in doing seek');
6344  }).catch((error: BusinessError) => {
6345    console.error(`video catchCallback, error:${error}`);
6346  });
6347
6348  (videoPlayer as media.VideoPlayer).seek(seekTime, media.SeekMode.SEEK_NEXT_SYNC).then((seekDoneTime: number) => {
6349    console.info('Succeeded in doing seek');
6350  }).catch((error: BusinessError) => {
6351    console.error(`video catchCallback, error:${error}`);
6352  });
6353}
6354```
6355
6356### setVolume<sup>(deprecated)</sup>
6357
6358setVolume(vol: number, callback: AsyncCallback\<void>): void
6359
6360设置音量。通过回调函数获取返回值。
6361
6362> **说明:**
6363> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setVolume](#setvolume9)替代。
6364
6365**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6366
6367**参数:**
6368
6369| 参数名   | 类型                 | 必填 | 说明                                                         |
6370| -------- | -------------------- | ---- | ------------------------------------------------------------ |
6371| vol      | number               | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
6372| callback | AsyncCallback\<void> | 是   | 回调函数。当设置音量成功,err为undefined,否则为错误对象。 |
6373
6374**示例:**
6375
6376```ts
6377import { BusinessError } from '@kit.BasicServicesKit';
6378
6379let vol: number = 0.5;
6380videoPlayer.setVolume(vol, (err: BusinessError) => {
6381  if (err) {
6382    console.error('Failed to set Volume!');
6383  } else {
6384    console.info('Succeeded in setting Volume!');
6385  }
6386});
6387```
6388
6389### setVolume<sup>(deprecated)</sup>
6390
6391setVolume(vol: number): Promise\<void>
6392
6393设置音量。通过Promise获取返回值。
6394
6395> **说明:**
6396> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setVolume](#setvolume9)替代。
6397
6398**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6399
6400**参数:**
6401
6402| 参数名 | 类型   | 必填 | 说明                                                         |
6403| ------ | ------ | ---- | ------------------------------------------------------------ |
6404| vol    | number | 是   | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 |
6405
6406**返回值:**
6407
6408| 类型           | 说明                      |
6409| -------------- | ------------------------- |
6410| Promise\<void> | 设置音量的Promise返回值。 |
6411
6412**示例:**
6413
6414```ts
6415import { BusinessError } from '@kit.BasicServicesKit';
6416
6417let vol: number = 0.5;
6418videoPlayer.setVolume(vol).then(() => {
6419  console.info('Succeeded in setting Volume');
6420}).catch((error: BusinessError) => {
6421  console.error(`video catchCallback, error:${error}`);
6422});
6423```
6424
6425### release<sup>(deprecated)</sup>
6426
6427release(callback: AsyncCallback\<void>): void
6428
6429释放视频资源。通过回调函数获取返回值。
6430
6431> **说明:**
6432> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.release](#release9)替代。
6433
6434**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6435
6436**参数:**
6437
6438| 参数名   | 类型                 | 必填 | 说明                     |
6439| -------- | -------------------- | ---- | ------------------------ |
6440| callback | AsyncCallback\<void> | 是   | 回调函数。当释放视频资源成功,err为undefined,否则为错误对象。 |
6441
6442**示例:**
6443
6444```ts
6445import { BusinessError } from '@kit.BasicServicesKit';
6446
6447videoPlayer.release((err: BusinessError) => {
6448  if (err) {
6449    console.error('Failed to release!');
6450  } else {
6451    console.info('Succeeded in releasing!');
6452  }
6453});
6454```
6455
6456### release<sup>(deprecated)</sup>
6457
6458release(): Promise\<void>
6459
6460释放视频资源。通过Promise获取返回值。
6461
6462> **说明:**
6463> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.release](#release9-1)替代。
6464
6465**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6466
6467**返回值:**
6468
6469| 类型           | 说明                          |
6470| -------------- | ----------------------------- |
6471| Promise\<void> | 释放视频资源的Promise返回值。 |
6472
6473**示例:**
6474
6475```ts
6476import { BusinessError } from '@kit.BasicServicesKit';
6477
6478videoPlayer.release().then(() => {
6479  console.info('Succeeded in releasing');
6480}).catch((error: BusinessError) => {
6481  console.error(`video catchCallback, error:${error}`);
6482});
6483```
6484
6485### getTrackDescription<sup>(deprecated)</sup>
6486
6487getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void
6488
6489获取视频轨道信息。通过回调函数获取返回值。
6490
6491> **说明:**
6492> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9)替代。
6493
6494**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6495
6496**参数:**
6497
6498| 参数名   | 类型                                                         | 必填 | 说明                                       |
6499| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------ |
6500| callback | AsyncCallback\<Array\<[MediaDescription](#mediadescription8)>> | 是   | 回调函数。获取视频轨道信息成功时,err为undefined,data为获取到的视频轨道信息MediaDescription数组,否则为错误对象。 |
6501
6502**示例:**
6503
6504```ts
6505import { BusinessError } from '@kit.BasicServicesKit';
6506
6507videoPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => {
6508  if ((arrList) != null) {
6509    console.info('Succeeded in getting TrackDescription');
6510  } else {
6511    console.error(`Failed to get TrackDescription, error:${error}`);
6512  }
6513});
6514```
6515
6516### getTrackDescription<sup>(deprecated)</sup>
6517
6518getTrackDescription(): Promise\<Array\<MediaDescription>>
6519
6520获取视频轨道信息。通过Promise获取返回值。
6521
6522> **说明:**
6523> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9-1)替代。
6524
6525**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6526
6527**返回值:**
6528
6529| 类型                                                   | 说明                                            |
6530| ------------------------------------------------------ | ----------------------------------------------- |
6531| Promise<Array<[MediaDescription](#mediadescription8)>> | Promise对象,返回获取的视频轨道信息MediaDescription数组。 |
6532
6533**示例:**
6534
6535```ts
6536import { BusinessError } from '@kit.BasicServicesKit';
6537
6538videoPlayer.getTrackDescription().then((arrList: Array<media.MediaDescription>) => {
6539  if (arrList != null) {
6540    console.info('Succeeded in getting TrackDescription');
6541  } else {
6542    console.error('Failed to get TrackDescription');
6543  }
6544}).catch((error: BusinessError) => {
6545  console.error(`video catchCallback, error:${error}`);
6546});
6547```
6548
6549### setSpeed<sup>(deprecated)</sup>
6550
6551setSpeed(speed: number, callback: AsyncCallback\<number>): void
6552
6553设置播放速度。通过回调函数获取返回值。
6554
6555> **说明:**
6556> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setSpeed](#setspeed9)替代。
6557
6558**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6559
6560**参数:**
6561
6562| 参数名   | 类型                   | 必填 | 说明                                                       |
6563| -------- | ---------------------- | ---- | ---------------------------------------------------------- |
6564| speed    | number                 | 是   | 指定播放视频速度,具体见[PlaybackSpeed](#playbackspeed8)。 |
6565| callback | AsyncCallback\<number> | 是   | 回调函数。设置播放速度成功时,err为undefined,data为设置的播放速度,否则为错误对象。                                   |
6566
6567**示例:**
6568
6569```ts
6570import { BusinessError } from '@kit.BasicServicesKit';
6571
6572let videoPlayer: media.VideoPlayer | null = null;
6573media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => {
6574  if (video != null) {
6575    videoPlayer = video;
6576    console.info('Succeeded in creating VideoPlayer');
6577  } else {
6578    console.error(`Failed to create VideoPlayer, error:${error}`);
6579  }
6580});
6581let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X;
6582if (videoPlayer) {
6583  (videoPlayer as media.VideoPlayer).setSpeed(speed, (err: BusinessError, result: number) => {
6584    if (err) {
6585      console.error('Failed to set Speed!');
6586    } else {
6587      console.info('Succeeded in setting Speed!');
6588    }
6589  });
6590}
6591```
6592
6593### setSpeed<sup>(deprecated)</sup>
6594
6595setSpeed(speed: number): Promise\<number>
6596
6597设置播放速度。通过Promise获取返回值。
6598
6599> **说明:**
6600> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setSpeed](#setspeed9)替代。
6601
6602**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6603
6604**参数:**
6605
6606| 参数名 | 类型   | 必填 | 说明                                                       |
6607| ------ | ------ | ---- | ---------------------------------------------------------- |
6608| speed  | number | 是   | 指定播放视频速度,具体见[PlaybackSpeed](#playbackspeed8)。 |
6609
6610**返回值:**
6611
6612| 类型             | 说明                                                         |
6613| ---------------- | ------------------------------------------------------------ |
6614| Promise\<number> | Promise对象,返回设置的播放速度,具体见[PlaybackSpeed](#playbackspeed8)。 |
6615
6616**示例:**
6617
6618```ts
6619import { BusinessError } from '@kit.BasicServicesKit';
6620
6621let videoPlayer: media.VideoPlayer | null = null;
6622media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => {
6623  if (video != null) {
6624    videoPlayer = video;
6625    console.info('Succeeded in creating VideoPlayer');
6626  } else {
6627    console.error(`Failed to create VideoPlayer, error:${error}`);
6628  }
6629});
6630let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X;
6631if (videoPlayer) {
6632  (videoPlayer as media.VideoPlayer).setSpeed(speed).then((result: number) => {
6633    console.info('Succeeded in setting Speed');
6634  }).catch((error: BusinessError) => {
6635    console.error(`Failed to set Speed, error:${error}`);//todo:: error
6636  });
6637}
6638```
6639
6640### on('playbackCompleted')<sup>(deprecated)</sup>
6641
6642on(type: 'playbackCompleted', callback: Callback\<void>): void
6643
6644开始监听视频播放完成事件。
6645
6646> **说明:**
6647> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('stateChange')](#onstatechange9)替代。
6648
6649**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6650
6651**参数:**
6652
6653| 参数名   | 类型     | 必填 | 说明                                                        |
6654| -------- | -------- | ---- | ----------------------------------------------------------- |
6655| type     | string   | 是   | 视频播放完成事件回调类型,支持的事件:'playbackCompleted'。 |
6656| callback | Callback\<void> | 是   | 视频播放完成事件回调方法。                                  |
6657
6658**示例:**
6659
6660```ts
6661videoPlayer.on('playbackCompleted', () => {
6662  console.info('playbackCompleted called!');
6663});
6664```
6665
6666### on('bufferingUpdate')<sup>(deprecated)</sup>
6667
6668on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: number) => void): void
6669
6670开始监听视频缓存更新事件。仅网络播放支持该订阅事件。
6671
6672> **说明:**
6673> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('bufferingUpdate')](#onbufferingupdate9)替代。
6674
6675**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6676
6677**参数:**
6678
6679| 参数名   | 类型     | 必填 | 说明                                                         |
6680| -------- | -------- | ---- | ------------------------------------------------------------ |
6681| type     | string   | 是   | 视频缓存事件回调类型,支持的事件:'bufferingUpdate'。        |
6682| callback | function | 是   | 视频缓存事件回调方法。<br>[BufferingInfoType](#bufferinginfotype8)value值固定为0。 |
6683
6684**示例:**
6685
6686```ts
6687videoPlayer.on('bufferingUpdate', (infoType: media.BufferingInfoType, value: number) => {
6688  console.info('video bufferingInfo type: ' + infoType);
6689  console.info('video bufferingInfo value: ' + value);
6690});
6691```
6692
6693### on('startRenderFrame')<sup>(deprecated)</sup>
6694
6695on(type: 'startRenderFrame', callback: Callback\<void>): void
6696
6697开始监听视频播放首帧送显上报事件。
6698
6699> **说明:**
6700> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('startRenderFrame')](#onstartrenderframe9)替代。
6701
6702**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6703
6704**参数:**
6705
6706| 参数名   | 类型            | 必填 | 说明                                                         |
6707| -------- | --------------- | ---- | ------------------------------------------------------------ |
6708| type     | string          | 是   | 视频播放首帧送显上报事件回调类型,支持的事件:'startRenderFrame'。 |
6709| callback | Callback\<void> | 是   | 视频播放首帧送显上报事件回调方法。                           |
6710
6711**示例:**
6712
6713```ts
6714videoPlayer.on('startRenderFrame', () => {
6715  console.info('startRenderFrame called!');
6716});
6717```
6718
6719### on('videoSizeChanged')<sup>(deprecated)</sup>
6720
6721on(type: 'videoSizeChanged', callback: (width: number, height: number) => void): void
6722
6723开始监听视频播放宽高变化事件。
6724
6725> **说明:**
6726> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('videoSizeChange')](#onvideosizechange9)替代。
6727
6728**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6729
6730**参数:**
6731
6732| 参数名   | 类型     | 必填 | 说明                                                         |
6733| -------- | -------- | ---- | ------------------------------------------------------------ |
6734| type     | string   | 是   | 视频播放宽高变化事件回调类型,支持的事件:'videoSizeChanged'。 |
6735| callback | function | 是   | 视频播放宽高变化事件回调方法,width表示宽,height表示高。    |
6736
6737**示例:**
6738
6739```ts
6740videoPlayer.on('videoSizeChanged', (width: number, height: number) => {
6741  console.info('video width is: ' + width);
6742  console.info('video height is: ' + height);
6743});
6744```
6745### on('audioInterrupt')<sup>(deprecated)</sup>
6746
6747on(type: 'audioInterrupt', callback: (info: audio.InterruptEvent) => void): void
6748
6749监听音频焦点变化事件,参考[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)。
6750
6751> **说明:**
6752> 从API version 9开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('audioInterrupt')](#onaudiointerrupt9)替代。
6753
6754**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6755
6756**参数:**
6757
6758| 参数名   | 类型                                                         | 必填 | 说明                                                     |
6759| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------------------- |
6760| type     | string                                                       | 是   | 音频焦点变化事件回调类型,支持的事件:'audioInterrupt'。 |
6761| callback | function | 是   | 音频焦点变化事件回调方法。                               |
6762
6763**示例:**
6764
6765```ts
6766import { audio } from '@kit.AudioKit';
6767
6768videoPlayer.on('audioInterrupt', (info: audio.InterruptEvent) => {
6769  console.info('audioInterrupt called,and InterruptEvent info is:' + info)
6770})
6771```
6772
6773### on('error')<sup>(deprecated)</sup>
6774
6775on(type: 'error', callback: ErrorCallback): void
6776
6777开始监听视频播放错误事件,当上报error错误事件后,用户需处理error事件,退出播放操作。
6778
6779> **说明:**
6780> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('error')](#onerror9)替代。
6781
6782**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6783
6784**参数:**
6785
6786| 参数名   | 类型          | 必填 | 说明                                                         |
6787| -------- | ------------- | ---- | ------------------------------------------------------------ |
6788| type     | string        | 是   | 播放错误事件回调类型,支持的事件包括:'error'。<br>- 'error':视频播放中发生错误,触发该事件。 |
6789| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 播放错误事件回调方法。                                       |
6790
6791**示例:**
6792
6793```ts
6794import { BusinessError } from '@kit.BasicServicesKit';
6795
6796videoPlayer.on('error', (error: BusinessError) => {  // 设置'error'事件回调
6797  console.error(`video error called, error: ${error}`);
6798});
6799videoPlayer.url = 'fd://error';  //设置错误的播放地址,触发'error'事件
6800```
6801
6802## VideoPlayState<sup>(deprecated)</sup>
6803
6804type VideoPlayState = 'idle' | 'prepared' | 'playing' | 'paused' | 'stopped' | 'error'
6805
6806视频播放的状态机,可通过state属性获取当前状态。
6807
6808> **说明:**
6809> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayerState](#avplayerstate9)替代。
6810
6811**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer
6812
6813| 类型     | 说明           |
6814| -------- | -------------- |
6815| 'idle'     | 视频播放空闲。 |
6816| 'prepared' | 视频播放准备。 |
6817| 'playing'  | 视频正在播放。 |
6818| 'paused'   | 视频暂停播放。 |
6819| 'stopped'  | 视频播放停止。 |
6820| 'error'    | 错误状态。     |
6821
6822## AudioRecorder<sup>(deprecated)</sup>
6823
6824> **说明:**
6825> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder](#avrecorder9)替代。
6826
6827音频录制管理类,用于录制音频媒体。在调用AudioRecorder的方法前,需要先通过[createAudioRecorder()](#mediacreateaudiorecorderdeprecated) 构建一个AudioRecorder实例。
6828
6829### prepare<sup>(deprecated)</sup>
6830
6831prepare(config: AudioRecorderConfig): void
6832
6833录音准备。
6834
6835> **说明:**
6836> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.prepare](#prepare9-2)替代。
6837
6838**需要权限:** ohos.permission.MICROPHONE
6839
6840**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
6841
6842**参数:**
6843
6844| 参数名 | 类型                                        | 必填 | 说明                                                         |
6845| ------ | ------------------------------------------- | ---- | ------------------------------------------------------------ |
6846| config | [AudioRecorderConfig](#audiorecorderconfigdeprecated) | 是   | 配置录音的相关参数,包括音频输出URI、编码格式、采样率、声道数、输出格式等。 |
6847
6848**错误码:**
6849
6850以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
6851
6852| 错误码ID | 错误信息              |
6853| -------- | --------------------- |
6854| 201      | permission denied     |
6855
6856**示例:**
6857
6858```ts
6859let audioRecorderConfig: media.AudioRecorderConfig = {
6860  audioEncoder : media.AudioEncoder.AAC_LC,
6861  audioEncodeBitRate : 22050,
6862  audioSampleRate : 22050,
6863  numberOfChannels : 2,
6864  format : media.AudioOutputFormat.AAC_ADTS,
6865  uri : 'fd://1',       // 文件需先由调用者创建,并给予适当的权限
6866  location : { latitude : 30, longitude : 130},
6867}
6868audioRecorder.on('prepare', () => {    //设置'prepare'事件回调
6869  console.info('prepare called');
6870});
6871audioRecorder.prepare(audioRecorderConfig);
6872```
6873
6874### start<sup>(deprecated)</sup>
6875
6876start(): void
6877
6878开始录制,需在'prepare'事件成功触发后,才能调用start方法。
6879
6880> **说明:**
6881> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.start](#start9)替代。
6882
6883**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
6884
6885**示例:**
6886
6887```ts
6888audioRecorder.on('start', () => {    //设置'start'事件回调
6889  console.info('audio recorder start called');
6890});
6891audioRecorder.start();
6892```
6893
6894### pause<sup>(deprecated)</sup>
6895
6896pause():void
6897
6898暂停录制,需要在'start'事件成功触发后,才能调用pause方法。
6899
6900> **说明:**
6901> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.pause](#pause9-2)替代。
6902
6903**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
6904
6905**示例:**
6906
6907```ts
6908audioRecorder.on('pause', () => {    //设置'pause'事件回调
6909  console.info('audio recorder pause called');
6910});
6911audioRecorder.pause();
6912```
6913
6914### resume<sup>(deprecated)</sup>
6915
6916resume():void
6917
6918恢复录制,需要在'pause'事件成功触发后,才能调用resume方法。
6919
6920> **说明:**
6921> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.resume](#resume9)替代。
6922
6923**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
6924
6925**示例:**
6926
6927```ts
6928audioRecorder.on('resume', () => {    //设置'resume'事件回调
6929  console.info('audio recorder resume called');
6930});
6931audioRecorder.resume();
6932```
6933
6934### stop<sup>(deprecated)</sup>
6935
6936stop(): void
6937
6938停止录音。
6939
6940> **说明:**
6941> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.stop](#stop9-2)替代。
6942
6943**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
6944
6945**示例:**
6946
6947```ts
6948audioRecorder.on('stop', () => {    //设置'stop'事件回调
6949  console.info('audio recorder stop called');
6950});
6951audioRecorder.stop();
6952```
6953
6954### release<sup>(deprecated)</sup>
6955
6956release(): void
6957
6958释放录音资源。
6959
6960> **说明:**
6961> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.release](#release9-2)替代。
6962
6963**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
6964
6965**示例:**
6966
6967```ts
6968audioRecorder.on('release', () => {    //设置'release'事件回调
6969  console.info('audio recorder release called');
6970});
6971audioRecorder.release();
6972audioRecorder = undefined;
6973```
6974
6975### reset<sup>(deprecated)</sup>
6976
6977reset(): void
6978
6979重置录音。
6980
6981进行重置录音之前,需要先调用stop()停止录音。重置录音之后,需要调用prepare()设置录音参数项,才能再次进行录音。
6982
6983> **说明:**
6984> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.reset](#reset9-2)替代。
6985
6986**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
6987
6988**示例:**
6989
6990```ts
6991audioRecorder.on('reset', () => {    //设置'reset'事件回调
6992  console.info('audio recorder reset called');
6993});
6994audioRecorder.reset();
6995```
6996
6997### on('prepare' | 'start' | 'pause' | 'resume' | 'stop' | 'release' | 'reset')<sup>(deprecated)</sup>
6998
6999on(type: 'prepare' | 'start' | 'pause' | 'resume' | 'stop' | 'release' | 'reset', callback: () => void): void
7000
7001开始订阅音频录制事件。
7002
7003> **说明:**
7004> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.on('stateChange')](#onstatechange9-1)替代。
7005
7006**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7007
7008**参数:**
7009
7010| 参数名   | 类型     | 必填 | 说明                                                         |
7011| -------- | -------- | ---- | ------------------------------------------------------------ |
7012| 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调用,音频重置为初始状态,触发该事件。 |
7013| callback | ()=>void | 是   | 录制事件回调方法。                                           |
7014
7015**示例:**
7016
7017```ts
7018import { BusinessError } from '@kit.BasicServicesKit';
7019
7020let audioRecorder: media.AudioRecorder = media.createAudioRecorder();  // 创建一个音频录制实例
7021let audioRecorderConfig: media.AudioRecorderConfig = {
7022  audioEncoder : media.AudioEncoder.AAC_LC,
7023  audioEncodeBitRate : 22050,
7024  audioSampleRate : 22050,
7025  numberOfChannels : 2,
7026  format : media.AudioOutputFormat.AAC_ADTS,
7027  uri : 'fd://xx',  // 文件需先由调用者创建,并给予适当的权限
7028  location : { latitude : 30, longitude : 130}
7029}
7030audioRecorder.on('error', (error: BusinessError) => {  // 设置'error'事件回调
7031  console.error(`audio error called, error: ${error}`);
7032});
7033audioRecorder.on('prepare', () => {  // 设置'prepare'事件回调
7034  console.info('prepare called');
7035  audioRecorder.start();  // 开始录制,并触发'start'事件回调
7036});
7037audioRecorder.on('start', () => {  // 设置'start'事件回调
7038  console.info('audio recorder start called');
7039});
7040audioRecorder.on('pause', () => {  // 设置'pause'事件回调
7041  console.info('audio recorder pause called');
7042});
7043audioRecorder.on('resume', () => {  // 设置'resume'事件回调
7044  console.info('audio recorder resume called');
7045});
7046audioRecorder.on('stop', () => {  // 设置'stop'事件回调
7047  console.info('audio recorder stop called');
7048});
7049audioRecorder.on('release', () => {  // 设置'release'事件回调
7050  console.info('audio recorder release called');
7051});
7052audioRecorder.on('reset', () => {  // 设置'reset'事件回调
7053  console.info('audio recorder reset called');
7054});
7055audioRecorder.prepare(audioRecorderConfig)  // 设置录制参数 ,并触发'prepare'事件回调
7056```
7057
7058### on('error')<sup>(deprecated)</sup>
7059
7060on(type: 'error', callback: ErrorCallback): void
7061
7062开始订阅音频录制错误事件,当上报error错误事件后,用户需处理error事件,退出录制操作。
7063
7064> **说明:**
7065> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.on('error')](#onerror9-1)替代。
7066
7067**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7068
7069**参数:**
7070
7071| 参数名   | 类型          | 必填 | 说明                                                         |
7072| -------- | ------------- | ---- | ------------------------------------------------------------ |
7073| type     | string        | 是   | 录制错误事件回调类型'error'。<br/>-&nbsp;'error':音频录制过程中发生错误,触发该事件。 |
7074| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 录制错误事件回调方法。                                       |
7075
7076**示例:**
7077
7078```ts
7079import { BusinessError } from '@kit.BasicServicesKit';
7080
7081let audioRecorderConfig: media.AudioRecorderConfig = {
7082  audioEncoder : media.AudioEncoder.AAC_LC,
7083  audioEncodeBitRate : 22050,
7084  audioSampleRate : 22050,
7085  numberOfChannels : 2,
7086  format : media.AudioOutputFormat.AAC_ADTS,
7087  uri : 'fd://xx',   // 文件需先由调用者创建,并给予适当的权限
7088  location : { latitude : 30, longitude : 130}
7089}
7090audioRecorder.on('error', (error: BusinessError) => {  // 设置'error'事件回调
7091  console.error(`audio error called, error: ${error}`);
7092});
7093audioRecorder.prepare(audioRecorderConfig);  // prepare不设置参数,触发'error'事件
7094```
7095
7096## AudioRecorderConfig<sup>(deprecated)</sup>
7097
7098> **说明:**
7099> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorderConfig](#avrecorderconfig9)替代。
7100
7101表示音频的录音配置。
7102
7103**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7104
7105| 名称                                | 类型                                         | 必填 | 说明                                                         |
7106| ----------------------------------- | -------------------------------------------- | ---- | ------------------------------------------------------------ |
7107| audioEncoder                        | [AudioEncoder](#audioencoderdeprecated)                | 否   | 音频编码格式,默认设置为AAC_LC。<br/>**说明:** 从API version 8开始废弃,建议使用audioEncoderMime替代。 |
7108| audioEncodeBitRate                  | number                                       | 否   | 音频编码比特率,默认值为48000。                              |
7109| audioSampleRate                     | number                                       | 否   | 音频采集采样率,默认值为48000。<br>可变比特率模式,码率仅作参考。                              |
7110| numberOfChannels                    | number                                       | 否   | 音频采集声道数,默认值为2。                                  |
7111| format                              | [AudioOutputFormat](#audiooutputformatdeprecated)      | 否   | 音频输出封装格式,默认设置为MPEG_4。<br/>**说明:** 从API version 8开始废弃,建议使用fileFormat替代。 |
7112| location                            | [Location](#location)                        | 否   | 音频采集的地理位置。                                         |
7113| uri                                 | string                                       | 是   | 音频输出URI:fd://xx&nbsp;(fd&nbsp;number)<br/>![](figures/zh-cn_image_url.png) <br/>文件需要由调用者创建,并赋予适当的权限。 |
7114| audioEncoderMime<sup>8+</sup>       | [CodecMimeType](#codecmimetype8)             | 否   | 容器编码格式。                                               |
7115| fileFormat<sup>8+</sup>             | [ContainerFormatType](#containerformattype8) | 否   | 音频编码格式。                                               |
7116
7117## AudioEncoder<sup>(deprecated)</sup>
7118
7119> **说明:**
7120> 从API version 6开始支持,从API version 8开始废弃,建议使用[CodecMimeType](#codecmimetype8)替代。
7121
7122表示音频编码格式的枚举。
7123
7124**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7125
7126| 名称    | 值   | 说明                                                         |
7127| ------- | ---- | ------------------------------------------------------------ |
7128| DEFAULT | 0    | 默认编码格式。<br/>仅做接口定义,暂不支持使用。              |
7129| AMR_NB  | 1    | AMR-NB(Adaptive Multi Rate-Narrow Band Speech Codec) 编码格式。<br/>仅做接口定义,暂不支持使用。 |
7130| AMR_WB  | 2    | AMR-WB(Adaptive Multi Rate-Wide Band Speech Codec) 编码格式。<br/>仅做接口定义,暂不支持使用。 |
7131| AAC_LC  | 3    | AAC-LC(Advanced&nbsp;Audio&nbsp;Coding&nbsp;Low&nbsp;Complexity)编码格式。 |
7132| HE_AAC  | 4    | HE_AAC(High-Efficiency Advanced&nbsp;Audio&nbsp;Coding)编码格式。<br/>仅做接口定义,暂不支持使用。 |
7133
7134## AudioOutputFormat<sup>(deprecated)</sup>
7135
7136> **说明:**
7137> 从API version 6开始支持,从API version 8 开始废弃,建议使用[ContainerFormatType](#containerformattype8)替代。
7138
7139表示音频封装格式的枚举。
7140
7141**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder
7142
7143| 名称     | 值   | 说明                                                         |
7144| -------- | ---- | ------------------------------------------------------------ |
7145| DEFAULT  | 0    | 默认封装格式。<br/>仅做接口定义,暂不支持使用。              |
7146| MPEG_4   | 2    | 封装为MPEG-4格式。                                           |
7147| AMR_NB   | 3    | 封装为AMR_NB格式。<br/>仅做接口定义,暂不支持使用。          |
7148| AMR_WB   | 4    | 封装为AMR_WB格式。<br/>仅做接口定义,暂不支持使用。          |
7149| AAC_ADTS | 6    | 封装为ADTS(Audio&nbsp;Data&nbsp;Transport&nbsp;Stream)格式,是AAC音频的传输流格式。 |
7150
7151
7152## media.createAVImageGenerator<sup>12+</sup>
7153
7154createAVImageGenerator(callback: AsyncCallback\<AVImageGenerator>): void
7155
7156创建AVImageGenerator实例,通过回调函数获取返回值。
7157
7158**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7159
7160**参数:**
7161
7162| 参数名   | 类型                                  | 必填 | 说明                                                         |
7163| -------- | ------------------------------------- | ---- | ------------------------------------------------------------ |
7164| callback | AsyncCallback\<[AVImageGenerator](#avimagegenerator12)> | 是   | 回调函数。异步返回AVImageGenerator实例,失败时返回null。可用于获取视频缩略图。 |
7165
7166**错误码:**
7167
7168以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7169
7170| 错误码ID | 错误信息                       |
7171| -------- | ------------------------------ |
7172| 5400101  | No memory. Returned by callback. |
7173
7174**示例:**
7175
7176```ts
7177import { BusinessError } from '@kit.BasicServicesKit';
7178
7179let avImageGenerator: media.AVImageGenerator;
7180media.createAVImageGenerator((error: BusinessError, generator: media.AVImageGenerator) => {
7181  if (generator != null) {
7182    avImageGenerator = generator;
7183    console.info('Succeeded in creating AVImageGenerator');
7184  } else {
7185    console.error(`Failed to creat AVImageGenerator, error message:${error.message}`);
7186  }
7187});
7188```
7189
7190## media.createAVImageGenerator<sup>12+</sup>
7191
7192createAVImageGenerator(): Promise\<AVImageGenerator>
7193
7194创建AVImageGenerator对象,通过Promise获取返回值。
7195
7196**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7197
7198**返回值:**
7199
7200| 类型                            | 说明                                                         |
7201| ------------------------------- | ------------------------------------------------------------ |
7202| Promise\<[AVImageGenerator](#avimagegenerator12)> | Promise对象。异步返回AVImageGenerator实例,失败时返回null。可用于获取视频缩略图。 |
7203
7204**错误码:**
7205
7206以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7207
7208| 错误码ID | 错误信息                      |
7209| -------- | ----------------------------- |
7210| 5400101  | No memory. Returned by promise. |
7211
7212**示例:**
7213
7214```ts
7215import { BusinessError } from '@kit.BasicServicesKit';
7216
7217let avImageGenerator: media.AVImageGenerator;
7218media.createAVImageGenerator().then((generator: media.AVImageGenerator) => {
7219  if (generator != null) {
7220    avImageGenerator = generator;
7221    console.info('Succeeded in creating AVImageGenerator');
7222  } else {
7223    console.error('Failed to creat AVImageGenerator');
7224  }
7225}).catch((error: BusinessError) => {
7226  console.error(`Failed to creat AVImageGenerator, error message:${error.message}`);
7227});
7228```
7229
7230## AVImageGenerator<sup>12+</sup>
7231
7232视频缩略图获取类,用于从视频资源中获取缩略图。在调用AVImageGenerator的方法前,需要先通过[createAVImageGenerator()](#mediacreateavimagegenerator12)构建一个AVImageGenerator实例。
7233
7234获取视频缩略图的demo可参考:[获取视频缩略图开发指导](../../media/media/avimagegenerator.md)。
7235
7236### 属性
7237
7238**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7239
7240| 名称                                                | 类型                                                         | 可读 | 可写 | 说明                                                         |
7241| --------------------------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
7242| 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。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致视频缩略图数据获取异常。 |
7243
7244### fetchFrameByTime<sup>12+</sup>
7245
7246fetchFrameByTime(timeUs: number, options: AVImageQueryOptions, param: PixelMapParams, callback: AsyncCallback\<image.PixelMap>): void
7247
7248异步方式获取视频缩略图。通过注册回调函数获取返回值。
7249
7250**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7251
7252**参数:**
7253
7254| 参数名   | 类型                                         | 必填 | 说明                                |
7255| -------- | -------------------------------------------- | ---- | ----------------------------------- |
7256| timeUs | number                   | 是   | 需要获取的缩略图在视频中的时间点,单位为微秒(μs)。 |
7257| options | [AVImageQueryOptions](#avimagequeryoptions12)     | 是   | 需要获取的缩略图时间点与视频帧的对应关系。 |
7258| param | [PixelMapParams](#pixelmapparams12)     | 是   | 需要获取的缩略图的格式参数。 |
7259| callback | AsyncCallback\<[image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7)>   | 是   | 回调函数。获取缩略图成功时,err为undefined,data为PixelMap实例,否则为错误对象。 |
7260
7261**错误码:**
7262
7263以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7264
7265| 错误码ID | 错误信息                                   |
7266| -------- | ------------------------------------------ |
7267| 5400102  | Operation not allowed. Returned by callback. |
7268| 5400106  | Unsupported format. Returned by callback.  |
7269
7270**示例:**
7271
7272```ts
7273import { BusinessError } from '@kit.BasicServicesKit';
7274import { media } from '@kit.MediaKit';
7275import { image } from '@kit.ImageKit';
7276
7277let avImageGenerator: media.AVImageGenerator | undefined = undefined;
7278let pixel_map : image.PixelMap | undefined = undefined;
7279
7280// 初始化入参
7281let timeUs: number = 0
7282
7283let queryOption: media.AVImageQueryOptions = media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC
7284
7285let param: media.PixelMapParams = {
7286  width : 300,
7287  height : 300,
7288}
7289
7290// 获取缩略图
7291media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => {
7292  if(generator != null){
7293    avImageGenerator = generator;
7294    console.info(`Succeeded in creating AVImageGenerator`);
7295    avImageGenerator.fetchFrameByTime(timeUs, queryOption, param, (error: BusinessError, pixelMap) => {
7296      if (error) {
7297        console.error(`Failed to fetch FrameByTime, err = ${JSON.stringify(error)}`)
7298        return
7299      }
7300      pixel_map = pixelMap;
7301    });
7302  } else {
7303    console.error(`Failed to creat AVImageGenerator, error message:${err.message}`);
7304  };
7305});
7306```
7307
7308### fetchFrameByTime<sup>12+</sup>
7309
7310fetchFrameByTime(timeUs: number, options: AVImageQueryOptions, param: PixelMapParams): Promise<image.PixelMap>
7311
7312异步方式获取视频缩略图。通过Promise获取返回值。
7313
7314**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7315
7316**参数:**
7317
7318| 参数名   | 类型                                         | 必填 | 说明                                |
7319| -------- | -------------------------------------------- | ---- | ----------------------------------- |
7320| timeUs | number                   | 是   | 需要获取的缩略图在视频中的时间点,单位为微秒(μs)。 |
7321| options | [AVImageQueryOptions](#avimagequeryoptions12)     | 是   | 需要获取的缩略图时间点与视频帧的对应关系。 |
7322| param | [PixelMapParams](#pixelmapparams12)    | 是   | 需要获取的缩略图的格式参数。 |
7323
7324**返回值:**
7325
7326| 类型           | 说明                                     |
7327| -------------- | ---------------------------------------- |
7328| Promise\<[image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7)> | Promise对象,返回视频缩略图对象。 |
7329
7330**错误码:**
7331
7332以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7333
7334| 错误码ID | 错误信息                                  |
7335| -------- | ----------------------------------------- |
7336| 5400102  | Operation not allowed. Returned by promise. |
7337| 5400106  | Unsupported format. Returned by promise.  |
7338
7339**示例:**
7340
7341```ts
7342import { BusinessError } from '@kit.BasicServicesKit';
7343import { media } from '@kit.MediaKit';
7344import { image } from '@kit.ImageKit';
7345
7346let avImageGenerator: media.AVImageGenerator | undefined = undefined;
7347let pixel_map : image.PixelMap | undefined = undefined;
7348
7349// 初始化入参
7350let timeUs: number = 0
7351
7352let queryOption: media.AVImageQueryOptions = media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC
7353
7354let param: media.PixelMapParams = {
7355  width : 300,
7356  height : 300,
7357}
7358
7359// 获取缩略图
7360media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => {
7361  if(generator != null){
7362    avImageGenerator = generator;
7363    console.info(`Succeeded in creating AVImageGenerator`);
7364    avImageGenerator.fetchFrameByTime(timeUs, queryOption, param).then((pixelMap: image.PixelMap) => {
7365      pixel_map = pixelMap;
7366    }).catch((error: BusinessError) => {
7367      console.error(`Failed to fetch FrameByTime, error message:${error.message}`);
7368    });
7369  } else {
7370    console.error(`Failed to creat AVImageGenerator, error message:${err.message}`);
7371  };
7372});
7373```
7374
7375### release<sup>12+</sup>
7376
7377release(callback: AsyncCallback\<void>): void
7378
7379异步方式释放资源。通过注册回调函数获取返回值。
7380
7381**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7382
7383**参数:**
7384
7385| 参数名   | 类型                                         | 必填 | 说明                                |
7386| -------- | -------------------------------------------- | ---- | ----------------------------------- |
7387| callback | AsyncCallback\<void>                   | 是   | 回调函数。当释放资源成功,err为undefined,否则为错误对象。 |
7388
7389**错误码:**
7390
7391以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7392
7393| 错误码ID | 错误信息                                   |
7394| -------- | ------------------------------------------ |
7395| 5400102  | Operation not allowed. Returned by callback. |
7396
7397**示例:**
7398
7399```ts
7400import { BusinessError } from '@kit.BasicServicesKit';
7401import { media } from '@kit.MediaKit';
7402
7403let avImageGenerator: media.AVImageGenerator | undefined = undefined;
7404
7405//释放资源
7406media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => {
7407  if(generator != null){
7408    avImageGenerator = generator;
7409    console.info(`Succeeded in creating AVImageGenerator`);
7410    avImageGenerator.release((error: BusinessError) => {
7411      if (error) {
7412        console.error(`Failed to release, err = ${JSON.stringify(error)}`);
7413        return;
7414      }
7415      console.info(`Succeeded in releasing`);
7416    });
7417  } else {
7418    console.error(`Failed to creat AVImageGenerator, error message:${err.message}`);
7419  };
7420});
7421```
7422
7423### release<sup>12+</sup>
7424
7425release(): Promise\<void>
7426
7427异步方式释放资源。通过Promise获取返回值。
7428
7429**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7430
7431**返回值:**
7432
7433| 类型           | 说明                                     |
7434| -------------- | ---------------------------------------- |
7435| Promise\<void> | 异步方式释放资源release方法的Promise返回值。 |
7436
7437**错误码:**
7438
7439以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7440
7441| 错误码ID | 错误信息                                  |
7442| -------- | ----------------------------------------- |
7443| 5400102  | Operation not allowed. Returned by promise. |
7444
7445**示例:**
7446
7447```ts
7448import { BusinessError } from '@kit.BasicServicesKit';
7449import { media } from '@kit.MediaKit';
7450
7451let avImageGenerator: media.AVImageGenerator | undefined = undefined;
7452
7453//释放资源
7454media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => {
7455  if(generator != null){
7456    avImageGenerator = generator;
7457    console.info(`Succeeded in creating AVImageGenerator`);
7458    avImageGenerator.release().then(() => {
7459      console.info(`Succeeded in releasing.`);
7460    }).catch((error: BusinessError) => {
7461      console.error(`Failed to release, error message:${error.message}`);
7462    });
7463  } else {
7464    console.error(`Failed to creat AVImageGenerator, error message:${err.message}`);
7465  };
7466});
7467```
7468
7469## AVImageQueryOptions<sup>12+</sup>
7470
7471需要获取的缩略图时间点与视频帧的对应关系。
7472
7473在获取视频缩略图时,传入的时间点与实际取得的视频帧所在时间点不一定相等,需要指定传入的时间点与实际取得的视频帧的时间关系。
7474
7475**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7476
7477| 名称                     | 值              | 说明                                                         |
7478| ------------------------ | --------------- | ------------------------------------------------------------ |
7479| AV_IMAGE_QUERY_NEXT_SYNC       | 0   | 表示选取传入时间点或之后的关键帧。                       |
7480| AV_IMAGE_QUERY_PREVIOUS_SYNC        | 1    | 表示选取传入时间点或之前的关键帧。 |
7481| AV_IMAGE_QUERY_CLOSEST_SYNC        | 2    | 表示选取离传入时间点最近的关键帧。                 |
7482| AV_IMAGE_QUERY_CLOSEST             | 3    | 表示选取离传入时间点最近的帧,该帧不一定是关键帧。 |
7483
7484## PixelMapParams<sup>12+</sup>
7485
7486获取视频缩略图时,输出缩略图的格式参数。
7487
7488**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator
7489
7490| 名称   | 类型   | 可读 | 可写 | 说明                                                                            |
7491|--------|--------|------|------|---------------------------------------------------------------------------------|
7492| width  | number | 是   | 是   | 输出的缩略图宽度。应保证大于0且不大于原始视频宽度。否则返回的缩略图不会进行缩放。 |
7493| height | number | 是   | 是   | 输出的缩略图高度。应保证大于0且不大于原始视频高度。否则返回的缩略图不会进行缩放。 |
7494
7495## media.createMediaSourceWithUrl<sup>12+</sup>
7496
7497createMediaSourceWithUrl(url: string, headers?: Record\<string, string>): MediaSource
7498
7499创建流媒体预下载媒体来源实例方法。
7500
7501**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。
7502
7503**系统能力:** SystemCapability.Multimedia.Media.Core
7504
7505**参数:**
7506
7507| 参数名   | 类型     | 必填 | 说明                 |
7508| -------- | -------- | ---- | -------------------- |
7509| url | string | 是   | - 流媒体预下载媒体来源url,支持的流媒体格式:HLS、HTTP-FLV、Dash、Https。<br> - 本地m3u8的fd路径。  |
7510| headers | Record\<string, string> | 否   | 支持流媒体预下载HttpHeader自定义。 |
7511
7512**返回值:**
7513
7514| 类型           | 说明                                       |
7515| -------------- | ------------------------------------------ |
7516| [MediaSource](#mediasource12) | MediaSource返回值。 |
7517
7518**错误码:**
7519
7520以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)
7521
7522| 错误码ID | 错误信息                                  |
7523| -------- | ----------------------------------------- |
7524| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.      |
7525| 5400101  | No memory.  |
7526
7527**示例1:**
7528
7529```ts
7530import { media } from '@kit.MediaKit';
7531
7532let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"};
7533let mediaSource : media.MediaSource = media.createMediaSourceWithUrl("http://xxx",  headers);
7534```
7535
7536**示例2:**
7537
7538```ts
7539import { media } from '@kit.MediaKit';
7540import { common } from '@kit.AbilityKit';
7541import { resourceManager } from '@kit.LocalizationKit';
7542
7543let context = getContext(this) as common.UIAbilityContext;
7544let mgr = context.resourceManager;
7545let fileDescriptor = await mgr.getRawFd("xxx.m3u8");
7546
7547let fd:string = fileDescriptor.fd.toString();
7548let offset:string = fileDescriptor.offset.toString();
7549let length:string = fileDescriptor.length.toString();
7550let fdUrl:string = "fd://" + fd + "?offset=" + offset + "&size=" + length;
7551
7552let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"};
7553let mediaSource : media.MediaSource = media.createMediaSourceWithUrl(fdUrl,  headers);
7554
7555let mimeType : media.AVMimeTypes = media.AVMimeTypes.APPLICATION_M3U8;
7556mediaSource.setMimeType(mimeType);
7557
7558```
7559
7560## MediaSource<sup>12+</sup>
7561
7562媒体数据信息。来源自[createMediaSourceWithUrl](#mediacreatemediasourcewithurl12)。
7563
7564**系统能力:** SystemCapability.Multimedia.Media.Core
7565
7566### setMimeType<sup>12+</sup>
7567
7568setMimeType(mimeType: AVMimeTypes): void
7569
7570设置媒体MIME类型,以帮助播放器处理扩展的媒体源。
7571
7572**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
7573
7574**系统能力:** SystemCapability.Multimedia.Media.Core
7575
7576**参数:**
7577
7578| 参数名   | 类型     | 必填 | 说明                 |
7579| -------- | -------- | ---- | -------------------- |
7580| mimeType | [AVMimeTypes](#mediasource12) | 是   | 媒体MIME类型。 |
7581
7582## AVMimeTypes<sup>12+</sup>
7583
7584媒体MIME类型,通过[setMimeType](#setmimetype12)设置。
7585
7586**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
7587
7588**系统能力:** SystemCapability.Multimedia.Media.Core
7589
7590
7591| 名称       | 值   | 说明                                                         |
7592| ---------- | ---- | ------------------------------------------------------------ |
7593| APPLICATION_M3U8       | application/m3u8    | 表示m3u8本地文件。 |
7594
7595
7596## PlaybackStrategy<sup>12+</sup>
7597
7598播放策略。
7599
7600**系统能力:** SystemCapability.Multimedia.Media.Core
7601
7602| 名称  | 类型     | 必填 | 说明                 |
7603| -------- | -------- | ---- | -------------------- |
7604| preferredWidth| number | 否   | 播放策略首选宽度,int类型,如1080。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
7605| preferredHeight | number | 否   | 播放策略首选高度,int类型,如1920。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
7606| preferredBufferDuration | number | 否  | 播放策略首选缓冲持续时间,单位s,取值范围1-20。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
7607| preferredHdr | boolean | 否   | 播放策略true是hdr,false非hdr,默认非hdr。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
7608| mutedMediaType | [MediaType](#mediatype8) | 否 | 静音播放的媒体类型,仅支持设置 MediaType.MEDIA_TYPE_AUD。 |
7609| preferredAudioLanguage<sup>13+</sup> | string | 否 | 播放策略首选音轨语言。dash场景下应用可按需设置。非dash场景暂不支持,建议缺省。<br>**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。 |
7610| preferredSubtitleLanguage<sup>13+</sup> | string | 否 | 播放策略首选字幕语言。dash场景下应用可按需设置。非dash场景暂不支持,建议缺省。<br>**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。 |
7611
7612## AVScreenCaptureRecordPreset<sup>12+</sup>
7613
7614进行屏幕录制时的编码、封装格式参数的枚举。
7615
7616**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7617
7618| 名称                              | 值   | 说明                                         |
7619| --------------------------------- | ---- | -------------------------------------------- |
7620| SCREEN_RECORD_PRESET_H264_AAC_MP4 | 0    | 使用视频H264编码,音频AAC编码,MP4封装格式。 |
7621| SCREEN_RECORD_PRESET_H265_AAC_MP4 | 1    | 使用视频H265编码,音频AAC编码,MP4封装格式。 |
7622
7623## AVScreenCaptureStateCode<sup>12+</sup>
7624
7625屏幕录制的状态回调。
7626
7627**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7628
7629| 名称                                     | 值   | 说明                     |
7630| ---------------------------------------- | ---- | ------------------------ |
7631| SCREENCAPTURE_STATE_STARTED              | 0    | 录屏已开始。             |
7632| SCREENCAPTURE_STATE_CANCELED             | 1    | 录屏被取消。             |
7633| SCREENCAPTURE_STATE_STOPPED_BY_USER      | 2    | 录屏被用户手动停止。     |
7634| SCREENCAPTURE_STATE_INTERRUPTED_BY_OTHER | 3    | 录屏被其他录屏打断。     |
7635| SCREENCAPTURE_STATE_STOPPED_BY_CALL      | 4    | 录屏被来电打断。         |
7636| SCREENCAPTURE_STATE_MIC_UNAVAILABLE      | 5    | 录屏无法使用麦克风收音。 |
7637| SCREENCAPTURE_STATE_MIC_MUTED_BY_USER    | 6    | 麦克风被用户关闭。       |
7638| SCREENCAPTURE_STATE_MIC_UNMUTED_BY_USER  | 7    | 麦克风被用户打开。       |
7639| SCREENCAPTURE_STATE_ENTER_PRIVATE_SCENE  | 8    | 录屏进入隐私页面。       |
7640| SCREENCAPTURE_STATE_EXIT_PRIVATE_SCENE   | 9    | 录屏退出隐私页面。       |
7641| SCREENCAPTURE_STATE_STOPPED_BY_USER_SWITCHES   | 10    | 系统用户切换,录屏中断。       |
7642
7643## AVScreenCaptureRecordConfig<sup>12+</sup>
7644
7645表示录屏参数配置。
7646
7647**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7648
7649| 名称              | 类型                                                         | 必填 | 说明                                                         |
7650| ----------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
7651| fd                | number                                                       | 是   | 录制输出的文件fd。                                           |
7652| frameWidth        | number                                                       | 否   | 录屏的视频宽度,默认屏幕宽度,根据不同屏幕默认值不同,单位px。 |
7653| frameHeight       | number                                                       | 否   | 录屏的视频高度,默认屏幕高度,根据不同屏幕默认值不同,单位px。 |
7654| videoBitrate      | number                                                       | 否   | 录屏的视频比特率,默认10000000。                             |
7655| audioSampleRate   | number                                                       | 否   | 录屏的音频采样率,内录的系统音和外录的麦克风都是用此采样率,默认48000,仅支持设置48000或16000。 |
7656| audioChannelCount | number                                                       | 否   | 录屏的音频通道数,内录的系统音和外录的麦克风都是用此通道数,默认2声道,仅支持设置1或2声道。 |
7657| audioBitrate      | number                                                       | 否   | 录屏的音频比特率,内录的系统音和外录的麦克风都是用此比特率,默认96000。 |
7658| preset            | [AVScreenCaptureRecordPreset](#avscreencapturerecordpreset12) | 否   | 录屏使用的编码和封装格式,默认SCREEN_RECORD_PRESET_H264_AAC_MP4格式。 |
7659
7660## AVScreenCaptureRecorder<sup>12+</sup>
7661
7662屏幕录制管理类,用于进行屏幕录制。在调用AVScreenCaptureRecorder的方法前,需要先通过[createAVScreenCaptureRecorder()](#mediacreateavscreencapturerecorder12)创建一个AVScreenCaptureRecorder实例。
7663
7664### init<sup>12+</sup>
7665
7666init(config: AVScreenCaptureRecordConfig): Promise\<void>
7667
7668异步方式进行录屏初始化,设置录屏参数。通过Promise获取返回值。
7669
7670**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7671
7672**参数:**
7673
7674| 参数名 | 类型                                                         | 必填 | 说明                     |
7675| ------ | ------------------------------------------------------------ | ---- | ------------------------ |
7676| config | [AVScreenCaptureRecordConfig](#avscreencapturerecordconfig12) | 是   | 配置屏幕录制的相关参数。 |
7677
7678**返回值:**
7679
7680| 类型           | 说明                                |
7681| -------------- | ----------------------------------- |
7682| Promise\<void> | 异步录屏初始化方法的Promise返回值。 |
7683
7684**错误码:**
7685
7686| 错误码ID | 错误信息                                       |
7687| -------- | ---------------------------------------------- |
7688| 401      | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. Return by promise. |
7689| 5400103  | IO error. Return by promise.                   |
7690| 5400105  | Service died. Return by promise.               |
7691
7692**示例:**
7693
7694```ts
7695import { BusinessError } from '@kit.BasicServicesKit';
7696
7697let avCaptureConfig: media.AVScreenCaptureRecordConfig = {
7698    fd: 0, // 文件需要先有调用者创建,赋予写权限,将文件fd传给此参数
7699    frameWidth: 640,
7700    frameHeight: 480
7701    // 补充其他参数
7702}
7703
7704avScreenCaptureRecorder.init(avCaptureConfig).then(() => {
7705    console.info('Succeeded in initing avScreenCaptureRecorder');
7706}).catch((err: BusinessError) => {
7707    console.info('Failed to init avScreenCaptureRecorder, error: ' + err.message);
7708})
7709```
7710
7711### startRecording<sup>12+</sup>
7712
7713startRecording(): Promise\<void>
7714
7715异步方式开始录屏。通过Promise获取返回值。
7716
7717**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7718
7719**返回值:**
7720
7721| 类型           | 说明                             |
7722| -------------- | -------------------------------- |
7723| Promise\<void> | 异步开始录屏方法的Promise返回值. |
7724
7725**错误码:**
7726
7727| 错误码ID | 错误信息                         |
7728| -------- | -------------------------------- |
7729| 5400103  | IO error. Return by promise.     |
7730| 5400105  | Service died. Return by promise. |
7731
7732**示例:**
7733
7734```ts
7735import { BusinessError } from '@kit.BasicServicesKit';
7736
7737avScreenCaptureRecorder.startRecording().then(() => {
7738    console.info('Succeeded in starting avScreenCaptureRecorder');
7739}).catch((err: BusinessError) => {
7740    console.info('Failed to start avScreenCaptureRecorder, error: ' + err.message);
7741})
7742```
7743
7744### stopRecording<sup>12+</sup>
7745
7746stopRecording(): Promise\<void>
7747
7748异步方式结束录屏。通过Promise获取返回值。
7749
7750**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7751
7752**返回值:**
7753
7754| 类型           | 说明                              |
7755| -------------- | --------------------------------- |
7756| Promise\<void> | 异步结束录屏方法的Promise返回值。 |
7757
7758**错误码:**
7759
7760| 错误码ID | 错误信息                         |
7761| -------- | -------------------------------- |
7762| 5400103  | IO error. Return by promise.     |
7763| 5400105  | Service died. Return by promise. |
7764
7765**示例:**
7766
7767```ts
7768import { BusinessError } from '@kit.BasicServicesKit';
7769
7770avScreenCaptureRecorder.stopRecording().then(() => {
7771    console.info('Succeeded in stopping avScreenCaptureRecorder');
7772}).catch((err: BusinessError) => {
7773    console.info('Failed to stop avScreenCaptureRecorder, error: ' + err.message);
7774})
7775```
7776
7777### skipPrivacyMode<sup>12+</sup>
7778
7779skipPrivacyMode(windowIDs: Array\<number>): Promise\<void>
7780
7781录屏时,应用可对本应用的隐私窗口做安全豁免。通过Promise获取返回值。
7782如录屏时,用户在本应用进行输入密码等操作,应用不会进行黑屏处理。
7783
7784**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7785
7786**参数:**
7787
7788| 参数名 | 类型    | 必填 | 说明                                                      |
7789| ------ | ------- | ---- | --------------------------------------------------------- |
7790| windowIDs | Array\<number> | 是   | 需要豁免隐私的窗口列表,包括主窗口id和子窗口id,窗口属性获取方法可以参考[窗口API引用](../apis-arkui/js-apis-window.md#getwindowproperties9) |
7791
7792**返回值:**
7793
7794| 类型           | 说明                             |
7795| -------------- | -------------------------------- |
7796| Promise\<void> | 豁免隐私窗口的Promise返回值. |
7797
7798**错误码:**
7799
7800| 错误码ID | 错误信息                         |
7801| -------- | -------------------------------- |
7802| 5400103  | IO error. Return by promise.     |
7803| 5400105  | Service died. Return by promise. |
7804
7805**示例:**
7806
7807```ts
7808import { BusinessError } from '@kit.BasicServicesKit';
7809
7810let windowIDs = [];
7811avScreenCaptureRecorder.skipPrivacyMode(windowIDs).then(() => {
7812    console.info('Succeeded in skipping privacy mode');
7813}).catch((err: BusinessError) => {
7814    console.info('Failed to skip privacy mode, error: ' + err.message);
7815})
7816```
7817
7818### setMicEnabled<sup>12+</sup>
7819
7820setMicEnabled(enable: boolean): Promise\<void>
7821
7822异步方式设置麦克风开关。通过Promise获取返回值。
7823
7824**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7825
7826**参数:**
7827
7828| 参数名 | 类型    | 必填 | 说明                                                      |
7829| ------ | ------- | ---- | --------------------------------------------------------- |
7830| enable | boolean | 是   | 麦克风开关控制,true代表麦克风打开,false代表麦克风关闭。 |
7831
7832**返回值:**
7833
7834| 类型           | 说明                                    |
7835| -------------- | --------------------------------------- |
7836| Promise\<void> | 异步设置麦克风开关方法的Promise返回值。 |
7837
7838**错误码:**
7839
7840| 错误码ID | 错误信息                         |
7841| -------- | -------------------------------- |
7842| 5400103  | IO error. Return by promise.     |
7843| 5400105  | Service died. Return by promise. |
7844
7845**示例:**
7846
7847```ts
7848import { BusinessError } from '@kit.BasicServicesKit';
7849
7850avScreenCaptureRecorder.setMicEnabled(true).then(() => {
7851    console.info('Succeeded in setMicEnabled avScreenCaptureRecorder');
7852}).catch((err: BusinessError) => {
7853    console.info('Failed to setMicEnabled avScreenCaptureRecorder, error: ' + err.message);
7854})
7855```
7856
7857### release<sup>12+</sup>
7858
7859release(): Promise\<void>
7860
7861异步方式释放录屏。通过Promise获取返回值。
7862
7863**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7864
7865**返回值:**
7866
7867| 类型           | 说明                              |
7868| -------------- | --------------------------------- |
7869| Promise\<void> | 异步释放录屏方法的Promise返回值。 |
7870
7871**错误码:**
7872
7873| 错误码ID | 错误信息                         |
7874| -------- | -------------------------------- |
7875| 5400103  | IO error. Return by promise.     |
7876| 5400105  | Service died. Return by promise. |
7877
7878**示例:**
7879
7880```ts
7881import { BusinessError } from '@kit.BasicServicesKit';
7882
7883avScreenCaptureRecorder.release().then(() => {
7884    console.info('Succeeded in releasing avScreenCaptureRecorder');
7885}).catch((err: BusinessError) => {
7886    console.info('Faile to release avScreenCaptureRecorder, error: ' + err.message);
7887})
7888```
7889
7890### on('stateChange')<sup>12+</sup>
7891
7892on(type: 'stateChange', callback: Callback\<AVScreenCaptureStateCode>): void
7893
7894订阅录屏状态切换的事件,当状态发生的时候,会通过订阅的回调通知用户。用户只能订阅一个状态切换的回调方法,重复订阅时,以最后一次订阅的回调接口为准。
7895
7896**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7897
7898**参数:**
7899
7900| 参数名   | 类型     | 必填 | 说明                                                         |
7901| -------- | -------- | ---- | ------------------------------------------------------------ |
7902| type     | string   | 是   | 状态切换事件回调类型,支持的事件:'stateChange'。            |
7903| callback | function | 是   | 状态切换事件回调方法,[AVScreenCaptureStateCode](#avscreencapturestatecode12)表示切换到的状态。 |
7904
7905**示例:**
7906
7907```ts
7908avScreenCaptureRecorder.on('stateChange', (state: media.AVScreenCaptureStateCode) => {
7909    console.info('avScreenCaptureRecorder stateChange to ' + state);
7910})
7911```
7912
7913### on('error')<sup>12+</sup>
7914
7915on(type: 'error', callback: ErrorCallback): void
7916
7917订阅AVScreenCaptureRecorder的错误事件,用户可以根据应用自身逻辑对错误事件进行处理。用户只能订阅一个错误事件的回调方法,重复订阅时,以最后一次订阅的回调接口为准。
7918
7919**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7920
7921**参数:**
7922
7923| 参数名   | 类型          | 必填 | 说明                                    |
7924| -------- | ------------- | ---- | --------------------------------------- |
7925| type     | string        | 是   | 错误事件回调类型,支持的事件:'error'。 |
7926| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 录屏错误事件回调方法。                  |
7927
7928**错误码:**
7929
7930| 错误码ID | 错误信息                         |
7931| -------- | -------------------------------- |
7932| 201      | permission denied.     |
7933| 5400103  | IO error. Return by ErrorCallback. |
7934| 5400105  | Service died. Return by ErrorCallback. |
7935
7936**示例:**
7937
7938```ts
7939avScreenCaptureRecorder.on('error', (err: BusinessError) => {
7940    console.error('avScreenCaptureRecorder error:' + err.message);
7941})
7942```
7943
7944### off('stateChange')<sup>12+</sup>
7945
7946 off(type: 'stateChange', callback?: Callback\<AVScreenCaptureStateCode>): void
7947
7948取消订阅状态切换回调事件。用户可以指定填入状态切换的回调方法来取消订阅。
7949
7950**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7951
7952**参数:**
7953
7954| 参数名   | 类型     | 必填 | 说明                                                         |
7955| -------- | -------- | ---- | ------------------------------------------------------------ |
7956| type     | string   | 是   | 状态切换事件回调类型,支持的事件:'stateChange'。            |
7957| callback | function | 否   | 状态切换事件回调方法,[AVScreenCaptureStateCode](#avscreencapturestatecode12)表示切换到的状态,不填此参数则会取消最后一次订阅事件。 |
7958
7959**示例:**
7960
7961```ts
7962avScreenCaptureRecorder.off('stateChange');
7963```
7964
7965### off('error')<sup>12+</sup>
7966
7967off(type: 'error', callback?: ErrorCallback): void
7968
7969取消订阅错误回调事件。用户可以指定填入错误回调方法来取消订阅。
7970
7971**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture
7972
7973**参数:**
7974
7975| 参数名   | 类型     | 必填 | 说明                                                       |
7976| -------- | -------- | ---- | ---------------------------------------------------------- |
7977| type     | string   | 是   | 状态切换事件回调类型,支持的事件:'error'。                |
7978| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否   | 录屏错误事件回调方法,不填此参数则会取消最后一次订阅事件。 |
7979
7980**示例:**
7981
7982```ts
7983avScreenCaptureRecorder.off('error');
7984```