1# @ohos.multimedia.media (媒体服务) 2 3> **说明:** 4> 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 5 6媒体子系统为开发者提供一套简单且易于理解的接口,使得开发者能够方便接入系统并使用系统的媒体资源。 7 8媒体子系统包含了音视频相关媒体业务,提供以下常用功能: 9 10- 音视频播放([AVPlayer](#avplayer9)<sup>9+</sup>) 11 12- 音视频录制([AVRecorder](#avrecorder9)<sup>9+</sup>) 13 14- 视频转码([AVTranscoder](#avtranscoder12)<sup>12+</sup>) 15 16- 获取音视频元数据([AVMetadataExtractor](#avmetadataextractor11)<sup>11+</sup>) 17 18- 获取视频缩略图([AVImageGenerator](#avimagegenerator12)<sup>12+</sup>) 19 20- 屏幕录制([AVScreenCaptureRecorder](#avscreencapturerecorder12)<sup>12+</sup>) 21 22## 导入模块 23 24```ts 25import { media } from '@kit.MediaKit'; 26``` 27 28## media.createAVPlayer<sup>9+</sup> 29 30createAVPlayer(callback: AsyncCallback\<AVPlayer>): void 31 32异步方式创建音视频播放实例,通过注册回调函数获取返回值。 33 34> **说明:** 35> 36> - 推荐单个应用创建的音视频播放实例(即音频、视频、音视频三类相加)不超过16个。<!--Del--> 37> - 可创建的音视频播放实例数量依赖于设备芯片的支持情况,如芯片支持创建的数量少于上述情况,请以芯片规格为准。如RK3568推荐单个应用创建6个以内的音视频播放实例。<!--DelEnd--> 38 39**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 40 41**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 42 43**参数:** 44 45| 参数名 | 类型 | 必填 | 说明 | 46| -------- | ------------------------------------- | ---- | ------------------------------------------------------------ | 47| callback | AsyncCallback\<[AVPlayer](#avplayer9)> | 是 | 回调函数。异步返回AVPlayer实例,失败时返回null。可用于音视频播放。 | 48 49**错误码:** 50 51以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 52 53| 错误码ID | 错误信息 | 54| -------- | ------------------------------ | 55| 5400101 | No memory. Return by callback. | 56 57**示例:** 58 59```ts 60import { BusinessError } from '@kit.BasicServicesKit'; 61 62let avPlayer: media.AVPlayer; 63media.createAVPlayer((error: BusinessError, video: media.AVPlayer) => { 64 if (video != null) { 65 avPlayer = video; 66 console.info('Succeeded in creating AVPlayer'); 67 } else { 68 console.error(`Failed to create AVPlayer, error message:${error.message}`); 69 } 70}); 71``` 72 73## media.createAVPlayer<sup>9+</sup> 74 75createAVPlayer(): Promise\<AVPlayer> 76 77异步方式创建音视频播放实例,通过Promise获取返回值。 78 79> **说明:** 80> 81> - 推荐单个应用创建的音视频播放实例(即音频、视频、音视频三类相加)不超过16个。<!--Del--> 82> - 可创建的音视频播放实例数量依赖于设备芯片的支持情况,如芯片支持创建的数量少于上述情况,请以芯片规格为准。如RK3568推荐单个应用创建6个以内的音视频播放实例。<!--DelEnd--> 83 84**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 85 86**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 87 88**返回值:** 89 90| 类型 | 说明 | 91| ------------------------------- | ------------------------------------------------------------ | 92| Promise\<[AVPlayer](#avplayer9)> | Promise对象。异步返回AVPlayer实例,失败时返回null。可用于音视频播放。 | 93 94**错误码:** 95 96以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 97 98| 错误码ID | 错误信息 | 99| -------- | ----------------------------- | 100| 5400101 | No memory. Return by promise. | 101 102**示例:** 103 104```ts 105import { BusinessError } from '@kit.BasicServicesKit'; 106 107let avPlayer: media.AVPlayer; 108media.createAVPlayer().then((video: media.AVPlayer) => { 109 if (video != null) { 110 avPlayer = video; 111 console.info('Succeeded in creating AVPlayer'); 112 } else { 113 console.error('Failed to create AVPlayer'); 114 } 115}).catch((error: BusinessError) => { 116 console.error(`Failed to create AVPlayer, error message:${error.message}`); 117}); 118``` 119 120## media.createAVRecorder<sup>9+</sup> 121 122createAVRecorder(callback: AsyncCallback\<AVRecorder>): void 123 124异步方式创建音视频录制实例。通过注册回调函数获取返回值。 125 126> **说明:** 127> 128> 应用可创建多个音视频录制实例,但由于设备共用音频通路,一个设备仅能有一个实例进行音频录制。创建第二个实例录制音频时,将会因为音频通路冲突导致创建失败。 129 130**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 131 132**参数:** 133 134| 参数名 | 类型 | 必填 | 说明 | 135| -------- | ------------------------------------------ | ---- | ------------------------------------------------------------ | 136| callback | AsyncCallback\<[AVRecorder](#avrecorder9)> | 是 | 回调函数。异步返回AVRecorder实例,失败时返回null。可用于录制音视频媒体。 | 137 138**错误码:** 139 140以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 141 142| 错误码ID | 错误信息 | 143| -------- | ------------------------------ | 144| 5400101 | No memory. Return by callback. | 145 146**示例:** 147 148```ts 149import { BusinessError } from '@kit.BasicServicesKit'; 150let avRecorder: media.AVRecorder; 151 152media.createAVRecorder((error: BusinessError, recorder: media.AVRecorder) => { 153 if (recorder != null) { 154 avRecorder = recorder; 155 console.info('Succeeded in creating AVRecorder'); 156 } else { 157 console.error(`Failed to create AVRecorder, error message:${error.message}`); 158 } 159}); 160``` 161 162## media.createAVRecorder<sup>9+</sup> 163 164createAVRecorder(): Promise\<AVRecorder> 165 166异步方式创建音视频录制实例。通过Promise获取返回值。 167 168> **说明:** 169> 170> 应用可创建多个音视频录制实例,但由于设备共用音频通路,一个设备仅能有一个实例进行音频录制。创建第二个实例录制音频时,将会因为音频通路冲突导致创建失败。 171 172**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 173 174**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 175 176**返回值:** 177 178| 类型 | 说明 | 179| ------------------------------------ | ------------------------------------------------------------ | 180| Promise\<[AVRecorder](#avrecorder9)> | Promise对象。异步返回AVRecorder实例,失败时返回null。可用于录制音视频媒体。 | 181 182**错误码:** 183 184以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 185 186| 错误码ID | 错误信息 | 187| -------- | ----------------------------- | 188| 5400101 | No memory. Return by promise. | 189 190**示例:** 191 192```ts 193import { BusinessError } from '@kit.BasicServicesKit'; 194 195let avRecorder: media.AVRecorder; 196media.createAVRecorder().then((recorder: media.AVRecorder) => { 197 if (recorder != null) { 198 avRecorder = recorder; 199 console.info('Succeeded in creating AVRecorder'); 200 } else { 201 console.error('Failed to create AVRecorder'); 202 } 203}).catch((error: BusinessError) => { 204 console.error(`Failed to create AVRecorder, error message:${error.message}`); 205}); 206``` 207 208## media.createAVTranscoder<sup>12+</sup> 209 210createAVTranscoder(): Promise\<AVTranscoder> 211 212异步方式创建视频转码实例,通过Promise获取返回值。 213 214> **说明:** 215 216> 可创建的视频转码实例不能超过2个。 217 218**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 219 220**返回值:** 221 222| 类型 | 说明 | 223| ------------------------------- | ------------------------------------------------------------ | 224| Promise\<[AVTranscoder](#avtranscoder12)> | Promise对象。异步返回AVTranscoder实例,失败时返回null。可用于视频转码。 | 225 226**错误码:** 227 228以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 229 230| 错误码ID | 错误信息 | 231| -------- | ----------------------------- | 232| 5400101 | No memory. Return by promise. | 233 234**示例:** 235 236```ts 237import { BusinessError } from '@kit.BasicServicesKit'; 238 239let avTranscoder: media.AVTranscoder | undefined = undefined; 240media.createAVTranscoder().then((transcoder: media.AVTranscoder) => { 241 if (transcoder != null) { 242 avTranscoder = transcoder; 243 console.info('Succeeded in creating AVTranscoder'); 244 } else { 245 console.error('Failed to create AVTranscoder'); 246 } 247}).catch((error: BusinessError) => { 248 console.error(`Failed to create AVTranscoder, error message:${error.message}`); 249}); 250``` 251 252## media.createAVMetadataExtractor<sup>11+</sup> 253 254createAVMetadataExtractor(callback: AsyncCallback\<AVMetadataExtractor>): void 255 256异步方式创建AVMetadataExtractor实例,通过注册回调函数获取返回值。 257 258**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 259 260**参数:** 261 262| 参数名 | 类型 | 必填 | 说明 | 263| -------- | ------------------------------------- | ---- | ------------------------------------------------------------ | 264| callback | AsyncCallback\<[AVMetadataExtractor](#avmetadataextractor11)> | 是 | 回调函数。当创建AVMetadataExtractor实例成功,err为undefined,data为获取到的AVMetadataExtractor实例,否则为错误对象。 | 265 266**错误码:** 267 268以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 269 270| 错误码ID | 错误信息 | 271| -------- | ------------------------------ | 272| 5400101 | No memory. Returned by callback. | 273 274**示例:** 275 276```ts 277import { BusinessError } from '@kit.BasicServicesKit'; 278 279let avMetadataExtractor: media.AVMetadataExtractor; 280media.createAVMetadataExtractor((error: BusinessError, extractor: media.AVMetadataExtractor) => { 281 if (extractor != null) { 282 avMetadataExtractor = extractor; 283 console.info('Succeeded in creating AVMetadataExtractor'); 284 } else { 285 console.error(`Failed to create AVMetadataExtractor, error message:${error.message}`); 286 } 287}); 288``` 289 290## media.createAVMetadataExtractor<sup>11+</sup> 291 292createAVMetadataExtractor(): Promise\<AVMetadataExtractor> 293 294异步方式创建AVMetadataExtractor实例,通过Promise获取返回值。 295 296**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 297 298**错误码:** 299 300以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 301 302| 错误码ID | 错误信息 | 303| -------- | ------------------------------ | 304| 5400101 | No memory. Returned by promise. | 305 306**示例:** 307 308```ts 309import { BusinessError } from '@kit.BasicServicesKit'; 310 311let avMetadataExtractor: media.AVMetadataExtractor; 312media.createAVMetadataExtractor().then((extractor: media.AVMetadataExtractor) => { 313 if (extractor != null) { 314 avMetadataExtractor = extractor; 315 console.info('Succeeded in creating AVMetadataExtractor'); 316 } else { 317 console.error(`Failed to create AVMetadataExtractor`); 318 } 319}).catch((error: BusinessError) => { 320 console.error(`Failed to create AVMetadataExtractor, error message:${error.message}`); 321}); 322``` 323 324## media.createSoundPool<sup>10+</sup> 325 326createSoundPool(maxStreams: number, audioRenderInfo: audio.AudioRendererInfo, callback: AsyncCallback\<SoundPool>): void 327 328创建音频池实例,使用callback方式异步获取返回值。 329 330> **说明:** 331> 332> - API 18以下版本,创建的SoundPool对象底层为单实例模式,一个应用进程只能够创建1个SoundPool实例。 333> - API 18及API 18以上版本,创建的SoundPool对象底层为多实例模式,一个应用进程最多能够创建128个SoundPool实例。 334 335**系统能力:** SystemCapability.Multimedia.Media.SoundPool 336 337**参数:** 338 339| 参数名 | 类型 | 必填 | 说明 | 340| -------- | ----------------------------------------------- | ---- | ------------------------------------------------------------ | 341| maxStreams | number | 是 | soundPool实例的最大播放的流数,设置范围为1-32的正整数。 | 342| 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播放短音时为混音模式,不会打断其他音频播放。 | 343| callback | AsyncCallback<[SoundPool](js-apis-inner-multimedia-soundPool.md)> | 是 | 回调函数。异步返回SoundPool实例,失败时返回null。用于音频池实例的加载播放功能。 | 344 345**错误码:** 346 347以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 348 349| 错误码ID | 错误信息 | 350| -------- | ------------------------------ | 351| 5400101 | No memory. Return by callback. | 352 353**示例:** 354 355```js 356import { audio } from '@kit.AudioKit'; 357 358let soundPool: media.SoundPool; 359let audioRendererInfo: audio.AudioRendererInfo = { 360 usage : audio.StreamUsage.STREAM_USAGE_MUSIC, 361 rendererFlags : 0 362} 363 364media.createSoundPool(5, audioRendererInfo, (error, soundPool_: media.SoundPool) => { 365 if (error) { 366 console.error(`Failed to createSoundPool`) 367 return; 368 } else { 369 soundPool = soundPool_; 370 console.info(`Succeeded in createSoundPool`) 371 } 372}); 373``` 374 375## media.createSoundPool<sup>10+</sup> 376 377createSoundPool(maxStreams: number, audioRenderInfo: audio.AudioRendererInfo): Promise\<SoundPool> 378 379创建音频池实例,通过Promise获取返回值。 380 381> **说明:** 382> 383> - API 18以下版本,创建的SoundPool对象底层为单实例模式,一个应用进程只能够创建1个SoundPool实例。 384> - API 18及API 18以上版本,创建的SoundPool对象底层为多实例模式,一个应用进程最多能够创建128个SoundPool实例。 385 386**系统能力:** SystemCapability.Multimedia.Media.SoundPool 387 388**参数:** 389 390| 参数名 | 类型 | 必填 | 说明 | 391| -------- | ----------------------------------------------- | ---- | ------------------------------------------------------------ | 392| maxStreams | number | 是 | soundPool实例的最大播放的流数,设置范围为1-32的正整数。 | 393| audioRenderInfo | [audio.AudioRendererInfo](../apis-audio-kit/js-apis-audio.md#audiorendererinfo8) | 是 | 音频播放参数信息 | 394 395**返回值:** 396 397| 类型 | 说明 | 398| ----------------------------------------- | ------------------------------------------------------------ | 399| Promise<[SoundPool](js-apis-inner-multimedia-soundPool.md)> | Promise对象。异步返回SoundPool实例,失败时返回null。用于音频池实例的加载播放功能。 | 400 401**错误码:** 402 403以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 404 405| 错误码ID | 错误信息 | 406| -------- | ----------------------------- | 407| 5400101 | No memory. Return by promise. | 408 409**示例:** 410 411```js 412import { audio } from '@kit.AudioKit'; 413import { BusinessError } from '@kit.BasicServicesKit'; 414 415let soundPool: media.SoundPool; 416let audioRendererInfo: audio.AudioRendererInfo = { 417 usage : audio.StreamUsage.STREAM_USAGE_MUSIC, 418 rendererFlags : 0 419} 420 421media.createSoundPool(5, audioRendererInfo).then((soundpool_: media.SoundPool) => { 422 if (soundpool_ != null) { 423 soundPool = soundpool_; 424 console.info('Succceeded in creating SoundPool'); 425 } else { 426 console.error('Failed to create SoundPool'); 427 } 428}, (error: BusinessError) => { 429 console.error(`soundpool catchCallback, error message:${error.message}`); 430}); 431``` 432 433## media.createAVScreenCaptureRecorder<sup>12+</sup> 434 435createAVScreenCaptureRecorder(): Promise\<AVScreenCaptureRecorder> 436 437创建屏幕录制实例,通过Promise获取返回值。 438 439**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 440 441**返回值:** 442 443| 类型 | 说明 | 444| ------------------------------------------------------------ | ------------------------------------------------------------ | 445| Promise\<[AVScreenCaptureRecorder](#avscreencapturerecorder12)> | Promise对象。异步返回AVScreenCaptureRecorder实例,失败时返回null。可用于进行屏幕录制。 | 446 447**错误码:** 448 449| 错误码ID | 错误信息 | 450| -------- | ------------------------------ | 451| 5400101 | No memory. Return by promise. | 452 453**示例:** 454 455```ts 456import { BusinessError } from '@kit.BasicServicesKit'; 457 458let avScreenCaptureRecorder: media.AVScreenCaptureRecorder; 459media.createAVScreenCaptureRecorder().then((captureRecorder: media.AVScreenCaptureRecorder) => { 460 if (captureRecorder != null) { 461 avScreenCaptureRecorder = captureRecorder; 462 console.info('Succeeded in createAVScreenCaptureRecorder'); 463 } else { 464 console.error('Failed to createAVScreenCaptureRecorder'); 465 } 466}).catch((error: BusinessError) => { 467 console.error(`createAVScreenCaptureRecorder catchCallback, error message:${error.message}`); 468}); 469``` 470 471## SoundPool<sup>10+</sup> 472 473type SoundPool = _SoundPool 474 475音频池,提供了系统声音的加载、播放、音量设置、循环设置、停止播放、资源卸载等功能。 476 477**系统能力:** SystemCapability.Multimedia.Media.SoundPool 478 479| 类型 | 说明 | 480| -------- | ------------------------------ | 481| [_SoundPool](js-apis-inner-multimedia-soundPool.md#soundpool) | 音频池,提供了系统声音的加载、播放、音量设置、循环设置、停止播放、资源卸载等功能。 | 482 483## PlayParameters<sup>10+</sup> 484 485type PlayParameters = _PlayParameters 486 487表示音频池播放参数设置。 488 489**系统能力:** SystemCapability.Multimedia.Media.SoundPool 490 491| 类型 | 说明 | 492| -------- | ------------------------------ | 493| [_PlayParameters](js-apis-inner-multimedia-soundPool.md#playparameters) | 表示音频池播放参数设置。 | 494 495## AVErrorCode<sup>9+</sup> 496 497[媒体错误码](errorcode-media.md)类型枚举 498 499**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 500 501**系统能力:** SystemCapability.Multimedia.Media.Core 502 503| 名称 | 值 | 说明 | 504| :------------------------------------ | ------- | ------------------------------------ | 505| AVERR_OK | 0 | 表示操作成功。 | 506| AVERR_NO_PERMISSION | 201 | 表示无权限执行此操作。 | 507| AVERR_INVALID_PARAMETER | 401 | 表示传入入参无效。 | 508| AVERR_UNSUPPORT_CAPABILITY | 801 | 表示当前版本不支持该API能力。 | 509| AVERR_NO_MEMORY | 5400101 | 表示系统内存不足或服务数量达到上限。 | 510| AVERR_OPERATE_NOT_PERMIT | 5400102 | 表示当前状态不允许或无权执行此操作。 | 511| AVERR_IO | 5400103 | 表示数据流异常信息。 | 512| AVERR_TIMEOUT | 5400104 | 表示系统或网络响应超时。 | 513| AVERR_SERVICE_DIED | 5400105 | 表示服务进程死亡。 | 514| AVERR_UNSUPPORT_FORMAT | 5400106 | 表示不支持当前媒体资源的格式。 | 515| AVERR_AUDIO_INTERRUPTED<sup>11+</sup> | 5400107 | 表示音频焦点被抢占 | 516| AVERR_IO_HOST_NOT_FOUND<sup>14+</sup> | 5411001 | 表示解析或链接服务端地址错误。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 517| AVERR_IO_CONNECTION_TIMEOUT<sup>14+</sup> | 5411002 | 表示网络连接超时。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 518| AVERR_IO_NETWORK_ABNORMAL<sup>14+</sup> | 5411003 | 表示网络异常导致的数据或链路异常。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 519| AVERR_IO_NETWORK_UNAVAILABLE<sup>14+</sup> | 5411004 | 表示网络被禁用。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 520| AVERR_IO_NO_PERMISSION<sup>14+</sup> | 5411005 | 表示无访问权限。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 521| AVERR_IO_REQUEST_DENIED<sup>14+</sup> | 5411006 | 表示客户端请求参数错误或超出处理能力。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 522| AVERR_IO_RESOURCE_NOT_FOUND<sup>14+</sup> | 5411007 | 表示无可用网络资源。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 523| AVERR_IO_SSL_CLIENT_CERT_NEEDED<sup>14+</sup> | 5411008 | 表示服务端校验客户端证书失败。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 524| AVERR_IO_SSL_CONNECTION_FAILED<sup>14+</sup> | 5411009 | 表示SSL连接失败。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 525| AVERR_IO_SSL_SERVER_CERT_UNTRUSTED<sup>14+</sup> | 5411010 | 表示客户端校验服务端证书失败。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 526| AVERR_IO_UNSUPPORTED_REQUEST<sup>14+</sup> | 5411011 | 表示网络协议的原因导致请求不受支持。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 527| AVERR_SEEK_CONTINUOUS_UNSUPPORTED<sup>18+</sup> | 5410002 | 表示不支持SEEK_CONTINUOUS模式的seek。 <br> **原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 | 528| AVERR_SUPER_RESOLUTION_UNSUPPORTED<sup>18+</sup> | 5410003 | 表示不支持超分。 <br> **原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 | 529| AVERR_SUPER_RESOLUTION_NOT_ENABLED<sup>18+</sup> | 5410004 | 表示未使能超分。 <br> **原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 | 530 531## MediaType<sup>8+</sup> 532 533媒体类型枚举。 534 535**系统能力:** SystemCapability.Multimedia.Media.Core 536 537| 名称 | 值 | 说明 | 538| -------------- | --------------------- | ------------------- | 539| MEDIA_TYPE_AUD | 0 | 表示音频。 <br> **原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。 | 540| MEDIA_TYPE_VID | 1 | 表示视频。 <br> **原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。 | 541| MEDIA_TYPE_SUBTITLE<sup>12+</sup> | 2 | 表示字幕。 <br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 | 542 543## CodecMimeType<sup>8+</sup> 544 545Codec MIME类型枚举。 546 547**系统能力:** SystemCapability.Multimedia.Media.Core 548 549| 名称 | 值 | 说明 | 550| ------------ | --------------------- | ------------------------ | 551| VIDEO_H263 | 'video/h263' | 表示视频/h263类型。 | 552| VIDEO_AVC | 'video/avc' | 表示视频/avc类型。 | 553| VIDEO_MPEG2 | 'video/mpeg2' | 表示视频/mpeg2类型。 | 554| VIDEO_MPEG4 | 'video/mp4v-es' | 表示视频/mpeg4类型。 | 555| VIDEO_VP8 | 'video/x-vnd.on2.vp8' | 表示视频/vp8类型。 | 556| VIDEO_HEVC<sup>11+</sup> | 'video/hevc' | 表示视频/H265类型。| 557| AUDIO_AAC | 'audio/mp4a-latm' | 表示音频/mp4a-latm类型。 <br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 | 558| AUDIO_VORBIS | 'audio/vorbis' | 表示音频/vorbis类型。 | 559| AUDIO_FLAC | 'audio/flac' | 表示音频/flac类型。 | 560| AUDIO_MP3<sup>12+</sup> | 'audio/mpeg' | 表示音频/mpeg类型。 | 561| AUDIO_G711MU<sup>12+</sup> | 'audio/g711mu' | 表示音频/G711-mulaw类型。 | 562| AUDIO_AMR_NB<sup>18+</sup> | 'audio/3gpp' | 表示音频/amr-nb类型。 | 563| AUDIO_AMR_WB<sup>18+</sup> | 'audio/amr-wb' | 表示音频/amr-wb类型。 | 564 565## MediaDescriptionKey<sup>8+</sup> 566 567媒体信息描述枚举。 568 569**系统能力:** SystemCapability.Multimedia.Media.Core 570 571| 名称 | 值 | 说明 | 572| ------------------------ | --------------- | ------------------------------------------------------------ | 573| MD_KEY_TRACK_INDEX | 'track_index' | 表示轨道序号,其对应键值类型为number。 <br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | 574| MD_KEY_TRACK_TYPE | 'track_type' | 表示轨道类型,其对应键值类型为number,参考[MediaType](#mediatype8)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | 575| MD_KEY_CODEC_MIME | 'codec_mime' | 表示codec_mime类型,其对应键值类型为string。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。| 576| MD_KEY_DURATION | 'duration' | 表示媒体时长,其对应键值类型为number,单位为毫秒(ms)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。| 577| MD_KEY_BITRATE | 'bitrate' | 表示比特率,其对应键值类型为number,单位为比特率(bps)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。| 578| MD_KEY_WIDTH | 'width' | 表示视频宽度,其对应键值类型为number,单位为像素(px)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。| 579| MD_KEY_HEIGHT | 'height' | 表示视频高度,其对应键值类型为number,单位为像素(px)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。| 580| MD_KEY_FRAME_RATE | 'frame_rate' | 表示视频帧率,其对应键值类型为number,单位为每100秒的帧数。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | 581| MD_KEY_AUD_CHANNEL_COUNT | 'channel_count' | 表示声道数,其对应键值类型为number。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。| 582| MD_KEY_AUD_SAMPLE_RATE | 'sample_rate' | 表示采样率,其对应键值类型为number,单位为赫兹(Hz)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。| 583| MD_KEY_AUD_SAMPLE_DEPTH<sup>12+</sup> | 'sample_depth' | 表示位深,其对应键值类型为number,单位为位(bit)。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 584| MD_KEY_LANGUAGE<sup>12+</sup> | 'language' | 表示字幕语言,其对应键值类型为string。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 585| MD_KEY_TRACK_NAME<sup>12+</sup> | 'track_name' | 表示track名称,其对应键值类型为string。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 586| MD_KEY_HDR_TYPE<sup>12+</sup> | 'hdr_type' | 表示视频轨类型,其对应键值类型为string。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 587 588## PlaybackInfoKey<sup>12+</sup> 589 590播放信息描述枚举。 591 592**系统能力:** SystemCapability.Multimedia.Media.Core 593 594| 名称 | 值 | 说明 | 595| ------------------------ | --------------- | ------------------------------------------------------------ | 596| SERVER_IP_ADDRESS | 'server_ip_address' | 表示服务器IP地址,其对应键值类型为string。 | 597| AVG_DOWNLOAD_RATE | 'average_download_rate'| 表示平均下载速率,其对应键值类型为number,单位为比特率(bps)。 | 598| DOWNLOAD_RATE | 'download_rate' | 表示1s的下载速率,其对应键值类型为number,单位为比特率(bps)。| 599| IS_DOWNLOADING | 'is_downloading' | 表示下载状态,1表示在下载状态,0表示非下载状态(下载完成),其对应键值类型为number。| 600| BUFFER_DURATION | 'buffer_duration' | 表示缓存数据的可播放时长,其对应键值类型为number,单位为秒(s)。| 601 602## BufferingInfoType<sup>8+</sup> 603 604缓存事件类型枚举。 605 606**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 607 608**系统能力:** SystemCapability.Multimedia.Media.Core 609 610| 名称 | 值 | 说明 | 611| ----------------- | ---- | -------------------------------- | 612| BUFFERING_START | 1 | 表示开始缓冲。当上报BUFFERING_START时,播放器会暂停播放。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 613| BUFFERING_END | 2 | 表示结束缓冲。当上报BUFFERING_END时,播放器会恢复播放。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 614| BUFFERING_PERCENT | 3 | 表示缓冲百分比。可参考该事件感知缓冲进度。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 615| CACHED_DURATION | 4 | 表示已缓冲数据预估可播放时长,单位为毫秒(ms)。缓冲区中的数据变化量大于500ms,上报一次。可参考该事件做进度条。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 616 617## StateChangeReason<sup>9+</sup> 618 619表示播放或录制实例状态机切换原因的枚举,伴随state一起上报。 620 621**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 622 623**系统能力:** SystemCapability.Multimedia.Media.Core 624 625| 名称 | 值 | 说明 | 626| ---------- | ---- | ------------------------------------------------------------ | 627| USER | 1 | 表示用户行为造成的状态切换,由用户或客户端主动调用接口产生。 | 628| BACKGROUND | 2 | 表示后台系统行为造成的状态切换,比如应用未注册播控中心权限,退到后台时被系统强制暂停或停止。 | 629 630## AVPlayer<sup>9+</sup> 631 632播放管理类,用于管理和播放媒体资源。在调用AVPlayer的方法前,需要先通过[createAVPlayer()](#mediacreateavplayer9)构建一个AVPlayer实例。 633 634Audio/Video播放demo可参考:[音频播放开发指导](../../media/media/using-avplayer-for-playback.md)、[视频播放开发指导](../../media/media/video-playback.md)。 635 636> **说明:** 637> 638> 在使用AVPlayer实例的方法时,建议开发者注册相关回调,主动获取当前状态变化。 639> - [on('stateChange')](#onstatechange9):监听播放状态机AVPlayerState切换。 640> - [on('error')](#onerror9):监听错误事件。 641 642### 属性 643 644**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 645 646| 名称 | 类型 | 只读 | 可选 | 说明 | 647| --------------------------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ | 648| 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><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开始,该接口支持在原子化服务中使用。 | 649| 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开始,该接口支持在原子化服务中使用。 | 650| 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开始,该接口支持在原子化服务中使用。 | 651| 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开始,该接口支持在原子化服务中使用。 | 652| loop<sup>9+</sup> | boolean | 否 | 否 | 视频循环播放属性,默认'false',设置为'true'表示循环播放,动态属性。<br/>只允许在**prepared**/**playing**/**paused**/**completed**状态下设置。<br/>直播场景不支持loop设置。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 653| videoScaleType<sup>9+</sup> | [VideoScaleType](#videoscaletype9) | 否 | 是 | 视频缩放模式,默认VIDEO_SCALE_TYPE_FIT,动态属性。<br/>只允许在**prepared**/**playing**/**paused**/**completed**状态下设置。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 654| 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开始,该接口支持在原子化服务中使用。| 655| 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开始,该接口支持在原子化服务中使用。| 656| 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开始,该接口支持在原子化服务中使用。| 657| state<sup>9+</sup> | [AVPlayerState](#avplayerstate9) | 是 | 否 | 音视频播放的状态,全状态有效,可查询参数。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 658| currentTime<sup>9+</sup> | number | 是 | 否 | 视频的当前播放位置,单位为毫秒(ms),可查询参数。<br/>返回为(-1)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。<br/>直播场景默认返回(-1)。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 659| duration<sup>9+</sup> | number | 是 | 否 | 视频时长,单位为毫秒(ms),可查询参数。<br/>返回为(-1)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。<br/>直播场景默认返回(-1)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | 660| width<sup>9+</sup> | number | 是 | 否 | 视频宽,单位为像素(px),可查询参数。<br/>返回为(0)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 661| height<sup>9+</sup> | number | 是 | 否 | 视频高,单位为像素(px),可查询参数。<br/>返回为(0)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 662 663### on('stateChange')<sup>9+</sup> 664 665on(type: 'stateChange', callback: OnAVPlayerStateChangeHandle): void 666 667监听播放状态机AVPlayerState切换的事件。 668 669**原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。 670 671**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 672 673**参数:** 674 675| 参数名 | 类型 | 必填 | 说明 | 676| -------- | -------- | ---- | ------------------------------------------------------------ | 677| type | string | 是 | 状态机切换事件回调类型,支持的事件:'stateChange',用户操作和系统都会触发此事件。 | 678| callback | [OnAVPlayerStateChangeHandle](#onavplayerstatechangehandle12) | 是 | 状态机切换事件回调方法。 | 679 680**示例:** 681 682```ts 683avPlayer.on('stateChange', async (state: string, reason: media.StateChangeReason) => { 684 switch (state) { 685 case 'idle': 686 console.info('state idle called'); 687 break; 688 case 'initialized': 689 console.info('initialized prepared called'); 690 break; 691 case 'prepared': 692 console.info('state prepared called'); 693 break; 694 case 'playing': 695 console.info('state playing called'); 696 break; 697 case 'paused': 698 console.info('state paused called'); 699 break; 700 case 'completed': 701 console.info('state completed called'); 702 break; 703 case 'stopped': 704 console.info('state stopped called'); 705 break; 706 case 'released': 707 console.info('state released called'); 708 break; 709 case 'error': 710 console.info('state error called'); 711 break; 712 default: 713 console.info('unknown state :' + state); 714 break; 715 } 716}) 717``` 718 719### off('stateChange')<sup>9+</sup> 720 721off(type: 'stateChange', callback?: OnAVPlayerStateChangeHandle): void 722 723取消监听播放状态机[AVPlayerState](#avplayerstate9)切换的事件。 724 725**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 726 727**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 728 729**参数:** 730 731| 参数名 | 类型 | 必填 | 说明 | 732| ------ | ------ | ---- | ----------------------------------------------------- | 733| type | string | 是 | 状态机切换事件回调类型,取消注册的事件:'stateChange' | 734| callback | [OnAVPlayerStateChangeHandle](#onavplayerstatechangehandle12) | 否 | 状态机切换事件回调方法。<br/>从API version 12开始支持此参数。 | 735 736**示例:** 737 738```ts 739avPlayer.off('stateChange') 740``` 741 742### on('error')<sup>9+</sup> 743 744on(type: 'error', callback: ErrorCallback): void 745 746监听[AVPlayer](#avplayer9)的错误事件,该事件仅用于错误提示,不需要用户停止播控动作。如果此时[AVPlayerState](#avplayerstate9)也切至error状态,用户需要通过[reset()](#reset9)或者[release()](#release9)退出播放操作。 747 748**原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。 749 750**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 751 752**参数:** 753 754| 参数名 | 类型 | 必填 | 说明 | 755| -------- | -------- | ---- | ------------------------------------------------------------ | 756| type | string | 是 | 错误事件回调类型,支持的事件:'error',用户操作和系统都会触发此事件。 | 757| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是 | 错误事件回调方法,使用播放器的过程中发生错误,会提供错误码ID和错误信息。 | 758 759**错误码:** 760 761以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 762 763在API version 9-13,针对网络、服务器等数据流异常,接口上报5400103;从API version 14开始,对应错误细化为错误码5411001-5411011。 764 765| 错误码ID | 错误信息 | 766| -------- | --------------------- | 767| 201 | Permission denied. | 768| 401 | The parameter check failed. | 769| 801 | Capability not supported. | 770| 5400101 | No memory. | 771| 5400102 | Operation not allowed.| 772| 5400103 | I/O error. | 773| 5400104 | Time out. | 774| 5400105 | Service died. | 775| 5400106 | Unsupported format. | 776| 5411001 | IO can not find host. | 777| 5411002 | IO connection timeout. | 778| 5411003 | IO network abnormal. | 779| 5411004 | IO network unavailable. | 780| 5411005 | IO no permission. | 781| 5411006 | IO request denied. | 782| 5411007 | IO resource not found. | 783| 5411008 | IO SSL client cert needed. | 784| 5411009 | IO SSL connect fail. | 785| 5411010 | IO SSL server cert untrusted. | 786| 5411011 | IO unsupported request. | 787 788**示例:** 789 790```ts 791import { BusinessError } from '@kit.BasicServicesKit'; 792 793avPlayer.on('error', (error: BusinessError) => { 794 console.info('error happened,and error message is :' + error.message) 795 console.info('error happened,and error code is :' + error.code) 796}) 797``` 798 799### off('error')<sup>9+</sup> 800 801off(type: 'error', callback?: ErrorCallback): void 802 803取消监听播放的错误事件。 804 805**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 806 807**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 808 809**参数:** 810 811| 参数名 | 类型 | 必填 | 说明 | 812| ------ | ------ | ---- | ----------------------------------------- | 813| type | string | 是 | 错误事件回调类型,取消注册的事件:'error' | 814| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否 | 错误事件回调方法,使用播放器的过程中发生错误,会提供错误码ID和错误信息。<br/>从API version 12开始支持此参数。 | 815 816**示例:** 817 818```ts 819avPlayer.off('error') 820``` 821 822### setMediaSource<sup>12+</sup> 823 824setMediaSource(src:MediaSource, strategy?: PlaybackStrategy): Promise\<void> 825 826流媒体预下载资源设置,下载url对应的流媒体数据,并暂存在内存中。[视频播放开发指导](../../media/media/video-playback.md)。通过Promise获取返回值。 827 828**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 829 830**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 831 832**参数:** 833 834| 参数名 | 类型 | 必填 | 说明 | 835| -------- | -------- | ---- | -------------------- | 836| src | [MediaSource](#mediasource12) | 是 | 流媒体预下载媒体来源。 | 837| strategy | [PlaybackStrategy](#playbackstrategy12) | 否 | 流媒体预下载播放策略。 | 838 839**返回值:** 840 841| 类型 | 说明 | 842| -------------- | ------------------------------------------ | 843| Promise\<void> | Promise对象。无返回结果的Promise对象。 | 844 845**错误码:** 846 847以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 848 849| 错误码ID | 错误信息 | 850| -------- | ----------------------------------------- | 851| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 852| 5400102 | Operation not allowed. Return by promise. | 853 854**示例:** 855 856<!--code_no_check--> 857```ts 858let player = await media.createAVPlayer(); 859let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"}; 860let mediaSource : media.MediaSource = media.createMediaSourceWithUrl("http://xxx", headers); 861let playStrategy : media.PlaybackStrategy = { 862 preferredWidth: 1, 863 preferredHeight: 2, 864 preferredBufferDuration: 3, 865 preferredHdr: false, 866 preferredBufferDurationForPlaying: 1, 867 thresholdForAutoQuickPlay: 5 868}; 869player.setMediaSource(mediaSource, playStrategy); 870``` 871 872### setPlaybackStrategy<sup>12+</sup> 873 874setPlaybackStrategy(strategy: PlaybackStrategy): Promise\<void> 875 876设置播放策略,只能在initialized状态下调用。 877 878**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 879 880**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 881 882**参数:** 883 884| 参数名 | 类型 | 必填 | 说明 | 885| -------- | -------- | ---- | -------------------- | 886| strategy | [PlaybackStrategy](#playbackstrategy12) | 是 | 播放策略。 | 887 888**返回值:** 889 890| 类型 | 说明 | 891| -------------- | ------------------------------------ | 892| Promise\<void> | Promise对象。无返回结果的Promise对象。 | 893 894**错误码:** 895 896以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 897 898| 错误码ID | 错误信息 | 899| -------- | ----------------------------------------- | 900| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed. | 901| 5400102 | Operation not allowed. Return by promise. | 902 903**示例:** 904 905<!--code_no_check--> 906```ts 907import { common } from '@kit.AbilityKit'; 908 909private context: Context | undefined; 910constructor(context: Context) { 911 this.context = context; // this.getUIContext().getHostContext(); 912} 913 914let player = await media.createAVPlayer(); 915let fileDescriptor = await this.context.resourceManager.getRawFd('xxx.mp4') 916player.fdSrc = fileDescriptor 917let playStrategy : media.PlaybackStrategy = { 918 preferredWidth: 1, 919 preferredHeight: 2, 920 preferredBufferDuration: 3, 921 preferredHdr: false, 922 mutedMediaType: media.MediaType.MEDIA_TYPE_AUD, 923 preferredBufferDurationForPlaying: 1, 924 thresholdForAutoQuickPlay: 5 925}; 926player.setPlaybackStrategy(playStrategy); 927``` 928 929### setPlaybackRange<sup>18+</sup> 930 931setPlaybackRange(startTimeMs: number, endTimeMs: number, mode?: SeekMode) : Promise\<void> 932 933设置播放区间,并通过指定的[SeekMode](#seekmode8)跳转到区间开始位置。设置之后,只播放音视频文件设定区间内的内容。该方法异步方式返回执行结果,通过Promise获取返回值。可在**initialized**/**prepared**/**paused**/**stopped**/**completed**状态下使用。 934 935**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 936 937**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 938 939**参数:** 940 941| 参数名 | 类型 | 必填 | 说明 | 942| -------- | ---------------------- | ---- | --------------------------- | 943| startTimeMs | number | 是 | 区间开始位置,单位ms,取值[0, duration)。可以设置-1值,系统将会从0位置开始播放。| 944| endTimeMs | number | 是 | 区间结束位置,单位ms,取值(startTimeMs, duration]。可以设置-1值,系统将会播放到资源末尾。| 945| mode | [SeekMode](#seekmode8) | 否 | 支持SeekMode.SEEK_PREV_SYNC和SeekMode.SEEK_CLOSEST, <br/>默认值: SeekMode.SEEK_PREV_SYNC。| 946 947**错误码:** 948 949以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 950 951| 错误码ID | 错误信息 | 952| -------- | ------------------------------------------ | 953| 401 | The parameter check failed. Return by promise. | 954| 5400102 | Operation not allowed. Return by promise. | 955 956**示例:** 957 958```ts 959import { media } from '@kit.MediaKit'; 960import { BusinessError } from '@kit.BasicServicesKit'; 961 962avPlayer.setPlaybackRange(0, 6000, media.SeekMode.SEEK_CLOSEST).then(() => { 963 console.info('Succeeded setPlaybackRange'); 964}).catch((err: BusinessError) => { 965 console.error('Failed to setPlaybackRange' + err.message); 966}); 967``` 968 969### prepare<sup>9+</sup> 970 971prepare(callback: AsyncCallback\<void>): void 972 973准备播放音频/视频,需在[stateChange](#onstatechange9)事件成功触发至initialized状态后,才能调用。使用callback方式异步获取返回值。 974 975**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 976 977**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 978 979**参数:** 980 981| 参数名 | 类型 | 必填 | 说明 | 982| -------- | -------- | ---- | -------------------- | 983| callback | AsyncCallback\<void> | 是 | 准备播放的回调方法。 | 984 985**错误码:** 986 987以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 988 989| 错误码ID | 错误信息 | 990| -------- | ------------------------------------------ | 991| 5400102 | Operation not allowed. Return by callback. | 992| 5400106 | Unsupported format. Return by callback. | 993 994**示例:** 995 996```ts 997import { BusinessError } from '@kit.BasicServicesKit'; 998 999avPlayer.prepare((err: BusinessError) => { 1000 if (err) { 1001 console.error('Failed to prepare,error message is :' + err.message) 1002 } else { 1003 console.info('Succeeded in preparing'); 1004 } 1005}) 1006``` 1007 1008### prepare<sup>9+</sup> 1009 1010prepare(): Promise\<void> 1011 1012准备播放音频/视频,需在[stateChange](#onstatechange9)事件成功触发至initialized状态后,才能调用。通过Promise获取返回值。 1013 1014**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1015 1016**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1017 1018**返回值:** 1019 1020| 类型 | 说明 | 1021| -------------- | ------------------------- | 1022| Promise\<void> | 准备播放的Promise返回值。 | 1023 1024**错误码:** 1025 1026以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 1027 1028| 错误码ID | 错误信息 | 1029| -------- | ----------------------------------------- | 1030| 5400102 | Operation not allowed. Return by promise. | 1031| 5400106 | Unsupported format. Return by promise. | 1032 1033**示例:** 1034 1035```ts 1036import { BusinessError } from '@kit.BasicServicesKit'; 1037 1038avPlayer.prepare().then(() => { 1039 console.info('Succeeded in preparing'); 1040}, (err: BusinessError) => { 1041 console.error('Failed to prepare,error message is :' + err.message) 1042}) 1043``` 1044 1045### setMediaMuted<sup>12+</sup> 1046 1047setMediaMuted(mediaType: MediaType, muted: boolean ): Promise\<void> 1048 1049设置音频静音/取消音频静音。只能在prepared/playing/paused/completed状态下调用。仅支持设置mediaType为音频格式。 1050 1051**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1052 1053**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1054 1055**参数:** 1056 1057| 参数名 | 类型 | 必填 | 说明 | 1058| -------- | -------- | ---- | -------------------- | 1059| mediaType | [MediaType](#mediatype8) | 是 | 播放策略。 | 1060| muted | boolean | 是 | 是否静音播放。true表示是静音播放,false表示不是静音播放。 | 1061 1062**返回值:** 1063 1064| 类型 | 说明 | 1065| -------------- | ------------------------- | 1066| Promise\<void> | 准备播放的Promise返回值。 | 1067 1068**错误码:** 1069 1070以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 1071 1072| 错误码ID | 错误信息 | 1073| -------- | ----------------------------------------- | 1074| 401 | The parameter check failed. Return by promise. | 1075| 5400102 | Operation not allowed. Return by promise. | 1076 1077**示例:** 1078 1079```ts 1080import { BusinessError } from '@kit.BasicServicesKit'; 1081 1082avPlayer.prepare().then(() => { 1083 console.info('Succeeded in preparing'); 1084 avPlayer.setMediaMuted(media.MediaType.MEDIA_TYPE_AUD, true) 1085}, (err: BusinessError) => { 1086 console.error('Failed to prepare,error message is :' + err.message) 1087}) 1088``` 1089 1090### play<sup>9+</sup> 1091 1092play(callback: AsyncCallback\<void>): void 1093 1094开始播放音视频资源,只能在prepared/paused/completed状态调用。使用callback方式异步获取返回值。 1095 1096**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1097 1098**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1099 1100**参数:** 1101 1102| 参数名 | 类型 | 必填 | 说明 | 1103| -------- | -------- | ---- | -------------------- | 1104| callback | AsyncCallback\<void> | 是 | 开始播放的回调方法。 | 1105 1106**错误码:** 1107 1108以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 1109 1110| 错误码ID | 错误信息 | 1111| -------- | ------------------------------------------ | 1112| 5400102 | Operation not allowed. Return by callback. | 1113 1114**示例:** 1115 1116```ts 1117import { BusinessError } from '@kit.BasicServicesKit'; 1118 1119avPlayer.play((err: BusinessError) => { 1120 if (err) { 1121 console.error('Failed to play,error message is :' + err.message) 1122 } else { 1123 console.info('Succeeded in playing'); 1124 } 1125}) 1126``` 1127 1128### play<sup>9+</sup> 1129 1130play(): Promise\<void> 1131 1132开始播放音视频资源,只能在prepared/paused/completed状态调用。通过Promise获取返回值。 1133 1134**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1135 1136**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1137 1138**返回值:** 1139 1140| 类型 | 说明 | 1141| -------------- | ------------------------- | 1142| Promise\<void> | 开始播放的Promise返回值。 | 1143 1144**错误码:** 1145 1146以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1147 1148| 错误码ID | 错误信息 | 1149| -------- | ----------------------------------------- | 1150| 5400102 | Operation not allowed. Return by promise. | 1151 1152**示例:** 1153 1154```ts 1155import { BusinessError } from '@kit.BasicServicesKit'; 1156 1157avPlayer.play().then(() => { 1158 console.info('Succeeded in playing'); 1159}, (err: BusinessError) => { 1160 console.error('Failed to play,error message is :' + err.message) 1161}) 1162``` 1163 1164### pause<sup>9+</sup> 1165 1166pause(callback: AsyncCallback\<void>): void 1167 1168暂停播放音视频资源,只能在playing状态调用。使用callback方式异步获取返回值。 1169 1170**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1171 1172**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1173 1174**参数:** 1175 1176| 参数名 | 类型 | 必填 | 说明 | 1177| -------- | -------- | ---- | -------------------- | 1178| callback | AsyncCallback\<void> | 是 | 暂停播放的回调方法。 | 1179 1180**错误码:** 1181 1182以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1183 1184| 错误码ID | 错误信息 | 1185| -------- | ------------------------------------------ | 1186| 5400102 | Operation not allowed. Return by callback. | 1187 1188**示例:** 1189 1190```ts 1191import { BusinessError } from '@kit.BasicServicesKit'; 1192 1193avPlayer.pause((err: BusinessError) => { 1194 if (err) { 1195 console.error('Failed to pause,error message is :' + err.message) 1196 } else { 1197 console.info('Succeeded in pausing'); 1198 } 1199}) 1200``` 1201 1202### pause<sup>9+</sup> 1203 1204pause(): Promise\<void> 1205 1206暂停播放音视频资源,只能在playing状态调用。通过Promise获取返回值。 1207 1208**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1209 1210**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1211 1212**返回值:** 1213 1214| 类型 | 说明 | 1215| -------------- | ------------------------- | 1216| Promise\<void> | 暂停播放的Promise返回值。 | 1217 1218**错误码:** 1219 1220以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1221 1222| 错误码ID | 错误信息 | 1223| -------- | ----------------------------------------- | 1224| 5400102 | Operation not allowed. Return by promise. | 1225 1226**示例:** 1227 1228```ts 1229import { BusinessError } from '@kit.BasicServicesKit'; 1230 1231avPlayer.pause().then(() => { 1232 console.info('Succeeded in pausing'); 1233}, (err: BusinessError) => { 1234 console.error('Failed to pause,error message is :' + err.message) 1235}) 1236``` 1237 1238### stop<sup>9+</sup> 1239 1240stop(callback: AsyncCallback\<void>): void 1241 1242停止播放音视频资源,只能在prepared/playing/paused/completed状态调用。使用callback方式异步获取返回值。 1243 1244**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1245 1246**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1247 1248**参数:** 1249 1250| 参数名 | 类型 | 必填 | 说明 | 1251| -------- | -------- | ---- | -------------------- | 1252| callback | AsyncCallback\<void> | 是 | 停止播放的回调方法。 | 1253 1254**错误码:** 1255 1256以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1257 1258| 错误码ID | 错误信息 | 1259| -------- | ------------------------------------------ | 1260| 5400102 | Operation not allowed. Return by callback. | 1261 1262**示例:** 1263 1264```ts 1265import { BusinessError } from '@kit.BasicServicesKit'; 1266 1267avPlayer.stop((err: BusinessError) => { 1268 if (err) { 1269 console.error('Failed to stop,error message is :' + err.message) 1270 } else { 1271 console.info('Succeeded in stopping'); 1272 } 1273}) 1274``` 1275 1276### stop<sup>9+</sup> 1277 1278stop(): Promise\<void> 1279 1280停止播放音视频资源,只能在prepared/playing/paused/completed状态调用。通过Promise获取返回值。 1281 1282**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1283 1284**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1285 1286**返回值:** 1287 1288| 类型 | 说明 | 1289| -------------- | ------------------------- | 1290| Promise\<void> | 停止播放的Promise返回值。 | 1291 1292**错误码:** 1293 1294以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1295 1296| 错误码ID | 错误信息 | 1297| -------- | ----------------------------------------- | 1298| 5400102 | Operation not allowed. Return by promise. | 1299 1300**示例:** 1301 1302```ts 1303import { BusinessError } from '@kit.BasicServicesKit'; 1304 1305avPlayer.stop().then(() => { 1306 console.info('Succeeded in stopping'); 1307}, (err: BusinessError) => { 1308 console.error('Failed to stop,error message is :' + err.message) 1309}) 1310``` 1311 1312### reset<sup>9+</sup> 1313 1314reset(callback: AsyncCallback\<void>): void 1315 1316重置播放,只能在initialized/prepared/playing/paused/completed/stopped/error状态调用。使用callback方式异步获取返回值。 1317 1318**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1319 1320**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1321 1322**参数:** 1323 1324| 参数名 | 类型 | 必填 | 说明 | 1325| -------- | -------- | ---- | -------------------- | 1326| callback | AsyncCallback\<void> | 是 | 重置播放的回调方法。 | 1327 1328**错误码:** 1329 1330以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1331 1332| 错误码ID | 错误信息 | 1333| -------- | ------------------------------------------ | 1334| 5400102 | Operation not allowed. Return by callback. | 1335 1336**示例:** 1337 1338```ts 1339import { BusinessError } from '@kit.BasicServicesKit'; 1340 1341avPlayer.reset((err: BusinessError) => { 1342 if (err) { 1343 console.error('Failed to reset,error message is :' + err.message) 1344 } else { 1345 console.info('Succeeded in resetting'); 1346 } 1347}) 1348``` 1349 1350### reset<sup>9+</sup> 1351 1352reset(): Promise\<void> 1353 1354重置播放,只能在initialized/prepared/playing/paused/completed/stopped/error状态调用。通过Promise获取返回值。 1355 1356**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1357 1358**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1359 1360**返回值:** 1361 1362| 类型 | 说明 | 1363| -------------- | ------------------------- | 1364| Promise\<void> | 重置播放的Promise返回值。 | 1365 1366**错误码:** 1367 1368以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1369 1370| 错误码ID | 错误信息 | 1371| -------- | ----------------------------------------- | 1372| 5400102 | Operation not allowed. Return by promise. | 1373 1374**示例:** 1375 1376```ts 1377import { BusinessError } from '@kit.BasicServicesKit'; 1378 1379avPlayer.reset().then(() => { 1380 console.info('Succeeded in resetting'); 1381}, (err: BusinessError) => { 1382 console.error('Failed to reset,error message is :' + err.message) 1383}) 1384``` 1385 1386### release<sup>9+</sup> 1387 1388release(callback: AsyncCallback\<void>): void 1389 1390销毁播放资源,除released状态外,均可以调用。使用callback方式异步获取返回值。 1391 1392**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1393 1394**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1395 1396**参数:** 1397 1398| 参数名 | 类型 | 必填 | 说明 | 1399| -------- | -------- | ---- | -------------------- | 1400| callback | AsyncCallback\<void> | 是 | 销毁播放的回调方法。 | 1401 1402**错误码:** 1403 1404以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1405 1406| 错误码ID | 错误信息 | 1407| -------- | ------------------------------------------ | 1408| 5400102 | Operation not allowed. Return by callback. | 1409 1410**示例:** 1411 1412```ts 1413import { BusinessError } from '@kit.BasicServicesKit'; 1414 1415avPlayer.release((err: BusinessError) => { 1416 if (err) { 1417 console.error('Failed to release,error message is :' + err.message) 1418 } else { 1419 console.info('Succeeded in releasing'); 1420 } 1421}) 1422``` 1423 1424### release<sup>9+</sup> 1425 1426release(): Promise\<void> 1427 1428销毁播放资源,除released状态,都可以调用。通过Promise获取返回值。 1429 1430**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1431 1432**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1433 1434**返回值:** 1435 1436| 类型 | 说明 | 1437| -------------- | ------------------------- | 1438| Promise\<void> | 销毁播放的Promise返回值。 | 1439 1440**错误码:** 1441 1442以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1443 1444| 错误码ID | 错误信息 | 1445| -------- | ----------------------------------------- | 1446| 5400102 | Operation not allowed. Return by promise. | 1447 1448**示例:** 1449 1450```ts 1451import { BusinessError } from '@kit.BasicServicesKit'; 1452 1453avPlayer.release().then(() => { 1454 console.info('Succeeded in releasing'); 1455}, (err: BusinessError) => { 1456 console.error('Failed to release,error message is :' + err.message) 1457}) 1458``` 1459 1460### getTrackDescription<sup>9+</sup> 1461 1462getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void 1463 1464获取音视频轨道信息,可以在prepared/playing/paused状态调用。获取所有音视轨道信息,应在数据加载回调后调用。使用callback方式异步获取返回值。 1465 1466**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1467 1468**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1469 1470**参数:** 1471 1472| 参数名 | 类型 | 必填 | 说明 | 1473| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------- | 1474| callback | AsyncCallback<Array<[MediaDescription](#mediadescription8)>> | 是 | 回调函数,当获取音视频轨道信息成功,err为undefined,data为获取到的MediaDescription数组;否则为错误对象。| 1475 1476**错误码:** 1477 1478以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1479 1480| 错误码ID | 错误信息 | 1481| -------- | ------------------------------------------ | 1482| 5400102 | Operation not allowed. Return by callback. | 1483 1484**示例:** 1485 1486```ts 1487import { BusinessError } from '@kit.BasicServicesKit'; 1488 1489avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => { 1490 if ((arrList) != null) { 1491 console.info('Succeeded in doing getTrackDescription'); 1492 } else { 1493 console.error(`Failed to do getTrackDescription, error:${error}`); 1494 } 1495}); 1496``` 1497 1498### getTrackDescription<sup>9+</sup> 1499 1500getTrackDescription(): Promise\<Array\<MediaDescription>> 1501 1502获取音视频轨道信息,可以在prepared/playing/paused状态调用。通过Promise获取返回值。 1503 1504**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1505 1506**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1507 1508**返回值:** 1509 1510| 类型 | 说明 | 1511| ------------------------------------------------------ | ------------------------------------------------- | 1512| Promise<Array<[MediaDescription](#mediadescription8)>> | Promise对象,返回音视频轨道信息MediaDescription数组。 | 1513 1514**错误码:** 1515 1516以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1517 1518| 错误码ID | 错误信息 | 1519| -------- | ----------------------------------------- | 1520| 5400102 | Operation not allowed. Return by promise. | 1521 1522**示例:** 1523 1524```ts 1525import { BusinessError } from '@kit.BasicServicesKit'; 1526 1527avPlayer.getTrackDescription().then((arrList: Array<media.MediaDescription>) => { 1528 console.info('Succeeded in getting TrackDescription'); 1529}).catch((error: BusinessError) => { 1530 console.error(`Failed to get TrackDescription, error:${error}`); 1531}); 1532``` 1533 1534### getSelectedTracks<sup>12+</sup> 1535 1536getSelectedTracks(): Promise\<Array\<number>> 1537 1538获取已选择的音视频轨道索引,可以在prepared/playing/paused状态调用。通过Promise获取返回值。 1539 1540**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1541 1542**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1543 1544**返回值:** 1545 1546| 类型 | 说明 | 1547| ------------------------------------------------------ | ------------------------------------------------- | 1548| Promise\<Array\<number>> | Promise对象,返回已选择音视频轨道索引数组。 | 1549 1550**错误码:** 1551 1552以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1553 1554| 错误码ID | 错误信息 | 1555| -------- | ----------------------------------------- | 1556| 5400102 | Operation not allowed. | 1557 1558**示例:** 1559 1560```ts 1561import { BusinessError } from '@kit.BasicServicesKit'; 1562 1563avPlayer.getSelectedTracks().then((arrList: Array<number>) => { 1564 console.info('Succeeded in getting SelectedTracks'); 1565}).catch((error: BusinessError) => { 1566 console.error(`Failed to get SelectedTracks, error:${error}`); 1567}); 1568``` 1569 1570### getPlaybackInfo<sup>12+</sup> 1571 1572getPlaybackInfo(): Promise\<PlaybackInfo> 1573 1574获取播放过程信息,可以在prepared/playing/paused状态调用。通过Promise获取返回值。 1575 1576**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1577 1578**返回值:** 1579 1580| 类型 | 说明 | 1581| ------------------------------------------------------ | ------------------------------------------------- | 1582| Promise<[PlaybackInfo](#playbackinfo12)> | Promise对象,返回播放器信息PlaybackInfo。 | 1583 1584**示例:** 1585 1586```ts 1587import { BusinessError } from '@kit.BasicServicesKit'; 1588 1589let avPlayer: media.AVPlayer | undefined = undefined; 1590let playbackInfo: media.PlaybackInfo | undefined = undefined; 1591media.createAVPlayer(async (err: BusinessError, player: media.AVPlayer) => { 1592 if (player != null) { 1593 avPlayer = player; 1594 console.info(`Succeeded in creating AVPlayer`); 1595 if (avPlayer) { 1596 try { 1597 playbackInfo = await avPlayer.getPlaybackInfo(); 1598 console.info(`AVPlayer getPlaybackInfo = ${JSON.stringify(playbackInfo)}`); // 打印整个PlaybackInfo的值。 1599 } catch (error) { 1600 console.error(`error = ${error}`); 1601 } 1602 } 1603 } else { 1604 console.error(`Failed to create AVPlayer, error message:${err.message}`); 1605 } 1606}); 1607``` 1608 1609### getPlaybackPosition<sup>18+</sup> 1610 1611getPlaybackPosition(): number 1612 1613获取当前播放位置,可以在prepared/playing/paused/completed状态调用。 1614 1615**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 1616 1617**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1618 1619**返回值:** 1620 1621| 类型 | 说明 | 1622| ------------------------------------------------------ | ------------------------------------------------- | 1623| number | 返回当前播放位置的时间,单位:毫秒(ms)。| 1624 1625**错误码:** 1626 1627以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 1628 1629| 错误码ID | 错误信息 | 1630| -------- | ----------------------------------------- | 1631| 5400102 | Operation not allowed. | 1632 1633**示例:** 1634 1635```ts 1636import { BusinessError } from '@kit.BasicServicesKit'; 1637 1638avPlayer.prepare().then(() => { 1639 console.info('Succeeded in preparing') 1640 let playbackPosition: number = avPlayer.getPlaybackPosition() 1641 console.info(`AVPlayer getPlaybackPosition== ${playbackPosition}`) 1642}, (err: BusinessError) => { 1643 console.error('Failed to prepare,error message is :' + err.message) 1644}) 1645``` 1646 1647### selectTrack<sup>12+</sup> 1648 1649selectTrack(index: number, mode?: SwitchMode): Promise\<void> 1650 1651使用AVPlayer播放多音视频轨资源时,选择指定轨道播放,通过Promise获取返回值。 1652 1653**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1654 1655**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1656 1657**参数:** 1658 1659| 参数名 | 类型 | 必填 | 说明 | 1660| -------- | -------- | ---- | -------------------- | 1661| index | number | 是 | 多音视频资源的轨道索引,可通过[getTrackDescription](#gettrackdescription9-1)接口获取当前资源的所有轨道信息[MediaDescription](#mediadescription8)。 | 1662| mode | [SwitchMode](#switchmode12) | 否 | 切换视频轨道模式,默认为SMOOTH模式,**仅在DASH协议网络流视频轨切换时生效**,其他场景当前暂不支持。 | 1663 1664**返回值:** 1665 1666| 类型 | 说明 | 1667| -------------- | ------------------------- | 1668| Promise\<void> | 选择轨道完成的Promise返回值。 | 1669 1670**错误码:** 1671 1672以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 1673 1674| 错误码ID | 错误信息 | 1675| -------- | ----------------------------------------- | 1676| 401 | The parameter check failed. Return by promise. | 1677| 5400102 | Operation not allowed. Return by promise. | 1678 1679**示例:** 1680 1681<!--code_no_check--> 1682```ts 1683import { BusinessError } from '@kit.BasicServicesKit'; 1684 1685let avPlayer: media.AVPlayer = await media.createAVPlayer(); 1686let audioTrackIndex: Object = 0; 1687avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => { 1688 if (arrList != null) { 1689 for (let i = 0; i < arrList.length; i++) { 1690 if (i != 0) { 1691 // 获取音频轨道列表。 1692 audioTrackIndex = arrList[i][media.MediaDescriptionKey.MD_KEY_TRACK_INDEX]; 1693 } 1694 } 1695 } else { 1696 console.error(`Failed to get TrackDescription, error:${error}`); 1697 } 1698}); 1699 1700// 选择其中一个音频轨道。 1701avPlayer.selectTrack(parseInt(audioTrackIndex.toString())); 1702``` 1703 1704### deselectTrack<sup>12+</sup> 1705 1706deselectTrack(index: number): Promise\<void> 1707 1708使用AVPlayer播放多音轨视频时取消指定音视频轨道播放,通过Promise获取返回值。 1709 1710**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1711 1712**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1713 1714**参数:** 1715 1716| 参数名 | 类型 | 必填 | 说明 | 1717| -------- | -------- | ---- | -------------------- | 1718| index | number | 是 | 多音视频资源的轨道索引,来自[getTrackDescription](#gettrackdescription9-1)接口所获取的轨道信息[MediaDescription](#mediadescription8)。 | 1719 1720**返回值:** 1721 1722| 类型 | 说明 | 1723| -------------- | ------------------------- | 1724| Promise\<void> | 取消选择曲目完成的Promise返回值。 | 1725 1726**错误码:** 1727 1728以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 1729 1730| 错误码ID | 错误信息 | 1731| -------- | ----------------------------------------- | 1732| 401 | The parameter check failed. Return by promise. | 1733| 5400102 | Operation not allowed. Return by promise. | 1734 1735**示例:** 1736 1737<!--code_no_check--> 1738```ts 1739import { BusinessError } from '@kit.BasicServicesKit'; 1740 1741let avPlayer: media.AVPlayer = await media.createAVPlayer(); 1742let audioTrackIndex: Object = 0; 1743avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => { 1744 if (arrList != null) { 1745 for (let i = 0; i < arrList.length; i++) { 1746 if (i != 0) { 1747 // 获取音频轨道列表。 1748 audioTrackIndex = arrList[i][media.MediaDescriptionKey.MD_KEY_TRACK_INDEX]; 1749 } 1750 } 1751 } else { 1752 console.error(`Failed to get TrackDescription, error:${error}`); 1753 } 1754}); 1755 1756// 选择其中一个音频轨道。 1757avPlayer.selectTrack(parseInt(audioTrackIndex.toString())); 1758// 取消选择上次选中的音频轨道,并恢复到默认音频轨道。 1759avPlayer.deselectTrack(parseInt(audioTrackIndex.toString())); 1760``` 1761 1762### setDecryptionConfig<sup>11+</sup> 1763 1764setDecryptionConfig(mediaKeySession: drm.MediaKeySession, secureVideoPath: boolean): void 1765 1766设置解密配置。当收到[mediaKeySystemInfoUpdate事件](#onmediakeysysteminfoupdate11)时,需根据事件上报的信息创建相关配置并设置解密配置,否则无法播放。 1767 1768**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1769 1770**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1771 1772**参数:** 1773 1774| 参数名 | 类型 | 必填 | 说明 | 1775| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------- | 1776| mediaKeySession | [drm.MediaKeySession](../apis-drm-kit/js-apis-drm.md#mediakeysession) | 是 | 解密会话 | 1777| secureVideoPath | boolean | 是 | 安全视频通路,true表示选择安全视频通路,false表示选择非安全视频通路 | 1778 1779**错误码:** 1780 1781以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1782 1783| 错误码ID | 错误信息 | 1784| -------- | ----------------------------------------- | 1785| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 1786 1787**示例:** 1788 1789关于drm模块的示例具体可见[js-apis-drm.md](../apis-drm-kit/js-apis-drm.md)。 1790```ts 1791import { drm } from '@kit.DrmKit'; 1792 1793// 创建MediaKeySystem系统。 1794let keySystem:drm.MediaKeySystem = drm.createMediaKeySystem('com.clearplay.drm'); 1795// 创建MediaKeySession解密会话。 1796let keySession:drm.MediaKeySession = keySystem.createMediaKeySession(drm.ContentProtectionLevel.CONTENT_PROTECTION_LEVEL_SW_CRYPTO); 1797// 生成许可证请求、设置许可证响应等。 1798// 安全视频通路标志。 1799let secureVideoPath:boolean = false; 1800// 设置解密配置。 1801avPlayer.setDecryptionConfig(keySession, secureVideoPath); 1802``` 1803 1804### getMediaKeySystemInfos<sup>11+</sup> 1805 1806getMediaKeySystemInfos(): Array\<drm.MediaKeySystemInfo> 1807 1808获取当前播放的媒体资源的MediaKeySystemInfo。需要在[mediaKeySystemInfoUpdate事件](#onmediakeysysteminfoupdate11)触发成功后才能调用。 1809 1810**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1811 1812**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1813 1814**返回值:** 1815 1816| 类型 | 说明 | 1817| ------------------------------------------------------ | ------------------------------------------------- | 1818| Array<[drm.MediaKeySystemInfo](../apis-drm-kit/js-apis-drm.md#mediakeysysteminfo)> | MediaKeySystemInfo数组,MediaKeySystemInfo具有uuid和pssh两个属性。 | 1819 1820**示例:** 1821 1822```ts 1823import { drm } from '@kit.DrmKit'; 1824 1825const infos = avPlayer.getMediaKeySystemInfos(); 1826console.info('GetMediaKeySystemInfos count: ' + infos.length); 1827for (let i = 0; i < infos.length; i++) { 1828 console.info('GetMediaKeySystemInfos uuid: ' + infos[i]["uuid"]); 1829 console.info('GetMediaKeySystemInfos pssh: ' + infos[i]["pssh"]); 1830} 1831``` 1832 1833### seek<sup>9+</sup> 1834 1835seek(timeMs: number, mode?:SeekMode): void 1836 1837跳转到指定播放位置,只能在prepared/playing/paused/completed状态调用,可以通过[seekDone事件](#onseekdone9)确认是否生效。 1838注:直播场景不支持seek。 1839 1840**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1841 1842**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1843 1844**参数:** 1845 1846| 参数名 | 类型 | 必填 | 说明 | 1847| ------ | ---------------------- | ---- | ------------------------------------------------------------ | 1848| timeMs | number | 是 | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, [duration](#属性)]。SEEK_CONTINUOU模式可以额外取值-1,用于表示SEEK_CONTINUOUS模式结束。 | 1849| mode | [SeekMode](#seekmode8) | 否 | 基于视频I帧的跳转模式,默认为SEEK_PREV_SYNC模式,**仅在视频资源播放时设置**。 | 1850 1851**示例:** 1852 1853```ts 1854let seekTime: number = 1000 1855avPlayer.seek(seekTime, media.SeekMode.SEEK_PREV_SYNC) 1856``` 1857 1858```ts 1859// SEEK_CONTINUOUS 可以结合seekBar/slider的回调方法进行对应处理。 1860async onSlideMoving(position : number) : Promise<void> { 1861 // seekBar/slider移动过程中回调触发,调用seek(position, media.SeekMode.SEEK_CONTINUOUS)进行seek。 1862 this.avPlayer.seek(position, media.SeekMode.SEEK_CONTINUOUS) 1863} 1864 1865async onSlideEnd(position : number) : Promise<void> { 1866 // seekBar/slider移动结束回调触发,调用seek(-1, media.SeekMode.SEEK_CONTINUOUS)结束seek。 1867 this.avPlayer.seek(-1, media.SeekMode.SEEK_CONTINUOUS) 1868} 1869``` 1870 1871### isSeekContinuousSupported<sup>18+</sup> 1872 1873isSeekContinuousSupported() : boolean 1874 1875查询媒体源是否支持以SEEK_CONTINUOUS模式[SeekMode](#seekmode8)进行[seek](#seek9),在prepared/playing/paused/completed状态调用返回实际值,其余状态调用返回false。对于不支持SEEK_CONTINUOUS模式进行seek的设备,返回false。 1876 1877**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 1878 1879**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1880 1881**示例:** 1882 1883```ts 1884let isSupported = avPlayer.isSeekContinuousSupported() 1885``` 1886 1887### on('seekDone')<sup>9+</sup> 1888 1889on(type: 'seekDone', callback: Callback\<number>): void 1890 1891监听seek生效的事件。 1892 1893**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1894 1895**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1896 1897**参数:** 1898 1899| 参数名 | 类型 | 必填 | 说明 | 1900| -------- | -------- | ---- | ------------------------------------------------------------ | 1901| type | string | 是 | seek生效的事件回调类型,支持的事件:'seekDone',除SEEK_CONTINUOUS外的[SeekMode](#seekmode8)每次调用seek后都会回调此事件。 | 1902| callback | Callback\<number> | 是 | 回调函数。seek生效的事件回调方法,只会上报用户请求的time位置。<br/>**视频播放:**[SeekMode](#seekmode8)会造成实际跳转位置与用户设置产生偏差,精准位置需要通过currentTime获取,事件回调的time仅代表完成用户某一次请求。 | 1903 1904**示例:** 1905 1906```ts 1907avPlayer.on('seekDone', (seekDoneTime:number) => { 1908 console.info('seekDone called,and seek time is:' + seekDoneTime) 1909}) 1910``` 1911 1912### off('seekDone')<sup>9+</sup> 1913 1914off(type: 'seekDone', callback?: Callback\<number>): void 1915 1916取消监听seek生效的事件。 1917 1918**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1919 1920**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1921 1922**参数:** 1923 1924| 参数名 | 类型 | 必填 | 说明 | 1925| ------ | ------ | ---- | ---------------------------------------------------- | 1926| type | string | 是 | seek生效的事件回调类型,取消注册的事件:'seekDone'。 | 1927| callback | Callback\<number> | 否 | 回调函数。seek生效的事件回调方法,只会上报用户请求的time位置。<br/>**视频播放:**[SeekMode](#seekmode8)会造成实际跳转位置与用户设置产生偏差,精准位置需要通过currentTime获取,事件回调的time仅代表完成用户某一次请求。<br/>从API version 12开始支持此参数。 | 1928 1929**示例:** 1930 1931```ts 1932avPlayer.off('seekDone') 1933``` 1934 1935### setSpeed<sup>9+</sup> 1936 1937setSpeed(speed: PlaybackSpeed): void 1938 1939设置倍速模式,只能在prepared/playing/paused/completed状态调用,可以通过[speedDone事件](#onspeeddone9)确认是否生效。 1940注:直播场景不支持setSpeed。 1941 1942**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1943 1944**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1945 1946**参数:** 1947 1948| 参数名 | 类型 | 必填 | 说明 | 1949| ------ | -------------------------------- | ---- | ------------------ | 1950| speed | [PlaybackSpeed](#playbackspeed8) | 是 | 指定播放倍速模式。 | 1951 1952**示例:** 1953 1954```ts 1955avPlayer.setSpeed(media.PlaybackSpeed.SPEED_FORWARD_2_00_X) 1956``` 1957 1958### on('speedDone')<sup>9+</sup> 1959 1960on(type: 'speedDone', callback: Callback\<number>): void 1961 1962监听setSpeed生效的事件 1963 1964**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1965 1966**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1967 1968**参数:** 1969 1970| 参数名 | 类型 | 必填 | 说明 | 1971| -------- | -------- | ---- | ------------------------------------------------------------ | 1972| type | string | 是 | setSpeed生效的事件回调类型,支持的事件:'speedDone',每次调用setSpeed后都会回调此事件。 | 1973| callback | Callback\<number> | 是 | 回调函数。当setSpeed成功,上报生效的倍速模式,具体见[PlaybackSpeed](#playbackspeed8)。 | 1974 1975**示例:** 1976 1977```ts 1978avPlayer.on('speedDone', (speed:number) => { 1979 console.info('speedDone called,and speed value is:' + speed) 1980}) 1981``` 1982 1983### off('speedDone')<sup>9+</sup> 1984 1985off(type: 'speedDone', callback?: Callback\<number>): void 1986 1987取消监听setSpeed生效的事件。 1988 1989**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1990 1991**参数:** 1992 1993| 参数名 | 类型 | 必填 | 说明 | 1994| ------ | ------ | ---- | --------------------------------------------------------- | 1995| type | string | 是 | setSpeed生效的事件回调类型,取消注册的事件:'speedDone'。 | 1996| callback | Callback\<number> | 否 | 回调函数。当setSpeed成功,上报生效的倍速模式,具体见[PlaybackSpeed](#playbackspeed8)。<br/>从API version 12开始支持此参数。 | 1997 1998**示例:** 1999 2000```ts 2001avPlayer.off('speedDone') 2002``` 2003 2004### setBitrate<sup>9+</sup> 2005 2006setBitrate(bitrate: number): void 2007 2008设置比特率,以播放所指定比特率的流媒体资源,当前仅对**HLS/DASH协议网络流**有效。默认情况下,AVPlayer会根据网络连接速度选择合适的比特率。只能在prepared/playing/paused/completed状态调用,可以通过[bitrateDone](#onbitratedone9)事件确认是否生效。 2009 2010**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2011 2012**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2013 2014**参数:** 2015 2016| 参数名 | 类型 | 必填 | 说明 | 2017| ------- | ------ | ---- | ------------------------------------------------------------ | 2018| bitrate | number | 是 | 指定比特率,须通过[availableBitrates](#onavailablebitrates9)事件获得当前HLS/DASH协议网络流可用的比特率列表,如果用户指定的比特率不在此列表中,则播放器将从可用比特率列表中选择最接近的比特率。如果通过availableBitrates事件获得的比特率列表长度为0,则不支持指定比特率,也不会产生bitrateDone回调。 | 2019 2020**示例:** 2021 2022```ts 2023let bitrate: number = 96000 2024avPlayer.setBitrate(bitrate) 2025``` 2026 2027### on('bitrateDone')<sup>9+</sup> 2028 2029on(type: 'bitrateDone', callback: Callback\<number>): void 2030 2031监听setBitrate生效的事件。 2032 2033**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2034 2035**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2036 2037**参数:** 2038 2039| 参数名 | 类型 | 必填 | 说明 | 2040| -------- | -------- | ---- | ------------------------------------------------------------ | 2041| type | string | 是 | setBitrate生效的事件回调类型,支持的事件:'bitrateDone',每次调用setBitrate后都会回调此事件。 | 2042| callback | Callback\<number> | 是 | setBitrate生效的事件回调方法,上报生效的比特率。 | 2043 2044**示例:** 2045 2046```ts 2047avPlayer.on('bitrateDone', (bitrate:number) => { 2048 console.info('bitrateDone called,and bitrate value is:' + bitrate) 2049}) 2050``` 2051 2052### off('bitrateDone')<sup>9+</sup> 2053 2054off(type: 'bitrateDone', callback?: Callback\<number>): void 2055 2056取消监听setBitrate生效的事件。 2057 2058**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2059 2060**参数:** 2061 2062| 参数名 | 类型 | 必填 | 说明 | 2063| ------ | ------ | ---- | ------------------------------------------------------------ | 2064| type | string | 是 | setBitrate生效的事件回调类型,取消注册的事件:'bitrateDone'。 | 2065| callback | Callback\<number> | 否 | setBitrate生效的事件回调方法,上报生效的比特率。<br/>从API version 12开始支持此参数。 | 2066 2067**示例:** 2068 2069```ts 2070avPlayer.off('bitrateDone') 2071``` 2072 2073### on('availableBitrates')<sup>9+</sup> 2074 2075on(type: 'availableBitrates', callback: Callback\<Array\<number>>): void 2076 2077监听HLS/DASH协议网络流可用的比特率列表,只会在切换prepared状态后上报。 2078 2079**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2080 2081**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2082 2083**参数:** 2084 2085| 参数名 | 类型 | 必填 | 说明 | 2086| -------- | -------- | ---- | ------------------------------------------------------------ | 2087| type | string | 是 | HLS/DASH协议网络流可用比特率上报事件回调类型,支持的事件:'availableBitrates',只会在prepared之后上报一次。 | 2088| callback | Callback\<Array\<number>> | 是 | HLS/DASH协议网络流可用比特率上报事件回调方法,使用数组存放支持的比特率。如果数组长度为0,则不支持指定比特率。 | 2089 2090**示例:** 2091 2092```ts 2093avPlayer.on('availableBitrates', (bitrates: Array<number>) => { 2094 console.info('availableBitrates called,and availableBitrates length is:' + bitrates.length) 2095}) 2096``` 2097 2098### off('availableBitrates')<sup>9+</sup> 2099 2100off(type: 'availableBitrates', callback?: Callback\<Array\<number>>): void 2101 2102取消监听HLS/DASH协议网络流可用的比特率列表,调用[prepare](#prepare9)后,上报此事件。 2103 2104**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2105 2106**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2107 2108**参数:** 2109 2110| 参数名 | 类型 | 必填 | 说明 | 2111| ------ | ------ | ---- | ------------------------------------------------------------ | 2112| type | string | 是 | HLS/DASH协议网络流可用比特率上报事件回调类型,取消注册的事件:'availableBitrates'。 | 2113| callback | Callback\<Array\<number>> | 否 | HLS/DASH协议网络流可用比特率上报事件回调方法,使用数组存放支持的比特率。如果数组长度为0,则不支持指定比特率。<br/>从API version 12开始支持此参数。 | 2114 2115**示例:** 2116 2117```ts 2118avPlayer.off('availableBitrates') 2119``` 2120 2121 2122### on('mediaKeySystemInfoUpdate')<sup>11+</sup> 2123 2124on(type: 'mediaKeySystemInfoUpdate', callback: Callback\<Array\<drm.MediaKeySystemInfo>>): void 2125 2126监听mediaKeySystemInfoUpdate事件。 2127 2128**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2129 2130**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2131 2132**参数:** 2133 2134| 参数名 | 类型 | 必填 | 说明 | 2135| -------- | -------- | ---- | ------------------------------------------------------------ | 2136| type | string | 是 | 版权保护信息更新上报事件回调类型,支持的事件:'mediaKeySystemInfoUpdate',当播放内容的版权保护信息更新时上报事件。 | 2137| callback | Callback\<Array\<drm.[MediaKeySystemInfo](../apis-drm-kit/js-apis-drm.md#mediakeysysteminfo)>> | 是 | 版权保护信息更新上报事件回调方法,上报MediaKeySystemInfo数组。 | 2138 2139**示例:** 2140 2141```ts 2142import { drm } from '@kit.DrmKit'; 2143 2144avPlayer.on('mediaKeySystemInfoUpdate', (mediaKeySystemInfo: Array<drm.MediaKeySystemInfo>) => { 2145 for (let i = 0; i < mediaKeySystemInfo.length; i++) { 2146 console.info('mediaKeySystemInfoUpdate happened uuid: ' + mediaKeySystemInfo[i]["uuid"]); 2147 console.info('mediaKeySystemInfoUpdate happened pssh: ' + mediaKeySystemInfo[i]["pssh"]); 2148 } 2149}) 2150``` 2151 2152### off('mediaKeySystemInfoUpdate')<sup>11+</sup> 2153 2154off(type: 'mediaKeySystemInfoUpdate', callback?: Callback\<Array\<drm.MediaKeySystemInfo>>): void; 2155 2156取消监听mediaKeySystemInfoUpdate事件。 2157 2158**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2159 2160**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2161 2162**参数:** 2163 2164| 参数名 | 类型 | 必填 | 说明 | 2165| ------ | ------ | ---- | ------------------------------------------------------------ | 2166| type | string | 是 | 版权保护信息更新上报事件回调类型,取消注册的事件:'mediaKeySystemInfoUpdate'。 | 2167| callback | Callback\<Array\<drm.[MediaKeySystemInfo](../apis-drm-kit/js-apis-drm.md#mediakeysysteminfo)>> | 否 | 版权保护信息更新上报事件回调方法,上报版权保护信息数组。如填写该参数,则仅取消注册此回调方法,否则取消注册mediaKeySystemInfoUpdate事件的所有回调方法。 | 2168 2169**示例:** 2170 2171```ts 2172avPlayer.off('mediaKeySystemInfoUpdate') 2173``` 2174 2175### setVolume<sup>9+</sup> 2176 2177setVolume(volume: number): void 2178 2179设置媒体播放音量,只能在prepared/playing/paused/completed状态调用,可以通过[volumeChange事件](#onvolumechange9)确认是否生效。 2180 2181**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2182 2183**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2184 2185**参数:** 2186 2187| 参数名 | 类型 | 必填 | 说明 | 2188| ------ | ------ | ---- | ------------------------------------------------------------ | 2189| volume | number | 是 | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 | 2190 2191**示例:** 2192 2193```ts 2194let volume: number = 1.0 2195avPlayer.setVolume(volume) 2196``` 2197 2198### on('volumeChange')<sup>9+</sup> 2199 2200on(type: 'volumeChange', callback: Callback\<number>): void 2201 2202监听setVolume生效的事件。 2203 2204**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2205 2206**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2207 2208**参数:** 2209 2210| 参数名 | 类型 | 必填 | 说明 | 2211| -------- | -------- | ---- | ------------------------------------------------------------ | 2212| type | string | 是 | setVolume生效的事件回调类型,支持的事件:'volumeChange',每次调用setVolume后都会回调此事件。 | 2213| callback | Callback\<number> | 是 | setVolume生效的事件回调方法,上报生效的媒体音量。 | 2214 2215**示例:** 2216 2217```ts 2218avPlayer.on('volumeChange', (vol: number) => { 2219 console.info('volumeChange called,and new volume is :' + vol) 2220}) 2221``` 2222 2223### off('volumeChange')<sup>9+</sup> 2224 2225off(type: 'volumeChange', callback?: Callback\<number>): void 2226 2227取消监听setVolume生效的事件。 2228 2229**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2230 2231**参数:** 2232 2233| 参数名 | 类型 | 必填 | 说明 | 2234| ------ | ------ | ---- | ------------------------------------------------------------ | 2235| type | string | 是 | setVolume生效的事件回调类型,取消注册的事件:'volumeChange'。 | 2236| callback | Callback\<number> | 否 | setVolume生效的事件回调方法,上报生效的媒体音量。<br/>从API version 12开始支持此参数。 | 2237 2238**示例:** 2239 2240```ts 2241avPlayer.off('volumeChange') 2242``` 2243 2244### on('endOfStream')<sup>9+</sup> 2245 2246on(type: 'endOfStream', callback: Callback\<void>): void 2247 2248监听资源播放至结尾的事件;如果用户设置[loop](#属性)=true,播放会跳转至开头重播;如果用户没有设置loop,会通过[stateChange](#onstatechange9)上报completed状态。 2249 2250**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2251 2252**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2253 2254**参数:** 2255 2256| 参数名 | 类型 | 必填 | 说明 | 2257| -------- | -------- | ---- | ------------------------------------------------------------ | 2258| type | string | 是 | 资源播放至结尾的事件回调类型,支持的事件:'endOfStream',当播放至结尾时会上报此事件。 | 2259| callback | Callback\<void> | 是 | 资源播放至结尾的事件回调方法。 | 2260 2261**示例:** 2262 2263```ts 2264avPlayer.on('endOfStream', () => { 2265 console.info('endOfStream called') 2266}) 2267``` 2268 2269### off('endOfStream')<sup>9+</sup> 2270 2271off(type: 'endOfStream', callback?: Callback\<void>): void 2272 2273取消监听资源播放至结尾的事件。 2274 2275**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2276 2277**参数:** 2278 2279| 参数名 | 类型 | 必填 | 说明 | 2280| ------ | ------ | ---- | ------------------------------------------------------------ | 2281| type | string | 是 | 资源播放至结尾的事件回调类型,取消注册的事件:'endOfStream'。 | 2282| callback | Callback\<void> | 否 | 资源播放至结尾的事件回调方法。<br/>从API version 12开始支持此参数。 | 2283 2284**示例:** 2285 2286```ts 2287avPlayer.off('endOfStream') 2288``` 2289 2290### on('timeUpdate')<sup>9+</sup> 2291 2292on(type: 'timeUpdate', callback: Callback\<number>): void 2293 2294监听资源播放当前时间,单位为毫秒(ms),用于刷新进度条当前位置,默认间隔100ms时间上报,因用户操作(seek)产生的时间变化会立刻上报。 2295 2296注:直播场景不支持timeUpdate上报。 2297 2298**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 2299 2300**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2301 2302**参数:** 2303 2304| 参数名 | 类型 | 必填 | 说明 | 2305| -------- | -------- | ---- | ---------------------------------------------- | 2306| type | string | 是 | 时间更新的回调类型,支持的事件:'timeUpdate'。 | 2307| callback | Callback\<number> | 是 | 回调函数。返回当前时间。 | 2308 2309**示例:** 2310 2311```ts 2312avPlayer.on('timeUpdate', (time:number) => { 2313 console.info('timeUpdate called,and new time is :' + time) 2314}) 2315``` 2316 2317### off('timeUpdate')<sup>9+</sup> 2318 2319off(type: 'timeUpdate', callback?: Callback\<number>): void 2320 2321取消监听资源播放当前时间。 2322 2323**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 2324 2325**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2326 2327**参数:** 2328 2329| 参数名 | 类型 | 必填 | 说明 | 2330| ------ | ------ | ---- | -------------------------------------------------- | 2331| type | string | 是 | 时间更新的回调类型,取消注册的事件:'timeUpdate'。 | 2332| callback | Callback\<number> | 否 | 回调函数。返回当前时间。<br/>从API version 12开始支持此参数。 | 2333 2334**示例:** 2335 2336```ts 2337avPlayer.off('timeUpdate') 2338``` 2339 2340### on('durationUpdate')<sup>9+</sup> 2341 2342 2343on(type: 'durationUpdate', callback: Callback\<number>): void 2344 2345监听资源播放资源的时长,单位为毫秒(ms),用于刷新进度条长度,默认只在prepared上报一次,同时允许一些特殊码流刷新多次时长。 2346注:直播场景不支持durationUpdate上报。 2347 2348**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2349 2350**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2351 2352**参数:** 2353 2354| 参数名 | 类型 | 必填 | 说明 | 2355| -------- | -------- | ---- | -------------------------------------------------- | 2356| type | string | 是 | 时长更新的回调类型,支持的事件:'durationUpdate'。 | 2357| callback | Callback\<number> | 是 | 回调函数。返回资源时长。 | 2358 2359**示例:** 2360 2361```ts 2362avPlayer.on('durationUpdate', (duration: number) => { 2363 console.info('durationUpdate called,new duration is :' + duration) 2364}) 2365``` 2366 2367### off('durationUpdate')<sup>9+</sup> 2368 2369off(type: 'durationUpdate', callback?: Callback\<number>): void 2370 2371取消监听资源播放资源的时长。 2372 2373**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2374 2375**参数:** 2376 2377| 参数名 | 类型 | 必填 | 说明 | 2378| ------ | ------ | ---- | ------------------------------------------------------ | 2379| type | string | 是 | 时长更新的回调类型,取消注册的事件:'durationUpdate'。 | 2380| callback | Callback\<number> | 否 | 回调函数。返回资源时长。<br/>从API version 12开始支持此参数。 | 2381 2382**示例:** 2383 2384```ts 2385avPlayer.off('durationUpdate') 2386``` 2387 2388### on('bufferingUpdate')<sup>9+</sup> 2389 2390on(type: 'bufferingUpdate', callback: OnBufferingUpdateHandler): void 2391 2392订阅音视频缓存更新事件,仅网络播放支持该订阅事件。 2393 2394**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2395 2396**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2397 2398**参数:** 2399 2400| 参数名 | 类型 | 必填 | 说明 | 2401| -------- | -------- | ---- | ------------------------------------------------------------ | 2402| type | string | 是 | 播放缓存事件回调类型,支持的事件:'bufferingUpdate'。 | 2403| callback | [OnBufferingUpdateHandler](#onbufferingupdatehandler12) | 是 | 播放缓存事件回调方法。 | 2404 2405**示例:** 2406 2407```ts 2408avPlayer.on('bufferingUpdate', (infoType: media.BufferingInfoType, value: number) => { 2409 console.info('bufferingUpdate called,and infoType value is:' + infoType + ', value is :' + value) 2410}) 2411``` 2412 2413### off('bufferingUpdate')<sup>9+</sup> 2414 2415off(type: 'bufferingUpdate', callback?: OnBufferingUpdateHandler): void 2416 2417取消监听音视频缓存更新事件。 2418 2419**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2420 2421**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2422 2423**参数:** 2424 2425| 参数名 | 类型 | 必填 | 说明 | 2426| ------ | ------ | ---- | --------------------------------------------------------- | 2427| type | string | 是 | 播放缓存事件回调类型,取消注册的事件:'bufferingUpdate'。 | 2428| callback | [OnBufferingUpdateHandler](#onbufferingupdatehandler12) | 否 | 播放缓存事件回调方法。 | 2429 2430**示例:** 2431 2432```ts 2433avPlayer.off('bufferingUpdate') 2434``` 2435 2436### on('startRenderFrame')<sup>9+</sup> 2437 2438on(type: 'startRenderFrame', callback: Callback\<void>): void 2439 2440订阅视频播放开始首帧渲染的更新事件,仅视频播放支持该订阅事件,该事件仅代表播放服务将第一帧画面送显示模块,实际效果依赖显示服务渲染性能。 2441 2442**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2443 2444**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2445 2446**参数:** 2447 2448| 参数名 | 类型 | 必填 | 说明 | 2449| -------- | -------- | ---- | ------------------------------------------------------------ | 2450| type | string | 是 | 视频播放开始首帧渲染事件回调类型,支持的事件:'startRenderFrame'。 | 2451| callback | Callback\<void> | 是 | 视频播放开始首帧渲染事件回调方法。 | 2452 2453**示例:** 2454 2455```ts 2456avPlayer.on('startRenderFrame', () => { 2457 console.info('startRenderFrame called') 2458}) 2459``` 2460 2461### off('startRenderFrame')<sup>9+</sup> 2462 2463off(type: 'startRenderFrame', callback?: Callback\<void>): void 2464 2465取消监听视频播放开始首帧渲染的更新事件。 2466 2467**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2468 2469**参数:** 2470 2471| 参数名 | 类型 | 必填 | 说明 | 2472| ------ | ------ | ---- | ------------------------------------------------------------ | 2473| type | string | 是 | 视频播放开始首帧渲染事件回调类型,取消注册的事件:'startRenderFrame'。 | 2474| callback | Callback\<void> | 否 | 视频播放开始首帧渲染事件回调方法。<br/>从API version 12开始支持此参数。 | 2475 2476**示例:** 2477 2478```ts 2479avPlayer.off('startRenderFrame') 2480``` 2481 2482### on('videoSizeChange')<sup>9+</sup> 2483 2484on(type: 'videoSizeChange', callback: OnVideoSizeChangeHandler): void 2485 2486监听视频播放宽高变化事件,仅视频播放支持该订阅事件,默认只在prepared状态上报一次,但HLS协议码流会在切换分辨率时上报。 2487 2488**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2489 2490**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2491 2492**参数:** 2493 2494| 参数名 | 类型 | 必填 | 说明 | 2495| -------- | -------- | ---- | ------------------------------------------------------------ | 2496| type | string | 是 | 视频播放宽高变化事件回调类型,支持的事件:'videoSizeChange'。 | 2497| callback | [OnVideoSizeChangeHandler](#onvideosizechangehandler12) | 是 | 视频播放宽高变化事件回调方法。 | 2498 2499**示例:** 2500 2501```ts 2502avPlayer.on('videoSizeChange', (width: number, height: number) => { 2503 console.info('videoSizeChange called,and width is:' + width + ', height is :' + height) 2504}) 2505``` 2506 2507### off('videoSizeChange')<sup>9+</sup> 2508 2509off(type: 'videoSizeChange', callback?: OnVideoSizeChangeHandler): void 2510 2511取消监听视频播放宽高变化事件。 2512 2513**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2514 2515**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2516 2517**参数:** 2518 2519| 参数名 | 类型 | 必填 | 说明 | 2520| ------ | ------ | ---- | ------------------------------------------------------------ | 2521| type | string | 是 | 视频播放宽高变化事件回调类型,取消注册的事件:'videoSizeChange'。 | 2522| callback | [OnVideoSizeChangeHandler](#onvideosizechangehandler12) | 否 | 视频播放宽高变化事件回调方法。<br/>从API version 12开始支持此参数。 | 2523 2524**示例:** 2525 2526```ts 2527avPlayer.off('videoSizeChange') 2528``` 2529 2530### on('audioInterrupt')<sup>9+</sup> 2531 2532on(type: 'audioInterrupt', callback: Callback\<audio.InterruptEvent>): void 2533 2534监听音频焦点变化事件,多个音视频资源同时播放时,会根据音频焦点模型[audio.InterruptMode](../apis-audio-kit/js-apis-audio.md#interruptmode9)触发此事件。应用需根据不同焦点变化事件作相应处理。具体可参考[处理音频焦点事件](../../media/audio/audio-playback-concurrency.md)。 2535 2536**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2537 2538**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2539 2540**参数:** 2541 2542| 参数名 | 类型 | 必填 | 说明 | 2543| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------------------- | 2544| type | string | 是 | 音频焦点变化事件回调类型,支持的事件:'audioInterrupt'。 | 2545| callback | Callback\<[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)> | 是 | 音频焦点变化事件回调方法。 | 2546 2547**示例:** 2548 2549```ts 2550import { audio } from '@kit.AudioKit'; 2551 2552avPlayer.on('audioInterrupt', (info: audio.InterruptEvent) => { 2553 console.info('audioInterrupt called,and InterruptEvent info is:' + info) 2554}) 2555``` 2556 2557### off('audioInterrupt')<sup>9+</sup> 2558 2559off(type: 'audioInterrupt', callback?: Callback<audio.InterruptEvent>): void 2560 2561取消监听音频焦点变化事件。 2562 2563**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2564 2565**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2566 2567**参数:** 2568 2569| 参数名 | 类型 | 必填 | 说明 | 2570| ------ | ------ | ---- | ------------------------------------------------------------ | 2571| type | string | 是 | 音频焦点变化事件回调类型,取消注册的事件:'audioInterrupt'。 | 2572| callback | Callback\<[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)> | 否 | 音频焦点变化事件回调方法。<br/>从API version 12开始支持此参数。 | 2573 2574**示例:** 2575 2576```ts 2577avPlayer.off('audioInterrupt') 2578``` 2579 2580### on('audioOutputDeviceChangeWithInfo')<sup>11+</sup> 2581 2582on(type: 'audioOutputDeviceChangeWithInfo', callback: Callback\<audio.AudioStreamDeviceChangeInfo>): void 2583 2584订阅监听音频流输出设备变化及原因,使用callback方式返回结果。 2585 2586在订阅此监听时,建议参考[响应音频流输出设备变更](../../media/audio/audio-output-device-change.md)自行实现设备连接或者断开时的播放器行为。 2587 2588**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2589 2590**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2591 2592**参数:** 2593 2594| 参数名 | 类型 | 必填 | 说明 | 2595| :------- | :------------------------- | :--- | :------------------------------------------ | 2596| type | string | 是 | 事件回调类型,支持的事件为:'outputDeviceChangeWithInfo'。 | 2597| callback | Callback\<[audio.AudioStreamDeviceChangeInfo](../apis-audio-kit/js-apis-audio.md#audiostreamdevicechangeinfo11)> | 是 | 回调函数,返回当前音频流的输出设备描述信息及变化原因。 | 2598 2599**错误码:** 2600 2601| 错误码ID | 错误信息 | 2602| -------- | ------------------------------------------ | 2603| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2604 2605**示例:** 2606 2607```ts 2608import { audio } from '@kit.AudioKit'; 2609 2610avPlayer.on('audioOutputDeviceChangeWithInfo', (data: audio.AudioStreamDeviceChangeInfo) => { 2611 console.info(`${JSON.stringify(data)}`); 2612}); 2613``` 2614 2615### off('audioOutputDeviceChangeWithInfo')<sup>11+</sup> 2616 2617off(type: 'audioOutputDeviceChangeWithInfo', callback?: Callback\<audio.AudioStreamDeviceChangeInfo>): void 2618 2619取消订阅监听音频流输出设备变化及原因,使用callback方式返回结果。 2620 2621**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2622 2623**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2624 2625**参数:** 2626 2627| 参数名 | 类型 | 必填 | 说明 | 2628| :------- | :------------------------- | :--- | :------------------------------------------ | 2629| type | string | 是 | 事件回调类型,支持的事件为:'outputDeviceChange'。 | 2630| callback | Callback\<[audio.AudioStreamDeviceChangeInfo](../apis-audio-kit/js-apis-audio.md#audiostreamdevicechangeinfo11)> | 否 | 回调函数,返回当前音频流的输出设备描述信息及变化原因。 | 2631 2632**错误码:** 2633 2634| 错误码ID | 错误信息 | 2635| -------- | ------------------------------------------ | 2636| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2637 2638**示例:** 2639 2640```ts 2641avPlayer.off('audioOutputDeviceChangeWithInfo'); 2642``` 2643 2644### addSubtitleFromFd<sup>12+</sup> 2645 2646addSubtitleFromFd(fd: number, offset?: number, length?: number): Promise\<void> 2647 2648依据fd为视频添加外挂字幕,当前仅支持与视频资源同时设置(在avplayer设置fdSrc视频资源后设置外挂字幕)。使用Promise方式返回结果。 2649 2650**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2651 2652**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2653 2654**参数:** 2655 2656| 参数名 | 类型 | 必填 | 说明 | 2657| ------ | ---------------------- | ---- | ------------------------------------------------------------ | 2658| fd | number | 是 | 资源句柄,通过[resourceManager.getRawFd](../apis-localization-kit/js-apis-resource-manager.md#getrawfd9)获取。 | 2659| offset | number | 否 | 资源偏移量,需要基于预置资源的信息输入,非法值会造成字幕频资源解析错误,默认值:0。 | 2660| length | number | 否 | 资源长度,默认值为文件中从偏移量开始的剩余字节,需要基于预置资源的信息输入,非法值会造成字幕频资源解析错误,默认值:0。 | 2661 2662**返回值:** 2663 2664| 类型 | 说明 | 2665| -------------- | ------------------------------------------ | 2666| Promise\<void> | 添加外挂字幕addSubtitleFromFd方法的Promise返回值。 | 2667 2668**错误码:** 2669 2670| 错误码ID | 错误信息 | 2671| -------- | ------------------------------------------ | 2672| 401 | The parameter check failed. Return by promise. | 2673| 5400102 | Operation not allowed. Return by promise. | 2674 2675**示例:** 2676 2677<!--code_no_check--> 2678```ts 2679import { common } from '@kit.AbilityKit' 2680 2681private context: Context | undefined; 2682constructor(context: Context) { 2683 this.context = context; // this.getUIContext().getHostContext(); 2684} 2685let fileDescriptor = await this.context.resourceManager.getRawFd('xxx.srt'); 2686 2687avPlayer.addSubtitleFromFd(fileDescriptor.fd, fileDescriptor.offset, fileDescriptor.length) 2688``` 2689 2690### addSubtitleFromUrl<sup>12+</sup> 2691 2692addSubtitleFromUrl(url: string): Promise\<void> 2693 2694依据url为视频添加外挂字幕,当前仅支持与视频资源同时设置(在avplayer设置fdSrc视频资源后设置外挂字幕)。使用Promise方式返回结果。 2695 2696**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2697 2698**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2699 2700**参数:** 2701 2702| 参数名 | 类型 | 必填 | 说明 | 2703| ------ | ------ | ---- | ------------------------------------------------------------ | 2704| url | string | 是 | 外挂字幕文件地址。 | 2705 2706**返回值:** 2707 2708| 类型 | 说明 | 2709| -------------- | ------------------------------------------ | 2710| Promise\<void> | 添加外挂字幕addSubtitleFromUrl方法的Promise返回值。 | 2711 2712**错误码:** 2713 2714| 错误码ID | 错误信息 | 2715| -------- | ------------------------------------------ | 2716| 401 | The parameter check failed. Return by promise. | 2717| 5400102 | Operation not allowed. Return by promise. | 2718 2719**示例:** 2720 2721<!--code_no_check--> 2722```ts 2723let fdUrl:string = 'http://xxx.xxx.xxx/xx/index.srt' 2724 2725let avPlayer: media.AVPlayer = await media.createAVPlayer() 2726avPlayer.addSubtitleFromUrl(fdUrl) 2727``` 2728 2729### on('subtitleUpdate')<sup>12+</sup> 2730 2731on(type: 'subtitleUpdate', callback: Callback\<SubtitleInfo>): void 2732 2733订阅获取外挂字幕的事件,当有外挂字幕时,会通过订阅的回调方法通知用户。用户只能订阅一个外挂字幕事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。 2734 2735**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2736 2737**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2738 2739**参数:** 2740 2741| 参数名 | 类型 | 必填 | 说明 | 2742| -------- | -------- | ---- | ------------------------------------------------------------ | 2743| type | string | 是 | 事件回调类型,支持的事件为:'subtitleUpdate'。 | 2744| callback | function | 是 | 外挂字幕事件回调方法。 | 2745 2746**示例:** 2747 2748```ts 2749avPlayer.on('subtitleUpdate', async (info: media.SubtitleInfo) => { 2750 if (info) { 2751 let text = (!info.text) ? '' : info.text 2752 let startTime = (!info.startTime) ? 0 : info.startTime 2753 let duration = (!info.duration) ? 0 : info.duration 2754 console.info('subtitleUpdate info: text=' + text + ' startTime=' + startTime +' duration=' + duration) 2755 } else { 2756 console.info('subtitleUpdate info is null') 2757 } 2758}) 2759``` 2760 2761### off('subtitleUpdate')<sup>12+</sup> 2762 2763off(type: 'subtitleUpdate', callback?: Callback\<SubtitleInfo>): void 2764 2765取消订阅获取外挂字幕的事件。 2766 2767**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2768 2769**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2770 2771**参数:** 2772 2773| 参数名 | 类型 | 必填 | 说明 | 2774| -------- | -------- | ---- | ------------------------------------------------------------ | 2775| type | string | 是 | 事件回调类型,支持的事件为:'subtitleUpdate'。 | 2776| callback | function | 否 | 取消外挂字幕事件的回调方法。 | 2777 2778**示例:** 2779 2780```ts 2781avPlayer.off('subtitleUpdate') 2782``` 2783 2784### on('trackChange')<sup>12+</sup> 2785 2786on(type: 'trackChange', callback: OnTrackChangeHandler): void 2787 2788订阅获取轨道变更的事件,当播放的轨道变更时,会通过订阅的回调方法通知用户。用户只能订阅一个轨道变更事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。 2789 2790**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2791 2792**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2793 2794**参数:** 2795 2796| 参数名 | 类型 | 必填 | 说明 | 2797| -------- | -------- | ---- | ------------------------------------------------------------ | 2798| type | string | 是 | 事件回调类型,支持的事件为:'trackChange'。 | 2799| callback | [OnTrackChangeHandler](#ontrackchangehandler12) | 是 | 轨道变更事件回调方法。 | 2800 2801**示例:** 2802 2803```ts 2804avPlayer.on('trackChange', (index: number, isSelect: boolean) => { 2805 console.info('trackChange info: index=' + index + ' isSelect=' + isSelect) 2806}) 2807``` 2808 2809### off('trackChange')<sup>12+</sup> 2810 2811off(type: 'trackChange', callback?: OnTrackChangeHandler): void 2812 2813取消订阅获取轨道变更的事件。 2814 2815**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2816 2817**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2818 2819**参数:** 2820 2821| 参数名 | 类型 | 必填 | 说明 | 2822| -------- | -------- | ---- | ------------------------------------------------------------ | 2823| type | string | 是 | 事件回调类型,支持的事件为:'trackChange'。 | 2824| callback | [OnTrackChangeHandler](#ontrackchangehandler12) | 否 | 取消轨道变更事件的回调方法。 | 2825 2826**示例:** 2827 2828```ts 2829avPlayer.off('trackChange') 2830``` 2831 2832### on('trackInfoUpdate')<sup>12+</sup> 2833 2834on(type: 'trackInfoUpdate', callback: Callback\<Array\<MediaDescription>>): void 2835 2836订阅获取轨道信息更新的事件,当播放的轨道有更新时,会通过订阅的回调方法通知用户。用户只能订阅一个轨道变更事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。 2837 2838**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2839 2840**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2841 2842**参数:** 2843 2844| 参数名 | 类型 | 必填 | 说明 | 2845| -------- | -------- | ---- | ------------------------------------------------------------ | 2846| type | string | 是 | 事件回调类型,支持的事件为:'trackInfoUpdate'。 | 2847| callback | Callback\<Array\<[MediaDescription](#mediadescription8)>> | 是 | 轨道信息更新事件回调方法。 | 2848 2849**示例:** 2850 2851```ts 2852avPlayer.on('trackInfoUpdate', (info: Array<media.MediaDescription>) => { 2853 if (info) { 2854 for (let i = 0; i < info.length; i++) { 2855 let propertyIndex: Object = info[i][media.MediaDescriptionKey.MD_KEY_TRACK_INDEX]; 2856 let propertyType: Object = info[i][media.MediaDescriptionKey.MD_KEY_TRACK_TYPE]; 2857 console.info('track info: index=' + propertyIndex + ' tracktype=' + propertyType) 2858 } 2859 } else { 2860 console.info('track info is null') 2861 } 2862}) 2863``` 2864 2865### off('trackInfoUpdate')<sup>12+</sup> 2866 2867off(type: 'trackInfoUpdate', callback?: Callback\<Array\<MediaDescription>>): void 2868 2869取消订阅获取轨道变更的事件。 2870 2871**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2872 2873**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2874 2875**参数:** 2876 2877| 参数名 | 类型 | 必填 | 说明 | 2878| -------- | -------- | ---- | ------------------------------------------------------------ | 2879| type | string | 是 | 事件回调类型,支持的事件为:'trackInfoUpdate'。 | 2880| callback | Callback\<Array\<[MediaDescription](#mediadescription8)>> | 否 | 取消轨道信息更新事件的回调方法。 | 2881 2882**示例:** 2883 2884```ts 2885avPlayer.off('trackInfoUpdate') 2886``` 2887 2888### on('amplitudeUpdate')<sup>13+</sup> 2889 2890on(type: 'amplitudeUpdate', callback: Callback\<Array\<number>>): void 2891 2892订阅音频最大电平值,音频资源播放时定时上报。 2893 2894**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2895 2896**参数:** 2897 2898| 参数名 | 类型 | 必填 | 说明 | 2899| -------- | -------- | ---- | ------------------------------------------------------------ | 2900| type | string | 是 | 事件回调类型,支持的事件为:'amplitudeUpdate'。 | 2901| callback | Callback\<Array\<number>> | 是 | 音频最大电平值更新事件回调方法。 | 2902 2903**示例:** 2904 2905```ts 2906avPlayer.on('amplitudeUpdate', (value: Array<number>) => { 2907 console.info('amplitudeUpdate called,and amplitudeUpdate = ${value}') 2908}) 2909``` 2910 2911### off('amplitudeUpdate')<sup>13+</sup> 2912 2913off(type: 'amplitudeUpdate', callback?: Callback\<Array\<number>>): void 2914 2915取消订阅获取音频最大电平值事件。 2916 2917**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2918 2919**参数:** 2920 2921| 参数名 | 类型 | 必填 | 说明 | 2922| ------ | ------ | ---- | ------------------------------------------------------------ | 2923| type | string | 是 | 事件回调类型,支持的事件为:'amplitudeUpdate'。 | 2924| callback | Callback\<Array\<number>> | 否 | 取消音频最大电平值更新事件回调方法。 | 2925 2926**示例:** 2927 2928```ts 2929avPlayer.off('amplitudeUpdate') 2930``` 2931 2932### on('seiMessageReceived')<sup>18+</sup> 2933 2934on(type: 'seiMessageReceived', payloadTypes: Array\<number>, callback: OnSeiMessageHandle): void 2935 2936订阅获取SEI信息事件,仅适用于HTTP-FLV直播,视频流中包含SEI信息时上报。需在prepare之前订阅,当用户重复订阅时,以最后一次订阅的回调接口为准。 2937 2938**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 2939 2940**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2941 2942**参数:** 2943 2944| 参数名 | 类型 | 必填 | 说明 | 2945| -------- | -------- | ---- | ------------------------------------------------------------ | 2946| type | string | 是 | 事件回调类型,支持的事件为:'seiMessageReceived'。 | 2947| payloadTypes | Array\<number> | 是 | SEI信息的订阅负载类型数组。当前仅支持负载类型为5,即payloadType = 5。| 2948| callback | [OnSeiMessageHandle](#onseimessagehandle18) | 是 | 用于监听SEI信息事件的回调函数,接收订阅的负载类型。 | 2949 2950**示例:** 2951 2952```ts 2953import util from '@ohos.util'; 2954 2955avPlayer.on('seiMessageReceived', [5], (messages: Array<media.SeiMessage>, playbackPosition?: number) => 2956{ 2957 console.info('seiMessageReceived playbackPosition ' + playbackPosition) 2958 2959 for (let key = 0; key < messages.length; key++) { 2960 console.info('seiMessageReceived messages payloadType ' + messages[key].payloadType + ' payload size ' + messages[key].payload.byteLength) 2961 2962 let textDecoder = util.TextDecoder.create("utf-8",{ignoreBOM: true}) 2963 let ab = messages[key]?.payload?.slice(16, messages[key].payload.byteLength) 2964 let result: Uint8Array = new Uint8Array(ab) 2965 let retStr: string = textDecoder.decodeToString(result) 2966 console.info('seiMessageReceived messages payload ' + retStr) 2967 } 2968}); 2969``` 2970 2971### off('seiMessageReceived')<sup>18+</sup> 2972 2973off(type: 'seiMessageReceived', payloadTypes?: Array\<number>, callback?: OnSeiMessageHandle): void 2974 2975取消订阅获取SEI信息事件。 2976 2977**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 2978 2979**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2980 2981**参数:** 2982 2983| 参数名 | 类型 | 必填 | 说明 | 2984| ------ | ------ | ---- | ------------------------------------------------------------ | 2985| type | string | 是 | 事件回调类型,支持的事件为:'seiMessageReceived'。 | 2986| payloadTypes | Array\<number> | 否 | SEI信息的订阅负载类型。 | 2987| callback | [OnSeiMessageHandle](#onseimessagehandle18) | 否 | 用于监听SEI信息事件的回调函数,接收订阅的负载类型。 | 2988 2989**示例:** 2990 2991```ts 2992avPlayer.off('seiMessageReceived') 2993``` 2994 2995### setSuperResolution<sup>18+</sup> 2996 2997setSuperResolution(enabled: boolean) : Promise\<void> 2998 2999动态开启/关闭超分算法,可以在 'initialized' | 'prepared' | 'playing' | 'paused' | 'completed' | 'stopped' 状态调用。使用Promise方式返回结果。 3000 3001在调用[prepare()](#prepare9)前先通过[PlaybackStrategy](#playbackstrategy12)使能超分。 3002 3003**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 3004 3005**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 3006 3007**参数:** 3008 3009| 参数名 | 类型 | 必填 | 说明 | 3010| ------ | ------ | ---- | ------------------------------------------------------------ | 3011| enabled | boolean | 是 | 表示是否开启超分。true表示开启超分,false表示关闭超分。 | 3012 3013**返回值:** 3014 3015| 类型 | 说明 | 3016| -------------- | ------------------------------------------ | 3017| Promise\<void> | 开启/关闭超分setSuperResolution方法的Promise返回值。 | 3018 3019**错误码:** 3020 3021以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3022 3023| 错误码ID | 错误信息 | 3024| -------- | ------------------------------------------ | 3025| 5400102 | Operation not allowed. Return by promise. | 3026| 5410003 | Super-resolution not supported. Return by promise. | 3027| 5410004 | Missing enable super-resolution feature in [PlaybackStrategy](#playbackstrategy12). Return by promise. | 3028 3029**示例:** 3030 3031```ts 3032avPlayer.setSuperResolution(true) 3033``` 3034 3035### setVideoWindowSize<sup>18+</sup> 3036 3037setVideoWindowSize(width: number, height: number) : Promise\<void> 3038 3039动态设置超分算法的输出分辨率,可以在 'initialized' | 'prepared' | 'playing' | 'paused' | 'completed' | 'stopped' 状态调用。使用Promise方式返回结果。输入参数须在 320x320 ~ 1920x1080 范围内,单位为像素。 3040 3041在调用[prepare()](#prepare9)前先通过[PlaybackStrategy](#playbackstrategy12)使能超分。 3042 3043**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 3044 3045**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 3046 3047**参数:** 3048 3049| 参数名 | 类型 | 必填 | 说明 | 3050| ------ | ------ | ---- | ------------------------------------------------------------ | 3051| width | number | 是 | 超分算法的目标输出视频宽度,取值范围为[320-1920],单位为像素。 | 3052| height | number | 是 | 超分算法的目标输出视频高度,取值范围为[320-1080],单位为像素。 | 3053 3054**返回值:** 3055 3056| 类型 | 说明 | 3057| -------------- | ------------------------------------------ | 3058| Promise\<void> | 配置超分目标输出分辨率setVideoWindowSize方法的Promise返回值。 | 3059 3060**错误码:** 3061 3062以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[媒体错误码](errorcode-media.md)。 3063 3064| 错误码ID | 错误信息 | 3065| -------- | ------------------------------------------ | 3066| 401 | Parameter error. Return by promise. | 3067| 5400102 | Operation not allowed. Return by promise. | 3068| 5410003 | Super-resolution not supported. Return by promise. | 3069| 5410004 | Missing enable super-resolution feature in [PlaybackStrategy](#playbackstrategy12). Return by promise. | 3070 3071**示例:** 3072 3073```ts 3074avPlayer.setVideoWindowSize(1920, 1080) 3075``` 3076 3077### on('superResolutionChanged')<sup>18+</sup> 3078 3079on(type:'superResolutionChanged', callback: OnSuperResolutionChanged): void 3080 3081订阅监听超分算法开启/关闭事件。 3082 3083**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 3084 3085**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 3086 3087**参数:** 3088 3089| 参数名 | 类型 | 必填 | 说明 | 3090| -------- | -------- | ---- | ------------------------------------------------------------ | 3091| type | string | 是 | 事件回调类型,支持的事件为:'superResolutionChanged',当超分算法开启/关闭状态变化时,触发该事件。 | 3092| callback | [OnSuperResolutionChanged](#onsuperresolutionchanged-18) | 是 | 超分开关事件回调方法。 | 3093 3094**示例:** 3095 3096```ts 3097avPlayer.on('superResolutionChanged', (enabled: boolean) => { 3098 console.info('superResolutionChanged called, and enabled is:' + enabled) 3099}) 3100``` 3101 3102### off('superResolutionChanged')<sup>18+</sup> 3103 3104off(type:'superResolutionChanged', callback?: OnSuperResolutionChanged): void 3105 3106取消监听超分算法开启/关闭事件。 3107 3108**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 3109 3110**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 3111 3112**参数:** 3113 3114| 参数名 | 类型 | 必填 | 说明 | 3115| -------- | -------- | ---- | ------------------------------------------------------------ | 3116| type | string | 是 | 事件回调类型,支持的事件为:'superResolutionChanged',当超分算法开启/关闭状态变化时,触发该事件。 | 3117| callback | [OnSuperResolutionChanged](#onsuperresolutionchanged-18) | 否 | 超分开关事件回调方法。 | 3118 3119**示例:** 3120 3121```ts 3122avPlayer.off('superResolutionChanged') 3123``` 3124 3125## AVPlayerState<sup>9+</sup> 3126 3127type AVPlayerState = 'idle' | 'initialized' | 'prepared' | 'playing' | 'paused' | 'completed' | 'stopped' | 'released' | 'error' 3128 3129[AVPlayer](#avplayer9)的状态机,可通过state属性主动获取当前状态,也可通过监听[stateChange](#onstatechange9)事件上报当前状态,状态机之间的切换规则,可参考[音频播放开发指导](../../media/media/using-avplayer-for-playback.md)。 3130 3131**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 3132 3133**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 3134 3135| 类型 | 说明 | 3136| :-----------------------------: | :----------------------------------------------------------- | 3137| '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属性会被重置,其他用户设置的属性将被保留。 | 3138| 'initialized' | 资源初始化,在idle 状态设置 url<sup>9+</sup> 或 fdSrc<sup>9+</sup>属性,AVPlayer会进入initialized状态,此时可以配置窗口、音频等静态属性。 | 3139| 'prepared' | 已准备状态,在initialized状态调用[prepare()](#prepare9)方法,AVPlayer会进入prepared状态,此时播放引擎的资源已准备就绪。 | 3140| 'playing' | 正在播放状态,在prepared/paused/completed状态调用[play()](#play9)方法,AVPlayer会进入playing状态。 | 3141| 'paused' | 暂停状态,在playing状态调用pause方法,AVPlayer会进入paused状态。 | 3142| 'completed' | 播放至结尾状态,当媒体资源播放至结尾时,如果用户未设置循环播放(loop = true),AVPlayer会进入completed状态,此时调用[play()](#play9)会进入playing状态和重播,调用[stop()](#stop9)会进入stopped状态。 | 3143| 'stopped' | 停止状态,在prepared/playing/paused/completed状态调用[stop()](#stop9)方法,AVPlayer会进入stopped状态,此时播放引擎只会保留属性,但会释放内存资源,可以调用[prepare()](#prepare9)重新准备,也可以调用[reset()](#reset9)重置,或者调用[release()](#release9)彻底销毁。 | 3144| 'released' | 销毁状态,销毁与当前AVPlayer关联的播放引擎,无法再进行状态转换,调用[release()](#release9)方法后,会进入released状态,结束流程。 | 3145| '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:播放过程发现码流问题,导致容器、解码短暂异常,不影响连续播放和播控操作的,不需要客户端设计容错机制。 | 3146 3147## OnTrackChangeHandler<sup>12+</sup> 3148 3149type OnTrackChangeHandler = (index: number, isSelected: boolean) => void 3150 3151track变更事件回调方法。 3152 3153**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 3154 3155**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 3156 3157| 参数名 | 类型 | 必填 | 说明 | 3158| ------ | ------ | ------ | ---------------------------------------------------------- | 3159| index | number | 是 | 当前选中的track索引。 | 3160| isSelected | boolean | 是 | 当前索引的选中状态。 | 3161 3162## OnAVPlayerStateChangeHandle<sup>12+</sup> 3163 3164type OnAVPlayerStateChangeHandle = (state: AVPlayerState, reason: StateChangeReason) => void 3165 3166状态机切换事件回调方法。 3167 3168**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 3169 3170**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 3171 3172| 参数名 | 类型 | 必填 | 说明 | 3173| ------ | ------ | ------ | ---------------------------------------------------------- | 3174| state | [AVPlayerState](#avplayerstate9) | 是 | 当前播放状态。 | 3175| reason | [StateChangeReason](#statechangereason9) | 是 | 当前播放状态的切换原因。 | 3176 3177## OnBufferingUpdateHandler<sup>12+</sup> 3178 3179type OnBufferingUpdateHandler = (infoType: BufferingInfoType, value: number) => void 3180 3181播放缓存事件回调方法。 3182 3183**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 3184 3185**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 3186 3187| 参数名 | 类型 | 必填 | 说明 | 3188| ------ | ------ | ------ | ------------------------------------------------------------ | 3189| infoType | [BufferingInfoType](#bufferinginfotype8) | 是 | 缓存时间类型。 | 3190| value | number | 是 | value值固定为0。 | 3191 3192## OnVideoSizeChangeHandler<sup>12+</sup> 3193 3194type OnVideoSizeChangeHandler = (width: number, height: number) => void 3195 3196视频播放宽高变化事件回调方法。 3197 3198**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 3199 3200**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 3201 3202| 参数名 | 类型 | 必填 | 说明 | 3203| ------ | ------ | ------ | ------------------------------------------------------------ | 3204| width | number | 是 | 视频宽度,单位为像素(px)。| 3205| height | number | 是 | 视频高度,单位为像素(px)。| 3206 3207## OnSeiMessageHandle<sup>18+</sup> 3208 3209type OnSeiMessageHandle = (messages: Array\<SeiMessage>, playbackPosition?: number) => void 3210 3211获取SEI信息,使用场景:订阅SEI信息事件,回调返回SEI详细信息。 3212 3213**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 3214 3215**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 3216 3217**参数:** 3218 3219| 参数名 | 类型 | 必填 | 说明 | 3220| ------ | ------ | ---- | ------------------------------------------------------------ | 3221| messages | Array\<[SeiMessage](#seimessage18)> | 是 | SEI信息。 | 3222| playbackPosition | number | 否 | 获取当前播放位置(单位:毫秒)。 | 3223 3224## OnSuperResolutionChanged <sup>18+</sup> 3225 3226type OnSuperResolutionChanged = (enabled: boolean) => void 3227 3228视频超分开关事件回调方法。若通过[PlaybackStrategy](#playbackstrategy12)正确使能超分,超分算法状态变化时会通过此回调上报,视频起播时也会上报超分初始开启/关闭状态。若未使能超分,不会触发该回调。 3229 3230出现以下两种情况,超分算法会自动关闭。 3231* 目前超分算法最高仅支持30帧及以下的视频。若视频帧率超过30帧,或者在倍速播放等场景下导致输入帧率超出超分算法处理能力,超分会自动关闭。 3232* 目前超分算法支持输入分辨率范围为320x320 ~ 1920x1080,单位为像素。若播放过程中输入视频分辨率超出此范围,超分算法会自动关闭。 3233 3234**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 3235 3236**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 3237 3238| 参数名 | 类型 | 必填 | 说明 | 3239| ------ | ------ | ------ | ------------------------------------------------------------ | 3240| enabled | boolean | 是 | 表示当前超分是否开启。true表示超分开启,false表示超分关闭。 | 3241 3242## AVFileDescriptor<sup>9+</sup> 3243 3244音视频文件资源描述,一种特殊资源的播放方式,使用场景:应用中的音频资源被连续存储在同一个文件中,需要根据偏移量和长度进行播放。 3245 3246**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 3247 3248**系统能力:** SystemCapability.Multimedia.Media.Core 3249 3250| 名称 | 类型 | 必填 | 说明 | 3251| ------ | ------ | ---- | ------------------------------------------------------------ | 3252| 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)获取。 | 3253| offset | number | 否 | 资源偏移量,默认值为0,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 | 3254| length | number | 否 | 资源长度,默认值为文件中从偏移量开始的剩余字节,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 | 3255 3256## AVDataSrcDescriptor<sup>10+</sup> 3257 3258音视频文件资源描述,用于DataSource播放方式,使用场景:应用在未获取完整音视频资源时,允许用户创建播放实例并开始播放,达到提前播放的目的。 3259 3260**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 3261 3262**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 3263 3264| 名称 | 类型 | 必填 | 说明 | 3265| ------ | ------ | ---- | ------------------------------------------------------------ | 3266| fileSize | number | 是 | 待播放文件大小(字节),-1代表大小未知。如果fileSize设置为-1, 播放模式类似于直播,不能进行seek及setSpeed操作,不能设置loop属性,因此不能重新播放。 | 3267| callback | (buffer: ArrayBuffer, length: number, pos?: number) => number | 是 | 用户设置的回调函数,用于填写数据。<br>- 函数列式:callback: (buffer: ArrayBuffer, length: number, pos?:number) => number;<br>- buffer,ArrayBuffer类型,表示被填写的内存,必选。<br>- length,number类型,表示被填写内存的最大长度,必选。<br>- pos,number类型,表示填写的数据在资源文件中的位置,可选,当fileSize设置为-1时,该参数禁止被使用。 <br>- 返回值,number类型,返回填充数据的长度,返回-1表示到达流的末尾,返回-2表示遇到不可恢复的错误。| 3268 3269## SubtitleInfo<sup>12+</sup> 3270 3271外挂字幕信息,使用场景:订阅外挂字幕事件,回调返回外挂字幕详细信息。 3272 3273**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 3274 3275**系统能力:** SystemCapability.Multimedia.Media.Core 3276 3277| 名称 | 类型 | 必填 | 说明 | 3278| ------ | ------ | ---- | ------------------------------------------------------------ | 3279| text | string | 否 | 字幕文本信息。 | 3280| startTime | number | 否 | 显示当前字幕文本的开始时间(单位:毫秒)。 | 3281| duration | number | 否 | 显示当前字幕文本的持续时间(单位:毫秒)。 | 3282 3283## SeiMessage<sup>18+</sup> 3284 3285SEI信息内容,描述SEI信息的负载类型和数据。 3286 3287**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 3288 3289**系统能力:** SystemCapability.Multimedia.Media.Core 3290 3291| 名称 | 类型 | 只读 | 可选 | 说明 | 3292| ------ | ------ | ---- | ---- | ------------------------------------------------------------ | 3293| payloadType | number | 否 | 否 | SEI信息的负载类型。 | 3294| payload | ArrayBuffer | 否 | 否 | SEI信息的负载数据。 | 3295 3296## SeekMode<sup>8+</sup> 3297 3298视频播放的Seek模式枚举,可通过seek方法作为参数传递下去。 3299 3300**系统能力:** SystemCapability.Multimedia.Media.Core 3301 3302| 名称 | 值 | 说明 | 3303| -------------- | ---- | ------------------------------------------------------------ | 3304| SEEK_NEXT_SYNC | 0 | 表示跳转到指定时间点的下一个关键帧,建议向后快进的时候用这个枚举值。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | 3305| SEEK_PREV_SYNC | 1 | 表示跳转到指定时间点的上一个关键帧,建议向前快进的时候用这个枚举值。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | 3306| SEEK_CLOSEST<sup>12+</sup> | 2 | 表示跳转到距离指定时间点最近的帧,建议精准跳转进度的时候用这个枚举值。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 3307| SEEK_CONTINUOUS<sup>18+</sup> | 3 | 该模式提供了一种画面平滑流畅变化的Seek体验,应用可以结合进度条控件持续调用Seek方法,AVPlayer根据Seek调用持续流畅地更新画面。<br>应用可以调用[isSeekContinuousSupported](#isseekcontinuoussupported18)方法根据返回结果感知视频源是否支持该模式Seek。<br>对于不支持该Seek模式的视频源调用该模式Seek时,会上报AVERR_SEEK_CONTINUOUS_UNSUPPORTED错误([媒体错误码](#averrorcode9)),同时画面更新的流畅性会降低。<br>该Seek模式不会触发[seekDone事件](#onseekdone9)。<br>当应用需要退出该模式下的Seek时,需要调用`seek(-1, SeekMode.SEEK_CONTINUOUS)`来结束该模式下的Seek。<br>**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 | 3308 3309## SwitchMode<sup>12+</sup> 3310 3311视频播放的selectTrack模式枚举,可通过selectTrack方法作为参数传递下去,当前仅DASH协议视频轨支持该扩展参数。 3312 3313**系统能力:** SystemCapability.Multimedia.Media.Core 3314 3315| 名称 | 值 | 说明 | 3316| -------------- | ---- | ------------------------------------------------------------ | 3317| SMOOTH | 0 | 表示切换后视频平滑播放,该模式切换存在延迟,不会立即生效。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 3318| SEGMENT | 1 | 表示切换后从当前分片开始位置播放,该模式立即切换,会有重复播放。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 3319| CLOSEST | 2 | 表示从距离当前播放时间点最近的帧开始播放,该模式立即切换,切换后会卡住3到5s,然后恢复播放。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 3320 3321## PlaybackSpeed<sup>8+</sup> 3322 3323视频播放的倍速枚举,可通过setSpeed方法作为参数传递下去。 3324 3325**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 3326 3327**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 3328 3329| 名称 | 值 | 说明 | 3330| -------------------- | ---- | ------------------------------ | 3331| SPEED_FORWARD_0_75_X | 0 | 表示视频播放正常播速的0.75倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 3332| SPEED_FORWARD_1_00_X | 1 | 表示视频播放正常播速。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 3333| SPEED_FORWARD_1_25_X | 2 | 表示视频播放正常播速的1.25倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 3334| SPEED_FORWARD_1_75_X | 3 | 表示视频播放正常播速的1.75倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 3335| SPEED_FORWARD_2_00_X | 4 | 表示视频播放正常播速的2.00倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 3336| SPEED_FORWARD_0_50_X<sup>12+</sup> | 5 | 表示视频播放正常播速的0.50倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 3337| SPEED_FORWARD_1_50_X<sup>12+</sup> | 6 | 表示视频播放正常播速的1.50倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 3338| SPEED_FORWARD_3_00_X<sup>13+</sup> | 7 | 表示视频播放正常播速的3.00倍。<br>**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。 | 3339| SPEED_FORWARD_0_25_X<sup>12+</sup> | 8 | 表示视频播放正常播速的0.25倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 3340| SPEED_FORWARD_0_125_X<sup>12+</sup> | 9 | 表示视频播放正常播速的0.125倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 3341 3342## VideoScaleType<sup>9+</sup> 3343 3344枚举,视频缩放模式。 3345 3346**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 3347 3348**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 3349 3350| 名称 | 值 | 说明 | 3351| ------------------------- | ---- | ------------------------------------------------ | 3352| VIDEO_SCALE_TYPE_FIT | 0 | 默认比例类型,视频拉伸至与窗口等大。 | 3353| VIDEO_SCALE_TYPE_FIT_CROP | 1 | 保持视频宽高比拉伸至填满窗口,内容可能会有裁剪。 | 3354 3355## MediaDescription<sup>8+</sup> 3356 3357通过key-value方式获取媒体信息。 3358 3359**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 3360 3361**系统能力:** SystemCapability.Multimedia.Media.Core 3362 3363| 名称 | 类型 | 必填 | 说明 | 3364| ------------- | ------ | ---- | ------------------------------------------------------------ | 3365| [key: string] | Object | 是 | 该键值对支持的key取值范围,请参考[MediaDescriptionKey](#mediadescriptionkey8);每个key值的Object类型和范围,请参考[MediaDescriptionKey](#mediadescriptionkey8)对应Key值的说明 | 3366 3367**示例:** 3368 3369```ts 3370import { BusinessError } from '@kit.BasicServicesKit'; 3371 3372function printfItemDescription(obj: media.MediaDescription, key: string) { 3373 let property: Object = obj[key]; 3374 console.info('audio key is ' + key); // 通过key值获取对应的value。key值具体可见[MediaDescriptionKey]。 3375 console.info('audio value is ' + property); //对应key值得value。其类型可为任意类型,具体key对应value的类型可参考[MediaDescriptionKey]。 3376} 3377 3378let avPlayer: media.AVPlayer | undefined = undefined; 3379media.createAVPlayer((err: BusinessError, player: media.AVPlayer) => { 3380 if(player != null) { 3381 avPlayer = player; 3382 console.info(`Succeeded in creating AVPlayer`); 3383 avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => { 3384 if (arrList != null) { 3385 for (let i = 0; i < arrList.length; i++) { 3386 printfItemDescription(arrList[i], media.MediaDescriptionKey.MD_KEY_TRACK_TYPE); //打印出每条轨道MD_KEY_TRACK_TYPE的值。 3387 } 3388 } else { 3389 console.error(`Failed to get TrackDescription, error:${error}`); 3390 } 3391 }); 3392 } else { 3393 console.error(`Failed to create AVPlayer, error message:${err.message}`); 3394 } 3395}); 3396``` 3397 3398## PlaybackInfo<sup>12+</sup> 3399 3400通过key-value方式获取播放信息。 3401 3402**系统能力:** SystemCapability.Multimedia.Media.Core 3403 3404| 名称 | 类型 | 必填 | 说明 | 3405| ------------- | ------ | ---- | ------------------------------------------------------------ | 3406| [key: string] | Object | 是 | 该键值对支持的key取值范围,请参考[PlaybackInfoKey](#playbackinfokey12);每个key值的Object类型和范围,请参考[PlaybackInfoKey](#playbackinfokey12)对应Key值的说明。 | 3407 3408**示例:** 3409 3410```ts 3411import { BusinessError } from '@kit.BasicServicesKit'; 3412 3413function printfPlaybackInfo(obj: media.PlaybackInfo, key: string) { 3414 let property: Object = obj[key]; 3415 console.info('key is ' + key); // 通过key值获取对应的value。key值具体可见[PlaybackInfoKey]。 3416 console.info('value is ' + property); //对应key值得value。其类型可为任意类型,具体key对应value的类型可参考[PlaybackInfoKey]。 3417} 3418 3419let avPlayer: media.AVPlayer | undefined = undefined; 3420let playbackInfo: media.PlaybackInfo | undefined = undefined; 3421media.createAVPlayer(async (err: BusinessError, player: media.AVPlayer) => { 3422 if (player != null) { 3423 avPlayer = player; 3424 console.info(`Succeeded in creating AVPlayer`); 3425 if (avPlayer) { 3426 try { 3427 playbackInfo = await avPlayer.getPlaybackInfo(); 3428 console.info(`AVPlayer getPlaybackInfo = ${JSON.stringify(playbackInfo)}`); // 打印整个PlaybackInfo的值。 3429 printfPlaybackInfo(playbackInfo, media.PlaybackInfoKey.SERVER_IP_ADDRESS); // 打印ip的值。 3430 } catch (error) { 3431 console.error(`error = ${error}`); 3432 } 3433 } 3434 } else { 3435 console.error(`Failed to create AVPlayer, error message:${err.message}`); 3436 } 3437}); 3438``` 3439 3440## AVRecorder<sup>9+</sup> 3441 3442音视频录制管理类,用于音视频媒体录制。在调用AVRecorder的方法前,需要先通过[createAVRecorder()](#mediacreateavrecorder9)构建一个AVRecorder实例。 3443 3444音视频录制demo可参考:[音频录制开发指导](../../media/media/using-avrecorder-for-recording.md)、[视频录制开发指导](../../media/media/video-recording.md)。 3445 3446> **说明:** 3447> 3448> 使用相机进行视频录制时,需要与相机模块配合,相机模块接口的使用详情见[相机管理](../apis-camera-kit/js-apis-camera.md)。 3449 3450### 属性 3451 3452**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3453 3454| 名称 | 类型 | 只读 | 可选 | 说明 | 3455| ------- | ------------------------------------ | ---- | ---- | ------------------ | 3456| state9+ | [AVRecorderState](#avrecorderstate9) | 是 | 否 | 音视频录制的状态。<br>**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 | 3457 3458### prepare<sup>9+</sup> 3459 3460prepare(config: AVRecorderConfig, callback: AsyncCallback\<void>): void 3461 3462异步方式进行音视频录制的参数设置。通过注册回调函数获取返回值。 3463 3464**需要权限:** ohos.permission.MICROPHONE 3465 3466不涉及音频录制时,可以不需要获取ohos.permission.MICROPHONE权限。 3467 3468使用相机视频录制还需要与相机模块配合,相机模块接口的使用详情见[相机管理](../apis-camera-kit/js-apis-camera.md)。 3469 3470**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3471 3472**参数:** 3473 3474| 参数名 | 类型 | 必填 | 说明 | 3475| -------- | -------------------------------------- | ---- | ------------------------------------- | 3476| config | [AVRecorderConfig](#avrecorderconfig9) | 是 | 配置音视频录制的相关参数。 | 3477| callback | AsyncCallback\<void> | 是 | 回调函数。当prepare方法成功,err为undefined,否则为错误对象。 | 3478 3479**错误码:** 3480 3481以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3482 3483| 错误码ID | 错误信息 | 3484| -------- | --------------------------------------- | 3485| 201 | Permission denied. Return by callback. | 3486| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3487| 5400102 | Operate not permit. Return by callback. | 3488| 5400105 | Service died. Return by callback. | 3489 3490**示例:** 3491 3492```ts 3493import { BusinessError } from '@kit.BasicServicesKit'; 3494 3495// 配置参数以实际硬件设备支持的范围为准。 3496let avRecorderProfile: media.AVRecorderProfile = { 3497 audioBitrate : 48000, 3498 audioChannels : 2, 3499 audioCodec : media.CodecMimeType.AUDIO_AAC, 3500 audioSampleRate : 48000, 3501 fileFormat : media.ContainerFormatType.CFT_MPEG_4, 3502 videoBitrate : 2000000, 3503 videoCodec : media.CodecMimeType.VIDEO_AVC, 3504 videoFrameWidth : 640, 3505 videoFrameHeight : 480, 3506 videoFrameRate : 30 3507} 3508let avRecorderConfig: media.AVRecorderConfig = { 3509 audioSourceType : media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC, 3510 videoSourceType : media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV, 3511 profile : avRecorderProfile, 3512 url : 'fd://', // 文件需先由调用者创建,赋予读写权限,将文件fd传给此参数,eg.fd://45 3513 rotation : 0, // 合理值0、90、180、270,非合理值prepare接口将报错。 3514 location : { latitude : 30, longitude : 130 } 3515} 3516 3517avRecorder.prepare(avRecorderConfig, (err: BusinessError) => { 3518 if (err) { 3519 console.error('Failed to prepare and error is ' + err.message); 3520 } else { 3521 console.info('Succeeded in preparing'); 3522 } 3523}) 3524``` 3525 3526### prepare<sup>9+</sup> 3527 3528prepare(config: AVRecorderConfig): Promise\<void> 3529 3530异步方式进行音视频录制的参数设置。通过Promise获取返回值。 3531 3532**需要权限:** ohos.permission.MICROPHONE 3533 3534不涉及音频录制时,可以不需要获ohos.permission.MICROPHONE权限。 3535 3536使用相机视频录制还需要与相机模块配合,相机模块接口的使用详情见[相机管理](../apis-camera-kit/js-apis-camera.md)。 3537 3538**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 3539 3540**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3541 3542**参数:** 3543 3544| 参数名 | 类型 | 必填 | 说明 | 3545| ------ | -------------------------------------- | ---- | -------------------------- | 3546| config | [AVRecorderConfig](#avrecorderconfig9) | 是 | 配置音视频录制的相关参数。 | 3547 3548**返回值:** 3549 3550| 类型 | 说明 | 3551| -------------- | ------------------------------------------ | 3552| Promise\<void> | 异步音视频录制prepare方法的Promise返回值。 | 3553 3554**错误码:** 3555 3556以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3557 3558| 错误码ID | 错误信息 | 3559| -------- | -------------------------------------- | 3560| 201 | Permission denied. Return by promise. | 3561| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3562| 5400102 | Operate not permit. Return by promise. | 3563| 5400105 | Service died. Return by promise. | 3564 3565**示例:** 3566 3567```ts 3568import { BusinessError } from '@kit.BasicServicesKit'; 3569 3570// 配置参数以实际硬件设备支持的范围为准。 3571let avRecorderProfile: media.AVRecorderProfile = { 3572 audioBitrate : 48000, 3573 audioChannels : 2, 3574 audioCodec : media.CodecMimeType.AUDIO_AAC, 3575 audioSampleRate : 48000, 3576 fileFormat : media.ContainerFormatType.CFT_MPEG_4, 3577 videoBitrate : 2000000, 3578 videoCodec : media.CodecMimeType.VIDEO_AVC, 3579 videoFrameWidth : 640, 3580 videoFrameHeight : 480, 3581 videoFrameRate : 30 3582} 3583let avRecorderConfig: media.AVRecorderConfig = { 3584 audioSourceType : media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC, 3585 videoSourceType : media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV, 3586 profile : avRecorderProfile, 3587 url : 'fd://', // 文件需先由调用者创建,赋予读写权限,将文件fd传给此参数,eg.fd://45 3588 rotation : 0, // 合理值0、90、180、270,非合理值prepare接口报错。 3589 location : { latitude : 30, longitude : 130 } 3590} 3591 3592avRecorder.prepare(avRecorderConfig).then(() => { 3593 console.info('Succeeded in preparing'); 3594}).catch((err: BusinessError) => { 3595 console.error('Failed to prepare and catch error is ' + err.message); 3596}); 3597``` 3598 3599### getInputSurface<sup>9+</sup> 3600 3601getInputSurface(callback: AsyncCallback\<string>): void 3602 3603异步方式获得录制需要的surface。通过注册回调函数获取返回值。此surface提供给调用者,调用者从此surface中获取surfaceBuffer,填入相应的视频数据。 3604 3605应当注意,填入的视频数据需要携带时间戳(单位ns)和buffersize。时间戳的起始时间请以系统启动时间为基准。 3606 3607需在[prepare()](#prepare9-2)事件成功触发后,才能调用getInputSurface()方法。 3608 3609**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3610 3611**参数:** 3612 3613| 参数名 | 类型 | 必填 | 说明 | 3614| -------- | ---------------------- | ---- | --------------------------- | 3615| callback | AsyncCallback\<string> | 是 | 回调函数。当获取surface成功,err为undefined,data为获取到的surfaceId,否则为错误对象。 | 3616 3617**错误码:** 3618 3619以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 3620 3621| 错误码ID | 错误信息 | 3622| -------- | --------------------------------------- | 3623| 5400102 | Operate not permit. Return by callback. | 3624| 5400103 | IO error. Return by callback. | 3625| 5400105 | Service died. Return by callback. | 3626 3627**示例:** 3628 3629```ts 3630import { BusinessError } from '@kit.BasicServicesKit'; 3631let surfaceID: string; // 该surfaceID用于传递给相机接口创造videoOutput。 3632 3633avRecorder.getInputSurface((err: BusinessError, surfaceId: string) => { 3634 if (err) { 3635 console.error('Failed to do getInputSurface and error is ' + err.message); 3636 } else { 3637 console.info('Succeeded in doing getInputSurface'); 3638 surfaceID = surfaceId; 3639 } 3640}); 3641 3642``` 3643 3644### getInputSurface<sup>9+</sup> 3645 3646getInputSurface(): Promise\<string> 3647 3648异步方式获得录制需要的surface。通过Promise获取返回值。此surface提供给调用者,调用者从此surface中获取surfaceBuffer,填入相应的视频数据。 3649 3650应当注意,填入的视频数据需要携带时间戳(单位ns)和buffersize。时间戳的起始时间请以系统启动时间为基准。 3651 3652需在[prepare()](#prepare9-3)事件成功触发后,才能调用getInputSurface方法。 3653 3654**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3655 3656**返回值:** 3657 3658| 类型 | 说明 | 3659| ---------------- | -------------------------------- | 3660| Promise\<string> | 异步获得surface的Promise返回值。 | 3661 3662**错误码:** 3663 3664以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 3665 3666| 错误码ID | 错误信息 | 3667| -------- | -------------------------------------- | 3668| 5400102 | Operate not permit. Return by promise. | 3669| 5400103 | IO error. Return by promise. | 3670| 5400105 | Service died. Return by promise. | 3671 3672**示例:** 3673 3674```ts 3675import { BusinessError } from '@kit.BasicServicesKit'; 3676let surfaceID: string; // 该surfaceID用于传递给相机接口创造videoOutput。 3677 3678avRecorder.getInputSurface().then((surfaceId: string) => { 3679 console.info('Succeeded in getting InputSurface'); 3680 surfaceID = surfaceId; 3681}).catch((err: BusinessError) => { 3682 console.error('Failed to get InputSurface and catch error is ' + err.message); 3683}); 3684``` 3685 3686### updateRotation<sup>12+</sup> 3687 3688updateRotation(rotation: number): Promise\<void> 3689 3690更新视频旋转角度。通过Promise获取返回值。 3691 3692当且仅当[prepare()](#prepare9-3)事件成功触发后,且在[start()](#start9)之前,才能调用updateRotation方法。 3693 3694**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3695 3696**参数:** 3697 3698| 参数名 | 类型 | 必填 | 说明 | 3699| -------- | -------------------- | ---- | --------------------------- | 3700| rotation | number | 是 | 旋转角度,取值仅支持0、90、180、270度。 | 3701 3702**返回值:** 3703 3704| 类型 | 说明 | 3705| ---------------- | -------------------------------- | 3706| Promise\<void> | 异步返回函数执行结果。 | 3707 3708**错误码:** 3709 3710以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 3711 3712| 错误码ID | 错误信息 | 3713| -------- | -------------------------------------- | 3714| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3715| 5400102 | Operation not allowed. Return by promise. | 3716| 5400103 | IO error. Return by promise. | 3717| 5400105 | Service died. Return by promise. | 3718 3719**示例:** 3720 3721```ts 3722import { BusinessError } from '@kit.BasicServicesKit'; 3723 3724let rotation = 90 3725 3726avRecorder.updateRotation(rotation).then(() => { 3727 console.info('Succeeded in updateRotation'); 3728}).catch((err: BusinessError) => { 3729 console.error('Failed to updateRotation and catch error is ' + err.message); 3730}); 3731``` 3732 3733### start<sup>9+</sup> 3734 3735start(callback: AsyncCallback\<void>): void 3736 3737异步方式开始视频录制。通过注册回调函数获取返回值。 3738 3739纯音频录制需在[prepare()](#prepare9-2)事件成功触发后,才能调用start方法。纯视频录制,音视频录制需在[getInputSurface()](#getinputsurface9)事件成功触发后,才能调用start方法。 3740 3741**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3742 3743**参数:** 3744 3745| 参数名 | 类型 | 必填 | 说明 | 3746| -------- | -------------------- | ---- | ---------------------------- | 3747| callback | AsyncCallback\<void> | 是 |回调函数。当开始录制视频成功,err为undefined,否则为错误对象。 | 3748 3749**错误码:** 3750 3751以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3752 3753| 错误码ID | 错误信息 | 3754| -------- | --------------------------------------- | 3755| 5400102 | Operate not permit. Return by callback. | 3756| 5400103 | IO error. Return by callback. | 3757| 5400105 | Service died. Return by callback. | 3758 3759**示例:** 3760 3761```ts 3762import { BusinessError } from '@kit.BasicServicesKit'; 3763 3764avRecorder.start((err: BusinessError) => { 3765 if (err) { 3766 console.error('Failed to start AVRecorder and error is ' + err.message); 3767 } else { 3768 console.info('Succeeded in starting AVRecorder'); 3769 } 3770}); 3771``` 3772 3773### start<sup>9+</sup> 3774 3775start(): Promise\<void> 3776 3777异步方式开始视频录制。通过Promise获取返回值。 3778 3779纯音频录制需在[prepare()](#prepare9-3)事件成功触发后,才能调用start方法。纯视频录制,音视频录制需在[getInputSurface()](#getinputsurface9-1)事件成功触发后,才能调用start方法。 3780 3781**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 3782 3783**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3784 3785**返回值:** 3786 3787| 类型 | 说明 | 3788| -------------- | ------------------------------------- | 3789| Promise\<void> | 异步开始视频录制方法的Promise返回值。 | 3790 3791**错误码:** 3792 3793以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3794 3795| 错误码ID | 错误信息 | 3796| -------- | -------------------------------------- | 3797| 5400102 | Operate not permit. Return by promise. | 3798| 5400103 | IO error. Return by promise. | 3799| 5400105 | Service died. Return by promise. | 3800 3801**示例:** 3802 3803```ts 3804import { BusinessError } from '@kit.BasicServicesKit'; 3805 3806avRecorder.start().then(() => { 3807 console.info('Succeeded in starting AVRecorder'); 3808}).catch((err: BusinessError) => { 3809 console.error('Failed to start AVRecorder and catch error is ' + err.message); 3810}); 3811``` 3812 3813### pause<sup>9+</sup> 3814 3815pause(callback: AsyncCallback\<void>): void 3816 3817异步方式暂停视频录制。通过注册回调函数获取返回值。 3818 3819需要[start()](#start9)事件成功触发后,才能调用pause方法,可以通过调用[resume()](#resume9)接口来恢复录制。 3820 3821**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3822 3823**参数:** 3824 3825| 参数名 | 类型 | 必填 | 说明 | 3826| -------- | -------------------- | ---- | --------------------------- | 3827| callback | AsyncCallback\<void> | 是 | 回调函数。当暂停视频录制成功,err为undefined,否则为错误对象。 | 3828 3829**错误码:** 3830 3831以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3832 3833| 错误码ID | 错误信息 | 3834| -------- | --------------------------------------- | 3835| 5400102 | Operate not permit. Return by callback. | 3836| 5400103 | IO error. Return by callback. | 3837| 5400105 | Service died. Return by callback. | 3838 3839**示例:** 3840 3841```ts 3842import { BusinessError } from '@kit.BasicServicesKit'; 3843 3844avRecorder.pause((err: BusinessError) => { 3845 if (err) { 3846 console.error('Failed to pause AVRecorder and error is ' + err.message); 3847 } else { 3848 console.info('Succeeded in pausing'); 3849 } 3850}); 3851``` 3852 3853### pause<sup>9+</sup> 3854 3855pause(): Promise\<void> 3856 3857异步方式暂停视频录制。通过Promise获取返回值。 3858 3859需要[start()](#start9-1)事件成功触发后,才能调用pause方法,可以通过调用[resume()](#resume9-1)接口来恢复录制。 3860 3861**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 3862 3863**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3864 3865**返回值:** 3866 3867| 类型 | 说明 | 3868| -------------- | ------------------------------------- | 3869| Promise\<void> | 异步暂停视频录制方法的Promise返回值。 | 3870 3871**错误码:** 3872 3873以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3874 3875| 错误码ID | 错误信息 | 3876| -------- | -------------------------------------- | 3877| 5400102 | Operate not permit. Return by promise. | 3878| 5400103 | IO error. Return by promise. | 3879| 5400105 | Service died. Return by promise. | 3880 3881**示例:** 3882 3883```ts 3884import { BusinessError } from '@kit.BasicServicesKit'; 3885 3886avRecorder.pause().then(() => { 3887 console.info('Succeeded in pausing'); 3888}).catch((err: BusinessError) => { 3889 console.error('Failed to pause AVRecorder and catch error is ' + err.message); 3890}); 3891``` 3892 3893### resume<sup>9+</sup> 3894 3895resume(callback: AsyncCallback\<void>): void 3896 3897异步方式恢复视频录制。通过注册回调函数获取返回值。 3898 3899需要在[pause()](#pause9-2)事件成功触发后,才能调用resume方法。 3900 3901**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3902 3903**参数:** 3904 3905| 参数名 | 类型 | 必填 | 说明 | 3906| -------- | -------------------- | ---- | ---------------------------- | 3907| callback | AsyncCallback\<void> | 是 | 回调函数。当恢复视频录制成功,err为undefined,否则为错误对象。 | 3908 3909**错误码:** 3910 3911以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3912 3913| 错误码ID | 错误信息 | 3914| -------- | --------------------------------------- | 3915| 5400102 | Operate not permit. Return by callback. | 3916| 5400103 | IO error. Return by callback. | 3917| 5400105 | Service died. Return by callback. | 3918 3919**示例:** 3920 3921```ts 3922import { BusinessError } from '@kit.BasicServicesKit'; 3923 3924avRecorder.resume((err: BusinessError) => { 3925 if (err) { 3926 console.error('Failed to resume AVRecorder and error is ' + err.message); 3927 } else { 3928 console.info('Succeeded in resuming AVRecorder'); 3929 } 3930}); 3931``` 3932 3933### resume<sup>9+</sup> 3934 3935resume(): Promise\<void> 3936 3937异步方式恢复视频录制。通过Promise获取返回值。 3938 3939需要在[pause()](#pause9-3)事件成功触发后,才能调用resume方法。 3940 3941**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 3942 3943**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3944 3945**返回值:** 3946 3947| 类型 | 说明 | 3948| -------------- | ------------------------------------- | 3949| Promise\<void> | 异步恢复视频录制方法的Promise返回值。 | 3950 3951**错误码:** 3952 3953以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3954 3955| 错误码ID | 错误信息 | 3956| -------- | -------------------------------------- | 3957| 5400102 | Operate not permit. Return by promise. | 3958| 5400103 | IO error. Return by promise. | 3959| 5400105 | Service died. Return by promise. | 3960 3961**示例:** 3962 3963```ts 3964import { BusinessError } from '@kit.BasicServicesKit'; 3965 3966avRecorder.resume().then(() => { 3967 console.info('Succeeded in resuming AVRecorder'); 3968}).catch((err: BusinessError) => { 3969 console.error('Failed to resume AVRecorder failed and catch error is ' + err.message); 3970}); 3971``` 3972 3973### stop<sup>9+</sup> 3974 3975stop(callback: AsyncCallback\<void>): void 3976 3977异步方式停止视频录制。通过注册回调函数获取返回值。 3978 3979需要在[start()](#start9)或[pause()](#pause9-2)事件成功触发后,才能调用stop方法。 3980 3981纯音频录制时,需要重新调用[prepare()](#prepare9-2)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-2)和[getInputSurface()](#getinputsurface9)接口才能重新录制。 3982 3983**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3984 3985**参数:** 3986 3987| 参数名 | 类型 | 必填 | 说明 | 3988| -------- | -------------------- | ---- | ---------------------------- | 3989| callback | AsyncCallback\<void> | 是 | 回调函数。当停止视频录制成功,err为undefined,否则为错误对象。 | 3990 3991**错误码:** 3992 3993以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3994 3995| 错误码ID | 错误信息 | 3996| -------- | --------------------------------------- | 3997| 5400102 | Operate not permit. Return by callback. | 3998| 5400103 | IO error. Return by callback. | 3999| 5400105 | Service died. Return by callback. | 4000 4001**示例:** 4002 4003```ts 4004import { BusinessError } from '@kit.BasicServicesKit'; 4005 4006avRecorder.stop((err: BusinessError) => { 4007 if (err) { 4008 console.error('Failed to stop AVRecorder and error is ' + err.message); 4009 } else { 4010 console.info('Succeeded in stopping AVRecorder'); 4011 } 4012}); 4013``` 4014 4015### stop<sup>9+</sup> 4016 4017stop(): Promise\<void> 4018 4019异步方式停止视频录制。通过Promise获取返回值。 4020 4021需要在[start()](#start9-1)或[pause()](#pause9-3)事件成功触发后,才能调用stop方法。 4022 4023纯音频录制时,需要重新调用[prepare()](#prepare9-3)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-3)和[getInputSurface()](#getinputsurface9-1)接口才能重新录制。 4024 4025**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 4026 4027**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4028 4029**返回值:** 4030 4031| 类型 | 说明 | 4032| -------------- | ------------------------------------- | 4033| Promise\<void> | 异步停止视频录制方法的Promise返回值。 | 4034 4035**错误码:** 4036 4037以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4038 4039| 错误码ID | 错误信息 | 4040| -------- | -------------------------------------- | 4041| 5400102 | Operate not permit. Return by promise. | 4042| 5400103 | IO error. Return by promise. | 4043| 5400105 | Service died. Return by promise. | 4044 4045**示例:** 4046 4047```ts 4048import { BusinessError } from '@kit.BasicServicesKit'; 4049 4050avRecorder.stop().then(() => { 4051 console.info('Succeeded in stopping AVRecorder'); 4052}).catch((err: BusinessError) => { 4053 console.error('Failed to stop AVRecorder and catch error is ' + err.message); 4054}); 4055``` 4056 4057### reset<sup>9+</sup> 4058 4059reset(callback: AsyncCallback\<void>): void 4060 4061异步方式重置音视频录制。通过注册回调函数获取返回值。 4062 4063纯音频录制时,需要重新调用[prepare()](#prepare9-2)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-2)和[getInputSurface()](#getinputsurface9)接口才能重新录制。 4064 4065**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4066 4067**参数:** 4068 4069| 参数名 | 类型 | 必填 | 说明 | 4070| -------- | -------------------- | ---- | ------------------------------ | 4071| callback | AsyncCallback\<void> | 是 | 回调函数。当重置音视频录制成功,err为undefined,否则为错误对象。 | 4072 4073**错误码:** 4074 4075以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4076 4077| 错误码ID | 错误信息 | 4078| -------- | --------------------------------- | 4079| 5400103 | IO error. Return by callback. | 4080| 5400105 | Service died. Return by callback. | 4081 4082**示例:** 4083 4084```ts 4085import { BusinessError } from '@kit.BasicServicesKit'; 4086 4087avRecorder.reset((err: BusinessError) => { 4088 if (err) { 4089 console.error('Failed to reset AVRecorder and error is ' + err.message); 4090 } else { 4091 console.info('Succeeded in resetting AVRecorder'); 4092 } 4093}); 4094``` 4095 4096### reset<sup>9+</sup> 4097 4098reset(): Promise\<void> 4099 4100异步方式重置音视频录制。通过Promise获取返回值。 4101 4102纯音频录制时,需要重新调用[prepare()](#prepare9-3)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-3)和[getInputSurface()](#getinputsurface9-1)接口才能重新录制。 4103 4104**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4105 4106**返回值:** 4107 4108| 类型 | 说明 | 4109| -------------- | --------------------------------------- | 4110| Promise\<void> | 异步重置音视频录制方法的Promise返回值。 | 4111 4112**错误码:** 4113 4114以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4115 4116| 错误码ID | 错误信息 | 4117| -------- | -------------------------------- | 4118| 5400103 | IO error. Return by promise. | 4119| 5400105 | Service died. Return by promise. | 4120 4121**示例:** 4122 4123```ts 4124import { BusinessError } from '@kit.BasicServicesKit'; 4125 4126avRecorder.reset().then(() => { 4127 console.info('Succeeded in resetting AVRecorder'); 4128}).catch((err: BusinessError) => { 4129 console.error('Failed to reset and catch error is ' + err.message); 4130}); 4131``` 4132 4133### release<sup>9+</sup> 4134 4135release(callback: AsyncCallback\<void>): void 4136 4137异步方式释放音视频录制资源。通过注册回调函数获取返回值。 4138 4139释放音视频录制资源之后,该AVRecorder实例不能再进行任何操作。 4140 4141**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4142 4143**参数:** 4144 4145| 参数名 | 类型 | 必填 | 说明 | 4146| -------- | -------------------- | ---- | ---------------------------------- | 4147| callback | AsyncCallback\<void> | 是 | 回调函数。当释放音视频录制资源成功,err为undefined,否则为错误对象。 | 4148 4149**错误码:** 4150 4151以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4152 4153| 错误码ID | 错误信息 | 4154| -------- | --------------------------------- | 4155| 5400105 | Service died. Return by callback. | 4156 4157**示例:** 4158 4159```ts 4160import { BusinessError } from '@kit.BasicServicesKit'; 4161 4162avRecorder.release((err: BusinessError) => { 4163 if (err) { 4164 console.error('Failed to release AVRecorder and error is ' + err.message); 4165 } else { 4166 console.info('Succeeded in releasing AVRecorder'); 4167 } 4168}); 4169``` 4170 4171### release<sup>9+</sup> 4172 4173release(): Promise\<void> 4174 4175异步方式释放音视频录制资源。通过Promise获取返回值。 4176 4177释放音视频录制资源之后,该AVRecorder实例不能再进行任何操作。 4178 4179**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 4180 4181**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4182 4183**返回值:** 4184 4185| 类型 | 说明 | 4186| -------------- | ------------------------------------------- | 4187| Promise\<void> | 异步释放音视频录制资源方法的Promise返回值。 | 4188 4189**错误码:** 4190 4191以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4192 4193| 错误码ID | 错误信息 | 4194| -------- | --------------------------------- | 4195| 5400105 | Service died. Return by callback. | 4196 4197**示例:** 4198 4199```ts 4200import { BusinessError } from '@kit.BasicServicesKit'; 4201 4202avRecorder.release().then(() => { 4203 console.info('Succeeded in releasing AVRecorder'); 4204}).catch((err: BusinessError) => { 4205 console.error('Failed to release AVRecorder and catch error is ' + err.message); 4206}); 4207``` 4208 4209### getCurrentAudioCapturerInfo<sup>11+</sup> 4210 4211getCurrentAudioCapturerInfo(callback: AsyncCallback\<audio.AudioCapturerChangeInfo>): void 4212 4213异步方式获取当前音频采集参数。通过注册回调函数获取返回值。 4214 4215在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。 4216 4217**系统能力**:SystemCapability.Multimedia.Media.AVRecorder 4218 4219**参数**: 4220 4221| 参数名 | 类型 | 必填 | 说明 | 4222| -------- | ------------------------------------------------------------ | ---- | ------------------------------------ | 4223| callback | AsyncCallback\<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | 是 | 回调函数。当获取音频采集参数成功时,err为undefined,data为获取到的audio.AudioCapturerChangeInfo,否则为错误对象。 | 4224 4225**错误码**: 4226 4227以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4228 4229| 错误码ID | 错误信息 | 4230| -------- | ------------------------------------------ | 4231| 5400102 | Operation not allowed. | 4232| 5400103 | I/O error. | 4233| 5400105 | Service died. Return by callback. | 4234 4235**示例**: 4236 4237```ts 4238import { audio } from '@kit.AudioKit'; 4239 4240let currentCapturerInfo: audio.AudioCapturerChangeInfo; 4241 4242avRecorder.getCurrentAudioCapturerInfo((err: BusinessError, capturerInfo: audio.AudioCapturerChangeInfo) => { 4243 if (err) { 4244 console.error('Failed to get CurrentAudioCapturerInfo and error is ' + err.message); 4245 } else { 4246 console.info('Succeeded in getting CurrentAudioCapturerInfo'); 4247 currentCapturerInfo = capturerInfo; 4248 } 4249}); 4250``` 4251 4252### getCurrentAudioCapturerInfo<sup>11+</sup> 4253 4254getCurrentAudioCapturerInfo(): Promise\<audio.AudioCapturerChangeInfo> 4255 4256异步方式获取当前音频采集参数。通过Promise获取返回值。 4257 4258在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。 4259 4260**系统能力**:SystemCapability.Multimedia.Media.AVRecorder 4261 4262**返回值**: 4263 4264| 类型 | 说明 | 4265| ------------------------------------------------------------ | ------------------------------------------------- | 4266| Promise\<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | Promise对象,返回获取的当前音频采集参数。 | 4267 4268**错误码**: 4269 4270以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4271 4272| 错误码ID | 错误信息 | 4273| -------- | -------------------------------- | 4274| 5400102 | Operation not allowed. | 4275| 5400103 | I/O error. | 4276| 5400105 | Service died. Return by promise. | 4277 4278**示例**: 4279 4280```ts 4281import { audio } from '@kit.AudioKit'; 4282 4283let currentCapturerInfo: audio.AudioCapturerChangeInfo; 4284 4285avRecorder.getCurrentAudioCapturerInfo().then((capturerInfo: audio.AudioCapturerChangeInfo) => { 4286 console.info('Succeeded in getting CurrentAudioCapturerInfo'); 4287 currentCapturerInfo = capturerInfo; 4288}).catch((err: BusinessError) => { 4289 console.error('Failed to get CurrentAudioCapturerInfo and catch error is ' + err.message); 4290}); 4291``` 4292 4293### getAudioCapturerMaxAmplitude<sup>11+</sup> 4294 4295getAudioCapturerMaxAmplitude(callback: AsyncCallback\<number>): void 4296 4297异步方式获取当前音频最大振幅。通过注册回调函数获取返回值。 4298 4299在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。 4300 4301调用接口时,获取到的返回值是上一次获取最大振幅的时刻到当前这段区间内的音频最大振幅。即,如果在1s的时刻获取了一次最大振幅,在2s时再获取到的最大振幅时1-2s这个区间里面的最大值。 4302 4303**系统能力**:SystemCapability.Multimedia.Media.AVRecorder 4304 4305**参数**: 4306 4307| 参数名 | 类型 | 必填 | 说明 | 4308| -------- | ---------------------- | ---- | ------------------------------------ | 4309| callback | AsyncCallback\<number> | 是 | 回调函数。获取当前音频最大振幅成功时,err为undefined,data为获取到的最大振幅,否则为错误对象。 | 4310 4311**错误码**: 4312 4313以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4314 4315| 错误码ID | 错误信息 | 4316| -------- | ------------------------------------------ | 4317| 5400102 | Operation not allowed. | 4318| 5400105 | Service died. Return by callback. | 4319 4320**示例**: 4321 4322```ts 4323let maxAmplitude: number; 4324 4325avRecorder.getAudioCapturerMaxAmplitude((err: BusinessError, amplitude: number) => { 4326 if (err) { 4327 console.error('Failed to get AudioCapturerMaxAmplitude and error is ' + err.message); 4328 } else { 4329 console.info('Succeeded in getting AudioCapturerMaxAmplitude'); 4330 maxAmplitude = amplitude; 4331 } 4332}); 4333``` 4334 4335### getAudioCapturerMaxAmplitude<sup>11+</sup> 4336 4337getAudioCapturerMaxAmplitude(): Promise\<number> 4338 4339异步方式获取当前音频最大振幅参数。通过Promise获取返回值。 4340 4341在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。 4342 4343调用接口时,获取到的返回值是上一次获取最大振幅的时刻到当前这段区间内的音频最大振幅。即,如果在1s的时刻获取了一次最大振幅,在2s时再获取到的最大振幅时1-2s这个区间里面的最大值。 4344 4345**系统能力**:SystemCapability.Multimedia.Media.AVRecorder 4346 4347**返回值**: 4348 4349| 类型 | 说明 | 4350| ---------------- | ------------------------------------------------- | 4351| Promise\<number> | Promise对象,返回获取的当前音频最大振幅。 | 4352 4353**错误码**: 4354 4355以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4356 4357| 错误码ID | 错误信息 | 4358| -------- | -------------------------------- | 4359| 5400102 | Operation not allowed. | 4360| 5400105 | Service died. Return by promise. | 4361 4362**示例**: 4363 4364```ts 4365let maxAmplitude: number; 4366 4367avRecorder.getAudioCapturerMaxAmplitude().then((amplitude: number) => { 4368 console.info('Succeeded in getting AudioCapturerMaxAmplitude'); 4369 maxAmplitude = amplitude; 4370}).catch((err: BusinessError) => { 4371 console.error('Failed to get AudioCapturerMaxAmplitude and catch error is ' + err.message); 4372}); 4373``` 4374 4375### getAvailableEncoder<sup>11+</sup> 4376 4377getAvailableEncoder(callback: AsyncCallback\<Array\<EncoderInfo>>): void 4378 4379异步方式获取可用的编码器参数。通过注册回调函数获取返回值。 4380 4381**系统能力**:SystemCapability.Multimedia.Media.AVRecorder 4382 4383**参数**: 4384 4385| 参数名 | 类型 | 必填 | 说明 | 4386| -------- | ----------------------------------------------------- | ---- | ------------------------------------ | 4387| callback | AsyncCallback\<Array\<[EncoderInfo](#encoderinfo11)>> | 是 | 回调函数。获取可用的编码器参数成功时,err为undefined,data为获取到的编码器参数,否则为错误对象。 | 4388 4389**错误码**: 4390 4391以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4392 4393| 错误码ID | 错误信息 | 4394| -------- | ------------------------------------------ | 4395| 5400102 | Operation not allowed. | 4396| 5400105 | Service died. Return by callback. | 4397 4398**示例**: 4399 4400```ts 4401let encoderInfo: media.EncoderInfo; 4402 4403avRecorder.getAvailableEncoder((err: BusinessError, info: media.EncoderInfo[]) => { 4404 if (err) { 4405 console.error('Failed to get AvailableEncoder and error is ' + err.message); 4406 } else { 4407 console.info('Succeeded in getting AvailableEncoder'); 4408 encoderInfo = info[0]; 4409 } 4410}); 4411``` 4412 4413### getAvailableEncoder<sup>11+</sup> 4414 4415getAvailableEncoder(): Promise\<Array\<EncoderInfo>> 4416 4417异步方式获取可用的编码器参数。通过注册回调函数获取返回值。 4418 4419**系统能力**:SystemCapability.Multimedia.Media.AVRecorder 4420 4421**返回值**: 4422 4423| 类型 | 说明 | 4424| ----------------------------------------------- | ----------------------------------------------- | 4425| Promise\<Array\<[EncoderInfo](#encoderinfo11)>> | Promise对象,返回获取的可用的编码器参数。 | 4426 4427**错误码**: 4428 4429以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4430 4431| 错误码ID | 错误信息 | 4432| -------- | -------------------------------- | 4433| 5400102 | Operation not allowed. | 4434| 5400105 | Service died. Return by promise. | 4435 4436**示例**: 4437 4438```ts 4439let encoderInfo: media.EncoderInfo; 4440 4441avRecorder.getAvailableEncoder().then((info: media.EncoderInfo[]) => { 4442 console.info('Succeeded in getting AvailableEncoder'); 4443 encoderInfo = info[0]; 4444}).catch((err: BusinessError) => { 4445 console.error('Failed to get AvailableEncoder and catch error is ' + err.message); 4446}); 4447``` 4448 4449### getAVRecorderConfig<sup>11+</sup> 4450 4451getAVRecorderConfig(callback: AsyncCallback\<AVRecorderConfig>): void 4452 4453异步方式获取实时的配置参数。通过注册回调函数获取返回值。 4454 4455只能在[prepare()](#prepare9-2)接口调用后调用。 4456 4457**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4458 4459**参数:** 4460 4461| 参数名 | 类型 | 必填 | 说明 | 4462| -------- | ---------------------- | ---- | --------------------------- | 4463| callback | AsyncCallback\<[AVRecorderConfig](#avrecorderconfig9)> | 是 | 回调函数。获取实时配置的参数成功时,err为undefined,data为获取到的配置参数,否则为错误对象。 | 4464 4465**错误码:** 4466 4467以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 4468 4469| 错误码ID | 错误信息 | 4470| -------- | ------------------------------------------ | 4471| 5400102 | Operate not permit. Return by callback. | 4472| 5400103 | IO error. Return by callback. | 4473| 5400105 | Service died. Return by callback. | 4474 4475**示例:** 4476 4477```ts 4478import { BusinessError } from '@kit.BasicServicesKit'; 4479 4480let avConfig: media.AVRecorderConfig; 4481 4482avRecorder.getAVRecorderConfig((err: BusinessError, config: media.AVRecorderConfig) => { 4483 if (err) { 4484 console.error('Failed to get avConfig and error is ' + err.message); 4485 } else { 4486 console.info('Succeeded in getting AVRecorderConfig'); 4487 avConfig = config; 4488 } 4489}); 4490``` 4491 4492### getAVRecorderConfig<sup>11+</sup> 4493 4494getAVRecorderConfig(): Promise\<AVRecorderConfig>; 4495 4496异步方式获取实时的配置参数。通过Promise获取返回值。 4497 4498只能在[prepare()](#prepare9-3)接口调用后调用。 4499 4500**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4501 4502**返回值:** 4503 4504| 类型 | 说明 | 4505| ---------------- | -------------------------------- | 4506| Promise\<[AVRecorderConfig](#avrecorderconfig9)> | 异步获得实时配置参数的回调方法。 | 4507 4508**错误码:** 4509 4510以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 4511 4512| 错误码ID | 错误信息 | 4513| -------- | ----------------------------------------- | 4514| 5400102 | Operate not permit. Return by promise. | 4515| 5400103 | IO error. Return by promise. | 4516| 5400105 | Service died. Return by promise. | 4517 4518**示例:** 4519 4520```ts 4521import { BusinessError } from '@kit.BasicServicesKit'; 4522 4523let avConfig: media.AVRecorderConfig; 4524 4525avRecorder.getAVRecorderConfig().then((config: media.AVRecorderConfig) => { 4526 console.info('Succeeded in getting AVRecorderConfig'); 4527 avConfig = config; 4528}).catch((err: BusinessError) => { 4529 console.error('Failed to get AVRecorderConfig and catch error is ' + err.message); 4530}); 4531``` 4532 4533### on('stateChange')<sup>9+</sup> 4534 4535on(type: 'stateChange', callback: OnAVRecorderStateChangeHandler): void 4536 4537订阅录制状态机AVRecorderState切换的事件,当 AVRecorderState状态机发生变化时,会通过订阅的回调方法通知用户。用户只能订阅一个状态机切换事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。 4538 4539**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 4540 4541**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4542 4543**参数:** 4544 4545| 参数名 | 类型 | 必填 | 说明 | 4546| -------- | -------- | ---- | ------------------------------------------------------------ | 4547| type | string | 是 | 状态机切换事件回调类型,支持的事件:'stateChange',用户操作和系统都会触发此事件。 | 4548| callback | [OnAVRecorderStateChangeHandler](#onavrecorderstatechangehandler12) | 是 | 状态机切换事件回调方法。 | 4549 4550**错误码:** 4551 4552以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4553 4554| 错误码ID | 错误信息 | 4555| -------- | --------------------------------- | 4556| 5400103 | IO error. Return by callback. | 4557| 5400105 | Service died. Return by callback. | 4558 4559**示例:** 4560 4561```ts 4562avRecorder.on('stateChange', async (state: media.AVRecorderState, reason: media.StateChangeReason) => { 4563 console.info('case state has changed, new state is :' + state + ',and new reason is : ' + reason); 4564}); 4565``` 4566 4567### off('stateChange')<sup>9+</sup> 4568 4569off(type: 'stateChange', callback?: OnAVRecorderStateChangeHandler): void 4570 4571取消订阅播放状态机[AVRecorderState](#avrecorderstate9)切换的事件。 4572 4573**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 4574 4575**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4576 4577**参数:** 4578 4579| 参数名 | 类型 | 必填 | 说明 | 4580| ------ | ------ | ---- | ------------------------------------------------------------ | 4581| type | string | 是 | 状态机切换事件回调类型,支持的事件:'stateChange',用户操作和系统都会触发此事件。 | 4582| callback | [OnAVRecorderStateChangeHandler](#onavrecorderstatechangehandler12) | 否 | 状态机切换事件回调方法。<br/>从API version 12开始支持此参数。 | 4583 4584**示例:** 4585 4586```ts 4587avRecorder.off('stateChange'); 4588``` 4589 4590### on('error')<sup>9+</sup> 4591 4592on(type: 'error', callback: ErrorCallback): void 4593 4594订阅AVRecorder的错误事件,该事件仅用于错误提示,不需要用户停止播控动作。如果此时[AVRecorderState](#avrecorderstate9)也切至error状态,用户需要通过[reset()](#reset9-2)或者[release()](#release9-2)退出录制操作。 4595 4596用户只能订阅一个错误事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。 4597 4598**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 4599 4600**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4601 4602**参数:** 4603 4604| 参数名 | 类型 | 必填 | 说明 | 4605| -------- | ------------- | ---- | ------------------------------------------------------------ | 4606| type | string | 是 | 录制错误事件回调类型'error'。 <br>- 'error':录制过程中发生错误,触发该事件。 | 4607| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是 | 录制错误事件回调方法。 | 4608 4609**错误码:** 4610 4611以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4612 4613| 错误码ID | 错误信息 | 4614| -------- | ------------------------------------------ | 4615| 201 | Permission denied. | 4616| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 4617| 801 | Capability not supported. | 4618| 5400101 | No memory. | 4619| 5400102 | Operation not allowed. | 4620| 5400103 | I/O error. | 4621| 5400104 | Time out. | 4622| 5400105 | Service died. | 4623| 5400106 | Unsupported format. | 4624| 5400107 | Audio interrupted. | 4625 4626**示例:** 4627 4628```ts 4629import { BusinessError } from '@kit.BasicServicesKit'; 4630 4631avRecorder.on('error', (err: BusinessError) => { 4632 console.info('case avRecorder.on(error) called, errMessage is ' + err.message); 4633}); 4634``` 4635 4636### off('error')<sup>9+</sup> 4637 4638off(type: 'error', callback?: ErrorCallback): void 4639 4640取消订阅录制错误事件,取消后不再接收到AVRecorder的错误事件。 4641 4642**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 4643 4644**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4645 4646**参数:** 4647 4648| 参数名 | 类型 | 必填 | 说明 | 4649| ------ | ------ | ---- | ------------------------------------------------------------ | 4650| type | string | 是 | 录制错误事件回调类型'error'。 <br>- 'error':录制过程中发生错误,触发该事件。 | 4651| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否 | 录制错误事件回调方法。<br/>从API version 12开始支持此参数。 | 4652 4653**示例:** 4654 4655```ts 4656avRecorder.off('error'); 4657``` 4658 4659### on('audioCapturerChange')<sup>11+</sup> 4660 4661on(type: 'audioCapturerChange', callback: Callback<audio.AudioCapturerChangeInfo>): void 4662 4663订阅录音配置变化的回调,任意录音配置的变化会触发变化后的录音配置全量信息回调。 4664 4665当用户重复订阅时,以最后一次订阅的回调接口为准。 4666 4667**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4668 4669**参数:** 4670 4671| 参数名 | 类型 | 必填 | 说明 | 4672| -------- | -------- | ---- | ------------------------------------------------------------ | 4673| type | string | 是 |录音配置变化的回调类型,支持的事件:'audioCapturerChange'。 | 4674| callback | Callback<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | 是 | 变化后的录音配置全量信息。| 4675 4676**错误码:** 4677 4678| 错误码ID | 错误信息 | 4679| -------- | ------------------------------------------ | 4680| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 4681 4682**示例:** 4683 4684```ts 4685import { audio } from '@kit.AudioKit' 4686 4687let capturerChangeInfo: audio.AudioCapturerChangeInfo; 4688 4689avRecorder.on('audioCapturerChange', (audioCapturerChangeInfo: audio.AudioCapturerChangeInfo) => { 4690 console.info('audioCapturerChange called'); 4691 capturerChangeInfo = audioCapturerChangeInfo; 4692}); 4693``` 4694 4695### off('audioCapturerChange')<sup>11+</sup> 4696 4697off(type: 'audioCapturerChange', callback?: Callback<audio.AudioCapturerChangeInfo>): void 4698 4699取消订阅录音变化的回调事件。 4700 4701**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4702 4703**参数:** 4704 4705| 参数名 | 类型 | 必填 | 说明 | 4706| ------ | ------ | ---- | ------------------------------------------------------------ | 4707| type | string | 是 | 录音配置变化的回调类型,支持的事件:'audioCapturerChange'。 | 4708| callback | Callback<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | 否 | 变化后的录音配置全量信息。<br/>从API version 12开始支持此参数。| 4709 4710**示例:** 4711 4712```ts 4713avRecorder.off('audioCapturerChange'); 4714``` 4715 4716### on('photoAssetAvailable')<sup>12+</sup> 4717 4718on(type: 'photoAssetAvailable', callback: Callback\<photoAccessHelper.PhotoAsset>): void 4719 4720订阅媒体资源回调事件,当[FileGenerationMode](#filegenerationmode12)枚举设置为系统创建媒体文件时,会在[stop](#stop9-2)操作结束后把[PhotoAsset](../apis-media-library-kit/js-apis-photoAccessHelper.md#photoasset)对象回调给应用。 4721 4722当用户重复订阅时,以最后一次订阅的回调接口为准。 4723 4724**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4725 4726**参数:** 4727 4728| 参数名 | 类型 | 必填 | 说明 | 4729| -------- | -------- | ---- | ------------------------------------------------------------ | 4730| type | string | 是 |录像资源的回调类型,支持的事件:'photoAssetAvailable'。 | 4731| callback | Callback<[photoAccessHelper.PhotoAsset](../apis-media-library-kit/js-apis-photoAccessHelper.md#photoasset)> | 是 | 系统创建的资源文件对应的PhotoAsset对象。| 4732 4733**错误码:** 4734 4735| 错误码ID | 错误信息 | 4736| -------- | ------------------------------------------ | 4737| 5400103 | IO error. Return by callback. | 4738| 5400105 | Service died. Return by callback. | 4739 4740**示例:** 4741 4742<!--code_no_check--> 4743```ts 4744import { photoAccessHelper } from '@kit.MediaLibraryKit'; 4745import { common } from '@kit.AbilityKit' 4746let photoAsset: photoAccessHelper.PhotoAsset; 4747private context: Context | undefined; 4748constructor(context: Context) { 4749 this.context = context; // this.getUIContext().getHostContext(); 4750} 4751 4752// 例:处理photoAsset回调,保存video。 4753async function saveVideo(asset: photoAccessHelper.PhotoAsset) { 4754 console.info("saveVideo called"); 4755 try { 4756 let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(this.context); 4757 let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(asset); 4758 assetChangeRequest.saveCameraPhoto(); 4759 await phAccessHelper.applyChanges(assetChangeRequest); 4760 console.info('apply saveVideo successfully'); 4761 } catch (err) { 4762 console.error(`apply saveVideo failed with error: ${err.code}, ${err.message}`); 4763 } 4764} 4765// 注册photoAsset监听。 4766avRecorder.on('photoAssetAvailable', (asset: photoAccessHelper.PhotoAsset) => { 4767 console.info('photoAssetAvailable called'); 4768 if (asset != undefined) { 4769 photoAsset = asset; 4770 // 处理photoAsset回调。 4771 // 例: this.saveVideo(asset); 4772 } else { 4773 console.error('photoAsset is undefined'); 4774 } 4775}); 4776``` 4777 4778### off('photoAssetAvailable')<sup>12+</sup> 4779 4780off(type: 'photoAssetAvailable', callback?: Callback<photoAccessHelper.PhotoAsset>): void 4781 4782取消订阅媒体资源的回调类型。 4783 4784**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4785 4786**参数:** 4787 4788| 参数名 | 类型 | 必填 | 说明 | 4789| ------ | ------ | ---- | ------------------------------------------------------------ | 4790| type | string | 是 | 录音配置变化的回调类型,支持的事件:'photoAssetAvailable'。 | 4791| callback | Callback<[photoAccessHelper.PhotoAsset](../apis-media-library-kit/js-apis-photoAccessHelper.md#photoasset)> | 否 | 系统创建的资源文件对应的PhotoAsset对象。| 4792 4793**示例:** 4794 4795```ts 4796avRecorder.off('photoAssetAvailable'); 4797``` 4798 4799## AVRecorderState<sup>9+</sup> 4800 4801type AVRecorderState = 'idle' | 'prepared' | 'started' | 'paused' | 'stopped' | 'released' | 'error' 4802 4803音视频录制的状态机。可通过state属性获取当前状态。 4804 4805**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 4806 4807**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4808 4809| 类型 | 说明 | 4810| -------- | ------------------------------------------------------------ | 4811| 'idle' | 闲置状态。此时可以调用[AVRecorder.prepare()](#prepare9-2)方法设置录制参数,进入prepared状态。AVRecorder刚被创建,或者在任何非released状态下调用[AVRecorder.reset()](#reset9-2)方法,均进入idle状态。 | 4812| 'prepared' | 参数设置完成。此时可以调用[AVRecorder.start()](#start9)方法开始录制,进入started状态。 | 4813| 'started' | 正在录制。此时可以调用[AVRecorder.pause()](#pause9-2)方法暂停录制,进入paused状态。也可以调用[AVRecorder.stop()](#stop9-2)方法结束录制,进入stopped状态。 | 4814| 'paused' | 录制暂停。此时可以调用[AVRecorder.resume()](#resume9)方法继续录制,进入started状态。也可以调用[AVRecorder.stop()](#stop9-2)方法结束录制,进入stopped状态。 | 4815| 'stopped' | 录制停止。此时可以调用[AVRecorder.prepare()](#prepare9-2)方法设置录制参数,重新进入prepared状态。 | 4816| 'released' | 录制资源释放。此时不能再进行任何操作。在任何其他状态下,均可以通过调用[AVRecorder.release()](#release9-2)方法进入released状态。 | 4817| 'error' | 错误状态。当AVRecorder实例发生不可逆错误,会转换至当前状态。切换至error状态时会伴随[AVRecorder.on('error')事件](#onerror9-1),该事件会上报详细错误原因。在error状态时,用户需要调用[AVRecorder.reset()](#reset9-2)方法重置AVRecorder实例,或者调用[AVRecorder.release()](#release9-2)方法释放资源。 | 4818 4819## OnAVRecorderStateChangeHandler<sup>12+</sup> 4820 4821type OnAVRecorderStateChangeHandler = (state: AVRecorderState, reason: StateChangeReason) => void 4822 4823状态机切换事件回调方法。 4824 4825**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 4826 4827**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4828 4829| 参数名 | 类型 | 必填 | 说明 | 4830| ------ | ------ | ------ | ------------------------------------------------------------ | 4831| state | [AVRecorderState](#avrecorderstate9) | 是 | 当前录制状态。 | 4832| reason | [StateChangeReason](#statechangereason9) | 是 | 当前录制状态的切换原因。 | 4833 4834## AVRecorderConfig<sup>9+</sup> 4835 4836表示音视频录制的参数设置。 4837 4838通过audioSourceType和videoSourceType区分纯音频录制、纯视频录制或音视频录制。纯音频录制时,仅需要设置audioSourceType;纯视频录制时,仅需要设置videoSourceType;音视频录制时,audioSourceType和videoSourceType均需要设置。 4839 4840**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4841 4842| 名称 | 类型 | 必填 | 说明 | 4843| --------------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 4844| audioSourceType | [AudioSourceType](#audiosourcetype9) | 否 | 选择录制的音频源类型。选择音频录制时必填。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。| 4845| videoSourceType | [VideoSourceType](#videosourcetype9) | 否 | 选择录制的视频源类型。选择视频录制时必填。 | 4846| profile | [AVRecorderProfile](#avrecorderprofile9) | 是 | 录制的profile,必要参数。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。| 4847| url | string | 是 | 录制输出URL:fd://xx (fd number) ,必要参数。 <br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 | 4848|fileGenerationMode<sup>12+</sup> | [FileGenerationMode](#filegenerationmode12) | 否 | 创建媒体文件的模式,配合[on('photoAssetAvailable')](#onphotoassetavailable12)监听使用。| 4849| rotation<sup>(deprecated)</sup> | number | 否 | 录制的视频旋转角度,mp4格式支持0,90,180,270,默认值为0。<br>从API version 6开始支持,从API version 12开始废弃。建议使用[AVMetadata](#avmetadata11).videoOrientation替代。如果同时设置两个值,将会采用[AVMetadata](#avmetadata11).videoOrientation。 | 4850| location<sup>(deprecated)</sup> | [Location](#location) | 否 | 录制的地理位置,默认不记录地理位置信息。<br>从API version 6开始支持,从API version 12开始废弃。建议使用 [AVMetadata](#avmetadata11).location。如果同时设置两个值,将会采用[AVMetadata](#avmetadata11).location。 | 4851| metadata<sup>12+</sup> | [AVMetadata](#avmetadata11) | 否 | 设置元数据信息。详情见 [AVMetadata](#avmetadata11)。 | 4852| maxDuration<sup>18+</sup> | number | 否 | 设置录制的最大时长,单位为秒,有效值取值范围[1 , 2^31-1],无效输入会重置为最大值。录制到达设定时长后,录制会自动停止,并通过stateChange回调录制状态,[AVRecorderState](#avrecorderstate9) = 'stopped',[StateChangeReason](#statechangereason9) = BACKGROUND。| 4853 4854## AVRecorderProfile<sup>9+</sup> 4855 4856音视频录制的配置文件。 4857 4858> **说明:** 4859> 此处提供音频参数配置的对照表,每项的具体释义,可查看下述字段解释。 4860> 4861> |编码格式|封装格式|采样率|比特率|声道数| 4862> |----|----|----|----|----| 4863> |AUDIO_AAC|MP4,M4A|[8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000]|[32000-500000]|[1-8]| 4864> |AUDIO_MP3|MP3|[8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000]|<br>- 采样率使用16000以下时,对应比特率范围为[8000 - 64000]。<br>- 采样率使用16000~32000时对应的比特率范围为[8000 - 160000]。<br>- 采样率使用32000以上时对应的比特率范围为[32000 - 320000]。|[1-2]| 4865> |AUDIO_G711MU|WAV|[8000]|[64000]|[1]| 4866> |AUDIO_AMR_NB<sup>18+</sup> |AMR|[8000]|[4750, 5150, 5900, 6700, 7400, 7950, 10200, 12200]|[1]| 4867> |AUDIO_AMR_WB<sup>18+</sup> |AMR|[16000]|[6600, 8850, 12650, 14250, 15850, 18250, 19850, 23050, 23850]|[1]| 4868 4869**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4870 4871| 名称 | 类型 | 必填 | 说明 | 4872| ---------------- | -------------------------------------------- | ---- | ------------------------------------------------------------ | 4873| audioBitrate | number | 否 | 音频编码比特率,选择音频录制时必填。<br>支持范围:<br>- AAC编码格式支持比特率范围[32000 - 500000]。<br>- G711-mulaw编码格式支持比特率范围[64000]。<br>- MP3编码格式支持范围[8000, 16000, 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 160000, 192000, 224000, 256000, 320000]。<br>当使用MP3编码格式时,采样率和比特率的映射关系: <br>- 采样率使用16K以下时,对应比特率范围为[8000 - 64000]。<br>- 采样率使用16K~32K时对应的比特率范围为[8000 - 160000]。<br>- 采样率使用32K以上时对应的比特率范围为[32000 - 320000]。<br>- AMR_NB编码格式支持比特率范围[4750, 5150, 5900, 6700, 7400, 7950, 10200, 12200]。<br>- AMR_WB编码格式支持比特率范围[6600, 8850, 12650, 14250, 15850, 18250, 19850, 23050, 23850]。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 | 4874| audioChannels | number | 否 | 音频采集声道数,选择音频录制时必填。<br>- AAC编码格式支持范围[1 - 8]。<br>- G711-mulaw编码格式支持范围[1]。<br>- MP3编码格式支持范围[1 - 2]。<br>- AMR-NB、AMR-WB编码格式支持范围[1]。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 | 4875| audioCodec | [CodecMimeType](#codecmimetype8) | 否 | 音频编码格式,选择音频录制时必填。当前支持AUDIO_AAC,AUDIO_MP3,AUDIO_G711MU, AUDIO_AMR_NB, AUDIO_AMR_WB。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 | 4876| audioSampleRate | number | 否 | 音频采样率,选择音频录制时必填。<br>支持范围:<br>- AAC编码支持采样率范围[8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000]。<br>- G711-mulaw编码支持采样率范围[8000]。<br>- MP3编码支持采样率范围[8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000]。<br>- AMR_NB编码支持采样率范围[8000]。<br>- AMR_WB编码支持采样率范围[16000]。<br>可变比特率模式,码率仅作参考。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 | 4877| fileFormat | [ContainerFormatType](#containerformattype8) | 是 | 文件的容器格式,必要参数。当前支持MP4、M4A、MP3、WAV、AMR封装格式,不支持在MP4封装格式下使用AUDIO_MP3编码格式。<br>**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。| 4878| videoBitrate | number | 否 | 视频编码比特率,选择视频录制时必填,支持范围[10000 - 100000000]。 | 4879| videoCodec | [CodecMimeType](#codecmimetype8) | 否 | 视频编码格式,选择视频录制时必填。当前支持VIDEO_AVC。| 4880| videoFrameWidth | number | 否 | 视频帧的宽,选择视频录制时必填,支持范围[176 - 4096]。 | 4881| videoFrameHeight | number | 否 | 视频帧的高,选择视频录制时必填,支持范围[144 - 4096]。 | 4882| videoFrameRate | number | 否 | 视频帧率,选择视频录制时必填,支持范围[1 - 60]。 | 4883| isHdr<sup>11+</sup> | boolean | 否 | HDR编码,选择视频录制时选填,isHdr默认为false,对应编码格式没有要求,isHdr为true时,对应的编码格式必须为video/hevc。| 4884| enableTemporalScale<sup>12+</sup> | boolean | 否 | 视频录制是否支持时域分层编码功能,选择视频录制时选填,enableTemporalScale默认为false。设置为true时,编码输出的码流中部分帧可以支持跳过不编码。| 4885 4886## AudioSourceType<sup>9+</sup> 4887 4888表示视频录制中音频源类型的枚举。 4889 4890**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4891 4892| 名称 | 值 | 说明 | 4893| ------------------------- | ---- | ---------------------- | 4894| AUDIO_SOURCE_TYPE_DEFAULT | 0 | 默认的音频输入源类型。 | 4895| AUDIO_SOURCE_TYPE_MIC | 1 | 表示MIC的音频输入源。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 | 4896| AUDIO_SOURCE_TYPE_VOICE_RECOGNITION<sup>12+</sup> | 2 | 表示语音识别场景的音频源。 | 4897| AUDIO_SOURCE_TYPE_VOICE_COMMUNICATION<sup>12+</sup> | 7 | 表示语音通话场景的音频源。 | 4898| AUDIO_SOURCE_TYPE_VOICE_MESSAGE<sup>12+</sup> | 10 | 表示短语音消息的音频源。 | 4899| AUDIO_SOURCE_TYPE_CAMCORDER<sup>12+</sup> | 13 | 表示相机录像的音频源。 | 4900 4901## VideoSourceType<sup>9+</sup> 4902 4903表示视频录制中视频源类型的枚举。 4904 4905**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4906 4907| 名称 | 值 | 说明 | 4908| ----------------------------- | ---- | ------------------------------- | 4909| VIDEO_SOURCE_TYPE_SURFACE_YUV | 0 | 输入surface中携带的是raw data。 | 4910| VIDEO_SOURCE_TYPE_SURFACE_ES | 1 | 输入surface中携带的是ES data。 | 4911 4912## ContainerFormatType<sup>8+</sup> 4913 4914表示容器格式类型的枚举,缩写为CFT。 4915 4916**系统能力:** SystemCapability.Multimedia.Media.Core 4917 4918| 名称 | 值 | 说明 | 4919| ----------- | ----- | --------------------- | 4920| CFT_MPEG_4 | 'mp4' | 视频的容器格式,MP4。 | 4921| CFT_MPEG_4A | 'm4a' | 音频的容器格式,M4A。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 | 4922| CFT_MP3<sup>12+</sup> | 'mp3' | 音频的容器格式,MP3。 | 4923| CFT_WAV<sup>12+</sup> | 'wav' | 音频的容器格式,WAV。 | 4924| CFT_AMR<sup>18+</sup> | 'amr' | 音频的容器格式,AMR。 | 4925 4926## Location 4927 4928视频录制的地理位置。 4929 4930**系统能力:** SystemCapability.Multimedia.Media.Core 4931 4932| 名称 | 类型 | 必填 | 说明 | 4933| --------- | ------ | ---- | ---------------- | 4934| latitude | number | 是 | 地理位置的纬度,取值范围为[-90, 90]。 | 4935| longitude | number | 是 | 地理位置的经度,取值范围为[-180, 180]。 | 4936 4937## EncoderInfo<sup>11+</sup> 4938 4939编码器和规格参数 4940 4941系统能力:SystemCapability.Multimedia.Media.AVRecorder 4942 4943| 名称 | 类型 | 可读 | 可写 | 说明 | 4944| ---------- | -------------------------------- | ---- | ---- | ------------------------------------------------------------ | 4945| mimeType | [CodecMimeType](#codecmimetype8) | 是 | 否 | 编码器MIME类型名称。 | 4946| type | string | 是 | 否 | 编码器类型,audio表示音频编码器,video表示视频编码器。 | 4947| bitRate | [Range](#range11) | 是 | 否 | 比特率,包含该编码器的最大和最小值。 | 4948| frameRate | [Range](#range11) | 是 | 否 | 视频帧率,包含帧率的最大和最小值,仅视频编码器拥有。 | 4949| width | [Range](#range11) | 是 | 否 | 视频帧的宽度,包含宽度的最大和最小值,仅视频编码器拥有。 | 4950| height | [Range](#range11) | 是 | 否 | 视频帧的高度,包含高度的最大和最小值,仅视频编码器拥有。 | 4951| channels | [Range](#range11) | 是 | 否 | 音频采集声道数,包含声道数的最大和最小值,仅音频编码器拥有。 | 4952| sampleRate | Array\<number> | 是 | 否 | 音频采样率,包含所有可以使用的音频采样率值数组,具体数值依赖编码器类型,仅音频编码器拥有。 | 4953 4954## Range<sup>11+</sup> 4955 4956表示一个类型的范围 4957 4958系统能力:SystemCapability.Multimedia.Media.AVRecorder 4959 4960| 名称 | 类型 | 可读 | 可写 | 说明 | 4961| ---- | ------ | ---- | ---- | ------------ | 4962| min | number | 是 | 否 | 范围的最小值。 | 4963| max | number | 是 | 否 | 范围的最大值。 | 4964 4965## FileGenerationMode<sup>12+</sup> 4966 4967表示创建媒体文件模式的枚举。 4968 4969**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4970 4971| 名称 | 值 | 说明 | 4972| ----------------------------- | ---- | ------------------------------- | 4973| APP_CREATE | 0 | 由应用自行在沙箱创建媒体文件。 | 4974| AUTO_CREATE_CAMERA_SCENE | 1 | 由系统创建媒体文件,当前仅在相机录制场景下生效,会忽略应用设置的url。 | 4975 4976## AVTranscoder<sup>12+</sup> 4977 4978视频转码管理类,用于视频转码。在调用AVTranscoder的方法前,需要先通过createAVTranscoder()构建一个AVTranscoder实例。 4979 4980视频转码demo可参考:[视频转码开发指导](../../media/media/using-avtranscoder-for-transcodering.md) 4981 4982### 属性 4983 4984**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 4985 4986| 名称 | 类型 | 只读 | 可选 | 说明 | 4987| ------- | ------------------------------------ | ---- | ---- | ------------------ | 4988| fdSrc<sup>12+</sup> | [AVFileDescriptor](#avfiledescriptor9) | 否 | 否 | 源媒体文件描述,通过该属性设置数据源。<br/> **使用示例**:<br/>假设一个连续存储的媒体文件,地址偏移:0,字节长度:100。其文件描述为 AVFileDescriptor { fd = 资源句柄; offset = 0; length = 100; }。<br>**说明:** <br> - 将资源句柄(fd)传递给 AVTranscoder 实例之后,请不要通过该资源句柄做其他读写操作,包括但不限于将同一个资源句柄传递给多个 AVPlayer / AVMetadataExtractor / AVImageGenerator / AVTranscoder。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致视频转码数据获取异常。 | 4989| fdDst<sup>12+</sup> | number | 否 | 否 | 目标媒体文件描述,通过该属性设置数据输出。在创建AVTranscoder实例后,必须设置fdSrc和fdDst属性。<br>**说明:** <br> - 将资源句柄(fd)传递给 AVTranscoder 实例之后,请不要通过该资源句柄做其他读写操作,包括但不限于将同一个资源句柄传递给多个 AVPlayer / AVMetadataExtractor / AVImageGenerator / AVTranscoder。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致视频转码数据获取异常。 | 4990 4991### prepare<sup>12+</sup> 4992 4993prepare(config: AVTranscoderConfig): Promise\<void> 4994 4995异步方式进行视频转码的参数设置。通过Promise获取返回值。 4996 4997**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 4998 4999**参数:** 5000 5001| 参数名 | 类型 | 必填 | 说明 | 5002| ------ | -------------------------------------- | ---- | -------------------------- | 5003| config | [AVTranscoderConfig](#avtranscoderconfig12) | 是 | 配置视频转码的相关参数。 | 5004 5005**返回值:** 5006 5007| 类型 | 说明 | 5008| -------------- | ------------------------------------------ | 5009| Promise\<void> | 异步视频转码prepare方法的Promise返回值。 | 5010 5011**错误码:** 5012 5013以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 5014 5015| 错误码ID | 错误信息 | 5016| -------- | -------------------------------------- | 5017| 401 | The parameter check failed. Return by promise. | 5018| 5400102 | Operation not allowed. Return by promise. | 5019| 5400105 | Service died. Return by promise. | 5020| 5400106 | Unsupported format. Returned by promise. | 5021 5022**示例:** 5023 5024```ts 5025import { BusinessError } from '@kit.BasicServicesKit'; 5026 5027// 配置参数以实际硬件设备支持的范围为准。 5028let avTranscoderConfig: media.AVTranscoderConfig = { 5029 audioBitrate : 200000, 5030 audioCodec : media.CodecMimeType.AUDIO_AAC, 5031 fileFormat : media.ContainerFormatType.CFT_MPEG_4, 5032 videoBitrate : 3000000, 5033 videoCodec : media.CodecMimeType.VIDEO_AVC, 5034 videoFrameWidth : 1280, 5035 videoFrameHeight : 720, 5036} 5037 5038avTranscoder.prepare(avTranscoderConfig).then(() => { 5039 console.info('prepare success'); 5040}).catch((err: BusinessError) => { 5041 console.error('prepare failed and catch error is ' + err.message); 5042}); 5043``` 5044 5045### start<sup>12+</sup> 5046 5047start(): Promise\<void> 5048 5049异步方式开始视频转码。通过Promise获取返回值。 5050 5051需要[prepare()](#prepare12)事件成功触发后,才能调用start方法。 5052 5053**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 5054 5055**返回值:** 5056 5057| 类型 | 说明 | 5058| -------------- | ------------------------------------- | 5059| Promise\<void> | 异步开始视频转码方法的Promise返回值。 | 5060 5061**错误码:** 5062 5063以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 5064 5065| 错误码ID | 错误信息 | 5066| -------- | -------------------------------------- | 5067| 5400102 | Operation not allowed. Return by promise. | 5068| 5400103 | IO error. Return by promise. | 5069| 5400105 | Service died. Return by promise. | 5070 5071**示例:** 5072 5073```ts 5074import { BusinessError } from '@kit.BasicServicesKit'; 5075 5076avTranscoder.start().then(() => { 5077 console.info('start AVTranscoder success'); 5078}).catch((err: BusinessError) => { 5079 console.error('start AVTranscoder failed and catch error is ' + err.message); 5080}); 5081``` 5082 5083### pause<sup>12+</sup> 5084 5085pause(): Promise\<void> 5086 5087异步方式暂停视频转码。通过Promise获取返回值。 5088 5089需要[start()](#start12)事件成功触发后,才能调用pause方法,可以通过调用[resume()](#resume12)接口来恢复转码。 5090 5091**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 5092 5093**返回值:** 5094 5095| 类型 | 说明 | 5096| -------------- | ------------------------------------- | 5097| Promise\<void> | 异步暂停视频转码方法的Promise返回值。 | 5098 5099**错误码:** 5100 5101以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 5102 5103| 错误码ID | 错误信息 | 5104| -------- | -------------------------------------- | 5105| 5400102 | Operation not allowed. Return by promise. | 5106| 5400103 | IO error. Return by promise. | 5107| 5400105 | Service died. Return by promise. | 5108 5109**示例:** 5110 5111```ts 5112import { BusinessError } from '@kit.BasicServicesKit'; 5113 5114avTranscoder.pause().then(() => { 5115 console.info('pause AVTranscoder success'); 5116}).catch((err: BusinessError) => { 5117 console.error('pause AVTranscoder failed and catch error is ' + err.message); 5118}); 5119``` 5120 5121### resume<sup>12+</sup> 5122 5123resume(): Promise\<void> 5124 5125异步方式恢复视频转码。通过Promise获取返回值。 5126 5127需要在[pause()](#pause12)事件成功触发后,才能调用resume方法。 5128 5129**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 5130 5131**返回值:** 5132 5133| 类型 | 说明 | 5134| -------------- | ------------------------------------- | 5135| Promise\<void> | 异步恢复视频转码方法的Promise返回值。 | 5136 5137**错误码:** 5138 5139以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 5140 5141| 错误码ID | 错误信息 | 5142| -------- | -------------------------------------- | 5143| 5400102 | Operation not allowed. Return by promise. | 5144| 5400103 | IO error. Return by promise. | 5145| 5400105 | Service died. Return by promise. | 5146 5147**示例:** 5148 5149```ts 5150import { BusinessError } from '@kit.BasicServicesKit'; 5151 5152avTranscoder.resume().then(() => { 5153 console.info('resume AVTranscoder success'); 5154}).catch((err: BusinessError) => { 5155 console.error('resume AVTranscoder failed and catch error is ' + err.message); 5156}); 5157``` 5158 5159### cancel<sup>12+</sup> 5160 5161cancel(): Promise\<void> 5162 5163异步方式取消视频转码。通过Promise获取返回值。 5164 5165需要在[prepare()](#prepare12)、[start()](#start12)、[pause()](#pause12)或[resume()](#resume12)事件成功触发后,才能调用cancel方法。 5166 5167**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 5168 5169**返回值:** 5170 5171| 类型 | 说明 | 5172| -------------- | ------------------------------------- | 5173| Promise\<void> | 异步取消视频转码方法的Promise返回值。 | 5174 5175**错误码:** 5176 5177以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 5178 5179| 错误码ID | 错误信息 | 5180| -------- | -------------------------------------- | 5181| 5400102 | Operation not allowed. Return by promise. | 5182| 5400103 | IO error. Return by promise. | 5183| 5400105 | Service died. Return by promise. | 5184 5185**示例:** 5186 5187```ts 5188import { BusinessError } from '@kit.BasicServicesKit'; 5189 5190avTranscoder.cancel().then(() => { 5191 console.info('cancel AVTranscoder success'); 5192}).catch((err: BusinessError) => { 5193 console.error('cancel AVTranscoder failed and catch error is ' + err.message); 5194}); 5195``` 5196 5197### release<sup>12+</sup> 5198 5199release(): Promise\<void> 5200 5201异步方式释放视频转码资源。通过Promise获取返回值。 5202 5203释放视频转码资源之后,该AVTranscoder实例不能再进行任何操作。 5204 5205**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 5206 5207**返回值:** 5208 5209| 类型 | 说明 | 5210| -------------- | ------------------------------------------- | 5211| Promise\<void> | 异步释放视频转码资源方法的Promise返回值。 | 5212 5213**错误码:** 5214 5215以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 5216 5217| 错误码ID | 错误信息 | 5218| -------- | --------------------------------- | 5219| 5400102 | Operation not allowed. Return by promise. | 5220| 5400105 | Service died. Return by promise. | 5221 5222**示例:** 5223 5224```ts 5225import { BusinessError } from '@kit.BasicServicesKit'; 5226 5227avTranscoder.release().then(() => { 5228 console.info('release AVTranscoder success'); 5229}).catch((err: BusinessError) => { 5230 console.error('release AVTranscoder failed and catch error is ' + err.message); 5231}); 5232``` 5233 5234### on('progressUpdate')<sup>12+</sup> 5235 5236on(type: 'progressUpdate', callback: Callback\<number>): void 5237 5238注册转码进度更新事件,并通过注册的回调方法通知用户。用户只能注册一个进度更新事件的回调方法,当用户重复注册时,以最后一次注册的回调接口为准。 5239 5240**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 5241 5242**参数:** 5243 5244| 参数名 | 类型 | 必填 | 说明 | 5245| -------- | -------- | ---- | ------------------------------------------------------------ | 5246| type | string | 是 | 进度更新事件回调类型,支持的事件:'progressUpdate',在转码过程中系统会自动触发此事件。 | 5247| callback | [Callback\<number>](../apis-basic-services-kit/js-apis-base.md#callback) | 是 | 进度更新事件回调方法,progress: number,表示当前转码进度。 | 5248 5249**示例:** 5250 5251```ts 5252avTranscoder.on('progressUpdate', (progress: number) => { 5253 console.info('avTranscoder progressUpdate = ' + progress); 5254}); 5255``` 5256 5257### off('progressUpdate')<sup>12+</sup> 5258 5259off(type:'progressUpdate', callback?: Callback\<number>): void 5260 5261取消注册转码进度更新事件。 5262 5263**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 5264 5265**参数:** 5266 5267| 参数名 | 类型 | 必填 | 说明 | 5268| ------ | ------ | ---- | ------------------------------------------------------------ | 5269| type | string | 是 | 进度更新事件回调类型,支持的事件:'progressUpdate',用户操作和系统都会触发此事件。 | 5270| callback | [Callback\<number>](../apis-basic-services-kit/js-apis-base.md#callback) | 否 | 已注册的进度更新事件回调。由于当前回调注册时,仅会保留最后一次注册的回调,建议此参数缺省。 | 5271 5272**示例:** 5273 5274```ts 5275avTranscoder.off('progressUpdate'); 5276``` 5277 5278### on('error')<sup>12+</sup> 5279 5280on(type: 'error', callback: ErrorCallback): void 5281 5282注册AVtranscoder的错误事件,该事件仅用于错误提示。如果AVTranscoder上报error事件,用户需要通过[release()](#release12)退出转码操作。 5283 5284用户只能订阅一个错误事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。 5285 5286**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 5287 5288**参数:** 5289 5290| 参数名 | 类型 | 必填 | 说明 | 5291| -------- | ------------- | ---- | ------------------------------------------------------------ | 5292| type | string | 是 | 转码错误事件回调类型'error'。 <br>- 'error':录制过程中发生错误,触发该事件。 | 5293| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是 | 转码错误事件回调方法。 | 5294 5295**错误码:** 5296 5297以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 5298 5299| 错误码ID | 错误信息 | 5300| -------- | ------------------------------------------ | 5301| 401 | The parameter check failed. | 5302| 801 | Capability not supported. | 5303| 5400101 | No memory. | 5304| 5400102 | Operation not allowed. | 5305| 5400103 | I/O error. | 5306| 5400104 | Time out. | 5307| 5400105 | Service died. | 5308| 5400106 | Unsupported format. | 5309 5310**示例:** 5311 5312```ts 5313import { BusinessError } from '@kit.BasicServicesKit'; 5314 5315avTranscoder.on('error', (err: BusinessError) => { 5316 console.info('case avTranscoder.on(error) called, errMessage is ' + err.message); 5317}); 5318``` 5319 5320### off('error')<sup>12+</sup> 5321 5322off(type:'error', callback?: ErrorCallback): void 5323 5324取消注册转码错误事件,取消后不再接收到AVTranscoder的错误事件。 5325 5326**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 5327 5328**参数:** 5329 5330| 参数名 | 类型 | 必填 | 说明 | 5331| ------ | ------ | ---- | ------------------------------------------------------------ | 5332| type | string | 是 | 转码错误事件回调类型'error'。 <br>- 'error':转码过程中发生错误,触发该事件。 | 5333| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否 | 错误事件回调方法。 | 5334 5335**示例:** 5336 5337```ts 5338avTranscoder.off('error'); 5339``` 5340 5341### on('complete')<sup>12+</sup> 5342 5343on(type: 'complete', callback: Callback\<void>): void 5344 5345注册转码完成事件,并通过注册的回调方法通知用户。用户只能注册一个进度更新事件的回调方法,当用户重复注册时,以最后一次注册的回调接口为准。 5346 5347当AVTranscoder上报complete事件时,当前转码操作已完成,用户需要通过[release()](#release12)退出转码操作。 5348 5349**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 5350 5351**参数:** 5352 5353| 参数名 | 类型 | 必填 | 说明 | 5354| -------- | -------- | ---- | ------------------------------------------------------------ | 5355| type | string | 是 | 完成事件回调类型,支持的事件:'complete',在转码过程中系统会自动触发此事件。 | 5356| callback | [Callback\<void>](../apis-basic-services-kit/js-apis-base.md#callback) | 是 | 完成事件回调方法。 | 5357 5358**示例:** 5359 5360```ts 5361avTranscoder.on('complete', async () => { 5362 console.info('avTranscoder complete'); 5363 // 用户须在此监听转码完成事件 5364 // 须等待avTranscoder.release()完成之后,再对转码后的文件进行转发、上传、转存等处理 5365 await avTranscoder.release(); 5366 avTranscoder = undefined; 5367}); 5368``` 5369 5370### off('complete')<sup>12+</sup> 5371 5372off(type:'complete', callback?: Callback\<void>): void 5373 5374取消注册转码完成事件。 5375 5376**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 5377 5378**参数:** 5379 5380| 参数名 | 类型 | 必填 | 说明 | 5381| ------ | ------ | ---- | ------------------------------------------------------------ | 5382| type | string | 是 | 转码完成事件回调类型,支持的事件:'complete',用户操作和系统都会触发此事件。 | 5383| callback | [Callback\<void>](../apis-basic-services-kit/js-apis-base.md#callback) | 否 | 完成事件回调方法。 | 5384 5385**示例:** 5386 5387```ts 5388avTranscoder.off('complete'); 5389``` 5390 5391## AVTranscoderConfig<sup>12+</sup> 5392 5393表示视频转码的参数设置。 5394 5395**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 5396 5397| 名称 | 类型 | 只读 | 可选 | 说明 | 5398| --------------- | ---------------------------------------- |---- | ---- | ------------------------------------------------------------ | 5399| audioBitrate | number | 否 | 是 | 输出音频的码率,单位为比特率(bps),支持范围[1-500000]。默认设置为48Kbps。| 5400| audioCodec | [CodecMimeType](#codecmimetype8) | 否 | 是 | 输出音频的编码格式,当前仅支持AAC。默认设置为AAC。 | 5401| fileFormat | [ContainerFormatType](#containerformattype8) | 否 | 否 | 输出视频文件的封装格式,当前视频文件仅支持MP4。| 5402| videoBitrate | number | 否 | 是 | 输出视频的码率,单位为比特率(bps)。默认码率按输出视频的分辨率设置,[240p,480P]默认码率值为1Mbps,(480P,720P]默认码率值为2Mbps,(720P,1080P]默认码率值为4Mbps,1080P及以上默认值为8Mbps。| 5403| videoCodec | [CodecMimeType](#codecmimetype8) | 否 | 是 | 输出视频的编码格式,当前仅支持AVC和HEVC。若源视频编码格式为HEVC,则默认设置为HEVC,否则默认设置为AVC。| 5404| videoFrameWidth | number | 否 | 是 | 输出视频帧的宽,单位为像素(px),支持范围[240-3840]。默认设置为源视频帧的宽。| 5405| videoFrameHeight | number | 否 | 是 | 输出视频帧的高,单位为像素(px),支持范围[240-2160]。默认设置为源视频帧的高。| 5406 5407 5408 5409## AVMetadataExtractor<sup>11+</sup> 5410 5411元数据获取类,用于从媒体资源中获取元数据。在调用AVMetadataExtractor的方法前,需要先通过[createAVMetadataExtractor()](#mediacreateavmetadataextractor11)构建一个AVMetadataExtractor实例。 5412 5413获取音频或视频元数据的demo可参考:[获取音视频元数据开发指导](../../media/media/avmetadataextractor.md)。 5414 5415### 属性 5416 5417**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 5418 5419| 名称 | 类型 | 可读 | 可写 | 说明 | 5420| --------------------------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ | 5421| 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。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致音视频元数据获取异常。 | 5422| dataSrc<sup>11+</sup> | [AVDataSrcDescriptor](#avdatasrcdescriptor10) | 是 | 是 | 流式媒体资源描述,通过该属性设置数据源。在获取元数据之前,必须设置数据源属性,只能设置fdSrc和dataSrc的其中一个。<br/> 当应用从远端获取音视频媒体文件,在应用未下载完整音视频资源时,可以设置dataSrc提前获取该资源的元数据。| 5423 5424### fetchMetadata<sup>11+</sup> 5425 5426fetchMetadata(callback: AsyncCallback\<AVMetadata>): void 5427 5428异步方式获取媒体元数据。通过注册回调函数获取返回值。 5429 5430**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 5431 5432**参数:** 5433 5434| 参数名 | 类型 | 必填 | 说明 | 5435| -------- | -------------------------------------------- | ---- | ----------------------------------- | 5436| callback | AsyncCallback\<[AVMetadata](#avmetadata11)> | 是 | 回调函数。异步返回音视频元数据对象(AVMetadata)。| 5437 5438**错误码:** 5439 5440以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 5441 5442| 错误码ID | 错误信息 | 5443| -------- | ------------------------------------------ | 5444| 5400102 | Operation not allowed. Returned by callback. | 5445| 5400106 | Unsupported format. Returned by callback. | 5446 5447**示例:** 5448 5449```ts 5450import { BusinessError } from '@kit.BasicServicesKit'; 5451 5452avMetadataExtractor.fetchMetadata((error: BusinessError, metadata: media.AVMetadata) => { 5453 if (error) { 5454 console.error(`Failed to fetch Metadata, err = ${JSON.stringify(error)}`); 5455 return; 5456 } 5457 console.info(`Succeeded in fetching Metadata, genre: ${metadata.genre}`); 5458}); 5459``` 5460 5461### fetchMetadata<sup>11+</sup> 5462 5463fetchMetadata(): Promise\<AVMetadata> 5464 5465异步方式获取媒体元数据。通过Promise获取返回值。 5466 5467**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 5468 5469**返回值:** 5470 5471| 类型 | 说明 | 5472| -------------- | ---------------------------------------- | 5473| Promise\<[AVMetadata](#avmetadata11)> | Promise对象。异步返回音视频元数据对象(AVMetadata)。 | 5474 5475**错误码:** 5476 5477以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 5478 5479| 错误码ID | 错误信息 | 5480| -------- | ----------------------------------------- | 5481| 5400102 | Operation not allowed. Returned by promise. | 5482| 5400106 | Unsupported format. Returned by promise. | 5483 5484**示例:** 5485 5486```ts 5487import { BusinessError } from '@kit.BasicServicesKit'; 5488 5489avMetadataExtractor.fetchMetadata().then((metadata: media.AVMetadata) => { 5490 console.info(`Succeeded in fetching Metadata, genre: ${metadata.genre}`) 5491}).catch((error: BusinessError) => { 5492 console.error(`Failed to fetch Metadata, error message:${error.message}`); 5493}); 5494``` 5495 5496### fetchAlbumCover<sup>11+</sup> 5497 5498fetchAlbumCover(callback: AsyncCallback\<image.PixelMap>): void 5499 5500异步方式获取音频专辑封面。通过注册回调函数获取返回值。 5501 5502**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 5503 5504**参数:** 5505 5506| 参数名 | 类型 | 必填 | 说明 | 5507| -------- | -------------------------------------------- | ---- | ----------------------------------- | 5508| callback | AsyncCallback\<[image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7)> | 是 | 回调函数。异步返回专辑封面。 | 5509 5510**错误码:** 5511 5512以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 5513 5514| 错误码ID | 错误信息 | 5515| -------- | ------------------------------------------ | 5516| 5400102 | Operation not allowed. Return by callback. | 5517| 5400106 | Unsupported format. Returned by callback. | 5518 5519**示例:** 5520 5521```ts 5522import { BusinessError } from '@kit.BasicServicesKit'; 5523import { image } from '@kit.ImageKit'; 5524 5525let pixel_map : image.PixelMap | undefined = undefined; 5526 5527avMetadataExtractor.fetchAlbumCover((error: BusinessError, pixelMap: image.PixelMap) => { 5528 if (error) { 5529 console.error(`Failed to fetch AlbumCover, error = ${JSON.stringify(error)}`); 5530 return; 5531 } 5532 pixel_map = pixelMap; 5533}); 5534``` 5535 5536### fetchAlbumCover<sup>11+</sup> 5537 5538fetchAlbumCover(): Promise\<image.PixelMap> 5539 5540异步方式获取专辑封面。通过Promise获取返回值。 5541 5542**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 5543 5544**返回值:** 5545 5546| 类型 | 说明 | 5547| -------------- | ---------------------------------------- | 5548| Promise\<[image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7)> | Promise对象。异步返回专辑封面。 | 5549 5550**错误码:** 5551 5552以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 5553 5554| 错误码ID | 错误信息 | 5555| -------- | ----------------------------------------- | 5556| 5400102 | Operation not allowed. Returned by promise. | 5557| 5400106 | Unsupported format. Returned by promise. | 5558 5559**示例:** 5560 5561```ts 5562import { BusinessError } from '@kit.BasicServicesKit'; 5563import { image } from '@kit.ImageKit'; 5564 5565let pixel_map : image.PixelMap | undefined = undefined; 5566 5567avMetadataExtractor.fetchAlbumCover().then((pixelMap: image.PixelMap) => { 5568 pixel_map = pixelMap; 5569}).catch((error: BusinessError) => { 5570 console.error(`Failed to fetch AlbumCover, error message:${error.message}`); 5571}); 5572``` 5573 5574### release<sup>11+</sup> 5575 5576release(callback: AsyncCallback\<void>): void 5577 5578异步方式释放资源。通过注册回调函数获取返回值。 5579 5580**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 5581 5582**参数:** 5583 5584| 参数名 | 类型 | 必填 | 说明 | 5585| -------- | -------------------------------------------- | ---- | ----------------------------------- | 5586| callback | AsyncCallback\<void> | 是 |回调函数。当释放资源成功,err为undefined,否则为错误对象。 | 5587 5588**错误码:** 5589 5590以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 5591 5592| 错误码ID | 错误信息 | 5593| -------- | ------------------------------------------ | 5594| 5400102 | Operation not allowed. Returned by callback. | 5595 5596**示例:** 5597 5598```ts 5599import { BusinessError } from '@kit.BasicServicesKit'; 5600 5601avMetadataExtractor.release((error: BusinessError) => { 5602 if (error) { 5603 console.error(`Failed to release, err = ${JSON.stringify(error)}`); 5604 return; 5605 } 5606 console.info(`Succeeded in releasing.`); 5607}); 5608``` 5609 5610### release<sup>11+</sup> 5611 5612release(): Promise\<void> 5613 5614异步方式释放资源。通过Promise获取返回值。 5615 5616**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 5617 5618**返回值:** 5619 5620| 类型 | 说明 | 5621| -------------- | ---------------------------------------- | 5622| Promise\<void> | 异步方式释放资源release方法的Promise返回值。 | 5623 5624**错误码:** 5625 5626以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 5627 5628| 错误码ID | 错误信息 | 5629| -------- | ----------------------------------------- | 5630| 5400102 | Operation not allowed. Returned by promise. | 5631 5632**示例:** 5633 5634```ts 5635import { BusinessError } from '@kit.BasicServicesKit'; 5636 5637avMetadataExtractor.release().then(() => { 5638 console.info(`Succeeded in releasing.`); 5639}).catch((error: BusinessError) => { 5640 console.error(`Failed to release, error message:${error.message}`); 5641}); 5642``` 5643 5644## AVMetadata<sup>11+</sup> 5645 5646音视频元数据,包含各个元数据字段。在[AVRecorderConfig](#avrecorderconfig9)中使用时未声明为当前版本只读的参数可以作为使用[AVRecorder](#avrecorder9)录制时的入参。 5647 5648**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 5649 5650| 名称 | 类型 | 必填 | 说明 | 5651| ------ | ------ | ---- | ------------------------------------------------------------ | 5652| album | string | 否 | 专辑的标题。当前版本为只读参数。 | 5653| albumArtist | string | 否 | 专辑的艺术家。当前版本为只读参数。 | 5654| artist | string | 否 | 媒体资源的艺术家。当前版本为只读参数。 | 5655| author | string | 否 | 媒体资源的作者。当前版本为只读参数。 | 5656| dateTime | string | 否 | 媒体资源的创建时间。当前版本为只读参数。 | 5657| dateTimeFormat | string | 否 | 媒体资源的创建时间,按YYYY-MM-DD HH:mm:ss格式输出。当前版本为只读参数。 | 5658| composer | string | 否 | 媒体资源的作曲家。当前版本为只读参数。 | 5659| duration | string | 否 | 媒体资源的时长。当前版本为只读参数。 | 5660| genre | string | 否 | 媒体资源的类型或体裁。| 5661| hasAudio | string | 否 | 媒体资源是否包含音频。当前版本为只读参数。 | 5662| hasVideo | string | 否 | 媒体资源是否包含视频。当前版本为只读参数。 | 5663| mimeType | string | 否 | 媒体资源的mime类型。当前版本为只读参数。 | 5664| trackCount | string | 否 | 媒体资源的轨道数量。当前版本为只读参数。 | 5665| sampleRate | string | 否 | 音频的采样率,单位为赫兹(Hz)。当前版本为只读参数。 | 5666| title | string | 否 | 媒体资源的标题。当前版本为只读参数。当前版本为只读参数。 | 5667| videoHeight | string | 否 | 视频的高度,单位为像素。当前版本为只读参数。 | 5668| videoWidth | string | 否 | 视频的宽度,单位为像素。当前版本为只读参数。 | 5669| videoOrientation | string | 否 | 视频的旋转方向,单位为度(°)。| 5670| hdrType<sup>12+</sup> | [HdrType](#hdrtype12) | 否 | 媒体资源的HDR类型。当前版本为只读参数。 | 5671| location<sup>12+</sup> | [Location](#location) | 否 | 视频的地理位置信息。 | 5672| customInfo<sup>12+</sup> | Record<string, string> | 否 | 从moov.meta.list 获取的自定义参数键值映射。| 5673 5674## HdrType<sup>12+</sup> 5675 5676表示视频HDR类型的枚举。 5677 5678**系统能力:** SystemCapability.Multimedia.Media.Core 5679 5680| 名称 | 值 | 说明 | 5681| ------------------------- | ---- | ---------------------- | 5682| AV_HDR_TYPE_NONE | 0 | 表示无HDR类型。 | 5683| AV_HDR_TYPE_VIVID | 1 | 表示为HDR VIVID类型。 | 5684 5685## media.createAudioPlayer<sup>(deprecated)</sup> 5686 5687createAudioPlayer(): AudioPlayer 5688 5689同步方式创建音频播放实例。 5690 5691> **说明:** 5692> 从API version 6开始支持,从API version 9开始废弃,建议使用[createAVPlayer](#mediacreateavplayer9)替代。 5693 5694**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5695 5696**返回值:** 5697 5698| 类型 | 说明 | 5699| --------------------------- | ------------------------------------------------------------ | 5700| [AudioPlayer](#audioplayerdeprecated) | 返回AudioPlayer类实例,失败时返回null。可用于音频播放、暂停、停止等操作。 | 5701 5702**示例:** 5703 5704```ts 5705let audioPlayer: media.AudioPlayer = media.createAudioPlayer(); 5706``` 5707 5708## media.createVideoPlayer<sup>(deprecated)</sup> 5709 5710createVideoPlayer(callback: AsyncCallback\<VideoPlayer>): void 5711 5712异步方式创建视频播放实例,通过注册回调函数获取返回值。 5713 5714> **说明:** 5715> 从API version 8开始支持,从API version 9开始废弃,建议使用[createAVPlayer](#mediacreateavplayer9)替代。 5716 5717**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 5718 5719**参数:** 5720 5721| 参数名 | 类型 | 必填 | 说明 | 5722| -------- | ------------------------------------------ | ---- | ------------------------------------------------------------ | 5723| callback | AsyncCallback<[VideoPlayer](#videoplayerdeprecated)> | 是 | 回调函数。创建VideoPlayer实例成功时,err为undefined,data为获取到的VideoPlayer实例,否则为错误对象。 | 5724 5725**示例:** 5726 5727```ts 5728import { BusinessError } from '@kit.BasicServicesKit'; 5729 5730let videoPlayer: media.VideoPlayer; 5731media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => { 5732 if (video != null) { 5733 videoPlayer = video; 5734 console.info('Succeeded in creating VideoPlayer'); 5735 } else { 5736 console.error(`Failed to create VideoPlayer, error:${error}`); 5737 } 5738}); 5739``` 5740 5741## media.createVideoPlayer<sup>(deprecated)</sup> 5742 5743createVideoPlayer(): Promise\<VideoPlayer> 5744 5745异步方式创建视频播放实例,通过Promise获取返回值。 5746 5747> **说明:** 5748> 从API version 8开始支持,从API version 9开始废弃,建议使用[createAVPlayer](#mediacreateavplayer9-1)替代。 5749 5750**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 5751 5752**返回值:** 5753 5754| 类型 | 说明 | 5755| ------------------------------------ | ------------------------------------------------------------ | 5756| Promise<[VideoPlayer](#videoplayerdeprecated)> | Promise对象。异步返回VideoPlayer实例,失败时返回null。可用于管理和播放视频媒体。 | 5757 5758**示例:** 5759 5760```ts 5761import { BusinessError } from '@kit.BasicServicesKit'; 5762 5763let videoPlayer: media.VideoPlayer; 5764media.createVideoPlayer().then((video: media.VideoPlayer) => { 5765 if (video != null) { 5766 videoPlayer = video; 5767 console.info('Succeeded in creating VideoPlayer'); 5768 } else { 5769 console.error('Failed to create VideoPlayer'); 5770 } 5771}).catch((error: BusinessError) => { 5772 console.error(`Failed to create VideoPlayer, error:${error}`); 5773}); 5774``` 5775 5776## media.createAudioRecorder<sup>(deprecated)</sup> 5777 5778createAudioRecorder(): AudioRecorder 5779 5780创建音频录制的实例来控制音频的录制。 5781一台设备只允许创建一个录制实例。 5782 5783> **说明:** 5784> 从API version 6开始支持,从API version 9开始废弃,建议使用[createAVRecorder](#mediacreateavrecorder9)替代。 5785 5786**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 5787 5788**返回值:** 5789 5790| 类型 | 说明 | 5791| ------------------------------- | ------------------------------------------------------------ | 5792| [AudioRecorder](#audiorecorderdeprecated) | 返回AudioRecorder类实例,失败时返回null。可用于录制音频媒体。 | 5793 5794**示例:** 5795 5796```ts 5797let audioRecorder: media.AudioRecorder = media.createAudioRecorder(); 5798``` 5799 5800## MediaErrorCode<sup>(deprecated)</sup> 5801 5802媒体服务错误类型枚举。 5803 5804> **说明:** 5805> 从API version 8开始支持,从API version 11开始废弃,建议使用[媒体错误码](#averrorcode9)替代。 5806 5807**系统能力:** SystemCapability.Multimedia.Media.Core 5808 5809| 名称 | 值 | 说明 | 5810| -------------------------- | ---- | -------------------------------------- | 5811| MSERR_OK | 0 | 表示操作成功。 | 5812| MSERR_NO_MEMORY | 1 | 表示申请内存失败,系统可能无可用内存。 | 5813| MSERR_OPERATION_NOT_PERMIT | 2 | 表示无权限执行此操作。 | 5814| MSERR_INVALID_VAL | 3 | 表示传入入参无效。 | 5815| MSERR_IO | 4 | 表示发生IO错误。 | 5816| MSERR_TIMEOUT | 5 | 表示操作超时。 | 5817| MSERR_UNKNOWN | 6 | 表示未知错误。 | 5818| MSERR_SERVICE_DIED | 7 | 表示服务端失效。 | 5819| MSERR_INVALID_STATE | 8 | 表示在当前状态下,不允许执行此操作。 | 5820| MSERR_UNSUPPORTED | 9 | 表示在当前版本下,不支持此操作。 | 5821 5822## AudioPlayer<sup>(deprecated)</sup> 5823 5824> **说明:** 5825> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer](#avplayer9)替代。 5826 5827音频播放管理类,用于管理和播放音频媒体。在调用AudioPlayer的方法前,需要先通过[createAudioPlayer()](#mediacreateaudioplayerdeprecated)构建一个AudioPlayer实例。 5828 5829### 属性<sup>(deprecated)</sup> 5830 5831**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5832 5833| 名称 | 类型 | 只读 | 可选 | 说明 | 5834| ------------------------------- | ------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ | 5835| src | string | 否 | 否 | 音频媒体URI,支持当前主流的音频格式(m4a、aac、mp3、ogg、wav、amr)。<br>**支持路径示例**:<br>1. fd类型播放:fd://xx<br><br>2. http网络播放: http\://xx<br/>3. https网络播放: https\://xx<br/>4. hls网络播放路径:http\://xx或者https\://xx <br/>**需要权限:** ohos.permission.READ_MEDIA 或 ohos.permission.INTERNET。 | 5836| 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/> | 5837| loop | boolean | 否 | 否 | 音频循环播放属性,设置为'true'表示循环播放。 | 5838| audioInterruptMode<sup>9+</sup> | [audio.InterruptMode](../apis-audio-kit/js-apis-audio.md#interruptmode9) | 是 | 是 | 音频焦点模型。 | 5839| currentTime | number | 是 | 否 | 音频的当前播放位置,单位为毫秒(ms)。 | 5840| duration | number | 是 | 否 | 音频时长,单位为毫秒(ms)。 | 5841| state | [AudioState](#audiostatedeprecated) | 是 | 否 | 可以查询音频播放的状态,该状态不可作为调用play/pause/stop等状态切换的触发条件。 | 5842 5843### play<sup>(deprecated)</sup> 5844 5845play(): void 5846 5847开始播放音频资源,需在'dataLoad'事件成功触发后,才能调用。 5848 5849> **说明:** 5850> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.play](#play9)替代。 5851 5852**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5853 5854**示例:** 5855 5856```ts 5857audioPlayer.on('play', () => { //设置'play'事件回调。 5858 console.info('audio play called'); 5859}); 5860audioPlayer.play(); 5861``` 5862 5863### pause<sup>(deprecated)</sup> 5864 5865pause(): void 5866 5867暂停播放音频资源。 5868 5869> **说明:** 5870> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.pause](#pause9)替代。 5871 5872**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5873 5874**示例:** 5875 5876```ts 5877audioPlayer.on('pause', () => { //设置'pause'事件回调。 5878 console.info('audio pause called'); 5879}); 5880audioPlayer.pause(); 5881``` 5882 5883### stop<sup>(deprecated)</sup> 5884 5885stop(): void 5886 5887停止播放音频资源。 5888 5889> **说明:** 5890> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.stop](#stop9)替代。 5891 5892**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5893 5894**示例:** 5895 5896```ts 5897audioPlayer.on('stop', () => { //设置'stop'事件回调。 5898 console.info('audio stop called'); 5899}); 5900audioPlayer.stop(); 5901``` 5902 5903### reset<sup>(deprecated)</sup> 5904 5905reset(): void 5906 5907重置播放音频资源。 5908 5909> **说明:** 5910> 从API version 7开始支持,从API version 9开始废弃,建议使用[AVPlayer.reset](#reset9)替代。 5911 5912**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5913 5914**示例:** 5915 5916```ts 5917audioPlayer.on('reset', () => { //设置'reset'事件回调。 5918 console.info('audio reset called'); 5919}); 5920audioPlayer.reset(); 5921``` 5922 5923### seek<sup>(deprecated)</sup> 5924 5925seek(timeMs: number): void 5926 5927跳转到指定播放位置。 5928 5929> **说明:** 5930> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。 5931 5932**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5933 5934**参数:** 5935 5936| 参数名 | 类型 | 必填 | 说明 | 5937| ------ | ------ | ---- | ----------------------------------------------------------- | 5938| timeMs | number | 是 | 指定的跳转时间节点,单位毫秒(ms),取值范围[0, duration]。 | 5939 5940**示例:** 5941 5942```ts 5943audioPlayer.on('timeUpdate', (seekDoneTime: number) => { //设置'timeUpdate'事件回调。 5944 if (seekDoneTime == null) { 5945 console.error('Failed to seek'); 5946 return; 5947 } 5948 console.info('Succeeded in seek. seekDoneTime: ' + seekDoneTime); 5949}); 5950audioPlayer.seek(30000); //seek到30000ms的位置。 5951``` 5952 5953### setVolume<sup>(deprecated)</sup> 5954 5955setVolume(vol: number): void 5956 5957设置音量。 5958 5959> **说明:** 5960> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.setVolume](#setvolume9)替代。 5961 5962**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5963 5964**参数:** 5965 5966| 参数名 | 类型 | 必填 | 说明 | 5967| ------ | ------ | ---- | ------------------------------------------------------------ | 5968| vol | number | 是 | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 | 5969 5970**示例:** 5971 5972```ts 5973audioPlayer.on('volumeChange', () => { //设置'volumeChange'事件回调。 5974 console.info('audio volumeChange called'); 5975}); 5976audioPlayer.setVolume(1); //设置音量到100%。 5977``` 5978 5979### release<sup>(deprecated)</sup> 5980 5981release(): void 5982 5983释放音频资源。 5984 5985> **说明:** 5986> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.release](#release9)替代。 5987 5988**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5989 5990**示例:** 5991 5992```ts 5993audioPlayer.release(); 5994audioPlayer = undefined; 5995``` 5996 5997### getTrackDescription<sup>(deprecated)</sup> 5998 5999getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void 6000 6001获取音频轨道信息。需在'dataLoad'事件成功触发后,才能调用。通过回调函数获取返回值。 6002 6003> **说明:** 6004> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9)替代。 6005 6006**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 6007 6008**参数:** 6009 6010| 参数名 | 类型 | 必填 | 说明 | 6011| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------ | 6012| callback | AsyncCallback\<Array\<[MediaDescription](#mediadescription8)>> | 是 | 回调函数。获取音频轨道信息成功时,err为undefined,data为获取到的MediaDescription数组,否则为错误对象。 | 6013 6014**示例:** 6015 6016```ts 6017import { BusinessError } from '@kit.BasicServicesKit'; 6018 6019audioPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => { 6020 if (arrList != null) { 6021 console.info('Succeeded in getting TrackDescription'); 6022 } else { 6023 console.error(`Failed to get TrackDescription, error:${error}`); 6024 } 6025}); 6026``` 6027 6028### getTrackDescription<sup>(deprecated)</sup> 6029 6030getTrackDescription(): Promise\<Array\<MediaDescription>> 6031 6032获取音频轨道信息。需在'dataLoad'事件成功触发后,才能调用。通过Promise获取返回值。 6033 6034> **说明:** 6035> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9-1)替代。 6036 6037**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 6038 6039**返回值:** 6040 6041| 类型 | 说明 | 6042| ------------------------------------------------------ | ----------------------------------------------- | 6043| Promise<Array<[MediaDescription](#mediadescription8)>> | 音频轨道信息MediaDescription数组Promise返回值。 | 6044 6045**示例:** 6046 6047```ts 6048import { BusinessError } from '@kit.BasicServicesKit'; 6049 6050audioPlayer.getTrackDescription().then((arrList: Array<media.MediaDescription>) => { 6051 console.info('Succeeded in getting TrackDescription'); 6052}).catch((error: BusinessError) => { 6053 console.error(`Failed to get TrackDescription, error:${error}`); 6054}); 6055``` 6056 6057### on('bufferingUpdate')<sup>(deprecated)</sup> 6058 6059on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: number) => void): void 6060 6061开始订阅音频缓存更新事件。仅网络播放支持该订阅事件。 6062 6063> **说明:** 6064> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('bufferingUpdate')](#onbufferingupdate9)替代。 6065 6066**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 6067 6068**参数:** 6069 6070| 参数名 | 类型 | 必填 | 说明 | 6071| -------- | -------- | ---- | ------------------------------------------------------------ | 6072| type | string | 是 | 音频缓存事件回调类型,支持的事件:'bufferingUpdate'。 | 6073| callback | function | 是 | 音频缓存事件回调方法。<br>[BufferingInfoType](#bufferinginfotype8)value值固定为0。 | 6074 6075**示例:** 6076 6077```ts 6078audioPlayer.on('bufferingUpdate', (infoType: media.BufferingInfoType, value: number) => { 6079 console.info('audio bufferingInfo type: ' + infoType); 6080 console.info('audio bufferingInfo value: ' + value); 6081}); 6082``` 6083 6084### on('play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange')<sup>(deprecated)</sup> 6085 6086on(type: 'play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange', callback: () => void): void 6087 6088开始订阅音频播放事件。 6089 6090> **说明:** 6091> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('stateChange')](#onstatechange9)替代。 6092 6093**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 6094 6095**参数:** 6096 6097| 参数名 | 类型 | 必填 | 说明 | 6098| -------- | ---------- | ---- | ------------------------------------------------------------ | 6099| 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)调用,播放音量改变后触发该事件。 | 6100| callback | () => void | 是 | 播放事件回调方法。 | 6101 6102**示例:** 6103 6104```ts 6105import { fileIo as fs } from '@kit.CoreFileKit'; 6106import { BusinessError } from '@kit.BasicServicesKit'; 6107 6108let audioPlayer: media.AudioPlayer = media.createAudioPlayer(); //创建一个音频播放实例。 6109audioPlayer.on('dataLoad', () => { //设置'dataLoad'事件回调,src属性设置成功后,触发此回调。 6110 console.info('audio set source called'); 6111 audioPlayer.play(); //开始播放,并触发'play'事件回调。 6112}); 6113audioPlayer.on('play', () => { //设置'play'事件回调。 6114 console.info('audio play called'); 6115 audioPlayer.seek(30000); //调用seek方法,并触发'timeUpdate'事件回调。 6116}); 6117audioPlayer.on('pause', () => { //设置'pause'事件回调。 6118 console.info('audio pause called'); 6119 audioPlayer.stop(); //停止播放,并触发'stop'事件回调。 6120}); 6121audioPlayer.on('reset', () => { //设置'reset'事件回调。 6122 console.info('audio reset called'); 6123 audioPlayer.release(); //释放播放实例资源。 6124 audioPlayer = undefined; 6125}); 6126audioPlayer.on('timeUpdate', (seekDoneTime: number) => { //设置'timeUpdate'事件回调。 6127 if (seekDoneTime == null) { 6128 console.error('Failed to seek'); 6129 return; 6130 } 6131 console.info('Succeeded in seek, and seek time is ' + seekDoneTime); 6132 audioPlayer.setVolume(0.5); //设置音量为50%,并触发'volumeChange'事件回调。 6133}); 6134audioPlayer.on('volumeChange', () => { //设置'volumeChange'事件回调。 6135 console.info('audio volumeChange called'); 6136 audioPlayer.pause(); //暂停播放,并触发'pause'事件回调。 6137}); 6138audioPlayer.on('finish', () => { //设置'finish'事件回调。 6139 console.info('audio play finish'); 6140 audioPlayer.stop(); //停止播放,并触发'stop'事件回调。 6141}); 6142audioPlayer.on('error', (error: BusinessError) => { //设置'error'事件回调。 6143 console.error(`audio error called, error: ${error}`); 6144}); 6145 6146// 用户选择音频设置fd(本地播放)。 6147let fdPath = 'fd://'; 6148// path路径的码流可通过"hdc file send D:\xxx\01.mp3 /data/accounts/account_0/appdata" 命令,将其推送到设备上。 6149let path = '/data/accounts/account_0/appdata/ohos.xxx.xxx.xxx/01.mp3'; 6150fs.open(path).then((file) => { 6151 fdPath = fdPath + '' + file.fd; 6152 console.info('Succeeded in opening fd, fd is' + fdPath); 6153 audioPlayer.src = fdPath; //设置src属性,并触发'dataLoad'事件回调。 6154}, (err: BusinessError) => { 6155 console.error('Failed to open fd, err is' + err); 6156}).catch((err: BusinessError) => { 6157 console.error('Failed to open fd, err is' + err); 6158}); 6159``` 6160 6161### on('timeUpdate')<sup>(deprecated)</sup> 6162 6163on(type: 'timeUpdate', callback: Callback\<number>): void 6164 6165开始订阅音频播放时间更新事件。处于播放状态时,每隔1s上报一次该事件。 6166 6167> **说明:** 6168> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('timeUpdate')](#ontimeupdate9)替代。 6169 6170**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 6171 6172**参数:** 6173 6174| 参数名 | 类型 | 必填 | 说明 | 6175| -------- | ----------------- | ---- | ------------------------------------------------------------ | 6176| type | string | 是 | 播放事件回调类型,支持的事件包括:'timeUpdate'。<br>- 'timeUpdate':音频播放时间戳更新,开始播放后自动触发该事件。 | 6177| callback | Callback\<number> | 是 | 播放事件回调方法。回调方法入参为更新后的时间戳。 | 6178 6179**示例:** 6180 6181```ts 6182audioPlayer.on('timeUpdate', (newTime: number) => { //设置'timeUpdate'事件回调。 6183 if (newTime == null) { 6184 console.error('Failed to do timeUpadate'); 6185 return; 6186 } 6187 console.info('Succeeded in doing timeUpadate. seekDoneTime: ' + newTime); 6188}); 6189audioPlayer.play(); //开始播放后,自动触发时间戳更新事件。 6190``` 6191 6192### on('audioInterrupt')<sup>(deprecated)</sup> 6193 6194on(type: 'audioInterrupt', callback: (info: audio.InterruptEvent) => void): void 6195 6196监听音频焦点变化事件,参考[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)。 6197 6198> **说明:** 6199> 从API version 9开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('audioInterrupt')](#onaudiointerrupt9)替代。 6200 6201**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 6202 6203**参数:** 6204 6205| 参数名 | 类型 | 必填 | 说明 | 6206| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------------------- | 6207| type | string | 是 | 音频焦点变化事件回调类型,支持的事件:'audioInterrupt'。 | 6208| callback | function | 是 | 音频焦点变化事件回调方法。 | 6209 6210**示例:** 6211 6212```ts 6213import { audio } from '@kit.AudioKit'; 6214 6215audioPlayer.on('audioInterrupt', (info: audio.InterruptEvent) => { 6216 console.info('audioInterrupt called,and InterruptEvent info is:' + info) 6217}) 6218``` 6219 6220### on('error')<sup>(deprecated)</sup> 6221 6222on(type: 'error', callback: ErrorCallback): void 6223 6224开始订阅音频播放错误事件,当上报error错误事件后,用户需处理error事件,退出播放操作。 6225 6226> **说明:** 6227> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('error')](#onerror9)替代。 6228 6229**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 6230 6231**参数:** 6232 6233| 参数名 | 类型 | 必填 | 说明 | 6234| -------- | ------------- | ---- | ------------------------------------------------------------ | 6235| type | string | 是 | 播放错误事件回调类型,支持的事件包括:'error'。<br>- 'error':音频播放中发生错误,触发该事件。 | 6236| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是 | 播放错误事件回调方法。 | 6237 6238**示例:** 6239 6240```ts 6241import { BusinessError } from '@kit.BasicServicesKit'; 6242 6243audioPlayer.on('error', (error: BusinessError) => { //设置'error'事件回调。 6244 console.error(`audio error called, error: ${error}`); 6245}); 6246audioPlayer.setVolume(3); //设置volume为无效值,触发'error'事件。 6247``` 6248 6249## AudioState<sup>(deprecated)</sup> 6250 6251type AudioState = 'idle' | 'playing' | 'paused' | 'stopped' | 'error' 6252 6253音频播放的状态机。可通过state属性获取当前状态。 6254 6255> **说明:** 6256> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayerState](#avplayerstate9)替代。 6257 6258**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 6259 6260| 类型 | 说明 | 6261| ------- | ---------------------------------------------- | 6262| 'idle' | 音频播放空闲,dataload/reset成功后处于此状态。 | 6263| 'playing' | 音频正在播放,play成功后处于此状态。 | 6264| 'paused' | 音频暂停播放,pause成功后处于此状态。 | 6265| 'stopped' | 音频播放停止,stop/播放结束后处于此状态。 | 6266| 'error' | 错误状态。 | 6267 6268## VideoPlayer<sup>(deprecated)</sup> 6269 6270> **说明:** 6271> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer](#avplayer9)替代。 6272 6273视频播放管理类,用于管理和播放视频媒体。在调用VideoPlayer的方法前,需要先通过[createVideoPlayer()](#mediacreatevideoplayerdeprecated)构建一个VideoPlayer实例。 6274 6275### 属性 6276 6277**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6278 6279| 名称 | 类型 | 只读 | 可选 | 说明 | 6280| ------------------------------- | ------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ | 6281| url<sup>8+</sup> | string | 否 | 否 | 视频媒体URL,支持当前主流的视频格式(mp4、mpeg-ts、mkv)。<br>**支持路径示例**:<br>1. fd类型播放:fd://xx<br><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。 | 6282| 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/> | 6283| loop<sup>8+</sup> | boolean | 否 | 否 | 视频循环播放属性,设置为'true'表示循环播放。 | 6284| videoScaleType<sup>9+</sup> | [VideoScaleType](#videoscaletype9) | 否 | 是 | 视频缩放模式。默认值为VIDEO_SCALE_TYPE_FIT。 | 6285| audioInterruptMode<sup>9+</sup> | [audio.InterruptMode](../apis-audio-kit/js-apis-audio.md#interruptmode9) | 否 | 是 | 音频焦点模型。 | 6286| currentTime<sup>8+</sup> | number | 是 | 否 | 视频的当前播放位置,单位为毫秒(ms)。 | 6287| duration<sup>8+</sup> | number | 是 | 否 | 视频时长,单位为毫秒(ms),返回-1表示直播模式。 | 6288| state<sup>8+</sup> | [VideoPlayState](#videoplaystatedeprecated) | 是 | 否 | 视频播放的状态。 | 6289| width<sup>8+</sup> | number | 是 | 否 | 视频宽,单位为像素(px)。 | 6290| height<sup>8+</sup> | number | 是 | 否 | 视频高,单位为像素(px)。 | 6291 6292### setDisplaySurface<sup>(deprecated)</sup> 6293 6294setDisplaySurface(surfaceId: string, callback: AsyncCallback\<void>): void 6295 6296设置SurfaceId。通过回调函数获取返回值。 6297 6298*注意:SetDisplaySurface需要在设置url和Prepare之间,无音频的视频流必须设置Surface否则Prepare失败。 6299 6300> **说明:** 6301> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.surfaceId](#属性)替代。 6302 6303**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6304 6305**参数:** 6306 6307| 参数名 | 类型 | 必填 | 说明 | 6308| --------- | -------------------- | ---- | ------------------------- | 6309| surfaceId | string | 是 | SurfaceId. | 6310| callback | AsyncCallback\<void> | 是 | 回调函数。当设置SurfaceId成功,err为undefined,否则为错误对象。 | 6311 6312**示例:** 6313 6314```ts 6315import { BusinessError } from '@kit.BasicServicesKit'; 6316 6317let surfaceId: string = ''; 6318videoPlayer.setDisplaySurface(surfaceId, (err: BusinessError) => { 6319 if (err) { 6320 console.error('Failed to set DisplaySurface!'); 6321 } else { 6322 console.info('Succeeded in setting DisplaySurface!'); 6323 } 6324}); 6325``` 6326 6327### setDisplaySurface<sup>(deprecated)</sup> 6328 6329setDisplaySurface(surfaceId: string): Promise\<void> 6330 6331设置SurfaceId。通过Promise获取返回值。 6332 6333*注意:SetDisplaySurface需要在设置url和Prepare之间,无音频的视频流必须设置Surface否则Prepare失败。 6334 6335> **说明:** 6336> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.surfaceId](#属性)替代。 6337 6338**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6339 6340**参数:** 6341 6342| 参数名 | 类型 | 必填 | 说明 | 6343| --------- | ------ | ---- | --------- | 6344| surfaceId | string | 是 | SurfaceId. | 6345 6346**返回值:** 6347 6348| 类型 | 说明 | 6349| -------------- | ------------------------------ | 6350| Promise\<void> | 设置SurfaceId的Promise返回值。 | 6351 6352**示例:** 6353 6354```ts 6355import { BusinessError } from '@kit.BasicServicesKit'; 6356 6357let surfaceId: string = ''; 6358videoPlayer.setDisplaySurface(surfaceId).then(() => { 6359 console.info('Succeeded in setting DisplaySurface'); 6360}).catch((error: BusinessError) => { 6361 console.error(`video catchCallback, error:${error}`); 6362}); 6363``` 6364 6365### prepare<sup>(deprecated)</sup> 6366 6367prepare(callback: AsyncCallback\<void>): void 6368 6369准备播放视频。通过回调函数获取返回值。 6370 6371> **说明:** 6372> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.prepare](#prepare9)替代。 6373 6374**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6375 6376**参数:** 6377 6378| 参数名 | 类型 | 必填 | 说明 | 6379| -------- | -------------------- | ---- | ------------------------ | 6380| callback | AsyncCallback\<void> | 是 | 回调函数。当准备播放视频成功,err为undefined,否则为错误对象。| 6381 6382**示例:** 6383 6384```ts 6385import { BusinessError } from '@kit.BasicServicesKit'; 6386 6387videoPlayer.prepare((err: BusinessError) => { 6388 if (err) { 6389 console.error('Failed to prepare!'); 6390 } else { 6391 console.info('Succeeded in preparing!'); 6392 } 6393}); 6394``` 6395 6396### prepare<sup>(deprecated)</sup> 6397 6398prepare(): Promise\<void> 6399 6400准备播放视频。通过Promise获取返回值。 6401 6402> **说明:** 6403> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.prepare](#prepare9-1)替代。 6404 6405**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6406 6407**返回值:** 6408 6409| 类型 | 说明 | 6410| -------------- | ----------------------------- | 6411| Promise\<void> | 准备播放视频的Promise返回值。 | 6412 6413**示例:** 6414 6415```ts 6416import { BusinessError } from '@kit.BasicServicesKit'; 6417 6418videoPlayer.prepare().then(() => { 6419 console.info('Succeeded in preparing'); 6420}).catch((error: BusinessError) => { 6421 console.error(`video catchCallback, error:${error}`); 6422}); 6423``` 6424 6425### play<sup>(deprecated)</sup> 6426 6427play(callback: AsyncCallback\<void>): void 6428 6429开始播放视频。通过回调函数获取返回值。 6430 6431> **说明:** 6432> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.play](#play9)替代。 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.play((err: BusinessError) => { 6448 if (err) { 6449 console.error('Failed to play!'); 6450 } else { 6451 console.info('Succeeded in playing!'); 6452 } 6453}); 6454``` 6455 6456### play<sup>(deprecated)</sup> 6457 6458play(): Promise\<void> 6459 6460开始播放视频。通过Promise获取返回值。 6461 6462> **说明:** 6463> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.play](#play9-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.play().then(() => { 6479 console.info('Succeeded in playing'); 6480}).catch((error: BusinessError) => { 6481 console.error(`video catchCallback, error:${error}`); 6482}); 6483``` 6484 6485### pause<sup>(deprecated)</sup> 6486 6487pause(callback: AsyncCallback\<void>): void 6488 6489通过回调方式暂停播放视频。通过回调函数获取返回值。 6490 6491> **说明:** 6492> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.pause](#pause9)替代。 6493 6494**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6495 6496**参数:** 6497 6498| 参数名 | 类型 | 必填 | 说明 | 6499| -------- | -------------------- | ---- | ------------------------ | 6500| callback | AsyncCallback\<void> | 是 | 回调函数。当暂停播放视频成功,err为undefined,否则为错误对象。 | 6501 6502**示例:** 6503 6504```ts 6505import { BusinessError } from '@kit.BasicServicesKit'; 6506 6507videoPlayer.pause((err: BusinessError) => { 6508 if (err) { 6509 console.error('Failed to pause!'); 6510 } else { 6511 console.info('Succeeded in pausing!'); 6512 } 6513}); 6514``` 6515 6516### pause<sup>(deprecated)</sup> 6517 6518pause(): Promise\<void> 6519 6520暂停播放视频。通过Promise获取返回值。 6521 6522> **说明:** 6523> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.pause](#pause9-1)替代。 6524 6525**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6526 6527**返回值:** 6528 6529| 类型 | 说明 | 6530| -------------- | ----------------------------- | 6531| Promise\<void> | 暂停播放视频的Promise返回值。 | 6532 6533**示例:** 6534 6535```ts 6536import { BusinessError } from '@kit.BasicServicesKit'; 6537 6538videoPlayer.pause().then(() => { 6539 console.info('Succeeded in pausing'); 6540}).catch((error: BusinessError) => { 6541 console.error(`video catchCallback, error:${error}`); 6542}); 6543``` 6544 6545### stop<sup>(deprecated)</sup> 6546 6547stop(callback: AsyncCallback\<void>): void 6548 6549通过回调方式停止播放视频。通过回调函数获取返回值。 6550 6551> **说明:** 6552> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.stop](#stop9)替代。 6553 6554**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6555 6556**参数:** 6557 6558| 参数名 | 类型 | 必填 | 说明 | 6559| -------- | -------------------- | ---- | ------------------------ | 6560| callback | AsyncCallback\<void> | 是 | 回调函数。当停止播放视频成功,err为undefined,否则为错误对象。 | 6561 6562**示例:** 6563 6564```ts 6565import { BusinessError } from '@kit.BasicServicesKit'; 6566 6567videoPlayer.stop((err: BusinessError) => { 6568 if (err) { 6569 console.error('Failed to stop!'); 6570 } else { 6571 console.info('Succeeded in stopping!'); 6572 } 6573}); 6574``` 6575 6576### stop<sup>(deprecated)</sup> 6577 6578stop(): Promise\<void> 6579 6580停止播放视频。通过Promise获取返回值。 6581 6582> **说明:** 6583> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.stop](#stop9-1)替代。 6584 6585**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6586 6587**返回值:** 6588 6589| 类型 | 说明 | 6590| -------------- | ----------------------------- | 6591| Promise\<void> | 停止播放视频的Promise返回值。 | 6592 6593**示例:** 6594 6595```ts 6596import { BusinessError } from '@kit.BasicServicesKit'; 6597 6598videoPlayer.stop().then(() => { 6599 console.info('Succeeded in stopping'); 6600}).catch((error: BusinessError) => { 6601 console.error(`video catchCallback, error:${error}`); 6602}); 6603``` 6604 6605### reset<sup>(deprecated)</sup> 6606 6607reset(callback: AsyncCallback\<void>): void 6608 6609重置播放视频。通过回调函数获取返回值。 6610 6611> **说明:** 6612> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.reset](#reset9)替代。 6613 6614**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6615 6616**参数:** 6617 6618| 参数名 | 类型 | 必填 | 说明 | 6619| -------- | -------------------- | ---- | ------------------------ | 6620| callback | AsyncCallback\<void> | 是 | 回调函数。当重置播放视频成功,err为undefined,否则为错误对象。 | 6621 6622**示例:** 6623 6624```ts 6625import { BusinessError } from '@kit.BasicServicesKit'; 6626 6627videoPlayer.reset((err: BusinessError) => { 6628 if (err) { 6629 console.error('Failed to reset!'); 6630 } else { 6631 console.info('Succeeded in resetting!'); 6632 } 6633}); 6634``` 6635 6636### reset<sup>(deprecated)</sup> 6637 6638reset(): Promise\<void> 6639 6640重置播放视频。通过Promise获取返回值。 6641 6642> **说明:** 6643> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.reset](#reset9-1)替代。 6644 6645**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6646 6647**返回值:** 6648 6649| 类型 | 说明 | 6650| -------------- | ----------------------------- | 6651| Promise\<void> | Promise对象。无返回结果的Promise对象。 | 6652 6653**示例:** 6654 6655```ts 6656import { BusinessError } from '@kit.BasicServicesKit'; 6657 6658videoPlayer.reset().then(() => { 6659 console.info('Succeeded in resetting'); 6660}).catch((error: BusinessError) => { 6661 console.error(`video catchCallback, error:${error}`); 6662}); 6663``` 6664 6665### seek<sup>(deprecated)</sup> 6666 6667seek(timeMs: number, callback: AsyncCallback\<number>): void 6668 6669跳转到指定播放位置,默认跳转到指定时间点的上一个关键帧。通过回调函数获取返回值。 6670 6671> **说明:** 6672> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。 6673 6674**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6675 6676**参数:** 6677 6678| 参数名 | 类型 | 必填 | 说明 | 6679| -------- | ---------------------- | ---- | ------------------------------------------------------------ | 6680| timeMs | number | 是 | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, duration]。 | 6681| callback | AsyncCallback\<number> | 是 | 回调函数。跳转到指定播放位置成功时,err为undefined,data为获取到的跳转到的播放位置,否则为错误对象。 | 6682 6683**示例:** 6684 6685```ts 6686import { BusinessError } from '@kit.BasicServicesKit'; 6687 6688let videoPlayer: media.VideoPlayer; 6689media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => { 6690 if (video != null) { 6691 videoPlayer = video; 6692 console.info('Succeeded in creating VideoPlayer'); 6693 } else { 6694 console.error(`Failed to create VideoPlayer, error:${error}`); 6695 } 6696}); 6697 6698let seekTime: number = 5000; 6699videoPlayer.seek(seekTime, (err: BusinessError, result: number) => { 6700 if (err) { 6701 console.error('Failed to do seek!'); 6702 } else { 6703 console.info('Succeeded in doing seek!'); 6704 } 6705}); 6706``` 6707 6708### seek<sup>(deprecated)</sup> 6709 6710seek(timeMs: number, mode:SeekMode, callback: AsyncCallback\<number>): void 6711 6712跳转到指定播放位置。通过回调函数获取返回值。 6713 6714> **说明:** 6715> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。 6716 6717**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6718 6719**参数:** 6720 6721| 参数名 | 类型 | 必填 | 说明 | 6722| -------- | ---------------------- | ---- | ------------------------------------------------------------ | 6723| timeMs | number | 是 | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, duration]。 | 6724| mode | [SeekMode](#seekmode8) | 是 | 跳转模式。 | 6725| callback | AsyncCallback\<number> | 是 | 回调函数。跳转到指定播放位置成功时,err为undefined,data为获取到的跳转到的播放位置,否则为错误对象。 | 6726 6727**示例:** 6728 6729```ts 6730import { BusinessError } from '@kit.BasicServicesKit'; 6731 6732let videoPlayer: media.VideoPlayer | null = null; 6733media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => { 6734 if (video != null) { 6735 videoPlayer = video; 6736 console.info('Succeeded in creating VideoPlayer'); 6737 } else { 6738 console.error(`Failed to create VideoPlayer, error:${error}`); 6739 } 6740}); 6741let seekTime: number = 5000; 6742if (videoPlayer) { 6743 (videoPlayer as media.VideoPlayer).seek(seekTime, media.SeekMode.SEEK_NEXT_SYNC, (err: BusinessError, result: number) => { 6744 if (err) { 6745 console.error('Failed to do seek!'); 6746 } else { 6747 console.info('Succeeded in doing seek!'); 6748 } 6749 }); 6750} 6751``` 6752 6753### seek<sup>(deprecated)</sup> 6754 6755seek(timeMs: number, mode?:SeekMode): Promise\<number> 6756 6757跳转到指定播放位置,如果没有设置mode则跳转到指定时间点的上一个关键帧。通过Promise获取返回值。 6758 6759> **说明:** 6760> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。 6761 6762**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6763 6764**参数:** 6765 6766| 参数名 | 类型 | 必填 | 说明 | 6767| ------ | ---------------------- | ---- | ------------------------------------------------------------ | 6768| timeMs | number | 是 | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, duration]。 | 6769| mode | [SeekMode](#seekmode8) | 否 | 基于视频I帧的跳转模式,默认为SEEK_PREV_SYNC模式。 | 6770 6771**返回值:** 6772 6773| 类型 | 说明 | 6774| ---------------- | ------------------------------------------- | 6775| Promise\<number> | 跳转到指定播放位置的Promise返回值,单位ms。 | 6776 6777**示例:** 6778 6779```ts 6780import { BusinessError } from '@kit.BasicServicesKit'; 6781 6782let videoPlayer: media.VideoPlayer | null = null; 6783media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => { 6784 if (video != null) { 6785 videoPlayer = video; 6786 console.info('Succeeded in creating VideoPlayer'); 6787 } else { 6788 console.error(`Failed to create VideoPlayer, error:${error}`); 6789 } 6790}); 6791let seekTime: number = 5000; 6792if (videoPlayer) { 6793 (videoPlayer as media.VideoPlayer).seek(seekTime).then((seekDoneTime: number) => { // seekDoneTime表示seek完成后的时间点。 6794 console.info('Succeeded in doing seek'); 6795 }).catch((error: BusinessError) => { 6796 console.error(`video catchCallback, error:${error}`); 6797 }); 6798 6799 (videoPlayer as media.VideoPlayer).seek(seekTime, media.SeekMode.SEEK_NEXT_SYNC).then((seekDoneTime: number) => { 6800 console.info('Succeeded in doing seek'); 6801 }).catch((error: BusinessError) => { 6802 console.error(`video catchCallback, error:${error}`); 6803 }); 6804} 6805``` 6806 6807### setVolume<sup>(deprecated)</sup> 6808 6809setVolume(vol: number, callback: AsyncCallback\<void>): void 6810 6811设置音量。通过回调函数获取返回值。 6812 6813> **说明:** 6814> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setVolume](#setvolume9)替代。 6815 6816**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6817 6818**参数:** 6819 6820| 参数名 | 类型 | 必填 | 说明 | 6821| -------- | -------------------- | ---- | ------------------------------------------------------------ | 6822| vol | number | 是 | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 | 6823| callback | AsyncCallback\<void> | 是 | 回调函数。当设置音量成功,err为undefined,否则为错误对象。 | 6824 6825**示例:** 6826 6827```ts 6828import { BusinessError } from '@kit.BasicServicesKit'; 6829 6830let vol: number = 0.5; 6831videoPlayer.setVolume(vol, (err: BusinessError) => { 6832 if (err) { 6833 console.error('Failed to set Volume!'); 6834 } else { 6835 console.info('Succeeded in setting Volume!'); 6836 } 6837}); 6838``` 6839 6840### setVolume<sup>(deprecated)</sup> 6841 6842setVolume(vol: number): Promise\<void> 6843 6844设置音量。通过Promise获取返回值。 6845 6846> **说明:** 6847> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setVolume](#setvolume9)替代。 6848 6849**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6850 6851**参数:** 6852 6853| 参数名 | 类型 | 必填 | 说明 | 6854| ------ | ------ | ---- | ------------------------------------------------------------ | 6855| vol | number | 是 | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 | 6856 6857**返回值:** 6858 6859| 类型 | 说明 | 6860| -------------- | ------------------------- | 6861| Promise\<void> | 设置音量的Promise返回值。 | 6862 6863**示例:** 6864 6865```ts 6866import { BusinessError } from '@kit.BasicServicesKit'; 6867 6868let vol: number = 0.5; 6869videoPlayer.setVolume(vol).then(() => { 6870 console.info('Succeeded in setting Volume'); 6871}).catch((error: BusinessError) => { 6872 console.error(`video catchCallback, error:${error}`); 6873}); 6874``` 6875 6876### release<sup>(deprecated)</sup> 6877 6878release(callback: AsyncCallback\<void>): void 6879 6880释放视频资源。通过回调函数获取返回值。 6881 6882> **说明:** 6883> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.release](#release9)替代。 6884 6885**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6886 6887**参数:** 6888 6889| 参数名 | 类型 | 必填 | 说明 | 6890| -------- | -------------------- | ---- | ------------------------ | 6891| callback | AsyncCallback\<void> | 是 | 回调函数。当释放视频资源成功,err为undefined,否则为错误对象。 | 6892 6893**示例:** 6894 6895```ts 6896import { BusinessError } from '@kit.BasicServicesKit'; 6897 6898videoPlayer.release((err: BusinessError) => { 6899 if (err) { 6900 console.error('Failed to release!'); 6901 } else { 6902 console.info('Succeeded in releasing!'); 6903 } 6904}); 6905``` 6906 6907### release<sup>(deprecated)</sup> 6908 6909release(): Promise\<void> 6910 6911释放视频资源。通过Promise获取返回值。 6912 6913> **说明:** 6914> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.release](#release9-1)替代。 6915 6916**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6917 6918**返回值:** 6919 6920| 类型 | 说明 | 6921| -------------- | ----------------------------- | 6922| Promise\<void> | 释放视频资源的Promise返回值。 | 6923 6924**示例:** 6925 6926```ts 6927import { BusinessError } from '@kit.BasicServicesKit'; 6928 6929videoPlayer.release().then(() => { 6930 console.info('Succeeded in releasing'); 6931}).catch((error: BusinessError) => { 6932 console.error(`video catchCallback, error:${error}`); 6933}); 6934``` 6935 6936### getTrackDescription<sup>(deprecated)</sup> 6937 6938getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void 6939 6940获取视频轨道信息。通过回调函数获取返回值。 6941 6942> **说明:** 6943> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9)替代。 6944 6945**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6946 6947**参数:** 6948 6949| 参数名 | 类型 | 必填 | 说明 | 6950| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------ | 6951| callback | AsyncCallback\<Array\<[MediaDescription](#mediadescription8)>> | 是 | 回调函数。获取视频轨道信息成功时,err为undefined,data为获取到的视频轨道信息MediaDescription数组,否则为错误对象。 | 6952 6953**示例:** 6954 6955```ts 6956import { BusinessError } from '@kit.BasicServicesKit'; 6957 6958videoPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => { 6959 if ((arrList) != null) { 6960 console.info('Succeeded in getting TrackDescription'); 6961 } else { 6962 console.error(`Failed to get TrackDescription, error:${error}`); 6963 } 6964}); 6965``` 6966 6967### getTrackDescription<sup>(deprecated)</sup> 6968 6969getTrackDescription(): Promise\<Array\<MediaDescription>> 6970 6971获取视频轨道信息。通过Promise获取返回值。 6972 6973> **说明:** 6974> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9-1)替代。 6975 6976**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6977 6978**返回值:** 6979 6980| 类型 | 说明 | 6981| ------------------------------------------------------ | ----------------------------------------------- | 6982| Promise<Array<[MediaDescription](#mediadescription8)>> | Promise对象,返回获取的视频轨道信息MediaDescription数组。 | 6983 6984**示例:** 6985 6986```ts 6987import { BusinessError } from '@kit.BasicServicesKit'; 6988 6989videoPlayer.getTrackDescription().then((arrList: Array<media.MediaDescription>) => { 6990 if (arrList != null) { 6991 console.info('Succeeded in getting TrackDescription'); 6992 } else { 6993 console.error('Failed to get TrackDescription'); 6994 } 6995}).catch((error: BusinessError) => { 6996 console.error(`video catchCallback, error:${error}`); 6997}); 6998``` 6999 7000### setSpeed<sup>(deprecated)</sup> 7001 7002setSpeed(speed: number, callback: AsyncCallback\<number>): void 7003 7004设置播放速度。通过回调函数获取返回值。 7005 7006> **说明:** 7007> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setSpeed](#setspeed9)替代。 7008 7009**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 7010 7011**参数:** 7012 7013| 参数名 | 类型 | 必填 | 说明 | 7014| -------- | ---------------------- | ---- | ---------------------------------------------------------- | 7015| speed | number | 是 | 指定播放视频速度,具体见[PlaybackSpeed](#playbackspeed8)。 | 7016| callback | AsyncCallback\<number> | 是 | 回调函数。设置播放速度成功时,err为undefined,data为设置的播放速度,否则为错误对象。 | 7017 7018**示例:** 7019 7020```ts 7021import { BusinessError } from '@kit.BasicServicesKit'; 7022 7023let videoPlayer: media.VideoPlayer | null = null; 7024media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => { 7025 if (video != null) { 7026 videoPlayer = video; 7027 console.info('Succeeded in creating VideoPlayer'); 7028 } else { 7029 console.error(`Failed to create VideoPlayer, error:${error}`); 7030 } 7031}); 7032let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X; 7033if (videoPlayer) { 7034 (videoPlayer as media.VideoPlayer).setSpeed(speed, (err: BusinessError, result: number) => { 7035 if (err) { 7036 console.error('Failed to set Speed!'); 7037 } else { 7038 console.info('Succeeded in setting Speed!'); 7039 } 7040 }); 7041} 7042``` 7043 7044### setSpeed<sup>(deprecated)</sup> 7045 7046setSpeed(speed: number): Promise\<number> 7047 7048设置播放速度。通过Promise获取返回值。 7049 7050> **说明:** 7051> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setSpeed](#setspeed9)替代。 7052 7053**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 7054 7055**参数:** 7056 7057| 参数名 | 类型 | 必填 | 说明 | 7058| ------ | ------ | ---- | ---------------------------------------------------------- | 7059| speed | number | 是 | 指定播放视频速度,具体见[PlaybackSpeed](#playbackspeed8)。 | 7060 7061**返回值:** 7062 7063| 类型 | 说明 | 7064| ---------------- | ------------------------------------------------------------ | 7065| Promise\<number> | Promise对象,返回设置的播放速度,具体见[PlaybackSpeed](#playbackspeed8)。 | 7066 7067**示例:** 7068 7069```ts 7070import { BusinessError } from '@kit.BasicServicesKit'; 7071 7072let videoPlayer: media.VideoPlayer | null = null; 7073media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => { 7074 if (video != null) { 7075 videoPlayer = video; 7076 console.info('Succeeded in creating VideoPlayer'); 7077 } else { 7078 console.error(`Failed to create VideoPlayer, error:${error}`); 7079 } 7080}); 7081let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X; 7082if (videoPlayer) { 7083 (videoPlayer as media.VideoPlayer).setSpeed(speed).then((result: number) => { 7084 console.info('Succeeded in setting Speed'); 7085 }).catch((error: BusinessError) => { 7086 console.error(`Failed to set Speed, error:${error}`);//todo:: error. 7087 }); 7088} 7089``` 7090 7091### on('playbackCompleted')<sup>(deprecated)</sup> 7092 7093on(type: 'playbackCompleted', callback: Callback\<void>): void 7094 7095开始监听视频播放完成事件。 7096 7097> **说明:** 7098> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('stateChange')](#onstatechange9)替代。 7099 7100**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 7101 7102**参数:** 7103 7104| 参数名 | 类型 | 必填 | 说明 | 7105| -------- | -------- | ---- | ----------------------------------------------------------- | 7106| type | string | 是 | 视频播放完成事件回调类型,支持的事件:'playbackCompleted'。 | 7107| callback | Callback\<void> | 是 | 视频播放完成事件回调方法。 | 7108 7109**示例:** 7110 7111```ts 7112videoPlayer.on('playbackCompleted', () => { 7113 console.info('playbackCompleted called!'); 7114}); 7115``` 7116 7117### on('bufferingUpdate')<sup>(deprecated)</sup> 7118 7119on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: number) => void): void 7120 7121开始监听视频缓存更新事件。仅网络播放支持该订阅事件。 7122 7123> **说明:** 7124> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('bufferingUpdate')](#onbufferingupdate9)替代。 7125 7126**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 7127 7128**参数:** 7129 7130| 参数名 | 类型 | 必填 | 说明 | 7131| -------- | -------- | ---- | ------------------------------------------------------------ | 7132| type | string | 是 | 视频缓存事件回调类型,支持的事件:'bufferingUpdate'。 | 7133| callback | function | 是 | 视频缓存事件回调方法。<br>[BufferingInfoType](#bufferinginfotype8)value值固定为0。 | 7134 7135**示例:** 7136 7137```ts 7138videoPlayer.on('bufferingUpdate', (infoType: media.BufferingInfoType, value: number) => { 7139 console.info('video bufferingInfo type: ' + infoType); 7140 console.info('video bufferingInfo value: ' + value); 7141}); 7142``` 7143 7144### on('startRenderFrame')<sup>(deprecated)</sup> 7145 7146on(type: 'startRenderFrame', callback: Callback\<void>): void 7147 7148开始监听视频播放首帧送显上报事件。 7149 7150> **说明:** 7151> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('startRenderFrame')](#onstartrenderframe9)替代。 7152 7153**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 7154 7155**参数:** 7156 7157| 参数名 | 类型 | 必填 | 说明 | 7158| -------- | --------------- | ---- | ------------------------------------------------------------ | 7159| type | string | 是 | 视频播放首帧送显上报事件回调类型,支持的事件:'startRenderFrame'。 | 7160| callback | Callback\<void> | 是 | 视频播放首帧送显上报事件回调方法。 | 7161 7162**示例:** 7163 7164```ts 7165videoPlayer.on('startRenderFrame', () => { 7166 console.info('startRenderFrame called!'); 7167}); 7168``` 7169 7170### on('videoSizeChanged')<sup>(deprecated)</sup> 7171 7172on(type: 'videoSizeChanged', callback: (width: number, height: number) => void): void 7173 7174开始监听视频播放宽高变化事件。 7175 7176> **说明:** 7177> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('videoSizeChange')](#onvideosizechange9)替代。 7178 7179**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 7180 7181**参数:** 7182 7183| 参数名 | 类型 | 必填 | 说明 | 7184| -------- | -------- | ---- | ------------------------------------------------------------ | 7185| type | string | 是 | 视频播放宽高变化事件回调类型,支持的事件:'videoSizeChanged'。 | 7186| callback | function | 是 | 视频播放宽高变化事件回调方法,width表示宽,height表示高。 | 7187 7188**示例:** 7189 7190```ts 7191videoPlayer.on('videoSizeChanged', (width: number, height: number) => { 7192 console.info('video width is: ' + width); 7193 console.info('video height is: ' + height); 7194}); 7195``` 7196### on('audioInterrupt')<sup>(deprecated)</sup> 7197 7198on(type: 'audioInterrupt', callback: (info: audio.InterruptEvent) => void): void 7199 7200监听音频焦点变化事件,参考[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)。 7201 7202> **说明:** 7203> 从API version 9开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('audioInterrupt')](#onaudiointerrupt9)替代。 7204 7205**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 7206 7207**参数:** 7208 7209| 参数名 | 类型 | 必填 | 说明 | 7210| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------------------- | 7211| type | string | 是 | 音频焦点变化事件回调类型,支持的事件:'audioInterrupt'。 | 7212| callback | function | 是 | 音频焦点变化事件回调方法。 | 7213 7214**示例:** 7215 7216```ts 7217import { audio } from '@kit.AudioKit'; 7218 7219videoPlayer.on('audioInterrupt', (info: audio.InterruptEvent) => { 7220 console.info('audioInterrupt called,and InterruptEvent info is:' + info) 7221}) 7222``` 7223 7224### on('error')<sup>(deprecated)</sup> 7225 7226on(type: 'error', callback: ErrorCallback): void 7227 7228开始监听视频播放错误事件,当上报error错误事件后,用户需处理error事件,退出播放操作。 7229 7230> **说明:** 7231> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('error')](#onerror9)替代。 7232 7233**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 7234 7235**参数:** 7236 7237| 参数名 | 类型 | 必填 | 说明 | 7238| -------- | ------------- | ---- | ------------------------------------------------------------ | 7239| type | string | 是 | 播放错误事件回调类型,支持的事件包括:'error'。<br>- 'error':视频播放中发生错误,触发该事件。 | 7240| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是 | 播放错误事件回调方法。 | 7241 7242**示例:** 7243 7244```ts 7245import { BusinessError } from '@kit.BasicServicesKit'; 7246 7247videoPlayer.on('error', (error: BusinessError) => { // 设置'error'事件回调。 7248 console.error(`video error called, error: ${error}`); 7249}); 7250videoPlayer.url = 'fd://error'; //设置错误的播放地址,触发'error'事件。 7251``` 7252 7253## VideoPlayState<sup>(deprecated)</sup> 7254 7255type VideoPlayState = 'idle' | 'prepared' | 'playing' | 'paused' | 'stopped' | 'error' 7256 7257视频播放的状态机,可通过state属性获取当前状态。 7258 7259> **说明:** 7260> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayerState](#avplayerstate9)替代。 7261 7262**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 7263 7264| 类型 | 说明 | 7265| -------- | -------------- | 7266| 'idle' | 视频播放空闲。 | 7267| 'prepared' | 视频播放准备。 | 7268| 'playing' | 视频正在播放。 | 7269| 'paused' | 视频暂停播放。 | 7270| 'stopped' | 视频播放停止。 | 7271| 'error' | 错误状态。 | 7272 7273## AudioRecorder<sup>(deprecated)</sup> 7274 7275> **说明:** 7276> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder](#avrecorder9)替代。 7277 7278音频录制管理类,用于录制音频媒体。在调用AudioRecorder的方法前,需要先通过[createAudioRecorder()](#mediacreateaudiorecorderdeprecated) 构建一个AudioRecorder实例。 7279 7280### prepare<sup>(deprecated)</sup> 7281 7282prepare(config: AudioRecorderConfig): void 7283 7284录音准备。 7285 7286> **说明:** 7287> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.prepare](#prepare9-2)替代。 7288 7289**需要权限:** ohos.permission.MICROPHONE 7290 7291**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7292 7293**参数:** 7294 7295| 参数名 | 类型 | 必填 | 说明 | 7296| ------ | ------------------------------------------- | ---- | ------------------------------------------------------------ | 7297| config | [AudioRecorderConfig](#audiorecorderconfigdeprecated) | 是 | 配置录音的相关参数,包括音频输出URI、编码格式、采样率、声道数、输出格式等。 | 7298 7299**错误码:** 7300 7301以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 7302 7303| 错误码ID | 错误信息 | 7304| -------- | --------------------- | 7305| 201 | permission denied | 7306 7307**示例:** 7308 7309```ts 7310let audioRecorderConfig: media.AudioRecorderConfig = { 7311 audioEncoder : media.AudioEncoder.AAC_LC, 7312 audioEncodeBitRate : 22050, 7313 audioSampleRate : 22050, 7314 numberOfChannels : 2, 7315 format : media.AudioOutputFormat.AAC_ADTS, 7316 uri : 'fd://1', // 文件需先由调用者创建,并给予适当的权限。 7317 location : { latitude : 30, longitude : 130}, 7318} 7319audioRecorder.on('prepare', () => { //设置'prepare'事件回调。 7320 console.info('prepare called'); 7321}); 7322audioRecorder.prepare(audioRecorderConfig); 7323``` 7324 7325### start<sup>(deprecated)</sup> 7326 7327start(): void 7328 7329开始录制,需在'prepare'事件成功触发后,才能调用start方法。 7330 7331> **说明:** 7332> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.start](#start9)替代。 7333 7334**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7335 7336**示例:** 7337 7338```ts 7339audioRecorder.on('start', () => { //设置'start'事件回调。 7340 console.info('audio recorder start called'); 7341}); 7342audioRecorder.start(); 7343``` 7344 7345### pause<sup>(deprecated)</sup> 7346 7347pause():void 7348 7349暂停录制,需要在'start'事件成功触发后,才能调用pause方法。 7350 7351> **说明:** 7352> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.pause](#pause9-2)替代。 7353 7354**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7355 7356**示例:** 7357 7358```ts 7359audioRecorder.on('pause', () => { //设置'pause'事件回调。 7360 console.info('audio recorder pause called'); 7361}); 7362audioRecorder.pause(); 7363``` 7364 7365### resume<sup>(deprecated)</sup> 7366 7367resume():void 7368 7369恢复录制,需要在'pause'事件成功触发后,才能调用resume方法。 7370 7371> **说明:** 7372> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.resume](#resume9)替代。 7373 7374**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7375 7376**示例:** 7377 7378```ts 7379audioRecorder.on('resume', () => { //设置'resume'事件回调。 7380 console.info('audio recorder resume called'); 7381}); 7382audioRecorder.resume(); 7383``` 7384 7385### stop<sup>(deprecated)</sup> 7386 7387stop(): void 7388 7389停止录音。 7390 7391> **说明:** 7392> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.stop](#stop9-2)替代。 7393 7394**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7395 7396**示例:** 7397 7398```ts 7399audioRecorder.on('stop', () => { //设置'stop'事件回调。 7400 console.info('audio recorder stop called'); 7401}); 7402audioRecorder.stop(); 7403``` 7404 7405### release<sup>(deprecated)</sup> 7406 7407release(): void 7408 7409释放录音资源。 7410 7411> **说明:** 7412> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.release](#release9-2)替代。 7413 7414**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7415 7416**示例:** 7417 7418```ts 7419audioRecorder.on('release', () => { //设置'release'事件回调。 7420 console.info('audio recorder release called'); 7421}); 7422audioRecorder.release(); 7423audioRecorder = undefined; 7424``` 7425 7426### reset<sup>(deprecated)</sup> 7427 7428reset(): void 7429 7430重置录音。 7431 7432进行重置录音之前,需要先调用stop()停止录音。重置录音之后,需要调用prepare()设置录音参数项,才能再次进行录音。 7433 7434> **说明:** 7435> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.reset](#reset9-2)替代。 7436 7437**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7438 7439**示例:** 7440 7441```ts 7442audioRecorder.on('reset', () => { //设置'reset'事件回调。 7443 console.info('audio recorder reset called'); 7444}); 7445audioRecorder.reset(); 7446``` 7447 7448### on('prepare' | 'start' | 'pause' | 'resume' | 'stop' | 'release' | 'reset')<sup>(deprecated)</sup> 7449 7450on(type: 'prepare' | 'start' | 'pause' | 'resume' | 'stop' | 'release' | 'reset', callback: () => void): void 7451 7452开始订阅音频录制事件。 7453 7454> **说明:** 7455> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.on('stateChange')](#onstatechange9-1)替代。 7456 7457**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7458 7459**参数:** 7460 7461| 参数名 | 类型 | 必填 | 说明 | 7462| -------- | -------- | ---- | ------------------------------------------------------------ | 7463| type | string | 是 | 录制事件回调类型,支持的事件包括:'prepare' \| 'start' \| 'pause' \| ’resume‘ \| 'stop' \| 'release' \| 'reset'。<br/>- 'prepare' :完成prepare调用,音频录制参数设置完成,触发该事件。<br/>- 'start' :完成start调用,音频录制开始,触发该事件。<br/>- 'pause': 完成pause调用,音频暂停录制,触发该事件。<br/>- 'resume': 完成resume调用,音频恢复录制,触发该事件。<br/>- 'stop' :完成stop调用,音频停止录制,触发该事件。<br/>- 'release' :完成release调用,音频释放录制资源,触发该事件。<br/>- 'reset':完成reset调用,音频重置为初始状态,触发该事件。 | 7464| callback | ()=>void | 是 | 录制事件回调方法。 | 7465 7466**示例:** 7467 7468```ts 7469import { BusinessError } from '@kit.BasicServicesKit'; 7470 7471let audioRecorder: media.AudioRecorder = media.createAudioRecorder(); // 创建一个音频录制实例。 7472let audioRecorderConfig: media.AudioRecorderConfig = { 7473 audioEncoder : media.AudioEncoder.AAC_LC, 7474 audioEncodeBitRate : 22050, 7475 audioSampleRate : 22050, 7476 numberOfChannels : 2, 7477 format : media.AudioOutputFormat.AAC_ADTS, 7478 uri : 'fd://xx', // 文件需先由调用者创建,并给予适当的权限。 7479 location : { latitude : 30, longitude : 130} 7480} 7481audioRecorder.on('error', (error: BusinessError) => { // 设置'error'事件回调。 7482 console.error(`audio error called, error: ${error}`); 7483}); 7484audioRecorder.on('prepare', () => { // 设置'prepare'事件回调。 7485 console.info('prepare called'); 7486 audioRecorder.start(); // 开始录制,并触发'start'事件回调。 7487}); 7488audioRecorder.on('start', () => { // 设置'start'事件回调。 7489 console.info('audio recorder start called'); 7490}); 7491audioRecorder.on('pause', () => { // 设置'pause'事件回调。 7492 console.info('audio recorder pause called'); 7493}); 7494audioRecorder.on('resume', () => { // 设置'resume'事件回调。 7495 console.info('audio recorder resume called'); 7496}); 7497audioRecorder.on('stop', () => { // 设置'stop'事件回调。 7498 console.info('audio recorder stop called'); 7499}); 7500audioRecorder.on('release', () => { // 设置'release'事件回调。 7501 console.info('audio recorder release called'); 7502}); 7503audioRecorder.on('reset', () => { // 设置'reset'事件回调。 7504 console.info('audio recorder reset called'); 7505}); 7506audioRecorder.prepare(audioRecorderConfig) // 设置录制参数 ,并触发'prepare'事件回调。 7507``` 7508 7509### on('error')<sup>(deprecated)</sup> 7510 7511on(type: 'error', callback: ErrorCallback): void 7512 7513开始订阅音频录制错误事件,当上报error错误事件后,用户需处理error事件,退出录制操作。 7514 7515> **说明:** 7516> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.on('error')](#onerror9-1)替代。 7517 7518**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7519 7520**参数:** 7521 7522| 参数名 | 类型 | 必填 | 说明 | 7523| -------- | ------------- | ---- | ------------------------------------------------------------ | 7524| type | string | 是 | 录制错误事件回调类型'error'。<br/>- 'error':音频录制过程中发生错误,触发该事件。 | 7525| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是 | 录制错误事件回调方法。 | 7526 7527**示例:** 7528 7529```ts 7530import { BusinessError } from '@kit.BasicServicesKit'; 7531 7532let audioRecorderConfig: media.AudioRecorderConfig = { 7533 audioEncoder : media.AudioEncoder.AAC_LC, 7534 audioEncodeBitRate : 22050, 7535 audioSampleRate : 22050, 7536 numberOfChannels : 2, 7537 format : media.AudioOutputFormat.AAC_ADTS, 7538 uri : 'fd://xx', // 文件需先由调用者创建,并给予适当的权限。 7539 location : { latitude : 30, longitude : 130} 7540} 7541audioRecorder.on('error', (error: BusinessError) => { // 设置'error'事件回调。 7542 console.error(`audio error called, error: ${error}`); 7543}); 7544audioRecorder.prepare(audioRecorderConfig); // prepare不设置参数,触发'error'事件。 7545``` 7546 7547## AudioRecorderConfig<sup>(deprecated)</sup> 7548 7549> **说明:** 7550> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorderConfig](#avrecorderconfig9)替代。 7551 7552表示音频的录音配置。 7553 7554**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7555 7556| 名称 | 类型 | 必填 | 说明 | 7557| ----------------------------------- | -------------------------------------------- | ---- | ------------------------------------------------------------ | 7558| audioEncoder | [AudioEncoder](#audioencoderdeprecated) | 否 | 音频编码格式,默认设置为AAC_LC。<br/>**说明:** 从API version 8开始废弃,建议使用audioEncoderMime替代。 | 7559| audioEncodeBitRate | number | 否 | 音频编码比特率,默认值为48000。 | 7560| audioSampleRate | number | 否 | 音频采集采样率,默认值为48000。<br>可变比特率模式,码率仅作参考。 | 7561| numberOfChannels | number | 否 | 音频采集声道数,默认值为2。 | 7562| format | [AudioOutputFormat](#audiooutputformatdeprecated) | 否 | 音频输出封装格式,默认设置为MPEG_4。<br/>**说明:** 从API version 8开始废弃,建议使用fileFormat替代。 | 7563| location | [Location](#location) | 否 | 音频采集的地理位置。 | 7564| uri | string | 是 | 音频输出URI:fd://xx (fd number)<br/> <br/>文件需要由调用者创建,并赋予适当的权限。 | 7565| audioEncoderMime<sup>8+</sup> | [CodecMimeType](#codecmimetype8) | 否 | 容器编码格式。 | 7566| fileFormat<sup>8+</sup> | [ContainerFormatType](#containerformattype8) | 否 | 音频编码格式。 | 7567 7568## AudioEncoder<sup>(deprecated)</sup> 7569 7570> **说明:** 7571> 从API version 6开始支持,从API version 8开始废弃,建议使用[CodecMimeType](#codecmimetype8)替代。 7572 7573表示音频编码格式的枚举。 7574 7575**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7576 7577| 名称 | 值 | 说明 | 7578| ------- | ---- | ------------------------------------------------------------ | 7579| DEFAULT | 0 | 默认编码格式。<br/>仅做接口定义,暂不支持使用。 | 7580| AMR_NB | 1 | AMR-NB(Adaptive Multi Rate-Narrow Band Speech Codec) 编码格式。<br/>仅做接口定义,暂不支持使用。 | 7581| AMR_WB | 2 | AMR-WB(Adaptive Multi Rate-Wide Band Speech Codec) 编码格式。<br/>仅做接口定义,暂不支持使用。 | 7582| AAC_LC | 3 | AAC-LC(Advanced Audio Coding Low Complexity)编码格式。 | 7583| HE_AAC | 4 | HE_AAC(High-Efficiency Advanced Audio Coding)编码格式。<br/>仅做接口定义,暂不支持使用。 | 7584 7585## AudioOutputFormat<sup>(deprecated)</sup> 7586 7587> **说明:** 7588> 从API version 6开始支持,从API version 8 开始废弃,建议使用[ContainerFormatType](#containerformattype8)替代。 7589 7590表示音频封装格式的枚举。 7591 7592**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7593 7594| 名称 | 值 | 说明 | 7595| -------- | ---- | ------------------------------------------------------------ | 7596| DEFAULT | 0 | 默认封装格式。<br/>仅做接口定义,暂不支持使用。 | 7597| MPEG_4 | 2 | 封装为MPEG-4格式。 | 7598| AMR_NB | 3 | 封装为AMR_NB格式。<br/>仅做接口定义,暂不支持使用。 | 7599| AMR_WB | 4 | 封装为AMR_WB格式。<br/>仅做接口定义,暂不支持使用。 | 7600| AAC_ADTS | 6 | 封装为ADTS(Audio Data Transport Stream)格式,是AAC音频的传输流格式。 | 7601 7602 7603## media.createAVImageGenerator<sup>12+</sup> 7604 7605createAVImageGenerator(callback: AsyncCallback\<AVImageGenerator>): void 7606 7607创建AVImageGenerator实例,通过回调函数获取返回值。 7608 7609**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator 7610 7611**参数:** 7612 7613| 参数名 | 类型 | 必填 | 说明 | 7614| -------- | ------------------------------------- | ---- | ------------------------------------------------------------ | 7615| callback | AsyncCallback\<[AVImageGenerator](#avimagegenerator12)> | 是 | 回调函数。异步返回AVImageGenerator实例,失败时返回null。可用于获取视频缩略图。 | 7616 7617**错误码:** 7618 7619以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 7620 7621| 错误码ID | 错误信息 | 7622| -------- | ------------------------------ | 7623| 5400101 | No memory. Returned by callback. | 7624 7625**示例:** 7626 7627```ts 7628import { BusinessError } from '@kit.BasicServicesKit'; 7629 7630let avImageGenerator: media.AVImageGenerator; 7631media.createAVImageGenerator((error: BusinessError, generator: media.AVImageGenerator) => { 7632 if (generator != null) { 7633 avImageGenerator = generator; 7634 console.info('Succeeded in creating AVImageGenerator'); 7635 } else { 7636 console.error(`Failed to creat AVImageGenerator, error message:${error.message}`); 7637 } 7638}); 7639``` 7640 7641## media.createAVImageGenerator<sup>12+</sup> 7642 7643createAVImageGenerator(): Promise\<AVImageGenerator> 7644 7645创建AVImageGenerator对象,通过Promise获取返回值。 7646 7647**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator 7648 7649**返回值:** 7650 7651| 类型 | 说明 | 7652| ------------------------------- | ------------------------------------------------------------ | 7653| Promise\<[AVImageGenerator](#avimagegenerator12)> | Promise对象。异步返回AVImageGenerator实例,失败时返回null。可用于获取视频缩略图。 | 7654 7655**错误码:** 7656 7657以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 7658 7659| 错误码ID | 错误信息 | 7660| -------- | ----------------------------- | 7661| 5400101 | No memory. Returned by promise. | 7662 7663**示例:** 7664 7665```ts 7666import { BusinessError } from '@kit.BasicServicesKit'; 7667 7668let avImageGenerator: media.AVImageGenerator; 7669media.createAVImageGenerator().then((generator: media.AVImageGenerator) => { 7670 if (generator != null) { 7671 avImageGenerator = generator; 7672 console.info('Succeeded in creating AVImageGenerator'); 7673 } else { 7674 console.error('Failed to creat AVImageGenerator'); 7675 } 7676}).catch((error: BusinessError) => { 7677 console.error(`Failed to creat AVImageGenerator, error message:${error.message}`); 7678}); 7679``` 7680 7681## AVImageGenerator<sup>12+</sup> 7682 7683视频缩略图获取类,用于从视频资源中获取缩略图。在调用AVImageGenerator的方法前,需要先通过[createAVImageGenerator()](#mediacreateavimagegenerator12)构建一个AVImageGenerator实例。 7684 7685获取视频缩略图的demo可参考:[获取视频缩略图开发指导](../../media/media/avimagegenerator.md)。 7686 7687### 属性 7688 7689**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator 7690 7691| 名称 | 类型 | 可读 | 可写 | 说明 | 7692| --------------------------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ | 7693| 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。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致视频缩略图数据获取异常。 | 7694 7695### fetchFrameByTime<sup>12+</sup> 7696 7697fetchFrameByTime(timeUs: number, options: AVImageQueryOptions, param: PixelMapParams, callback: AsyncCallback\<image.PixelMap>): void 7698 7699异步方式获取视频缩略图。通过注册回调函数获取返回值。 7700 7701**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator 7702 7703**参数:** 7704 7705| 参数名 | 类型 | 必填 | 说明 | 7706| -------- | -------------------------------------------- | ---- | ----------------------------------- | 7707| timeUs | number | 是 | 需要获取的缩略图在视频中的时间点,单位为微秒(μs)。 | 7708| options | [AVImageQueryOptions](#avimagequeryoptions12) | 是 | 需要获取的缩略图时间点与视频帧的对应关系。 | 7709| param | [PixelMapParams](#pixelmapparams12) | 是 | 需要获取的缩略图的格式参数。 | 7710| callback | AsyncCallback\<[image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7)> | 是 | 回调函数。获取缩略图成功时,err为undefined,data为PixelMap实例,否则为错误对象。 | 7711 7712**错误码:** 7713 7714以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 7715 7716| 错误码ID | 错误信息 | 7717| -------- | ------------------------------------------ | 7718| 5400102 | Operation not allowed. Returned by callback. | 7719| 5400106 | Unsupported format. Returned by callback. | 7720 7721**示例:** 7722 7723```ts 7724import { BusinessError } from '@kit.BasicServicesKit'; 7725import { image } from '@kit.ImageKit'; 7726 7727let avImageGenerator: media.AVImageGenerator | undefined = undefined; 7728let pixel_map : image.PixelMap | undefined = undefined; 7729 7730// 初始化入参。 7731let timeUs: number = 0 7732 7733let queryOption: media.AVImageQueryOptions = media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC 7734 7735let param: media.PixelMapParams = { 7736 width : 300, 7737 height : 300, 7738} 7739 7740// 获取缩略图。 7741media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => { 7742 if(generator != null){ 7743 avImageGenerator = generator; 7744 console.info(`Succeeded in creating AVImageGenerator`); 7745 avImageGenerator.fetchFrameByTime(timeUs, queryOption, param, (error: BusinessError, pixelMap) => { 7746 if (error) { 7747 console.error(`Failed to fetch FrameByTime, err = ${JSON.stringify(error)}`) 7748 return 7749 } 7750 pixel_map = pixelMap; 7751 }); 7752 } else { 7753 console.error(`Failed to creat AVImageGenerator, error message:${err.message}`); 7754 }; 7755}); 7756``` 7757 7758### fetchFrameByTime<sup>12+</sup> 7759 7760fetchFrameByTime(timeUs: number, options: AVImageQueryOptions, param: PixelMapParams): Promise<image.PixelMap> 7761 7762异步方式获取视频缩略图。通过Promise获取返回值。 7763 7764**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator 7765 7766**参数:** 7767 7768| 参数名 | 类型 | 必填 | 说明 | 7769| -------- | -------------------------------------------- | ---- | ----------------------------------- | 7770| timeUs | number | 是 | 需要获取的缩略图在视频中的时间点,单位为微秒(μs)。 | 7771| options | [AVImageQueryOptions](#avimagequeryoptions12) | 是 | 需要获取的缩略图时间点与视频帧的对应关系。 | 7772| param | [PixelMapParams](#pixelmapparams12) | 是 | 需要获取的缩略图的格式参数。 | 7773 7774**返回值:** 7775 7776| 类型 | 说明 | 7777| -------------- | ---------------------------------------- | 7778| Promise\<[image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7)> | Promise对象,返回视频缩略图对象。 | 7779 7780**错误码:** 7781 7782以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 7783 7784| 错误码ID | 错误信息 | 7785| -------- | ----------------------------------------- | 7786| 5400102 | Operation not allowed. Returned by promise. | 7787| 5400106 | Unsupported format. Returned by promise. | 7788 7789**示例:** 7790 7791```ts 7792import { BusinessError } from '@kit.BasicServicesKit'; 7793import { image } from '@kit.ImageKit'; 7794 7795let avImageGenerator: media.AVImageGenerator | undefined = undefined; 7796let pixel_map : image.PixelMap | undefined = undefined; 7797 7798// 初始化入参。 7799let timeUs: number = 0 7800 7801let queryOption: media.AVImageQueryOptions = media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC 7802 7803let param: media.PixelMapParams = { 7804 width : 300, 7805 height : 300, 7806} 7807 7808// 获取缩略图。 7809media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => { 7810 if(generator != null){ 7811 avImageGenerator = generator; 7812 console.info(`Succeeded in creating AVImageGenerator`); 7813 avImageGenerator.fetchFrameByTime(timeUs, queryOption, param).then((pixelMap: image.PixelMap) => { 7814 pixel_map = pixelMap; 7815 }).catch((error: BusinessError) => { 7816 console.error(`Failed to fetch FrameByTime, error message:${error.message}`); 7817 }); 7818 } else { 7819 console.error(`Failed to creat AVImageGenerator, error message:${err.message}`); 7820 }; 7821}); 7822``` 7823 7824### release<sup>12+</sup> 7825 7826release(callback: AsyncCallback\<void>): void 7827 7828异步方式释放资源。通过注册回调函数获取返回值。 7829 7830**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator 7831 7832**参数:** 7833 7834| 参数名 | 类型 | 必填 | 说明 | 7835| -------- | -------------------------------------------- | ---- | ----------------------------------- | 7836| callback | AsyncCallback\<void> | 是 | 回调函数。当释放资源成功,err为undefined,否则为错误对象。 | 7837 7838**错误码:** 7839 7840以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 7841 7842| 错误码ID | 错误信息 | 7843| -------- | ------------------------------------------ | 7844| 5400102 | Operation not allowed. Returned by callback. | 7845 7846**示例:** 7847 7848```ts 7849import { BusinessError } from '@kit.BasicServicesKit'; 7850 7851let avImageGenerator: media.AVImageGenerator | undefined = undefined; 7852 7853//释放资源。 7854media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => { 7855 if(generator != null){ 7856 avImageGenerator = generator; 7857 console.info(`Succeeded in creating AVImageGenerator`); 7858 avImageGenerator.release((error: BusinessError) => { 7859 if (error) { 7860 console.error(`Failed to release, err = ${JSON.stringify(error)}`); 7861 return; 7862 } 7863 console.info(`Succeeded in releasing`); 7864 }); 7865 } else { 7866 console.error(`Failed to creat AVImageGenerator, error message:${err.message}`); 7867 }; 7868}); 7869``` 7870 7871### release<sup>12+</sup> 7872 7873release(): Promise\<void> 7874 7875异步方式释放资源。通过Promise获取返回值。 7876 7877**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator 7878 7879**返回值:** 7880 7881| 类型 | 说明 | 7882| -------------- | ---------------------------------------- | 7883| Promise\<void> | 异步方式释放资源release方法的Promise返回值。 | 7884 7885**错误码:** 7886 7887以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 7888 7889| 错误码ID | 错误信息 | 7890| -------- | ----------------------------------------- | 7891| 5400102 | Operation not allowed. Returned by promise. | 7892 7893**示例:** 7894 7895```ts 7896import { BusinessError } from '@kit.BasicServicesKit'; 7897 7898let avImageGenerator: media.AVImageGenerator | undefined = undefined; 7899 7900//释放资源 7901media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => { 7902 if(generator != null){ 7903 avImageGenerator = generator; 7904 console.info(`Succeeded in creating AVImageGenerator`); 7905 avImageGenerator.release().then(() => { 7906 console.info(`Succeeded in releasing.`); 7907 }).catch((error: BusinessError) => { 7908 console.error(`Failed to release, error message:${error.message}`); 7909 }); 7910 } else { 7911 console.error(`Failed to creat AVImageGenerator, error message:${err.message}`); 7912 }; 7913}); 7914``` 7915 7916## AVImageQueryOptions<sup>12+</sup> 7917 7918需要获取的缩略图时间点与视频帧的对应关系。 7919 7920在获取视频缩略图时,传入的时间点与实际取得的视频帧所在时间点不一定相等,需要指定传入的时间点与实际取得的视频帧的时间关系。 7921 7922**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator 7923 7924| 名称 | 值 | 说明 | 7925| ------------------------ | --------------- | ------------------------------------------------------------ | 7926| AV_IMAGE_QUERY_NEXT_SYNC | 0 | 表示选取传入时间点或之后的关键帧。 | 7927| AV_IMAGE_QUERY_PREVIOUS_SYNC | 1 | 表示选取传入时间点或之前的关键帧。 | 7928| AV_IMAGE_QUERY_CLOSEST_SYNC | 2 | 表示选取离传入时间点最近的关键帧。 | 7929| AV_IMAGE_QUERY_CLOSEST | 3 | 表示选取离传入时间点最近的帧,该帧不一定是关键帧。 | 7930 7931## PixelMapParams<sup>12+</sup> 7932 7933获取视频缩略图时,输出缩略图的格式参数。 7934 7935**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator 7936 7937| 名称 | 类型 | 可读 | 可写 | 说明 | 7938|--------|--------|------|------|---------------------------------------------------------------------------------| 7939| width | number | 是 | 是 | 输出的缩略图宽度。应保证大于0且不大于原始视频宽度。否则返回的缩略图不会进行缩放。 | 7940| height | number | 是 | 是 | 输出的缩略图高度。应保证大于0且不大于原始视频高度。否则返回的缩略图不会进行缩放。 | 7941 7942## media.createMediaSourceWithUrl<sup>12+</sup> 7943 7944createMediaSourceWithUrl(url: string, headers?: Record\<string, string>): MediaSource 7945 7946创建流媒体预下载媒体来源实例方法。 7947 7948**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。 7949 7950**系统能力:** SystemCapability.Multimedia.Media.Core 7951 7952**参数:** 7953 7954| 参数名 | 类型 | 必填 | 说明 | 7955| -------- | -------- | ---- | -------------------- | 7956| url | string | 是 | - 流媒体预下载媒体来源url,支持的流媒体格式:HLS、HTTP-FLV、Dash、Https。<br> - 本地m3u8的fd路径。 | 7957| headers | Record\<string, string> | 否 | 支持流媒体预下载HttpHeader自定义。 | 7958 7959**返回值:** 7960 7961| 类型 | 说明 | 7962| -------------- | ------------------------------------------ | 7963| [MediaSource](#mediasource12) | MediaSource返回值。 | 7964 7965**错误码:** 7966 7967以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 7968 7969| 错误码ID | 错误信息 | 7970| -------- | ----------------------------------------- | 7971| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 7972| 5400101 | No memory. | 7973 7974**示例1:** 7975 7976```ts 7977let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"}; 7978let mediaSource : media.MediaSource = media.createMediaSourceWithUrl("http://xxx", headers); 7979``` 7980 7981**示例2:** 7982 7983<!--code_no_check--> 7984```ts 7985import { common } from '@kit.AbilityKit'; 7986import { resourceManager } from '@kit.LocalizationKit'; 7987 7988private context: Context | undefined; 7989constructor(context: Context) { 7990 this.context = context; // this.getUIContext().getHostContext(); 7991} 7992let mgr = this.context.resourceManager; 7993let fileDescriptor = await mgr.getRawFd("xxx.m3u8"); 7994 7995let fd:string = fileDescriptor.fd.toString(); 7996let offset:string = fileDescriptor.offset.toString(); 7997let length:string = fileDescriptor.length.toString(); 7998let fdUrl:string = "fd://" + fd + "?offset=" + offset + "&size=" + length; 7999 8000let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"}; 8001let mediaSource : media.MediaSource = media.createMediaSourceWithUrl(fdUrl, headers); 8002 8003let mimeType : media.AVMimeTypes = media.AVMimeTypes.APPLICATION_M3U8; 8004mediaSource.setMimeType(mimeType); 8005 8006``` 8007 8008## MediaSource<sup>12+</sup> 8009 8010媒体数据信息。来源自[createMediaSourceWithUrl](#mediacreatemediasourcewithurl12)。 8011 8012**系统能力:** SystemCapability.Multimedia.Media.Core 8013 8014### setMimeType<sup>12+</sup> 8015 8016setMimeType(mimeType: AVMimeTypes): void 8017 8018设置媒体MIME类型,以帮助播放器处理扩展的媒体源。 8019 8020**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 8021 8022**系统能力:** SystemCapability.Multimedia.Media.Core 8023 8024**参数:** 8025 8026| 参数名 | 类型 | 必填 | 说明 | 8027| -------- | -------- | ---- | -------------------- | 8028| mimeType | [AVMimeTypes](#mediasource12) | 是 | 媒体MIME类型。 | 8029 8030### setMediaResourceLoaderDelegate<sup>18+</sup> 8031 8032setMediaResourceLoaderDelegate(resourceLoader: MediaSourceLoader): void 8033 8034设置MediaSourceLoader,帮助播放器请求媒体数据。 8035 8036**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 8037 8038**系统能力:** SystemCapability.Multimedia.Media.Core 8039 8040**参数:** 8041 8042| 参数名 | 类型 | 必填 | 说明 | 8043| -------- | -------- | ---- | -------------------- | 8044| resourceLoader | [MediaSourceLoader](#mediasourceloader18) | 是 | 应用实现的媒体数据获取接口,方便播放器获取数据。 | 8045 8046**示例:** 8047 8048```ts 8049import { BusinessError } from '@kit.BasicServicesKit'; 8050 8051let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"}; 8052let mediaSource : media.MediaSource = media.createMediaSourceWithUrl("http://xxx", headers); 8053 8054// 应用按需实现。 8055let resourceLoader: media.MediaSourceLoader = { 8056 open: SourceOpenCallback, 8057 read: SourceReadCallback, 8058 close: SourceCloseCallback 8059}; 8060 8061mediaSource.setMediaResourceLoaderDelegate(resourceLoader); 8062``` 8063 8064## SourceOpenCallback<sup>18+</sup> 8065 8066type SourceOpenCallback = (request: MediaSourceLoadingRequest) => number 8067 8068由应用实现此回调函数,应用需处理传入的资源打开请求,并返回所打开资源对应的唯一句柄。 8069> 8070>**注意:** 客户端在处理完请求后应立刻返回。 8071> 8072 8073**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 8074 8075**系统能力:** SystemCapability.Multimedia.Media.Core 8076 8077**参数:** 8078 8079| 参数名 | 类型 | 必填 | 说明 | 8080| -------- | -------- | ---- | -------------------- | 8081| request | [MediaSourceLoadingRequest](#mediasourceloadingrequest18) | 是 | 打开请求参数,包含请求资源的具体信息和数据推送方式。 | 8082 8083**返回值:** 8084 8085| 类型 | 说明 | 8086| -------- | -------------------- | 8087| number | 当前资源打开请求的句柄。大于0表示请求成功,小于或等于0表示请求失败。<br/> - request对象对应句柄唯一。| 8088 8089**示例:** 8090 8091```ts 8092import HashMap from '@ohos.util.HashMap'; 8093 8094let uuid: number = 1; 8095let requests: HashMap<number, media.MediaSourceLoadingRequest> = new HashMap(); 8096 8097let sourceOpenCallback: media.SourceOpenCallback = (request: media.MediaSourceLoadingRequest) => { 8098 console.log(`Opening resource: ${request.url}`); 8099 // 成功打开资源,返回唯一的句柄, 保证uuid和request对应。 8100 uuid += 1; 8101 requests.set(uuid, request); 8102 return uuid; 8103} 8104``` 8105 8106## SourceReadCallback<sup>18+</sup> 8107 8108type SourceReadCallback = (uuid: number, requestedOffset: number, requestedLength: number) => void 8109 8110由应用实现此回调函数,应用需记录读取请求,并在数据充足时通过对应的MediaSourceLoadingRequest对象的[respondData](#responddata18)方法推送数据。 8111> 8112>**注意:** 客户端在处理完请求后应立刻返回。 8113> 8114 8115**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 8116 8117**系统能力:** SystemCapability.Multimedia.Media.Core 8118 8119**参数:** 8120 8121| 参数名 | 类型 | 必填 | 说明 | 8122| -------- | -------- | ---- | -------------------- | 8123| uuid | number | 是 | 资源句柄的标识。 | 8124| requestedOffset | number | 是 | 当前媒体数据相对于资源起始位置的偏移量。 | 8125| requestedLength | number | 是 | 当前请求的长度。值为-1时,表示到达资源末尾,此时推送完成后需通过[finishLoading](#finishloading18)方法通知播放器推送结束。 | 8126 8127**示例:** 8128 8129```ts 8130let sourceReadCallback: media.SourceReadCallback = (uuid: number, requestedOffset: number, requestedLength: number) => { 8131 console.log(`Reading resource with handle ${uuid}, offset: ${requestedOffset}, length: ${requestedLength}`); 8132 // 判断uuid是否合法、存储read请求,不要在read请求阻塞去推送数据和头信息。 8133} 8134``` 8135 8136## SourceCloseCallback<sup>18+</sup> 8137 8138type SourceCloseCallback = (uuid: number) => void 8139 8140由应用实现此回调函数,应用应释放相关资源。 8141> 8142>**注意:** 客户端在处理完请求后应立刻返回。 8143> 8144 8145**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 8146 8147**系统能力:** SystemCapability.Multimedia.Media.Core 8148 8149**参数:** 8150 8151| 参数名 | 类型 | 必填 | 说明 | 8152| -------- | -------- | ---- | -------------------- | 8153| uuid | number | 是 | 资源句柄的标识。 | 8154 8155**示例:** 8156 8157```ts 8158import HashMap from '@ohos.util.HashMap'; 8159 8160let requests: HashMap<number, media.MediaSourceLoadingRequest> = new HashMap(); 8161 8162let sourceCloseCallback: media.SourceCloseCallback = (uuid: number) => { 8163 console.log(`Closing resource with handle ${uuid}`); 8164 // 清除当前uuid相关资源。 8165 requests.remove(uuid); 8166} 8167``` 8168 8169## MediaSourceLoader<sup>18+</sup> 8170 8171用于定义媒体数据加载器,需要应用程序对其进行实现。 8172 8173**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 8174 8175**系统能力:** SystemCapability.Multimedia.Media.Core 8176 8177| 名称 | 类型 | 必填 | 说明 | 8178| -------- | -------- | ---- | -------------------- | 8179| open | [SourceOpenCallback](#sourceopencallback18) | 是 | 由应用程序实现的回调函数,用于处理资源打开请求。 | 8180| read | [SourceReadCallback](#sourcereadcallback18) | 是 | 由应用程序实现的回调函数,用于处理资源读取请求。 | 8181| close | [SourceCloseCallback](#sourceclosecallback18) | 是 | 由应用程序实现的回调函数,用于处理资源关闭请求。 | 8182 8183**示例:** 8184 8185```ts 8186import HashMap from '@ohos.util.HashMap'; 8187 8188let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"}; 8189let mediaSource : media.MediaSource = media.createMediaSourceWithUrl("http://xxx", headers); 8190let uuid: number = 1; 8191let requests: HashMap<number, media.MediaSourceLoadingRequest> = new HashMap(); 8192let mediaSourceLoader: media.MediaSourceLoader = { 8193 open: (request: media.MediaSourceLoadingRequest) => { 8194 console.log(`Opening resource: ${request.url}`); 8195 // 成功打开资源,返回唯一的句柄, 保证uuid和request对应。 8196 uuid += 1; 8197 requests.set(uuid, request); 8198 return uuid; 8199 }, 8200 read: (uuid: number, requestedOffset: number, requestedLength: number) => { 8201 console.log(`Reading resource with handle ${uuid}, offset: ${requestedOffset}, length: ${requestedLength}`); 8202 // 判断uuid是否合法、存储read请求,不要在read请求阻塞去推送数据和头信息。 8203 }, 8204 close: (uuid: number) => { 8205 console.log(`Closing resource with handle ${uuid}`); 8206 // 清除当前uuid相关资源。 8207 requests.remove(uuid); 8208 } 8209}; 8210 8211mediaSource.setMediaResourceLoaderDelegate(mediaSourceLoader); 8212let playStrategy : media.PlaybackStrategy = { 8213 preferredBufferDuration: 20, 8214}; 8215let player = await media.createAVPlayer(); 8216player.setMediaSource(mediaSource, playStrategy); 8217``` 8218 8219## MediaSourceLoadingRequest<sup>18+</sup> 8220 8221用于定义加载请求的对象。应用程序通过该对象来获取请求的资源位置,通过该对象和播放器进行数据交互。 8222 8223**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 8224 8225### 属性 8226 8227**系统能力:** SystemCapability.Multimedia.Media.Core 8228 8229| 名称 | 类型 | 只读 | 可选 | 说明 | 8230| --------------------------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ | 8231| url<sup>18+</sup> | string | 否 | 否 | 资源url,需要应用程序打开的资源路径。 | 8232| header<sup>18+</sup> | Record<string, string> | 否 | 是 | 网络请求标头,如果存在需要应用在下载数据是将头信息设置到http请求中。 | 8233 8234### respondData<sup>18+</sup> 8235 8236respondData(uuid: number, offset: number, buffer: ArrayBuffer): number 8237 8238用于应用程序向播放器发送数据。 8239 8240**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 8241 8242**系统能力:** SystemCapability.Multimedia.Media.Core 8243 8244**参数:** 8245 8246| 参数名 | 类型 | 必填 | 说明 | 8247| -------- | -------- | ---- | -------------------- | 8248| uuid | number | 是 | 资源句柄的标识。 | 8249| offset | number | 是 | 当前媒体数据相对于资源起始位置的偏移量。 | 8250| buffer | ArrayBuffer | 是 | 响应播放器的媒体数据。<br/>**注意:** 不要传输无关数据,会影响正常数据解析和播放。 | 8251 8252**返回值:** 8253 8254| 类型 | 说明 | 8255| -------------- | ----------------------------------- | 8256| number | 当前服务端接受的字节数。<br>- 返回值小于0表示操作失败。<br>- 返回值为-2时,表示播放器不再需要当前数据,客户端应停止当前读取过程。<br>- 返回值为-3时,表示播放器的缓冲区已满,客户端应等待下一次读取。 | 8257 8258**示例:** 8259 8260```ts 8261let requests: HashMap<number, media.MediaSourceLoadingRequest> = new HashMap(); 8262let uuid = 1; 8263 8264let request = requests.get(uuid); 8265let num = request.respondData(uuid, offset, buf); 8266``` 8267 8268### respondHeader<sup>18+</sup> 8269 8270respondHeader(uuid: number, header?: Record<string, string>, redirectUrl?: string): void 8271 8272用于应用程序向播放器发送响应头信息,应在第一次调用[respondData](#responddata18)方法之前调用。 8273 8274**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 8275 8276**系统能力:** SystemCapability.Multimedia.Media.Core 8277 8278**参数:** 8279 8280| 参数名 | 类型 | 必填 | 说明 | 8281| -------- | -------- | ---- | -------------------- | 8282| uuid | number | 是 | 资源句柄的标识。 | 8283| header | Record<string, string> | 否 | HTTP响应中的头部信息。应用可将头部信息字段与底层支持解析字段取交集传递或直接传入对应的所有头部信息。<br> - 底层播放需要解析的字段包括Transfer-Encoding、Location、Content-Type、Content-Range、Content-Encode、Accept-Ranges、content-length。 | 8284| redirectUrl | string | 否 | 如果存在,为HTTP响应中的重定向URL。 | 8285 8286**示例:** 8287 8288```ts 8289let requests: HashMap<number, media.MediaSourceLoadingRequest> = new HashMap(); 8290let uuid = 1; 8291 8292// 应用根据情况填充。 8293let header:Record<string, string> = { 8294 'Transfer-Encoding':'xxx', 8295 'Location' : 'xxx', 8296 'Content-Type' : 'xxx', 8297 'Content-Range' : 'xxx', 8298 'Content-Encode' : 'xxx', 8299 'Accept-Ranges' : 'xxx', 8300 'content-length' : 'xxx' 8301}; 8302let request = requests.get(uuid); 8303request.respondHeader(uuid, header); 8304``` 8305 8306### finishLoading<sup>18+</sup> 8307 8308finishLoading(uuid: number, state: LoadingRequestError): void 8309 8310应用程序用于通知播放器当前请求状态的接口。针对服务侧请求的单个资源,推送完全部资源后需要发送LOADING_ERROR_SUCCESS状态告知该资源推送结束。 8311 8312**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 8313 8314**系统能力:** SystemCapability.Multimedia.Media.Core 8315 8316**参数:** 8317 8318| 参数名 | 类型 | 必填 | 说明 | 8319| -------- | -------- | ---- | -------------------- | 8320| uuid | number | 是 | 资源句柄的标识。 | 8321| state | [LoadingRequestError](#loadingrequesterror18) | 是 | 请求的状态。 | 8322 8323**示例:** 8324 8325```ts 8326let requests: HashMap<number, media.MediaSourceLoadingRequest> = new HashMap(); 8327let uuid = 1; 8328 8329let request = requests.get(uuid); 8330let loadingError = media.LoadingRequestError.LOADING_ERROR_SUCCESS; 8331request.finishLoading(uuid, loadingError); 8332``` 8333 8334## LoadingRequestError<sup>18+</sup> 8335 8336枚举,数据加载过程中状态变化的原因。 8337 8338**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 8339 8340**系统能力:** SystemCapability.Multimedia.Media.Core 8341 8342| 名称 | 值 | 说明 | 8343| -------------------- | ---- | ------------------------------ | 8344| LOADING_ERROR_SUCCESS | 0 | 由客户端返回,表示已经推送到资源末尾。 | 8345| LOADING_ERROR_NOT_READY | 1 | 由客户端返回,表示资源尚未准备好可供访问。| 8346| LOADING_ERROR_NO_RESOURCE | 2 | 由客户端返回,表示请求的资源URL不存在。 | 8347| LOADING_ERROR_INVAID_HANDLE | 3 | 由客户端返回,表示请求的资源句柄uuid无效。 | 8348| LOADING_ERROR_ACCESS_DENIED | 4 | 由客户端返回,表示客户端没有权限请求该资源。 | 8349| LOADING_ERROR_ACCESS_TIMEOUT | 5 | 由客户端返回,表示访问资源过程超时。 | 8350| LOADING_ERROR_AUTHORIZE_FAILED | 6 | 由客户端返回,表示授权失败。 | 8351 8352## AVMimeTypes<sup>12+</sup> 8353 8354媒体MIME类型,通过[setMimeType](#setmimetype12)设置。 8355 8356**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 8357 8358**系统能力:** SystemCapability.Multimedia.Media.Core 8359 8360 8361| 名称 | 值 | 说明 | 8362| ---------- | ---- | ------------------------------------------------------------ | 8363| APPLICATION_M3U8 | application/m3u8 | 表示m3u8本地文件。 | 8364 8365 8366## PlaybackStrategy<sup>12+</sup> 8367 8368播放策略。 8369 8370**系统能力:** SystemCapability.Multimedia.Media.Core 8371 8372| 名称 | 类型 | 必填 | 说明 | 8373| -------- | -------- | ---- | -------------------- | 8374| preferredWidth| number | 否 | 播放策略首选宽度,设置范围为大于0的整数,如1080,单位为像素(px)。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 8375| preferredHeight | number | 否 | 播放策略首选高度,设置范围为大于0的整数,如1920,单位为像素(px)。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 8376| preferredBufferDuration | number | 否 | 播放策略首选缓冲持续时间,单位s,取值范围1-20。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 8377| preferredHdr | boolean | 否 | 播放策略true是hdr,false非hdr,默认非hdr。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 8378| enableSuperResolution<sup>18+</sup> | boolean | 否 | 表示是否使能超分功能。true表示使能超分,false表示不使能超分,默认为false。<br>若不使能超分,则后续不能调用超分相关接口。若使能超分,则超分功能默认开启,默认目标分辨率为1920x1080,单位为像素。<br>**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 | 8379| showFirstFrameOnPrepare<sup>17+</sup> | boolean | 否 | 播放策略true是Prepare之后显示视频起播首帧,false是Prepare之后不显示视频起播首帧,默认不显示。<br>**原子化服务API:** 从API version 17开始,该接口支持在原子化服务中使用。 | 8380| mutedMediaType | [MediaType](#mediatype8) | 否 | 静音播放的媒体类型,仅支持设置 MediaType.MEDIA_TYPE_AUD。 | 8381| preferredAudioLanguage<sup>13+</sup> | string | 否 | 播放策略首选音轨语言。dash场景下应用可按需设置。非dash场景暂不支持,建议缺省。<br>**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。 | 8382| preferredSubtitleLanguage<sup>13+</sup> | string | 否 | 播放策略首选字幕语言。dash场景下应用可按需设置。非dash场景暂不支持,建议缺省。<br>**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。 | 8383| preferredBufferDurationForPlaying<sup>18+</sup> | number | 否 | 播放策略首选起播缓冲水线。当起播缓冲时间超过该值,开始播放。单位s,取值范围0-20。<br>**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 | 8384| thresholdForAutoQuickPlay<sup>18+</sup> | number | 否 | 智能追帧水线,单位为s,取值应不小于2s,且需大于起播缓冲水线,默认设置为5s。<br>播放策略可以通过设置智能追帧水线来保证直播的实时性。flv直播场景下应用可按需设置,非flv直播场景暂不支持。网络状态的变化可能会导致播放器在某段时间内积压大量数据。播放器会定期检查当前播放时间与缓存中最新的帧时间戳之间的差值,当这个差值过大时,播放器将以1.2倍速开始追帧;当差值小于起播缓冲水线时,则停止追帧并恢复到正常播放速度。<br>**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 | 8385 8386## AVScreenCaptureRecordPreset<sup>12+</sup> 8387 8388进行屏幕录制时的编码、封装格式参数的枚举。 8389 8390**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 8391 8392| 名称 | 值 | 说明 | 8393| --------------------------------- | ---- | -------------------------------------------- | 8394| SCREEN_RECORD_PRESET_H264_AAC_MP4 | 0 | 使用视频H264编码,音频AAC编码,MP4封装格式。 | 8395| SCREEN_RECORD_PRESET_H265_AAC_MP4 | 1 | 使用视频H265编码,音频AAC编码,MP4封装格式。 | 8396 8397## AVScreenCaptureStateCode<sup>12+</sup> 8398 8399屏幕录制的状态回调。 8400 8401**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 8402 8403| 名称 | 值 | 说明 | 8404| ---------------------------------------- | ---- | ------------------------ | 8405| SCREENCAPTURE_STATE_STARTED | 0 | 录屏已开始。 | 8406| SCREENCAPTURE_STATE_CANCELED | 1 | 录屏被取消。 | 8407| SCREENCAPTURE_STATE_STOPPED_BY_USER | 2 | 录屏被用户手动停止。 | 8408| SCREENCAPTURE_STATE_INTERRUPTED_BY_OTHER | 3 | 录屏被其他录屏打断。 | 8409| SCREENCAPTURE_STATE_STOPPED_BY_CALL | 4 | 录屏被来电打断。 | 8410| SCREENCAPTURE_STATE_MIC_UNAVAILABLE | 5 | 录屏无法使用麦克风收音。 | 8411| SCREENCAPTURE_STATE_MIC_MUTED_BY_USER | 6 | 麦克风被用户关闭。 | 8412| SCREENCAPTURE_STATE_MIC_UNMUTED_BY_USER | 7 | 麦克风被用户打开。 | 8413| SCREENCAPTURE_STATE_ENTER_PRIVATE_SCENE | 8 | 录屏进入隐私页面。 | 8414| SCREENCAPTURE_STATE_EXIT_PRIVATE_SCENE | 9 | 录屏退出隐私页面。 | 8415| SCREENCAPTURE_STATE_STOPPED_BY_USER_SWITCHES | 10 | 系统用户切换,录屏中断。 | 8416 8417## AVScreenCaptureFillMode<sup>18+</sup> 8418 8419进行屏幕录制时视频填充模式的枚举。 8420 8421**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 8422 8423| 名称 | 值 | 说明 | 8424| --------------------------------- | ---- | -------------------------------------------- | 8425| PRESERVE_ASPECT_RATIO | 0 | 保持与原始图像相同的宽高比例,即与物理屏幕宽高比例一致。 | 8426| SCALE_TO_FILL | 1 | 进行图像拉伸填充,适配设置的宽度和高度。 | 8427 8428 8429## AVScreenCaptureRecordConfig<sup>12+</sup> 8430 8431表示录屏参数配置。 8432 8433**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 8434 8435| 名称 | 类型 | 必填 | 说明 | 8436| ----------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 8437| fd | number | 是 | 录制输出的文件fd。 | 8438| frameWidth | number | 否 | 录屏的视频宽度,默认屏幕宽度,根据不同屏幕默认值不同,单位px。 | 8439| frameHeight | number | 否 | 录屏的视频高度,默认屏幕高度,根据不同屏幕默认值不同,单位px。 | 8440| videoBitrate | number | 否 | 录屏的视频比特率,默认10000000。 | 8441| audioSampleRate | number | 否 | 录屏的音频采样率,内录的系统音和外录的麦克风都是用此采样率,默认48000,仅支持设置48000或16000。 | 8442| audioChannelCount | number | 否 | 录屏的音频通道数,内录的系统音和外录的麦克风都是用此通道数,默认2声道,仅支持设置1或2声道。 | 8443| audioBitrate | number | 否 | 录屏的音频比特率,内录的系统音和外录的麦克风都是用此比特率,默认96000。 | 8444| preset | [AVScreenCaptureRecordPreset](#avscreencapturerecordpreset12) | 否 | 录屏使用的编码和封装格式,默认SCREEN_RECORD_PRESET_H264_AAC_MP4格式。 | 8445| displayId<sup>15+</sup> | number | 否 | 指定录屏使用的屏幕,默认主屏幕。 | 8446| fillMode<sup>18+</sup> | [AVScreenCaptureFillMode](#avscreencapturefillmode18)| 否 | 录屏时视频流的填充模式。 | 8447 8448## AVScreenCaptureRecorder<sup>12+</sup> 8449 8450屏幕录制管理类,用于进行屏幕录制。在调用AVScreenCaptureRecorder的方法前,需要先通过[createAVScreenCaptureRecorder()](#mediacreateavscreencapturerecorder12)创建一个AVScreenCaptureRecorder实例。 8451 8452### init<sup>12+</sup> 8453 8454init(config: AVScreenCaptureRecordConfig): Promise\<void> 8455 8456异步方式进行录屏初始化,设置录屏参数。通过Promise获取返回值。 8457 8458**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 8459 8460**参数:** 8461 8462| 参数名 | 类型 | 必填 | 说明 | 8463| ------ | ------------------------------------------------------------ | ---- | ------------------------ | 8464| config | [AVScreenCaptureRecordConfig](#avscreencapturerecordconfig12) | 是 | 配置屏幕录制的相关参数。 | 8465 8466**返回值:** 8467 8468| 类型 | 说明 | 8469| -------------- | ----------------------------------- | 8470| Promise\<void> | 异步录屏初始化方法的Promise返回值。 | 8471 8472**错误码:** 8473 8474| 错误码ID | 错误信息 | 8475| -------- | ---------------------------------------------- | 8476| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. Return by promise. | 8477| 5400103 | IO error. Return by promise. | 8478| 5400105 | Service died. Return by promise. | 8479 8480**示例:** 8481 8482```ts 8483import { BusinessError } from '@kit.BasicServicesKit'; 8484 8485let avCaptureConfig: media.AVScreenCaptureRecordConfig = { 8486 fd: 0, // 文件需要先有调用者创建,赋予写权限,将文件fd传给此参数。 8487 frameWidth: 640, 8488 frameHeight: 480 8489 // 补充其他参数。 8490} 8491 8492avScreenCaptureRecorder.init(avCaptureConfig).then(() => { 8493 console.info('Succeeded in initing avScreenCaptureRecorder'); 8494}).catch((err: BusinessError) => { 8495 console.info('Failed to init avScreenCaptureRecorder, error: ' + err.message); 8496}) 8497``` 8498 8499### startRecording<sup>12+</sup> 8500 8501startRecording(): Promise\<void> 8502 8503异步方式开始录屏。通过Promise获取返回值。 8504 8505**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 8506 8507**返回值:** 8508 8509| 类型 | 说明 | 8510| -------------- | -------------------------------- | 8511| Promise\<void> | 异步开始录屏方法的Promise返回值. | 8512 8513**错误码:** 8514 8515| 错误码ID | 错误信息 | 8516| -------- | -------------------------------- | 8517| 5400103 | IO error. Return by promise. | 8518| 5400105 | Service died. Return by promise. | 8519 8520**示例:** 8521 8522```ts 8523import { BusinessError } from '@kit.BasicServicesKit'; 8524 8525avScreenCaptureRecorder.startRecording().then(() => { 8526 console.info('Succeeded in starting avScreenCaptureRecorder'); 8527}).catch((err: BusinessError) => { 8528 console.info('Failed to start avScreenCaptureRecorder, error: ' + err.message); 8529}) 8530``` 8531 8532### stopRecording<sup>12+</sup> 8533 8534stopRecording(): Promise\<void> 8535 8536异步方式结束录屏。通过Promise获取返回值。 8537 8538**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 8539 8540**返回值:** 8541 8542| 类型 | 说明 | 8543| -------------- | --------------------------------- | 8544| Promise\<void> | 异步结束录屏方法的Promise返回值。 | 8545 8546**错误码:** 8547 8548| 错误码ID | 错误信息 | 8549| -------- | -------------------------------- | 8550| 5400103 | IO error. Return by promise. | 8551| 5400105 | Service died. Return by promise. | 8552 8553**示例:** 8554 8555```ts 8556import { BusinessError } from '@kit.BasicServicesKit'; 8557 8558avScreenCaptureRecorder.stopRecording().then(() => { 8559 console.info('Succeeded in stopping avScreenCaptureRecorder'); 8560}).catch((err: BusinessError) => { 8561 console.info('Failed to stop avScreenCaptureRecorder, error: ' + err.message); 8562}) 8563``` 8564 8565### skipPrivacyMode<sup>12+</sup> 8566 8567skipPrivacyMode(windowIDs: Array\<number>): Promise\<void> 8568 8569录屏时,应用可对本应用的隐私窗口做安全豁免。通过Promise获取返回值。 8570如录屏时,用户在本应用进行输入密码等操作,应用不会进行黑屏处理。 8571 8572**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 8573 8574**参数:** 8575 8576| 参数名 | 类型 | 必填 | 说明 | 8577| ------ | ------- | ---- | --------------------------------------------------------- | 8578| windowIDs | Array\<number> | 是 | 需要豁免隐私的窗口列表,包括主窗口id和子窗口id,窗口属性获取方法可以参考[窗口API引用](../apis-arkui/js-apis-window.md#getwindowproperties9)。 | 8579 8580**返回值:** 8581 8582| 类型 | 说明 | 8583| -------------- | -------------------------------- | 8584| Promise\<void> | 豁免隐私窗口的Promise返回值. | 8585 8586**错误码:** 8587 8588| 错误码ID | 错误信息 | 8589| -------- | -------------------------------- | 8590| 5400103 | IO error. Return by promise. | 8591| 5400105 | Service died. Return by promise. | 8592 8593**示例:** 8594 8595```ts 8596import { BusinessError } from '@kit.BasicServicesKit'; 8597 8598let windowIDs = []; 8599avScreenCaptureRecorder.skipPrivacyMode(windowIDs).then(() => { 8600 console.info('Succeeded in skipping privacy mode'); 8601}).catch((err: BusinessError) => { 8602 console.info('Failed to skip privacy mode, error: ' + err.message); 8603}) 8604``` 8605 8606### setMicEnabled<sup>12+</sup> 8607 8608setMicEnabled(enable: boolean): Promise\<void> 8609 8610异步方式设置麦克风开关。通过Promise获取返回值。 8611 8612**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 8613 8614**参数:** 8615 8616| 参数名 | 类型 | 必填 | 说明 | 8617| ------ | ------- | ---- | --------------------------------------------------------- | 8618| enable | boolean | 是 | 麦克风开关控制,true代表麦克风打开,false代表麦克风关闭。 | 8619 8620**返回值:** 8621 8622| 类型 | 说明 | 8623| -------------- | --------------------------------------- | 8624| Promise\<void> | 异步设置麦克风开关方法的Promise返回值。 | 8625 8626**错误码:** 8627 8628| 错误码ID | 错误信息 | 8629| -------- | -------------------------------- | 8630| 5400103 | IO error. Return by promise. | 8631| 5400105 | Service died. Return by promise. | 8632 8633**示例:** 8634 8635```ts 8636import { BusinessError } from '@kit.BasicServicesKit'; 8637 8638avScreenCaptureRecorder.setMicEnabled(true).then(() => { 8639 console.info('Succeeded in setMicEnabled avScreenCaptureRecorder'); 8640}).catch((err: BusinessError) => { 8641 console.info('Failed to setMicEnabled avScreenCaptureRecorder, error: ' + err.message); 8642}) 8643``` 8644 8645### release<sup>12+</sup> 8646 8647release(): Promise\<void> 8648 8649异步方式释放录屏。通过Promise获取返回值。 8650 8651**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 8652 8653**返回值:** 8654 8655| 类型 | 说明 | 8656| -------------- | --------------------------------- | 8657| Promise\<void> | 异步释放录屏方法的Promise返回值。 | 8658 8659**错误码:** 8660 8661| 错误码ID | 错误信息 | 8662| -------- | -------------------------------- | 8663| 5400103 | IO error. Return by promise. | 8664| 5400105 | Service died. Return by promise. | 8665 8666**示例:** 8667 8668```ts 8669import { BusinessError } from '@kit.BasicServicesKit'; 8670 8671avScreenCaptureRecorder.release().then(() => { 8672 console.info('Succeeded in releasing avScreenCaptureRecorder'); 8673}).catch((err: BusinessError) => { 8674 console.info('Faile to release avScreenCaptureRecorder, error: ' + err.message); 8675}) 8676``` 8677 8678### on('stateChange')<sup>12+</sup> 8679 8680on(type: 'stateChange', callback: Callback\<AVScreenCaptureStateCode>): void 8681 8682订阅录屏状态切换的事件,当状态发生的时候,会通过订阅的回调通知用户。用户只能订阅一个状态切换的回调方法,重复订阅时,以最后一次订阅的回调接口为准。 8683 8684**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 8685 8686**参数:** 8687 8688| 参数名 | 类型 | 必填 | 说明 | 8689| -------- | -------- | ---- | ------------------------------------------------------------ | 8690| type | string | 是 | 状态切换事件回调类型,支持的事件:'stateChange'。 | 8691| callback | function | 是 | 状态切换事件回调方法,[AVScreenCaptureStateCode](#avscreencapturestatecode12)表示切换到的状态。 | 8692 8693**示例:** 8694 8695```ts 8696avScreenCaptureRecorder.on('stateChange', (state: media.AVScreenCaptureStateCode) => { 8697 console.info('avScreenCaptureRecorder stateChange to ' + state); 8698}) 8699``` 8700 8701### on('error')<sup>12+</sup> 8702 8703on(type: 'error', callback: ErrorCallback): void 8704 8705订阅AVScreenCaptureRecorder的错误事件,用户可以根据应用自身逻辑对错误事件进行处理。用户只能订阅一个错误事件的回调方法,重复订阅时,以最后一次订阅的回调接口为准。 8706 8707**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 8708 8709**参数:** 8710 8711| 参数名 | 类型 | 必填 | 说明 | 8712| -------- | ------------- | ---- | --------------------------------------- | 8713| type | string | 是 | 错误事件回调类型,支持的事件:'error'。 | 8714| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是 | 录屏错误事件回调方法。 | 8715 8716**错误码:** 8717 8718| 错误码ID | 错误信息 | 8719| -------- | -------------------------------- | 8720| 201 | permission denied. | 8721| 5400103 | IO error. Return by ErrorCallback. | 8722| 5400105 | Service died. Return by ErrorCallback. | 8723 8724**示例:** 8725 8726```ts 8727avScreenCaptureRecorder.on('error', (err: BusinessError) => { 8728 console.error('avScreenCaptureRecorder error:' + err.message); 8729}) 8730``` 8731 8732### off('stateChange')<sup>12+</sup> 8733 8734 off(type: 'stateChange', callback?: Callback\<AVScreenCaptureStateCode>): void 8735 8736取消订阅状态切换回调事件。用户可以指定填入状态切换的回调方法来取消订阅。 8737 8738**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 8739 8740**参数:** 8741 8742| 参数名 | 类型 | 必填 | 说明 | 8743| -------- | -------- | ---- | ------------------------------------------------------------ | 8744| type | string | 是 | 状态切换事件回调类型,支持的事件:'stateChange'。 | 8745| callback | function | 否 | 状态切换事件回调方法,[AVScreenCaptureStateCode](#avscreencapturestatecode12)表示切换到的状态,不填此参数则会取消最后一次订阅事件。 | 8746 8747**示例:** 8748 8749```ts 8750avScreenCaptureRecorder.off('stateChange'); 8751``` 8752 8753### off('error')<sup>12+</sup> 8754 8755off(type: 'error', callback?: ErrorCallback): void 8756 8757取消订阅错误回调事件。用户可以指定填入错误回调方法来取消订阅。 8758 8759**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 8760 8761**参数:** 8762 8763| 参数名 | 类型 | 必填 | 说明 | 8764| -------- | -------- | ---- | ---------------------------------------------------------- | 8765| type | string | 是 | 状态切换事件回调类型,支持的事件:'error'。 | 8766| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否 | 录屏错误事件回调方法,不填此参数则会取消最后一次订阅事件。 | 8767 8768**示例:** 8769 8770```ts 8771avScreenCaptureRecorder.off('error'); 8772```