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; 240media.createAVTranscoder().then((transcoder: media.AVTranscoder) => { 241 if (transcoder != null) { 242 avTranscoder = transcoder; 243 console.info('Succeeded in creating AVTranscoder'); 244 } else { 245 console.error('Failed to create AVTranscoder'); 246 } 247}).catch((error: BusinessError) => { 248 console.error(`Failed to create AVTranscoder, error message:${error.message}`); 249}); 250``` 251 252## media.createAVMetadataExtractor<sup>11+</sup> 253 254createAVMetadataExtractor(callback: AsyncCallback\<AVMetadataExtractor>): void 255 256异步方式创建AVMetadataExtractor实例,通过注册回调函数获取返回值。 257 258**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 259 260**参数:** 261 262| 参数名 | 类型 | 必填 | 说明 | 263| -------- | ------------------------------------- | ---- | ------------------------------------------------------------ | 264| callback | AsyncCallback\<[AVMetadataExtractor](#avmetadataextractor11)> | 是 | 回调函数。当创建AVMetadataExtractor实例成功,err为undefined,data为获取到的AVMetadataExtractor实例,否则为错误对象。 | 265 266**错误码:** 267 268以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 269 270| 错误码ID | 错误信息 | 271| -------- | ------------------------------ | 272| 5400101 | No memory. Returned by callback. | 273 274**示例:** 275 276```ts 277import { BusinessError } from '@kit.BasicServicesKit'; 278 279let avMetadataExtractor: media.AVMetadataExtractor; 280media.createAVMetadataExtractor((error: BusinessError, extractor: media.AVMetadataExtractor) => { 281 if (extractor != null) { 282 avMetadataExtractor = extractor; 283 console.info('Succeeded in creating AVMetadataExtractor'); 284 } else { 285 console.error(`Failed to create AVMetadataExtractor, error message:${error.message}`); 286 } 287}); 288``` 289 290## media.createAVMetadataExtractor<sup>11+</sup> 291 292createAVMetadataExtractor(): Promise\<AVMetadataExtractor> 293 294异步方式创建AVMetadataExtractor实例,通过Promise获取返回值。 295 296**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 297 298**错误码:** 299 300以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 301 302| 错误码ID | 错误信息 | 303| -------- | ------------------------------ | 304| 5400101 | No memory. Returned by promise. | 305 306**示例:** 307 308```ts 309import { BusinessError } from '@kit.BasicServicesKit'; 310 311let avMetadataExtractor: media.AVMetadataExtractor; 312media.createAVMetadataExtractor().then((extractor: media.AVMetadataExtractor) => { 313 if (extractor != null) { 314 avMetadataExtractor = extractor; 315 console.info('Succeeded in creating AVMetadataExtractor'); 316 } else { 317 console.error(`Failed to create AVMetadataExtractor`); 318 } 319}).catch((error: BusinessError) => { 320 console.error(`Failed to create AVMetadataExtractor, error message:${error.message}`); 321}); 322``` 323 324## media.createSoundPool<sup>10+</sup> 325 326createSoundPool(maxStreams: number, audioRenderInfo: audio.AudioRendererInfo, callback: AsyncCallback\<SoundPool>): void 327 328创建音频池实例,使用callback方式异步获取返回值。 329 330**系统能力:** SystemCapability.Multimedia.Media.SoundPool 331 332**参数:** 333 334| 参数名 | 类型 | 必填 | 说明 | 335| -------- | ----------------------------------------------- | ---- | ------------------------------------------------------------ | 336| maxStreams | number | 是 | soundPool实例的最大播放的流数 | 337| audioRenderInfo | [audio.AudioRendererInfo](../apis-audio-kit/js-apis-audio.md#audiorendererinfo8) | 是 | 音频播放参数信息。其中audioRenderInfo中的参数usage取值为STREAM_USAGE_UNKNOWN,STREAM_USAGE_MUSIC,STREAM_USAGE_MOVIE,STREAM_USAGE_AUDIOBOOK时,SoundPool播放短音时为混音模式,不会打断其他音频播放。 | 338| callback | AsyncCallback<[SoundPool](js-apis-inner-multimedia-soundPool.md)> | 是 | 回调函数。异步返回SoundPool实例,失败时返回null。用于音频池实例的加载播放功能。 | 339 340**错误码:** 341 342以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 343 344| 错误码ID | 错误信息 | 345| -------- | ------------------------------ | 346| 5400101 | No memory. Return by callback. | 347 348**示例:** 349 350```js 351import { audio } from '@kit.AudioKit'; 352 353let soundPool: media.SoundPool; 354let audioRendererInfo: audio.AudioRendererInfo = { 355 usage : audio.StreamUsage.STREAM_USAGE_MUSIC, 356 rendererFlags : 0 357} 358 359media.createSoundPool(5, audioRendererInfo, (error, soundPool_: media.SoundPool) => { 360 if (error) { 361 console.error(`Failed to createSoundPool`) 362 return; 363 } else { 364 soundPool = soundPool_; 365 console.info(`Succeeded in createSoundPool`) 366 } 367}); 368``` 369 370## media.createSoundPool<sup>10+</sup> 371 372createSoundPool(maxStreams: number, audioRenderInfo: audio.AudioRendererInfo): Promise\<SoundPool> 373 374创建音频池实例,通过Promise获取返回值。 375 376**系统能力:** SystemCapability.Multimedia.Media.SoundPool 377 378**参数:** 379 380| 参数名 | 类型 | 必填 | 说明 | 381| -------- | ----------------------------------------------- | ---- | ------------------------------------------------------------ | 382| maxStreams | number | 是 | soundPool实例的最大播放的流数 | 383| audioRenderInfo | [audio.AudioRendererInfo](../apis-audio-kit/js-apis-audio.md#audiorendererinfo8) | 是 | 音频播放参数信息 | 384 385**返回值:** 386 387| 类型 | 说明 | 388| ----------------------------------------- | ------------------------------------------------------------ | 389| Promise<[SoundPool](js-apis-inner-multimedia-soundPool.md)> | Promise对象。异步返回SoundPool实例,失败时返回null。用于音频池实例的加载播放功能。 | 390 391**错误码:** 392 393以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 394 395| 错误码ID | 错误信息 | 396| -------- | ----------------------------- | 397| 5400101 | No memory. Return by promise. | 398 399**示例:** 400 401```js 402import { audio } from '@kit.AudioKit'; 403import { BusinessError } from '@kit.BasicServicesKit'; 404 405let soundPool: media.SoundPool; 406let audioRendererInfo: audio.AudioRendererInfo = { 407 usage : audio.StreamUsage.STREAM_USAGE_MUSIC, 408 rendererFlags : 0 409} 410 411media.createSoundPool(5, audioRendererInfo).then((soundpool_: media.SoundPool) => { 412 if (soundpool_ != null) { 413 soundPool = soundpool_; 414 console.info('Succceeded in creating SoundPool'); 415 } else { 416 console.error('Failed to create SoundPool'); 417 } 418}, (error: BusinessError) => { 419 console.error(`soundpool catchCallback, error message:${error.message}`); 420}); 421``` 422 423## media.createAVScreenCaptureRecorder<sup>12+</sup> 424 425createAVScreenCaptureRecorder(): Promise\<AVScreenCaptureRecorder> 426 427创建屏幕录制实例,通过Promise获取返回值。 428 429**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 430 431**返回值:** 432 433| 类型 | 说明 | 434| ------------------------------------------------------------ | ------------------------------------------------------------ | 435| Promise\<[AVScreenCaptureRecorder](#avscreencapturerecorder12)> | Promise对象。异步返回AVScreenCaptureRecorder实例,失败时返回null。可用于进行屏幕录制。 | 436 437**错误码:** 438 439| 错误码ID | 错误信息 | 440| -------- | ------------------------------ | 441| 5400101 | No memory. Return by promise. | 442 443**示例:** 444 445```ts 446import { BusinessError } from '@kit.BasicServicesKit'; 447 448let avScreenCaptureRecorder: media.AVScreenCaptureRecorder; 449media.createAVScreenCaptureRecorder().then((captureRecorder: media.AVScreenCaptureRecorder) => { 450 if (captureRecorder != null) { 451 avScreenCaptureRecorder = captureRecorder; 452 console.info('Succeeded in createAVScreenCaptureRecorder'); 453 } else { 454 console.error('Failed to createAVScreenCaptureRecorder'); 455 } 456}).catch((error: BusinessError) => { 457 console.error(`createAVScreenCaptureRecorder catchCallback, error message:${error.message}`); 458}); 459``` 460 461## SoundPool<sup>10+</sup> 462 463type SoundPool = _SoundPool 464 465音频池,提供了系统声音的加载、播放、音量设置、循环设置、停止播放、资源卸载等功能。 466 467**系统能力:** SystemCapability.Multimedia.Media.SoundPool 468 469| 类型 | 说明 | 470| -------- | ------------------------------ | 471| [_SoundPool](js-apis-inner-multimedia-soundPool.md#soundpool) | 音频池,提供了系统声音的加载、播放、音量设置、循环设置、停止播放、资源卸载等功能。 | 472 473## PlayParameters<sup>10+</sup> 474 475type PlayParameters = _PlayParameters 476 477表示音频池播放参数设置。 478 479**系统能力:** SystemCapability.Multimedia.Media.SoundPool 480 481| 类型 | 说明 | 482| -------- | ------------------------------ | 483| [_PlayParameters](js-apis-inner-multimedia-soundPool.md#playparameters) | 表示音频池播放参数设置。 | 484 485## AVErrorCode<sup>9+</sup> 486 487[媒体错误码](errorcode-media.md)类型枚举 488 489**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 490 491**系统能力:** SystemCapability.Multimedia.Media.Core 492 493| 名称 | 值 | 说明 | 494| :------------------------------------ | ------- | ------------------------------------ | 495| AVERR_OK | 0 | 表示操作成功。 | 496| AVERR_NO_PERMISSION | 201 | 表示无权限执行此操作。 | 497| AVERR_INVALID_PARAMETER | 401 | 表示传入入参无效。 | 498| AVERR_UNSUPPORT_CAPABILITY | 801 | 表示当前版本不支持该API能力。 | 499| AVERR_NO_MEMORY | 5400101 | 表示系统内存不足或服务数量达到上限。 | 500| AVERR_OPERATE_NOT_PERMIT | 5400102 | 表示当前状态不允许或无权执行此操作。 | 501| AVERR_IO | 5400103 | 表示数据流异常信息。 | 502| AVERR_TIMEOUT | 5400104 | 表示系统或网络响应超时。 | 503| AVERR_SERVICE_DIED | 5400105 | 表示服务进程死亡。 | 504| AVERR_UNSUPPORT_FORMAT | 5400106 | 表示不支持当前媒体资源的格式。 | 505| AVERR_AUDIO_INTERRUPTED<sup>11+</sup> | 5400107 | 表示音频焦点被抢占 | 506| AVERR_IO_HOST_NOT_FOUND<sup>14+</sup> | 5411001 | 表示解析或链接服务端地址错误。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 507| AVERR_IO_CONNECTION_TIMEOUT<sup>14+</sup> | 5411002 | 表示网络连接超时。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 508| AVERR_IO_NETWORK_ABNORMAL<sup>14+</sup> | 5411003 | 表示网络异常导致的数据或链路异常。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 509| AVERR_IO_NETWORK_UNAVAILABLE<sup>14+</sup> | 5411004 | 表示网络被禁用。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 510| AVERR_IO_NO_PERMISSION<sup>14+</sup> | 5411005 | 表示无访问权限。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 511| AVERR_IO_REQUEST_DENIED<sup>14+</sup> | 5411006 | 表示客户端请求参数错误或超出处理能力。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 512| AVERR_IO_RESOURCE_NOT_FOUND<sup>14+</sup> | 5411007 | 表示无可用网络资源。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 513| AVERR_IO_SSL_CLIENT_CERT_NEEDED<sup>14+</sup> | 5411008 | 表示服务端校验客户端证书失败。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 514| AVERR_IO_SSL_CONNECTION_FAILED<sup>14+</sup> | 5411009 | 表示SSL连接失败。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 515| AVERR_IO_SSL_SERVER_CERT_UNTRUSTED<sup>14+</sup> | 5411010 | 表示客户端校验服务端证书失败。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 516| AVERR_IO_UNSUPPORTED_REQUEST<sup>14+</sup> | 5411011 | 表示网络协议的原因导致请求不受支持。 <br> **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 517 518## MediaType<sup>8+</sup> 519 520媒体类型枚举。 521 522**系统能力:** SystemCapability.Multimedia.Media.Core 523 524| 名称 | 值 | 说明 | 525| -------------- | --------------------- | ------------------- | 526| MEDIA_TYPE_AUD | 0 | 表示音频。 <br> **原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。 | 527| MEDIA_TYPE_VID | 1 | 表示视频。 <br> **原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。 | 528| MEDIA_TYPE_SUBTITLE<sup>12+</sup> | 2 | 表示字幕。 <br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 | 529 530## CodecMimeType<sup>8+</sup> 531 532Codec MIME类型枚举。 533 534**系统能力:** SystemCapability.Multimedia.Media.Core 535 536| 名称 | 值 | 说明 | 537| ------------ | --------------------- | ------------------------ | 538| VIDEO_H263 | 'video/h263' | 表示视频/h263类型。 | 539| VIDEO_AVC | 'video/avc' | 表示视频/avc类型。 | 540| VIDEO_MPEG2 | 'video/mpeg2' | 表示视频/mpeg2类型。 | 541| VIDEO_MPEG4 | 'video/mp4v-es' | 表示视频/mpeg4类型。 | 542| VIDEO_VP8 | 'video/x-vnd.on2.vp8' | 表示视频/vp8类型。 | 543| VIDEO_HEVC<sup>11+</sup> | 'video/hevc' | 表示视频/H265类型。| 544| AUDIO_AAC | 'audio/mp4a-latm' | 表示音频/mp4a-latm类型。 <br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 | 545| AUDIO_VORBIS | 'audio/vorbis' | 表示音频/vorbis类型。 | 546| AUDIO_FLAC | 'audio/flac' | 表示音频/flac类型。 | 547| AUDIO_MP3<sup>12+</sup> | 'audio/mpeg' | 表示音频/mpeg类型。 | 548| AUDIO_G711MU<sup>12+</sup> | 'audio/g711mu' | 表示音频/G711-mulaw类型。 | 549 550## MediaDescriptionKey<sup>8+</sup> 551 552媒体信息描述枚举。 553 554**系统能力:** SystemCapability.Multimedia.Media.Core 555 556| 名称 | 值 | 说明 | 557| ------------------------ | --------------- | ------------------------------------------------------------ | 558| MD_KEY_TRACK_INDEX | 'track_index' | 表示轨道序号,其对应键值类型为number。 <br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | 559| MD_KEY_TRACK_TYPE | 'track_type' | 表示轨道类型,其对应键值类型为number,参考[MediaType](#mediatype8)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | 560| MD_KEY_CODEC_MIME | 'codec_mime' | 表示codec_mime类型,其对应键值类型为string。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。| 561| MD_KEY_DURATION | 'duration' | 表示媒体时长,其对应键值类型为number,单位为毫秒(ms)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。| 562| MD_KEY_BITRATE | 'bitrate' | 表示比特率,其对应键值类型为number,单位为比特率(bps)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。| 563| MD_KEY_WIDTH | 'width' | 表示视频宽度,其对应键值类型为number,单位为像素(px)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。| 564| MD_KEY_HEIGHT | 'height' | 表示视频高度,其对应键值类型为number,单位为像素(px)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。| 565| MD_KEY_FRAME_RATE | 'frame_rate' | 表示视频帧率,其对应键值类型为number,单位为每100秒的帧数。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | 566| MD_KEY_AUD_CHANNEL_COUNT | 'channel_count' | 表示声道数,其对应键值类型为number。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。| 567| MD_KEY_AUD_SAMPLE_RATE | 'sample_rate' | 表示采样率,其对应键值类型为number,单位为赫兹(Hz)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。| 568| MD_KEY_AUD_SAMPLE_DEPTH<sup>12+</sup> | 'sample_depth' | 表示位深,其对应键值类型为number,单位为位(bit)。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 569| MD_KEY_LANGUAGE<sup>12+</sup> | 'language' | 表示字幕语言,其对应键值类型为string。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 570| MD_KEY_TRACK_NAME<sup>12+</sup> | 'track_name' | 表示track名称,其对应键值类型为string。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 571| MD_KEY_HDR_TYPE<sup>12+</sup> | 'hdr_type' | 表示视频轨类型,其对应键值类型为string。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 572 573## PlaybackInfoKey<sup>12+</sup> 574 575播放信息描述枚举。 576 577**系统能力:** SystemCapability.Multimedia.Media.Core 578 579| 名称 | 值 | 说明 | 580| ------------------------ | --------------- | ------------------------------------------------------------ | 581| SERVER_IP_ADDRESS | 'server_ip_address' | 表示服务器IP地址,其对应键值类型为string。 | 582| AVG_DOWNLOAD_RATE | 'average_download_rate'| 表示平均下载速率,其对应键值类型为number,单位为比特率(bps)。 | 583| DOWNLOAD_RATE | 'download_rate' | 表示1s的下载速率,其对应键值类型为number,单位为比特率(bps)。| 584| IS_DOWNLOADING | 'is_downloading' | 表示下载状态,1表示在下载状态,0表示非下载状态(下载完成),其对应键值类型为number。| 585| BUFFER_DURATION | 'buffer_duration' | 表示缓存数据的可播放时长,其对应键值类型为number,单位为秒(s)。| 586 587## BufferingInfoType<sup>8+</sup> 588 589缓存事件类型枚举。 590 591**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 592 593**系统能力:** SystemCapability.Multimedia.Media.Core 594 595| 名称 | 值 | 说明 | 596| ----------------- | ---- | -------------------------------- | 597| BUFFERING_START | 1 | 表示开始缓冲。当上报BUFFERING_START时,播放器会暂停播放。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 598| BUFFERING_END | 2 | 表示结束缓冲。当上报BUFFERING_END时,播放器会恢复播放。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 599| BUFFERING_PERCENT | 3 | 表示缓冲百分比。可参考该事件感知缓冲进度。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 600| CACHED_DURATION | 4 | 表示已缓冲数据预估可播放时长,单位为毫秒(ms)。缓冲区中的数据变化量大于500ms,上报一次。可参考该事件做进度条。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 601 602## StateChangeReason<sup>9+</sup> 603 604表示播放或录制实例状态机切换原因的枚举,伴随state一起上报。 605 606**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 607 608**系统能力:** SystemCapability.Multimedia.Media.Core 609 610| 名称 | 值 | 说明 | 611| ---------- | ---- | ------------------------------------------------------------ | 612| USER | 1 | 表示用户行为造成的状态切换,由用户或客户端主动调用接口产生。 | 613| BACKGROUND | 2 | 表示后台系统行为造成的状态切换,比如应用未注册播控中心权限,退到后台时被系统强制暂停或停止。 | 614 615## AVPlayer<sup>9+</sup> 616 617播放管理类,用于管理和播放媒体资源。在调用AVPlayer的方法前,需要先通过[createAVPlayer()](#mediacreateavplayer9)构建一个AVPlayer实例。 618 619Audio/Video播放demo可参考:[音频播放开发指导](../../media/media/using-avplayer-for-playback.md)、[视频播放开发指导](../../media/media/video-playback.md)。 620 621> **说明:** 622> 623> 在使用AVPlayer实例的方法时,建议开发者注册相关回调,主动获取当前状态变化。 624> - [on('stateChange')](#onstatechange9):监听播放状态机AVPlayerState切换。 625> - [on('error')](#onerror9):监听错误事件。 626 627### 属性 628 629**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 630 631| 名称 | 类型 | 只读 | 可选 | 说明 | 632| --------------------------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ | 633| 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开始,该接口支持在原子化服务中使用。 | 634| 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开始,该接口支持在原子化服务中使用。 | 635| 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开始,该接口支持在原子化服务中使用。 | 636| 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开始,该接口支持在原子化服务中使用。 | 637| loop<sup>9+</sup> | boolean | 否 | 否 | 视频循环播放属性,默认'false',设置为'true'表示循环播放,动态属性。<br/>只允许在**prepared**/**playing**/**paused**/**completed**状态下设置。<br/>直播场景不支持loop设置。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 638| videoScaleType<sup>9+</sup> | [VideoScaleType](#videoscaletype9) | 否 | 是 | 视频缩放模式,默认VIDEO_SCALE_TYPE_FIT,动态属性。<br/>只允许在**prepared**/**playing**/**paused**/**completed**状态下设置。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 639| 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开始,该接口支持在原子化服务中使用。| 640| 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开始,该接口支持在原子化服务中使用。| 641| 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开始,该接口支持在原子化服务中使用。| 642| state<sup>9+</sup> | [AVPlayerState](#avplayerstate9) | 是 | 否 | 音视频播放的状态,全状态有效,可查询参数。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 643| currentTime<sup>9+</sup> | number | 是 | 否 | 视频的当前播放位置,单位为毫秒(ms),可查询参数。<br/>返回为(-1)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。<br/>直播场景默认返回(-1)。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 644| duration<sup>9+</sup> | number | 是 | 否 | 视频时长,单位为毫秒(ms),可查询参数。<br/>返回为(-1)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。<br/>直播场景默认返回(-1)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | 645| width<sup>9+</sup> | number | 是 | 否 | 视频宽,单位为像素(px),可查询参数。<br/>返回为(0)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 646| height<sup>9+</sup> | number | 是 | 否 | 视频高,单位为像素(px),可查询参数。<br/>返回为(0)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 647 648### on('stateChange')<sup>9+</sup> 649 650on(type: 'stateChange', callback: OnAVPlayerStateChangeHandle): void 651 652监听播放状态机AVPlayerState切换的事件。 653 654**原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。 655 656**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 657 658**参数:** 659 660| 参数名 | 类型 | 必填 | 说明 | 661| -------- | -------- | ---- | ------------------------------------------------------------ | 662| type | string | 是 | 状态机切换事件回调类型,支持的事件:'stateChange',用户操作和系统都会触发此事件。 | 663| callback | [OnAVPlayerStateChangeHandle](#onavplayerstatechangehandle12) | 是 | 状态机切换事件回调方法。 | 664 665**示例:** 666 667```ts 668avPlayer.on('stateChange', async (state: string, reason: media.StateChangeReason) => { 669 switch (state) { 670 case 'idle': 671 console.info('state idle called'); 672 break; 673 case 'initialized': 674 console.info('initialized prepared called'); 675 break; 676 case 'prepared': 677 console.info('state prepared called'); 678 break; 679 case 'playing': 680 console.info('state playing called'); 681 break; 682 case 'paused': 683 console.info('state paused called'); 684 break; 685 case 'completed': 686 console.info('state completed called'); 687 break; 688 case 'stopped': 689 console.info('state stopped called'); 690 break; 691 case 'released': 692 console.info('state released called'); 693 break; 694 case 'error': 695 console.info('state error called'); 696 break; 697 default: 698 console.info('unknown state :' + state); 699 break; 700 } 701}) 702``` 703 704### off('stateChange')<sup>9+</sup> 705 706off(type: 'stateChange', callback?: OnAVPlayerStateChangeHandle): void 707 708取消监听播放状态机[AVPlayerState](#avplayerstate9)切换的事件。 709 710**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 711 712**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 713 714**参数:** 715 716| 参数名 | 类型 | 必填 | 说明 | 717| ------ | ------ | ---- | ----------------------------------------------------- | 718| type | string | 是 | 状态机切换事件回调类型,取消注册的事件:'stateChange' | 719| callback | [OnAVPlayerStateChangeHandle](#onavplayerstatechangehandle12) | 否 | 状态机切换事件回调方法。<br/>从API version 12开始支持此参数。 | 720 721**示例:** 722 723```ts 724avPlayer.off('stateChange') 725``` 726 727### on('error')<sup>9+</sup> 728 729on(type: 'error', callback: ErrorCallback): void 730 731监听[AVPlayer](#avplayer9)的错误事件,该事件仅用于错误提示,不需要用户停止播控动作。如果此时[AVPlayerState](#avplayerstate9)也切至error状态,用户需要通过[reset()](#reset9)或者[release()](#release9)退出播放操作。 732 733**原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。 734 735**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 736 737**参数:** 738 739| 参数名 | 类型 | 必填 | 说明 | 740| -------- | -------- | ---- | ------------------------------------------------------------ | 741| type | string | 是 | 错误事件回调类型,支持的事件:'error',用户操作和系统都会触发此事件。 | 742| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是 | 错误事件回调方法,使用播放器的过程中发生错误,会提供错误码ID和错误信息。 | 743 744**错误码:** 745 746以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 747 748在API version 9-13,针对网络、服务器等数据流异常,接口上报5400103;从API version 14开始,对应错误细化为错误码5411001-5411011。 749 750| 错误码ID | 错误信息 | 751| -------- | --------------------- | 752| 201 | Permission denied. | 753| 401 | The parameter check failed. | 754| 801 | Capability not supported. | 755| 5400101 | No memory. | 756| 5400102 | Operation not allowed.| 757| 5400103 | I/O error. | 758| 5400104 | Time out. | 759| 5400105 | Service died. | 760| 5400106 | Unsupported format. | 761| 5411001 | IO can not find host. | 762| 5411002 | IO connection timeout. | 763| 5411003 | IO network abnormal. | 764| 5411004 | IO network unavailable. | 765| 5411005 | IO no permission. | 766| 5411006 | IO request denied. | 767| 5411007 | IO resource not found. | 768| 5411008 | IO SSL client cert needed. | 769| 5411009 | IO SSL connect fail. | 770| 5411010 | IO SSL server cert untrusted. | 771| 5411011 | IO unsupported request. | 772 773**示例:** 774 775```ts 776import { BusinessError } from '@kit.BasicServicesKit'; 777 778avPlayer.on('error', (error: BusinessError) => { 779 console.info('error happened,and error message is :' + error.message) 780 console.info('error happened,and error code is :' + error.code) 781}) 782``` 783 784### off('error')<sup>9+</sup> 785 786off(type: 'error', callback?: ErrorCallback): void 787 788取消监听播放的错误事件。 789 790**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 791 792**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 793 794**参数:** 795 796| 参数名 | 类型 | 必填 | 说明 | 797| ------ | ------ | ---- | ----------------------------------------- | 798| type | string | 是 | 错误事件回调类型,取消注册的事件:'error' | 799| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否 | 错误事件回调方法,使用播放器的过程中发生错误,会提供错误码ID和错误信息。<br/>从API version 12开始支持此参数。 | 800 801**示例:** 802 803```ts 804avPlayer.off('error') 805``` 806 807### setMediaSource<sup>12+</sup> 808 809setMediaSource(src:MediaSource, strategy?: PlaybackStrategy): Promise\<void> 810 811流媒体预下载资源设置,下载url对应的流媒体数据,并暂存在内存中。[视频播放开发指导](../../media/media/video-playback.md)。通过Promise获取返回值。 812 813**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 814 815**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 816 817**参数:** 818 819| 参数名 | 类型 | 必填 | 说明 | 820| -------- | -------- | ---- | -------------------- | 821| src | [MediaSource](#mediasource12) | 是 | 流媒体预下载媒体来源。 | 822| strategy | [PlaybackStrategy](#playbackstrategy12) | 否 | 流媒体预下载播放策略。 | 823 824**返回值:** 825 826| 类型 | 说明 | 827| -------------- | ------------------------------------------ | 828| Promise\<void> | Promise对象。无返回结果的Promise对象。 | 829 830**错误码:** 831 832以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 833 834| 错误码ID | 错误信息 | 835| -------- | ----------------------------------------- | 836| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 837| 5400102 | Operation not allowed. Return by promise. | 838 839**示例:** 840 841<!--code_no_check--> 842```ts 843let player = await media.createAVPlayer(); 844let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"}; 845let mediaSource : media.MediaSource = media.createMediaSourceWithUrl("http://xxx", headers); 846let playStrategy : media.PlaybackStrategy = {preferredWidth: 1, preferredHeight: 2, preferredBufferDuration: 3, preferredHdr: false}; 847player.setMediaSource(mediaSource, playStrategy); 848``` 849 850### setPlaybackStrategy<sup>12+</sup> 851 852setPlaybackStrategy(strategy: PlaybackStrategy): Promise\<void> 853 854设置播放策略,只能在initialized状态下调用。 855 856**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 857 858**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 859 860**参数:** 861 862| 参数名 | 类型 | 必填 | 说明 | 863| -------- | -------- | ---- | -------------------- | 864| strategy | [PlaybackStrategy](#playbackstrategy12) | 是 | 播放策略。 | 865 866**返回值:** 867 868| 类型 | 说明 | 869| -------------- | ------------------------------------ | 870| Promise\<void> | Promise对象。无返回结果的Promise对象。 | 871 872**错误码:** 873 874以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 875 876| 错误码ID | 错误信息 | 877| -------- | ----------------------------------------- | 878| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. 2. Parameter verification failed. | 879| 5400102 | Operation not allowed. Return by promise. | 880 881**示例:** 882 883<!--code_no_check--> 884```ts 885import { common } from '@kit.AbilityKit'; 886 887let player = await media.createAVPlayer(); 888let context = getContext(this) as common.UIAbilityContext 889let fileDescriptor = await context.resourceManager.getRawFd('xxx.mp4') 890player.fdSrc = fileDescriptor 891let playStrategy : media.PlaybackStrategy = {preferredWidth: 1, preferredHeight: 2, preferredBufferDuration: 3, 892 preferredHdr: false, mutedMediaType: media.MediaType.MEDIA_TYPE_AUD}; 893player.setPlaybackStrategy(playStrategy); 894``` 895 896### prepare<sup>9+</sup> 897 898prepare(callback: AsyncCallback\<void>): void 899 900准备播放音频/视频,需在[stateChange](#onstatechange9)事件成功触发至initialized状态后,才能调用。使用callback方式异步获取返回值。 901 902**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 903 904**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 905 906**参数:** 907 908| 参数名 | 类型 | 必填 | 说明 | 909| -------- | -------- | ---- | -------------------- | 910| callback | AsyncCallback\<void> | 是 | 准备播放的回调方法。 | 911 912**错误码:** 913 914以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 915 916| 错误码ID | 错误信息 | 917| -------- | ------------------------------------------ | 918| 5400102 | Operation not allowed. Return by callback. | 919| 5400106 | Unsupported format. Return by callback. | 920 921**示例:** 922 923```ts 924import { BusinessError } from '@kit.BasicServicesKit'; 925 926avPlayer.prepare((err: BusinessError) => { 927 if (err) { 928 console.error('Failed to prepare,error message is :' + err.message) 929 } else { 930 console.info('Succeeded in preparing'); 931 } 932}) 933``` 934 935### prepare<sup>9+</sup> 936 937prepare(): Promise\<void> 938 939准备播放音频/视频,需在[stateChange](#onstatechange9)事件成功触发至initialized状态后,才能调用。通过Promise获取返回值。 940 941**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 942 943**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 944 945**返回值:** 946 947| 类型 | 说明 | 948| -------------- | ------------------------- | 949| Promise\<void> | 准备播放的Promise返回值。 | 950 951**错误码:** 952 953以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 954 955| 错误码ID | 错误信息 | 956| -------- | ----------------------------------------- | 957| 5400102 | Operation not allowed. Return by promise. | 958| 5400106 | Unsupported format. Return by promise. | 959 960**示例:** 961 962```ts 963import { BusinessError } from '@kit.BasicServicesKit'; 964 965avPlayer.prepare().then(() => { 966 console.info('Succeeded in preparing'); 967}, (err: BusinessError) => { 968 console.error('Failed to prepare,error message is :' + err.message) 969}) 970``` 971 972### setMediaMuted<sup>12+</sup> 973 974setMediaMuted(mediaType: MediaType, muted: boolean ): Promise\<void> 975 976设置音频静音/取消音频静音。只能在prepared/playing/paused/completed状态下调用。仅支持设置mediaType为音频格式。 977 978**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 979 980**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 981 982**参数:** 983 984| 参数名 | 类型 | 必填 | 说明 | 985| -------- | -------- | ---- | -------------------- | 986| mediaType | [MediaType](#mediatype8) | 是 | 播放策略。 | 987| muted | boolean | 是 | 是否静音播放。 | 988 989**返回值:** 990 991| 类型 | 说明 | 992| -------------- | ------------------------- | 993| Promise\<void> | 准备播放的Promise返回值。 | 994 995**错误码:** 996 997以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 998 999| 错误码ID | 错误信息 | 1000| -------- | ----------------------------------------- | 1001| 401 | The parameter check failed. Return by promise. | 1002| 5400102 | Operation not allowed. Return by promise. | 1003 1004**示例:** 1005 1006```ts 1007import { BusinessError } from '@kit.BasicServicesKit'; 1008 1009avPlayer.prepare().then(() => { 1010 console.info('Succeeded in preparing'); 1011 avPlayer.setMediaMuted(media.MediaType.MEDIA_TYPE_AUD, true) 1012}, (err: BusinessError) => { 1013 console.error('Failed to prepare,error message is :' + err.message) 1014}) 1015``` 1016 1017### play<sup>9+</sup> 1018 1019play(callback: AsyncCallback\<void>): void 1020 1021开始播放音视频资源,只能在prepared/paused/completed状态调用。使用callback方式异步获取返回值。 1022 1023**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1024 1025**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1026 1027**参数:** 1028 1029| 参数名 | 类型 | 必填 | 说明 | 1030| -------- | -------- | ---- | -------------------- | 1031| callback | AsyncCallback\<void> | 是 | 开始播放的回调方法。 | 1032 1033**错误码:** 1034 1035以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 1036 1037| 错误码ID | 错误信息 | 1038| -------- | ------------------------------------------ | 1039| 5400102 | Operation not allowed. Return by callback. | 1040 1041**示例:** 1042 1043```ts 1044import { BusinessError } from '@kit.BasicServicesKit'; 1045 1046avPlayer.play((err: BusinessError) => { 1047 if (err) { 1048 console.error('Failed to play,error message is :' + err.message) 1049 } else { 1050 console.info('Succeeded in playing'); 1051 } 1052}) 1053``` 1054 1055### play<sup>9+</sup> 1056 1057play(): Promise\<void> 1058 1059开始播放音视频资源,只能在prepared/paused/completed状态调用。通过Promise获取返回值。 1060 1061**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1062 1063**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1064 1065**返回值:** 1066 1067| 类型 | 说明 | 1068| -------------- | ------------------------- | 1069| Promise\<void> | 开始播放的Promise返回值。 | 1070 1071**错误码:** 1072 1073以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1074 1075| 错误码ID | 错误信息 | 1076| -------- | ----------------------------------------- | 1077| 5400102 | Operation not allowed. Return by promise. | 1078 1079**示例:** 1080 1081```ts 1082import { BusinessError } from '@kit.BasicServicesKit'; 1083 1084avPlayer.play().then(() => { 1085 console.info('Succeeded in playing'); 1086}, (err: BusinessError) => { 1087 console.error('Failed to play,error message is :' + err.message) 1088}) 1089``` 1090 1091### pause<sup>9+</sup> 1092 1093pause(callback: AsyncCallback\<void>): void 1094 1095暂停播放音视频资源,只能在playing状态调用。使用callback方式异步获取返回值。 1096 1097**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1098 1099**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1100 1101**参数:** 1102 1103| 参数名 | 类型 | 必填 | 说明 | 1104| -------- | -------- | ---- | -------------------- | 1105| callback | AsyncCallback\<void> | 是 | 暂停播放的回调方法。 | 1106 1107**错误码:** 1108 1109以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1110 1111| 错误码ID | 错误信息 | 1112| -------- | ------------------------------------------ | 1113| 5400102 | Operation not allowed. Return by callback. | 1114 1115**示例:** 1116 1117```ts 1118import { BusinessError } from '@kit.BasicServicesKit'; 1119 1120avPlayer.pause((err: BusinessError) => { 1121 if (err) { 1122 console.error('Failed to pause,error message is :' + err.message) 1123 } else { 1124 console.info('Succeeded in pausing'); 1125 } 1126}) 1127``` 1128 1129### pause<sup>9+</sup> 1130 1131pause(): Promise\<void> 1132 1133暂停播放音视频资源,只能在playing状态调用。通过Promise获取返回值。 1134 1135**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1136 1137**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1138 1139**返回值:** 1140 1141| 类型 | 说明 | 1142| -------------- | ------------------------- | 1143| Promise\<void> | 暂停播放的Promise返回值。 | 1144 1145**错误码:** 1146 1147以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1148 1149| 错误码ID | 错误信息 | 1150| -------- | ----------------------------------------- | 1151| 5400102 | Operation not allowed. Return by promise. | 1152 1153**示例:** 1154 1155```ts 1156import { BusinessError } from '@kit.BasicServicesKit'; 1157 1158avPlayer.pause().then(() => { 1159 console.info('Succeeded in pausing'); 1160}, (err: BusinessError) => { 1161 console.error('Failed to pause,error message is :' + err.message) 1162}) 1163``` 1164 1165### stop<sup>9+</sup> 1166 1167stop(callback: AsyncCallback\<void>): void 1168 1169停止播放音视频资源,只能在prepared/playing/paused/completed状态调用。使用callback方式异步获取返回值。 1170 1171**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1172 1173**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1174 1175**参数:** 1176 1177| 参数名 | 类型 | 必填 | 说明 | 1178| -------- | -------- | ---- | -------------------- | 1179| callback | AsyncCallback\<void> | 是 | 停止播放的回调方法。 | 1180 1181**错误码:** 1182 1183以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1184 1185| 错误码ID | 错误信息 | 1186| -------- | ------------------------------------------ | 1187| 5400102 | Operation not allowed. Return by callback. | 1188 1189**示例:** 1190 1191```ts 1192import { BusinessError } from '@kit.BasicServicesKit'; 1193 1194avPlayer.stop((err: BusinessError) => { 1195 if (err) { 1196 console.error('Failed to stop,error message is :' + err.message) 1197 } else { 1198 console.info('Succeeded in stopping'); 1199 } 1200}) 1201``` 1202 1203### stop<sup>9+</sup> 1204 1205stop(): Promise\<void> 1206 1207停止播放音视频资源,只能在prepared/playing/paused/completed状态调用。通过Promise获取返回值。 1208 1209**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1210 1211**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1212 1213**返回值:** 1214 1215| 类型 | 说明 | 1216| -------------- | ------------------------- | 1217| Promise\<void> | 停止播放的Promise返回值。 | 1218 1219**错误码:** 1220 1221以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1222 1223| 错误码ID | 错误信息 | 1224| -------- | ----------------------------------------- | 1225| 5400102 | Operation not allowed. Return by promise. | 1226 1227**示例:** 1228 1229```ts 1230import { BusinessError } from '@kit.BasicServicesKit'; 1231 1232avPlayer.stop().then(() => { 1233 console.info('Succeeded in stopping'); 1234}, (err: BusinessError) => { 1235 console.error('Failed to stop,error message is :' + err.message) 1236}) 1237``` 1238 1239### reset<sup>9+</sup> 1240 1241reset(callback: AsyncCallback\<void>): void 1242 1243重置播放,只能在initialized/prepared/playing/paused/completed/stopped/error状态调用。使用callback方式异步获取返回值。 1244 1245**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1246 1247**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1248 1249**参数:** 1250 1251| 参数名 | 类型 | 必填 | 说明 | 1252| -------- | -------- | ---- | -------------------- | 1253| callback | AsyncCallback\<void> | 是 | 重置播放的回调方法。 | 1254 1255**错误码:** 1256 1257以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1258 1259| 错误码ID | 错误信息 | 1260| -------- | ------------------------------------------ | 1261| 5400102 | Operation not allowed. Return by callback. | 1262 1263**示例:** 1264 1265```ts 1266import { BusinessError } from '@kit.BasicServicesKit'; 1267 1268avPlayer.reset((err: BusinessError) => { 1269 if (err) { 1270 console.error('Failed to reset,error message is :' + err.message) 1271 } else { 1272 console.info('Succeeded in resetting'); 1273 } 1274}) 1275``` 1276 1277### reset<sup>9+</sup> 1278 1279reset(): Promise\<void> 1280 1281重置播放,只能在initialized/prepared/playing/paused/completed/stopped/error状态调用。通过Promise获取返回值。 1282 1283**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1284 1285**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1286 1287**返回值:** 1288 1289| 类型 | 说明 | 1290| -------------- | ------------------------- | 1291| Promise\<void> | 重置播放的Promise返回值。 | 1292 1293**错误码:** 1294 1295以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1296 1297| 错误码ID | 错误信息 | 1298| -------- | ----------------------------------------- | 1299| 5400102 | Operation not allowed. Return by promise. | 1300 1301**示例:** 1302 1303```ts 1304import { BusinessError } from '@kit.BasicServicesKit'; 1305 1306avPlayer.reset().then(() => { 1307 console.info('Succeeded in resetting'); 1308}, (err: BusinessError) => { 1309 console.error('Failed to reset,error message is :' + err.message) 1310}) 1311``` 1312 1313### release<sup>9+</sup> 1314 1315release(callback: AsyncCallback\<void>): void 1316 1317销毁播放资源,除released状态外,均可以调用。使用callback方式异步获取返回值。 1318 1319**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1320 1321**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1322 1323**参数:** 1324 1325| 参数名 | 类型 | 必填 | 说明 | 1326| -------- | -------- | ---- | -------------------- | 1327| callback | AsyncCallback\<void> | 是 | 销毁播放的回调方法。 | 1328 1329**错误码:** 1330 1331以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1332 1333| 错误码ID | 错误信息 | 1334| -------- | ------------------------------------------ | 1335| 5400102 | Operation not allowed. Return by callback. | 1336 1337**示例:** 1338 1339```ts 1340import { BusinessError } from '@kit.BasicServicesKit'; 1341 1342avPlayer.release((err: BusinessError) => { 1343 if (err) { 1344 console.error('Failed to release,error message is :' + err.message) 1345 } else { 1346 console.info('Succeeded in releasing'); 1347 } 1348}) 1349``` 1350 1351### release<sup>9+</sup> 1352 1353release(): Promise\<void> 1354 1355销毁播放资源,除released状态,都可以调用。通过Promise获取返回值。 1356 1357**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1358 1359**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1360 1361**返回值:** 1362 1363| 类型 | 说明 | 1364| -------------- | ------------------------- | 1365| Promise\<void> | 销毁播放的Promise返回值。 | 1366 1367**错误码:** 1368 1369以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1370 1371| 错误码ID | 错误信息 | 1372| -------- | ----------------------------------------- | 1373| 5400102 | Operation not allowed. Return by promise. | 1374 1375**示例:** 1376 1377```ts 1378import { BusinessError } from '@kit.BasicServicesKit'; 1379 1380avPlayer.release().then(() => { 1381 console.info('Succeeded in releasing'); 1382}, (err: BusinessError) => { 1383 console.error('Failed to release,error message is :' + err.message) 1384}) 1385``` 1386 1387### getTrackDescription<sup>9+</sup> 1388 1389getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void 1390 1391获取音视频轨道信息,可以在prepared/playing/paused状态调用。获取所有音视轨道信息,应在数据加载回调后调用。使用callback方式异步获取返回值。 1392 1393**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1394 1395**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1396 1397**参数:** 1398 1399| 参数名 | 类型 | 必填 | 说明 | 1400| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------- | 1401| callback | AsyncCallback<Array<[MediaDescription](#mediadescription8)>> | 是 | 回调函数,当获取音频轨道信息成功,err为undefined,data为获取到的MediaDescription数组;否则为错误对象。| 1402 1403**错误码:** 1404 1405以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1406 1407| 错误码ID | 错误信息 | 1408| -------- | ------------------------------------------ | 1409| 5400102 | Operation not allowed. Return by callback. | 1410 1411**示例:** 1412 1413```ts 1414import { BusinessError } from '@kit.BasicServicesKit'; 1415 1416avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => { 1417 if ((arrList) != null) { 1418 console.info('Succeeded in doing getTrackDescription'); 1419 } else { 1420 console.error(`Failed to do getTrackDescription, error:${error}`); 1421 } 1422}); 1423``` 1424 1425### getTrackDescription<sup>9+</sup> 1426 1427getTrackDescription(): Promise\<Array\<MediaDescription>> 1428 1429获取音视频轨道信息,可以在prepared/playing/paused状态调用。通过Promise获取返回值。 1430 1431**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1432 1433**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1434 1435**返回值:** 1436 1437| 类型 | 说明 | 1438| ------------------------------------------------------ | ------------------------------------------------- | 1439| Promise<Array<[MediaDescription](#mediadescription8)>> | Promise对象,返回音视频轨道信息MediaDescription数组。 | 1440 1441**错误码:** 1442 1443以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1444 1445| 错误码ID | 错误信息 | 1446| -------- | ----------------------------------------- | 1447| 5400102 | Operation not allowed. Return by promise. | 1448 1449**示例:** 1450 1451```ts 1452import { BusinessError } from '@kit.BasicServicesKit'; 1453 1454avPlayer.getTrackDescription().then((arrList: Array<media.MediaDescription>) => { 1455 console.info('Succeeded in getting TrackDescription'); 1456}).catch((error: BusinessError) => { 1457 console.error(`Failed to get TrackDescription, error:${error}`); 1458}); 1459``` 1460 1461### getSelectedTracks<sup>12+</sup> 1462 1463getSelectedTracks(): Promise\<Array\<number>> 1464 1465获取已选择的音视频轨道索引,可以在prepared/playing/paused状态调用。通过Promise获取返回值。 1466 1467**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1468 1469**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1470 1471**返回值:** 1472 1473| 类型 | 说明 | 1474| ------------------------------------------------------ | ------------------------------------------------- | 1475| Promise<Array<[number]>> | Promise对象,返回已选择音视频轨道索引数组。 | 1476 1477**错误码:** 1478 1479以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1480 1481| 错误码ID | 错误信息 | 1482| -------- | ----------------------------------------- | 1483| 5400102 | Operation not allowed. | 1484 1485**示例:** 1486 1487```ts 1488import { BusinessError } from '@kit.BasicServicesKit'; 1489 1490avPlayer.getSelectedTracks().then((arrList: Array<number>) => { 1491 console.info('Succeeded in getting SelectedTracks'); 1492}).catch((error: BusinessError) => { 1493 console.error(`Failed to get SelectedTracks, error:${error}`); 1494}); 1495``` 1496 1497### getPlaybackInfo<sup>12+</sup> 1498 1499getPlaybackInfo(): Promise\<PlaybackInfo> 1500 1501获取播放过程信息,可以在prepared/playing/paused状态调用。通过Promise获取返回值。 1502 1503**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1504 1505**返回值:** 1506 1507| 类型 | 说明 | 1508| ------------------------------------------------------ | ------------------------------------------------- | 1509| Promise<[PlaybackInfo](#playbackinfo12)> | Promise对象,返回播放器信息PlaybackInfo。 | 1510 1511**示例:** 1512 1513```ts 1514import { BusinessError } from '@kit.BasicServicesKit'; 1515 1516let avPlayer: media.AVPlayer | undefined = undefined; 1517let playbackInfo: media.PlaybackInfo | undefined = undefined; 1518media.createAVPlayer(async (err: BusinessError, player: media.AVPlayer) => { 1519 if (player != null) { 1520 avPlayer = player; 1521 console.info(`Succeeded in creating AVPlayer`); 1522 if (avPlayer) { 1523 try { 1524 playbackInfo = await avPlayer.getPlaybackInfo(); 1525 console.info(`AVPlayer getPlaybackInfo = ${JSON.stringify(playbackInfo)}`); // 打印整个PlaybackInfo的值。 1526 } catch (error) { 1527 console.error(`error = ${error}`); 1528 } 1529 } 1530 } else { 1531 console.error(`Failed to create AVPlayer, error message:${err.message}`); 1532 } 1533}); 1534``` 1535 1536### selectTrack<sup>12+</sup> 1537 1538selectTrack(index: number, mode?: SwitchMode): Promise\<void> 1539 1540使用AVPlayer播放多音视频轨资源时,选择指定轨道播放,通过Promise获取返回值。 1541 1542**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1543 1544**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1545 1546**参数:** 1547 1548| 参数名 | 类型 | 必填 | 说明 | 1549| -------- | -------- | ---- | -------------------- | 1550| index | number | 是 | 多音视频资源的轨道索引,可通过[getTrackDescription](#gettrackdescription9-1)接口获取当前资源的所有轨道信息[MediaDescription](#mediadescription8)。 | 1551| mode | [SwitchMode](#switchmode12) | 否 | 切换视频轨道模式,默认为SMOOTH模式,**仅在DASH协议网络流视频轨切换时生效**,其他场景当前暂不支持。 | 1552 1553**返回值:** 1554 1555| 类型 | 说明 | 1556| -------------- | ------------------------- | 1557| Promise\<void> | 选择轨道完成的Promise返回值。 | 1558 1559**错误码:** 1560 1561以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 1562 1563| 错误码ID | 错误信息 | 1564| -------- | ----------------------------------------- | 1565| 401 | The parameter check failed. Return by promise. | 1566| 5400102 | Operation not allowed. Return by promise. | 1567 1568**示例:** 1569 1570<!--code_no_check--> 1571```ts 1572import { BusinessError } from '@kit.BasicServicesKit'; 1573 1574let avPlayer: media.AVPlayer = await media.createAVPlayer(); 1575let audioTrackIndex: Object = 0; 1576avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => { 1577 if (arrList != null) { 1578 for (let i = 0; i < arrList.length; i++) { 1579 if (i != 0) { 1580 // 获取音频轨道列表。 1581 audioTrackIndex = arrList[i][media.MediaDescriptionKey.MD_KEY_TRACK_INDEX]; 1582 } 1583 } 1584 } else { 1585 console.error(`Failed to get TrackDescription, error:${error}`); 1586 } 1587}); 1588 1589// 选择其中一个音频轨道。 1590avPlayer.selectTrack(parseInt(audioTrackIndex.toString())); 1591``` 1592 1593### deselectTrack<sup>12+</sup> 1594 1595deselectTrack(index: number): Promise\<void> 1596 1597使用AVPlayer播放多音轨视频时取消指定音视频轨道播放,通过Promise获取返回值。 1598 1599**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1600 1601**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1602 1603**参数:** 1604 1605| 参数名 | 类型 | 必填 | 说明 | 1606| -------- | -------- | ---- | -------------------- | 1607| index | number | 是 | 多音视频资源的轨道索引,来自[getTrackDescription](#gettrackdescription9-1)接口所获取的轨道信息[MediaDescription](#mediadescription8)。 | 1608 1609**返回值:** 1610 1611| 类型 | 说明 | 1612| -------------- | ------------------------- | 1613| Promise\<void> | 取消选择曲目完成的Promise返回值。 | 1614 1615**错误码:** 1616 1617以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 1618 1619| 错误码ID | 错误信息 | 1620| -------- | ----------------------------------------- | 1621| 401 | The parameter check failed. Return by promise. | 1622| 5400102 | Operation not allowed. Return by promise. | 1623 1624**示例:** 1625 1626<!--code_no_check--> 1627```ts 1628import { BusinessError } from '@kit.BasicServicesKit'; 1629 1630let avPlayer: media.AVPlayer = await media.createAVPlayer(); 1631let audioTrackIndex: Object = 0; 1632avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => { 1633 if (arrList != null) { 1634 for (let i = 0; i < arrList.length; i++) { 1635 if (i != 0) { 1636 // 获取音频轨道列表。 1637 audioTrackIndex = arrList[i][media.MediaDescriptionKey.MD_KEY_TRACK_INDEX]; 1638 } 1639 } 1640 } else { 1641 console.error(`Failed to get TrackDescription, error:${error}`); 1642 } 1643}); 1644 1645// 选择其中一个音频轨道。 1646avPlayer.selectTrack(parseInt(audioTrackIndex.toString())); 1647// 取消选择上次选中的音频轨道,并恢复到默认音频轨道。 1648avPlayer.deselectTrack(parseInt(audioTrackIndex.toString())); 1649``` 1650 1651### setDecryptionConfig<sup>11+</sup> 1652 1653setDecryptionConfig(mediaKeySession: drm.MediaKeySession, secureVideoPath: boolean): void 1654 1655设置解密配置。当收到[mediaKeySystemInfoUpdate事件](#onmediakeysysteminfoupdate11)时,需根据事件上报的信息创建相关配置并设置解密配置,否则无法播放。 1656 1657**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1658 1659**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1660 1661**参数:** 1662 1663| 参数名 | 类型 | 必填 | 说明 | 1664| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------- | 1665| mediaKeySession | [drm.MediaKeySession](../apis-drm-kit/js-apis-drm.md#mediakeysession) | 是 | 解密会话 | 1666| secureVideoPath | boolean | 是 | 安全视频通路,true表示选择安全视频通路,false表示选择非安全视频通路 | 1667 1668**错误码:** 1669 1670以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 1671 1672| 错误码ID | 错误信息 | 1673| -------- | ----------------------------------------- | 1674| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 1675 1676**示例:** 1677 1678关于drm模块的示例具体可见[js-apis-drm.md](../apis-drm-kit/js-apis-drm.md)。 1679```ts 1680import { drm } from '@kit.DrmKit'; 1681 1682// 创建MediaKeySystem系统。 1683let keySystem:drm.MediaKeySystem = drm.createMediaKeySystem('com.clearplay.drm'); 1684// 创建MediaKeySession解密会话。 1685let keySession:drm.MediaKeySession = keySystem.createMediaKeySession(drm.ContentProtectionLevel.CONTENT_PROTECTION_LEVEL_SW_CRYPTO); 1686// 生成许可证请求、设置许可证响应等。 1687// 安全视频通路标志。 1688let secureVideoPath:boolean = false; 1689// 设置解密配置。 1690avPlayer.setDecryptionConfig(keySession, secureVideoPath); 1691``` 1692 1693### getMediaKeySystemInfos<sup>11+</sup> 1694 1695getMediaKeySystemInfos(): Array\<drm.MediaKeySystemInfo> 1696 1697获取当前播放的媒体资源的MediaKeySystemInfo。需要在[mediaKeySystemInfoUpdate事件](#onmediakeysysteminfoupdate11)触发成功后才能调用。 1698 1699**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1700 1701**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1702 1703**返回值:** 1704 1705| 类型 | 说明 | 1706| ------------------------------------------------------ | ------------------------------------------------- | 1707| Array<[drm.MediaKeySystemInfo](../apis-drm-kit/js-apis-drm.md#mediakeysysteminfo)> | MediaKeySystemInfo数组,MediaKeySystemInfo具有uuid和pssh两个属性。 | 1708 1709**示例:** 1710 1711```ts 1712import { drm } from '@kit.DrmKit'; 1713 1714const infos = avPlayer.getMediaKeySystemInfos(); 1715console.info('GetMediaKeySystemInfos count: ' + infos.length); 1716for (let i = 0; i < infos.length; i++) { 1717 console.info('GetMediaKeySystemInfos uuid: ' + infos[i]["uuid"]); 1718 console.info('GetMediaKeySystemInfos pssh: ' + infos[i]["pssh"]); 1719} 1720``` 1721 1722### seek<sup>9+</sup> 1723 1724seek(timeMs: number, mode?:SeekMode): void 1725 1726跳转到指定播放位置,只能在prepared/playing/paused/completed状态调用,可以通过[seekDone事件](#onseekdone9)确认是否生效。 1727注:直播场景不支持seek。 1728 1729**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1730 1731**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1732 1733**参数:** 1734 1735| 参数名 | 类型 | 必填 | 说明 | 1736| ------ | ---------------------- | ---- | ------------------------------------------------------------ | 1737| timeMs | number | 是 | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, [duration](#属性)]。 | 1738| mode | [SeekMode](#seekmode8) | 否 | 基于视频I帧的跳转模式,默认为SEEK_PREV_SYNC模式,**仅在视频资源播放时设置**。 | 1739 1740**示例:** 1741 1742```ts 1743let seekTime: number = 1000 1744avPlayer.seek(seekTime, media.SeekMode.SEEK_PREV_SYNC) 1745``` 1746 1747### on('seekDone')<sup>9+</sup> 1748 1749on(type: 'seekDone', callback: Callback\<number>): void 1750 1751监听seek生效的事件。 1752 1753**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1754 1755**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1756 1757**参数:** 1758 1759| 参数名 | 类型 | 必填 | 说明 | 1760| -------- | -------- | ---- | ------------------------------------------------------------ | 1761| type | string | 是 | seek生效的事件回调类型,支持的事件:'seekDone',每次调用seek后都会回调此事件。 | 1762| callback | Callback\<number> | 是 | 回调函数。seek生效的事件回调方法,只会上报用户请求的time位置。<br/>**视频播放:**[SeekMode](#seekmode8)会造成实际跳转位置与用户设置产生偏差,精准位置需要通过currentTime获取,事件回调的time仅代表完成用户某一次请求。 | 1763 1764**示例:** 1765 1766```ts 1767avPlayer.on('seekDone', (seekDoneTime:number) => { 1768 console.info('seekDone called,and seek time is:' + seekDoneTime) 1769}) 1770``` 1771 1772### off('seekDone')<sup>9+</sup> 1773 1774off(type: 'seekDone', callback?: Callback\<number>): void 1775 1776取消监听seek生效的事件。 1777 1778**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 1779 1780**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1781 1782**参数:** 1783 1784| 参数名 | 类型 | 必填 | 说明 | 1785| ------ | ------ | ---- | ---------------------------------------------------- | 1786| type | string | 是 | seek生效的事件回调类型,取消注册的事件:'seekDone'。 | 1787| callback | Callback\<number> | 否 | 回调函数。seek生效的事件回调方法,只会上报用户请求的time位置。<br/>**视频播放:**[SeekMode](#seekmode8)会造成实际跳转位置与用户设置产生偏差,精准位置需要通过currentTime获取,事件回调的time仅代表完成用户某一次请求。<br/>从API version 12开始支持此参数。 | 1788 1789**示例:** 1790 1791```ts 1792avPlayer.off('seekDone') 1793``` 1794 1795### setSpeed<sup>9+</sup> 1796 1797setSpeed(speed: PlaybackSpeed): void 1798 1799设置倍速模式,只能在prepared/playing/paused/completed状态调用,可以通过[speedDone事件](#onspeeddone9)确认是否生效。 1800注:直播场景不支持setSpeed。 1801 1802**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1803 1804**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1805 1806**参数:** 1807 1808| 参数名 | 类型 | 必填 | 说明 | 1809| ------ | -------------------------------- | ---- | ------------------ | 1810| speed | [PlaybackSpeed](#playbackspeed8) | 是 | 指定播放倍速模式。 | 1811 1812**示例:** 1813 1814```ts 1815avPlayer.setSpeed(media.PlaybackSpeed.SPEED_FORWARD_2_00_X) 1816``` 1817 1818### on('speedDone')<sup>9+</sup> 1819 1820on(type: 'speedDone', callback: Callback\<number>): void 1821 1822监听setSpeed生效的事件 1823 1824**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1825 1826**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1827 1828**参数:** 1829 1830| 参数名 | 类型 | 必填 | 说明 | 1831| -------- | -------- | ---- | ------------------------------------------------------------ | 1832| type | string | 是 | setSpeed生效的事件回调类型,支持的事件:'speedDone',每次调用setSpeed后都会回调此事件。 | 1833| callback | Callback\<number> | 是 | 回调函数。当setSpeed成功,上报生效的倍速模式,具体见[PlaybackSpeed](#playbackspeed8)。 | 1834 1835**示例:** 1836 1837```ts 1838avPlayer.on('speedDone', (speed:number) => { 1839 console.info('speedDone called,and speed value is:' + speed) 1840}) 1841``` 1842 1843### off('speedDone')<sup>9+</sup> 1844 1845off(type: 'speedDone', callback?: Callback\<number>): void 1846 1847取消监听setSpeed生效的事件。 1848 1849**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1850 1851**参数:** 1852 1853| 参数名 | 类型 | 必填 | 说明 | 1854| ------ | ------ | ---- | --------------------------------------------------------- | 1855| type | string | 是 | setSpeed生效的事件回调类型,取消注册的事件:'speedDone'。 | 1856| callback | Callback\<number> | 否 | 回调函数。当setSpeed成功,上报生效的倍速模式,具体见[PlaybackSpeed](#playbackspeed8)。<br/>从API version 12开始支持此参数。 | 1857 1858**示例:** 1859 1860```ts 1861avPlayer.off('speedDone') 1862``` 1863 1864### setBitrate<sup>9+</sup> 1865 1866setBitrate(bitrate: number): void 1867 1868设置比特率,以播放所指定比特率的流媒体资源,当前仅对**HLS/DASH协议网络流**有效。默认情况下,AVPlayer会根据网络连接速度选择合适的比特率。只能在prepared/playing/paused/completed状态调用,可以通过[bitrateDone](#onbitratedone9)事件确认是否生效。 1869 1870**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1871 1872**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1873 1874**参数:** 1875 1876| 参数名 | 类型 | 必填 | 说明 | 1877| ------- | ------ | ---- | ------------------------------------------------------------ | 1878| bitrate | number | 是 | 指定比特率,须通过[availableBitrates](#onavailablebitrates9)事件获得当前HLS/DASH协议网络流可用的比特率列表,如果用户指定的比特率不在此列表中,则播放器将从可用比特率列表中选择最接近的比特率。如果通过availableBitrates事件获得的比特率列表长度为0,则不支持指定比特率,也不会产生bitrateDone回调。 | 1879 1880**示例:** 1881 1882```ts 1883let bitrate: number = 96000 1884avPlayer.setBitrate(bitrate) 1885``` 1886 1887### on('bitrateDone')<sup>9+</sup> 1888 1889on(type: 'bitrateDone', callback: Callback\<number>): void 1890 1891监听setBitrate生效的事件。 1892 1893**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1894 1895**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1896 1897**参数:** 1898 1899| 参数名 | 类型 | 必填 | 说明 | 1900| -------- | -------- | ---- | ------------------------------------------------------------ | 1901| type | string | 是 | setBitrate生效的事件回调类型,支持的事件:'bitrateDone',每次调用setBitrate后都会回调此事件。 | 1902| callback | Callback\<number> | 是 | setBitrate生效的事件回调方法,上报生效的比特率。 | 1903 1904**示例:** 1905 1906```ts 1907avPlayer.on('bitrateDone', (bitrate:number) => { 1908 console.info('bitrateDone called,and bitrate value is:' + bitrate) 1909}) 1910``` 1911 1912### off('bitrateDone')<sup>9+</sup> 1913 1914off(type: 'bitrateDone', callback?: Callback\<number>): void 1915 1916取消监听setBitrate生效的事件。 1917 1918**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1919 1920**参数:** 1921 1922| 参数名 | 类型 | 必填 | 说明 | 1923| ------ | ------ | ---- | ------------------------------------------------------------ | 1924| type | string | 是 | setBitrate生效的事件回调类型,取消注册的事件:'bitrateDone'。 | 1925| callback | Callback\<number> | 否 | setBitrate生效的事件回调方法,上报生效的比特率。<br/>从API version 12开始支持此参数。 | 1926 1927**示例:** 1928 1929```ts 1930avPlayer.off('bitrateDone') 1931``` 1932 1933### on('availableBitrates')<sup>9+</sup> 1934 1935on(type: 'availableBitrates', callback: Callback\<Array\<number>>): void 1936 1937监听HLS/DASH协议网络流可用的比特率列表,只会在切换prepared状态后上报。 1938 1939**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1940 1941**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1942 1943**参数:** 1944 1945| 参数名 | 类型 | 必填 | 说明 | 1946| -------- | -------- | ---- | ------------------------------------------------------------ | 1947| type | string | 是 | HLS/DASH协议网络流可用比特率上报事件回调类型,支持的事件:'availableBitrates',只会在prepared之后上报一次。 | 1948| callback | Callback\<Array\<number>> | 是 | HLS/DASH协议网络流可用比特率上报事件回调方法,使用数组存放支持的比特率。如果数组长度为0,则不支持指定比特率。 | 1949 1950**示例:** 1951 1952```ts 1953avPlayer.on('availableBitrates', (bitrates: Array<number>) => { 1954 console.info('availableBitrates called,and availableBitrates length is:' + bitrates.length) 1955}) 1956``` 1957 1958### off('availableBitrates')<sup>9+</sup> 1959 1960off(type: 'availableBitrates', callback?: Callback\<Array\<number>>): void 1961 1962取消监听HLS/DASH协议网络流可用的比特率列表,调用[prepare](#prepare9)后,上报此事件。 1963 1964**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1965 1966**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1967 1968**参数:** 1969 1970| 参数名 | 类型 | 必填 | 说明 | 1971| ------ | ------ | ---- | ------------------------------------------------------------ | 1972| type | string | 是 | HLS/DASH协议网络流可用比特率上报事件回调类型,取消注册的事件:'availableBitrates'。 | 1973| callback | Callback\<Array\<number>> | 否 | HLS/DASH协议网络流可用比特率上报事件回调方法,使用数组存放支持的比特率。如果数组长度为0,则不支持指定比特率。<br/>从API version 12开始支持此参数。 | 1974 1975**示例:** 1976 1977```ts 1978avPlayer.off('availableBitrates') 1979``` 1980 1981 1982### on('mediaKeySystemInfoUpdate')<sup>11+</sup> 1983 1984on(type: 'mediaKeySystemInfoUpdate', callback: Callback\<Array\<drm.MediaKeySystemInfo>>): void 1985 1986监听mediaKeySystemInfoUpdate事件。 1987 1988**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1989 1990**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 1991 1992**参数:** 1993 1994| 参数名 | 类型 | 必填 | 说明 | 1995| -------- | -------- | ---- | ------------------------------------------------------------ | 1996| type | string | 是 | 版权保护信息更新上报事件回调类型,支持的事件:'mediaKeySystemInfoUpdate',当播放内容的版权保护信息更新时上报事件。 | 1997| callback | Callback\<Array\<drm.[MediaKeySystemInfo](../apis-drm-kit/js-apis-drm.md#mediakeysysteminfo)>> | 是 | 版权保护信息更新上报事件回调方法,上报MediaKeySystemInfo数组。 | 1998 1999**示例:** 2000 2001```ts 2002import { drm } from '@kit.DrmKit'; 2003 2004avPlayer.on('mediaKeySystemInfoUpdate', (mediaKeySystemInfo: Array<drm.MediaKeySystemInfo>) => { 2005 for (let i = 0; i < mediaKeySystemInfo.length; i++) { 2006 console.info('mediaKeySystemInfoUpdate happened uuid: ' + mediaKeySystemInfo[i]["uuid"]); 2007 console.info('mediaKeySystemInfoUpdate happened pssh: ' + mediaKeySystemInfo[i]["pssh"]); 2008 } 2009}) 2010``` 2011 2012### off('mediaKeySystemInfoUpdate')<sup>11+</sup> 2013 2014off(type: 'mediaKeySystemInfoUpdate', callback?: Callback\<Array\<drm.MediaKeySystemInfo>>): void; 2015 2016取消监听mediaKeySystemInfoUpdate事件。 2017 2018**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2019 2020**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2021 2022**参数:** 2023 2024| 参数名 | 类型 | 必填 | 说明 | 2025| ------ | ------ | ---- | ------------------------------------------------------------ | 2026| type | string | 是 | 版权保护信息更新上报事件回调类型,取消注册的事件:'mediaKeySystemInfoUpdate'。 | 2027| callback | Callback\<Array\<drm.[MediaKeySystemInfo](../apis-drm-kit/js-apis-drm.md#mediakeysysteminfo)>> | 否 | 版权保护信息更新上报事件回调方法,上报版权保护信息数组。如填写该参数,则仅取消注册此回调方法,否则取消注册mediaKeySystemInfoUpdate事件的所有回调方法。 | 2028 2029**示例:** 2030 2031```ts 2032avPlayer.off('mediaKeySystemInfoUpdate') 2033``` 2034 2035### setVolume<sup>9+</sup> 2036 2037setVolume(volume: number): void 2038 2039设置媒体播放音量,只能在prepared/playing/paused/completed状态调用,可以通过[volumeChange事件](#onvolumechange9)确认是否生效。 2040 2041**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2042 2043**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2044 2045**参数:** 2046 2047| 参数名 | 类型 | 必填 | 说明 | 2048| ------ | ------ | ---- | ------------------------------------------------------------ | 2049| volume | number | 是 | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 | 2050 2051**示例:** 2052 2053```ts 2054let volume: number = 1.0 2055avPlayer.setVolume(volume) 2056``` 2057 2058### on('volumeChange')<sup>9+</sup> 2059 2060on(type: 'volumeChange', callback: Callback\<number>): void 2061 2062监听setVolume生效的事件。 2063 2064**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2065 2066**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2067 2068**参数:** 2069 2070| 参数名 | 类型 | 必填 | 说明 | 2071| -------- | -------- | ---- | ------------------------------------------------------------ | 2072| type | string | 是 | setVolume生效的事件回调类型,支持的事件:'volumeChange',每次调用setVolume后都会回调此事件。 | 2073| callback | Callback\<number> | 是 | setVolume生效的事件回调方法,上报生效的媒体音量。 | 2074 2075**示例:** 2076 2077```ts 2078avPlayer.on('volumeChange', (vol: number) => { 2079 console.info('volumeChange called,and new volume is :' + vol) 2080}) 2081``` 2082 2083### off('volumeChange')<sup>9+</sup> 2084 2085off(type: 'volumeChange', callback?: Callback\<number>): void 2086 2087取消监听setVolume生效的事件。 2088 2089**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2090 2091**参数:** 2092 2093| 参数名 | 类型 | 必填 | 说明 | 2094| ------ | ------ | ---- | ------------------------------------------------------------ | 2095| type | string | 是 | setVolume生效的事件回调类型,取消注册的事件:'volumeChange'。 | 2096| callback | Callback\<number> | 否 | setVolume生效的事件回调方法,上报生效的媒体音量。<br/>从API version 12开始支持此参数。 | 2097 2098**示例:** 2099 2100```ts 2101avPlayer.off('volumeChange') 2102``` 2103 2104### on('endOfStream')<sup>9+</sup> 2105 2106on(type: 'endOfStream', callback: Callback\<void>): void 2107 2108监听资源播放至结尾的事件;如果用户设置[loop](#属性)=true,播放会跳转至开头重播;如果用户没有设置loop,会通过[stateChange](#onstatechange9)上报completed状态。 2109 2110**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2111 2112**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2113 2114**参数:** 2115 2116| 参数名 | 类型 | 必填 | 说明 | 2117| -------- | -------- | ---- | ------------------------------------------------------------ | 2118| type | string | 是 | 资源播放至结尾的事件回调类型,支持的事件:'endOfStream',当播放至结尾时会上报此事件。 | 2119| callback | Callback\<void> | 是 | 资源播放至结尾的事件回调方法。 | 2120 2121**示例:** 2122 2123```ts 2124avPlayer.on('endOfStream', () => { 2125 console.info('endOfStream called') 2126}) 2127``` 2128 2129### off('endOfStream')<sup>9+</sup> 2130 2131off(type: 'endOfStream', callback?: Callback\<void>): void 2132 2133取消监听资源播放至结尾的事件。 2134 2135**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2136 2137**参数:** 2138 2139| 参数名 | 类型 | 必填 | 说明 | 2140| ------ | ------ | ---- | ------------------------------------------------------------ | 2141| type | string | 是 | 资源播放至结尾的事件回调类型,取消注册的事件:'endOfStream'。 | 2142| callback | Callback\<void> | 否 | 资源播放至结尾的事件回调方法。<br/>从API version 12开始支持此参数。 | 2143 2144**示例:** 2145 2146```ts 2147avPlayer.off('endOfStream') 2148``` 2149 2150### on('timeUpdate')<sup>9+</sup> 2151 2152on(type: 'timeUpdate', callback: Callback\<number>): void 2153 2154监听资源播放当前时间,单位为毫秒(ms),用于刷新进度条当前位置,默认间隔100ms时间上报,因用户操作(seek)产生的时间变化会立刻上报。 2155 2156注:直播场景不支持timeUpdate上报。 2157 2158**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 2159 2160**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2161 2162**参数:** 2163 2164| 参数名 | 类型 | 必填 | 说明 | 2165| -------- | -------- | ---- | ---------------------------------------------- | 2166| type | string | 是 | 时间更新的回调类型,支持的事件:'timeUpdate'。 | 2167| callback | Callback\<number> | 是 | 回调函数。返回当前时间。 | 2168 2169**示例:** 2170 2171```ts 2172avPlayer.on('timeUpdate', (time:number) => { 2173 console.info('timeUpdate called,and new time is :' + time) 2174}) 2175``` 2176 2177### off('timeUpdate')<sup>9+</sup> 2178 2179off(type: 'timeUpdate', callback?: Callback\<number>): void 2180 2181取消监听资源播放当前时间。 2182 2183**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 2184 2185**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2186 2187**参数:** 2188 2189| 参数名 | 类型 | 必填 | 说明 | 2190| ------ | ------ | ---- | -------------------------------------------------- | 2191| type | string | 是 | 时间更新的回调类型,取消注册的事件:'timeUpdate'。 | 2192| callback | Callback\<number> | 否 | 回调函数。返回当前时间。<br/>从API version 12开始支持此参数。 | 2193 2194**示例:** 2195 2196```ts 2197avPlayer.off('timeUpdate') 2198``` 2199 2200### on('durationUpdate')<sup>9+</sup> 2201 2202 2203on(type: 'durationUpdate', callback: Callback\<number>): void 2204 2205监听资源播放资源的时长,单位为毫秒(ms),用于刷新进度条长度,默认只在prepared上报一次,同时允许一些特殊码流刷新多次时长。 2206注:直播场景不支持durationUpdate上报。 2207 2208**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2209 2210**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2211 2212**参数:** 2213 2214| 参数名 | 类型 | 必填 | 说明 | 2215| -------- | -------- | ---- | -------------------------------------------------- | 2216| type | string | 是 | 时长更新的回调类型,支持的事件:'durationUpdate'。 | 2217| callback | Callback\<number> | 是 | 回调函数。返回资源时长。 | 2218 2219**示例:** 2220 2221```ts 2222avPlayer.on('durationUpdate', (duration: number) => { 2223 console.info('durationUpdate called,new duration is :' + duration) 2224}) 2225``` 2226 2227### off('durationUpdate')<sup>9+</sup> 2228 2229off(type: 'durationUpdate', callback?: Callback\<number>): void 2230 2231取消监听资源播放资源的时长。 2232 2233**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2234 2235**参数:** 2236 2237| 参数名 | 类型 | 必填 | 说明 | 2238| ------ | ------ | ---- | ------------------------------------------------------ | 2239| type | string | 是 | 时长更新的回调类型,取消注册的事件:'durationUpdate'。 | 2240| callback | Callback\<number> | 否 | 回调函数。返回资源时长。<br/>从API version 12开始支持此参数。 | 2241 2242**示例:** 2243 2244```ts 2245avPlayer.off('durationUpdate') 2246``` 2247 2248### on('bufferingUpdate')<sup>9+</sup> 2249 2250on(type: 'bufferingUpdate', callback: OnBufferingUpdateHandler): void 2251 2252订阅音视频缓存更新事件,仅网络播放支持该订阅事件。 2253 2254**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2255 2256**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2257 2258**参数:** 2259 2260| 参数名 | 类型 | 必填 | 说明 | 2261| -------- | -------- | ---- | ------------------------------------------------------------ | 2262| type | string | 是 | 播放缓存事件回调类型,支持的事件:'bufferingUpdate'。 | 2263| callback | [OnBufferingUpdateHandler](#onbufferingupdatehandler12) | 是 | 播放缓存事件回调方法。 | 2264 2265**示例:** 2266 2267```ts 2268avPlayer.on('bufferingUpdate', (infoType: media.BufferingInfoType, value: number) => { 2269 console.info('bufferingUpdate called,and infoType value is:' + infoType + ', value is :' + value) 2270}) 2271``` 2272 2273### off('bufferingUpdate')<sup>9+</sup> 2274 2275off(type: 'bufferingUpdate', callback?: OnBufferingUpdateHandler): void 2276 2277取消监听音视频缓存更新事件。 2278 2279**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2280 2281**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2282 2283**参数:** 2284 2285| 参数名 | 类型 | 必填 | 说明 | 2286| ------ | ------ | ---- | --------------------------------------------------------- | 2287| type | string | 是 | 播放缓存事件回调类型,取消注册的事件:'bufferingUpdate'。 | 2288| callback | [OnBufferingUpdateHandler](#onbufferingupdatehandler12) | 否 | 播放缓存事件回调方法。 | 2289 2290**示例:** 2291 2292```ts 2293avPlayer.off('bufferingUpdate') 2294``` 2295 2296### on('startRenderFrame')<sup>9+</sup> 2297 2298on(type: 'startRenderFrame', callback: Callback\<void>): void 2299 2300订阅视频播放开始首帧渲染的更新事件,仅视频播放支持该订阅事件,该事件仅代表播放服务将第一帧画面送显示模块,实际效果依赖显示服务渲染性能。 2301 2302**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2303 2304**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2305 2306**参数:** 2307 2308| 参数名 | 类型 | 必填 | 说明 | 2309| -------- | -------- | ---- | ------------------------------------------------------------ | 2310| type | string | 是 | 视频播放开始首帧渲染事件回调类型,支持的事件:'startRenderFrame'。 | 2311| callback | Callback\<void> | 是 | 视频播放开始首帧渲染事件回调方法。 | 2312 2313**示例:** 2314 2315```ts 2316avPlayer.on('startRenderFrame', () => { 2317 console.info('startRenderFrame called') 2318}) 2319``` 2320 2321### off('startRenderFrame')<sup>9+</sup> 2322 2323off(type: 'startRenderFrame', callback?: Callback\<void>): void 2324 2325取消监听视频播放开始首帧渲染的更新事件。 2326 2327**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2328 2329**参数:** 2330 2331| 参数名 | 类型 | 必填 | 说明 | 2332| ------ | ------ | ---- | ------------------------------------------------------------ | 2333| type | string | 是 | 视频播放开始首帧渲染事件回调类型,取消注册的事件:'startRenderFrame'。 | 2334| callback | Callback\<void> | 否 | 视频播放开始首帧渲染事件回调方法。<br/>从API version 12开始支持此参数。 | 2335 2336**示例:** 2337 2338```ts 2339avPlayer.off('startRenderFrame') 2340``` 2341 2342### on('videoSizeChange')<sup>9+</sup> 2343 2344on(type: 'videoSizeChange', callback: OnVideoSizeChangeHandler): void 2345 2346监听视频播放宽高变化事件,仅视频播放支持该订阅事件,默认只在prepared状态上报一次,但HLS协议码流会在切换分辨率时上报。 2347 2348**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2349 2350**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2351 2352**参数:** 2353 2354| 参数名 | 类型 | 必填 | 说明 | 2355| -------- | -------- | ---- | ------------------------------------------------------------ | 2356| type | string | 是 | 视频播放宽高变化事件回调类型,支持的事件:'videoSizeChange'。 | 2357| callback | [OnVideoSizeChangeHandler](#onvideosizechangehandler12) | 是 | 视频播放宽高变化事件回调方法。 | 2358 2359**示例:** 2360 2361```ts 2362avPlayer.on('videoSizeChange', (width: number, height: number) => { 2363 console.info('videoSizeChange called,and width is:' + width + ', height is :' + height) 2364}) 2365``` 2366 2367### off('videoSizeChange')<sup>9+</sup> 2368 2369off(type: 'videoSizeChange', callback?: OnVideoSizeChangeHandler): void 2370 2371取消监听视频播放宽高变化事件。 2372 2373**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2374 2375**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2376 2377**参数:** 2378 2379| 参数名 | 类型 | 必填 | 说明 | 2380| ------ | ------ | ---- | ------------------------------------------------------------ | 2381| type | string | 是 | 视频播放宽高变化事件回调类型,取消注册的事件:'videoSizeChange'。 | 2382| callback | [OnVideoSizeChangeHandler](#onvideosizechangehandler12) | 否 | 视频播放宽高变化事件回调方法。<br/>从API version 12开始支持此参数。 | 2383 2384**示例:** 2385 2386```ts 2387avPlayer.off('videoSizeChange') 2388``` 2389 2390### on('audioInterrupt')<sup>9+</sup> 2391 2392on(type: 'audioInterrupt', callback: Callback\<audio.InterruptEvent>): void 2393 2394监听音频焦点变化事件,多个音视频资源同时播放时,会根据音频焦点模型[audio.InterruptMode](../apis-audio-kit/js-apis-audio.md#interruptmode9)触发此事件。应用需根据不同焦点变化事件作相应处理。具体可参考[处理音频焦点事件](../../media/audio/audio-playback-concurrency.md)。 2395 2396**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2397 2398**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2399 2400**参数:** 2401 2402| 参数名 | 类型 | 必填 | 说明 | 2403| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------------------- | 2404| type | string | 是 | 音频焦点变化事件回调类型,支持的事件:'audioInterrupt'。 | 2405| callback | Callback\<[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)> | 是 | 音频焦点变化事件回调方法。 | 2406 2407**示例:** 2408 2409```ts 2410import { audio } from '@kit.AudioKit'; 2411 2412avPlayer.on('audioInterrupt', (info: audio.InterruptEvent) => { 2413 console.info('audioInterrupt called,and InterruptEvent info is:' + info) 2414}) 2415``` 2416 2417### off('audioInterrupt')<sup>9+</sup> 2418 2419off(type: 'audioInterrupt', callback?: Callback<audio.InterruptEvent>): void 2420 2421取消监听音频焦点变化事件。 2422 2423**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2424 2425**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2426 2427**参数:** 2428 2429| 参数名 | 类型 | 必填 | 说明 | 2430| ------ | ------ | ---- | ------------------------------------------------------------ | 2431| type | string | 是 | 音频焦点变化事件回调类型,取消注册的事件:'audioInterrupt'。 | 2432| callback | Callback\<[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)> | 否 | 音频焦点变化事件回调方法。<br/>从API version 12开始支持此参数。 | 2433 2434**示例:** 2435 2436```ts 2437avPlayer.off('audioInterrupt') 2438``` 2439 2440### on('audioOutputDeviceChangeWithInfo')<sup>11+</sup> 2441 2442on(type: 'audioOutputDeviceChangeWithInfo', callback: Callback\<audio.AudioStreamDeviceChangeInfo>): void 2443 2444订阅监听音频流输出设备变化及原因,使用callback方式返回结果。 2445 2446在订阅此监听时,建议参考[响应音频流输出设备变更](../../media/audio/audio-output-device-change.md)自行实现设备连接或者断开时的播放器行为。 2447 2448**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2449 2450**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2451 2452**参数:** 2453 2454| 参数名 | 类型 | 必填 | 说明 | 2455| :------- | :------------------------- | :--- | :------------------------------------------ | 2456| type | string | 是 | 事件回调类型,支持的事件为:'outputDeviceChangeWithInfo'。 | 2457| callback | Callback\<[audio.AudioStreamDeviceChangeInfo](../apis-audio-kit/js-apis-audio.md#audiostreamdevicechangeinfo11)> | 是 | 回调函数,返回当前音频流的输出设备描述信息及变化原因。 | 2458 2459**错误码:** 2460 2461| 错误码ID | 错误信息 | 2462| -------- | ------------------------------------------ | 2463| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2464 2465**示例:** 2466 2467```ts 2468import { audio } from '@kit.AudioKit'; 2469 2470avPlayer.on('audioOutputDeviceChangeWithInfo', (data: audio.AudioStreamDeviceChangeInfo) => { 2471 console.info(`${JSON.stringify(data)}`); 2472}); 2473``` 2474 2475### off('audioOutputDeviceChangeWithInfo')<sup>11+</sup> 2476 2477off(type: 'audioOutputDeviceChangeWithInfo', callback?: Callback\<audio.AudioStreamDeviceChangeInfo>): void 2478 2479取消订阅监听音频流输出设备变化及原因,使用callback方式返回结果。 2480 2481**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2482 2483**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2484 2485**参数:** 2486 2487| 参数名 | 类型 | 必填 | 说明 | 2488| :------- | :------------------------- | :--- | :------------------------------------------ | 2489| type | string | 是 | 事件回调类型,支持的事件为:'outputDeviceChange'。 | 2490| callback | Callback\<[audio.AudioStreamDeviceChangeInfo](../apis-audio-kit/js-apis-audio.md#audiostreamdevicechangeinfo11)> | 否 | 回调函数,返回当前音频流的输出设备描述信息及变化原因。 | 2491 2492**错误码:** 2493 2494| 错误码ID | 错误信息 | 2495| -------- | ------------------------------------------ | 2496| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2497 2498**示例:** 2499 2500```ts 2501avPlayer.off('audioOutputDeviceChangeWithInfo'); 2502``` 2503 2504### addSubtitleFromFd<sup>12+</sup> 2505 2506addSubtitleFromFd(fd: number, offset?: number, length?: number): Promise\<void> 2507 2508依据fd为视频添加外挂字幕,当前仅支持与视频资源同时设置(在avplayer设置fdSrc视频资源后设置外挂字幕)。使用Promise方式返回结果。 2509 2510**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2511 2512**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2513 2514**参数:** 2515 2516| 参数名 | 类型 | 必填 | 说明 | 2517| ------ | ---------------------- | ---- | ------------------------------------------------------------ | 2518| fd | number | 是 | 资源句柄,通过[resourceManager.getRawFd](../apis-localization-kit/js-apis-resource-manager.md#getrawfd9)获取。 | 2519| offset | number | 否 | 资源偏移量,需要基于预置资源的信息输入,非法值会造成字幕频资源解析错误。 | 2520| length | number | 否 | 资源长度,默认值为文件中从偏移量开始的剩余字节,需要基于预置资源的信息输入,非法值会造成字幕频资源解析错误。 | 2521 2522**返回值:** 2523 2524| 类型 | 说明 | 2525| -------------- | ------------------------------------------ | 2526| Promise\<void> | 添加外挂字幕addSubtitleFromFd方法的Promise返回值。 | 2527 2528**错误码:** 2529 2530| 错误码ID | 错误信息 | 2531| -------- | ------------------------------------------ | 2532| 401 | The parameter check failed. Return by promise. | 2533| 5400102 | Operation not allowed. Return by promise. | 2534 2535**示例:** 2536 2537<!--code_no_check--> 2538```ts 2539import { common } from '@kit.AbilityKit' 2540 2541let context = getContext(this) as common.UIAbilityContext 2542let fileDescriptor = await context.resourceManager.getRawFd('xxx.srt') 2543 2544avPlayer.addSubtitleFromFd(fileDescriptor.fd, fileDescriptor.offset, fileDescriptor.length) 2545``` 2546 2547### addSubtitleFromUrl<sup>12+</sup> 2548 2549addSubtitleFromUrl(url: string): Promise\<void> 2550 2551依据url为视频添加外挂字幕,当前仅支持与视频资源同时设置(在avplayer设置fdSrc视频资源后设置外挂字幕)。使用Promise方式返回结果。 2552 2553**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2554 2555**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2556 2557**参数:** 2558 2559| 参数名 | 类型 | 必填 | 说明 | 2560| ------ | ------ | ---- | ------------------------------------------------------------ | 2561| url | string | 是 | 外挂字幕文件地址。 | 2562 2563**返回值:** 2564 2565| 类型 | 说明 | 2566| -------------- | ------------------------------------------ | 2567| Promise\<void> | 添加外挂字幕addSubtitleFromUrl方法的Promise返回值。 | 2568 2569**错误码:** 2570 2571| 错误码ID | 错误信息 | 2572| -------- | ------------------------------------------ | 2573| 401 | The parameter check failed. Return by promise. | 2574| 5400102 | Operation not allowed. Return by promise. | 2575 2576**示例:** 2577 2578<!--code_no_check--> 2579```ts 2580let fdUrl:string = 'http://xxx.xxx.xxx/xx/index.srt' 2581 2582let avPlayer: media.AVPlayer = await media.createAVPlayer() 2583avPlayer.addSubtitleFromUrl(fdUrl) 2584``` 2585 2586### on('subtitleUpdate')<sup>12+</sup> 2587 2588on(type: 'subtitleUpdate', callback: Callback\<SubtitleInfo>): void 2589 2590订阅获取外挂字幕的事件,当有外挂字幕时,会通过订阅的回调方法通知用户。用户只能订阅一个外挂字幕事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。 2591 2592**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2593 2594**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2595 2596**参数:** 2597 2598| 参数名 | 类型 | 必填 | 说明 | 2599| -------- | -------- | ---- | ------------------------------------------------------------ | 2600| type | string | 是 | 事件回调类型,支持的事件为:'subtitleUpdate'。 | 2601| callback | function | 是 | 外挂字幕事件回调方法。 | 2602 2603**示例:** 2604 2605```ts 2606avPlayer.on('subtitleUpdate', async (info: media.SubtitleInfo) => { 2607 if (info) { 2608 let text = (!info.text) ? '' : info.text 2609 let startTime = (!info.startTime) ? 0 : info.startTime 2610 let duration = (!info.duration) ? 0 : info.duration 2611 console.info('subtitleUpdate info: text=' + text + ' startTime=' + startTime +' duration=' + duration) 2612 } else { 2613 console.info('subtitleUpdate info is null') 2614 } 2615}) 2616``` 2617 2618### off('subtitleUpdate')<sup>12+</sup> 2619 2620off(type: 'subtitleUpdate', callback?: Callback\<SubtitleInfo>): void 2621 2622取消订阅获取外挂字幕的事件。 2623 2624**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2625 2626**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2627 2628**参数:** 2629 2630| 参数名 | 类型 | 必填 | 说明 | 2631| -------- | -------- | ---- | ------------------------------------------------------------ | 2632| type | string | 是 | 事件回调类型,支持的事件为:'subtitleUpdate'。 | 2633| callback | function | 否 | 取消外挂字幕事件的回调方法。 | 2634 2635**示例:** 2636 2637```ts 2638avPlayer.off('subtitleUpdate') 2639``` 2640 2641### on('trackChange')<sup>12+</sup> 2642 2643on(type: 'trackChange', callback: OnTrackChangeHandler): void 2644 2645订阅获取轨道变更的事件,当播放的轨道变更时,会通过订阅的回调方法通知用户。用户只能订阅一个轨道变更事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。 2646 2647**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2648 2649**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2650 2651**参数:** 2652 2653| 参数名 | 类型 | 必填 | 说明 | 2654| -------- | -------- | ---- | ------------------------------------------------------------ | 2655| type | string | 是 | 事件回调类型,支持的事件为:'trackChange'。 | 2656| callback | [OnTrackChangeHandler](#ontrackchangehandler12) | 是 | 轨道变更事件回调方法。 | 2657 2658**示例:** 2659 2660```ts 2661avPlayer.on('trackChange', (index: number, isSelect: boolean) => { 2662 console.info('trackChange info: index=' + index + ' isSelect=' + isSelect) 2663}) 2664``` 2665 2666### off('trackChange')<sup>12+</sup> 2667 2668off(type: 'trackChange', callback?: OnTrackChangeHandler): void 2669 2670取消订阅获取轨道变更的事件。 2671 2672**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2673 2674**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2675 2676**参数:** 2677 2678| 参数名 | 类型 | 必填 | 说明 | 2679| -------- | -------- | ---- | ------------------------------------------------------------ | 2680| type | string | 是 | 事件回调类型,支持的事件为:'trackChange'。 | 2681| callback | [OnTrackChangeHandler](#ontrackchangehandler12) | 否 | 取消轨道变更事件的回调方法。 | 2682 2683**示例:** 2684 2685```ts 2686avPlayer.off('trackChange') 2687``` 2688 2689### on('trackInfoUpdate')<sup>12+</sup> 2690 2691on(type: 'trackInfoUpdate', callback: Callback\<Array\<MediaDescription>>): void 2692 2693订阅获取轨道信息更新的事件,当播放的轨道有更新时,会通过订阅的回调方法通知用户。用户只能订阅一个轨道变更事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。 2694 2695**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2696 2697**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2698 2699**参数:** 2700 2701| 参数名 | 类型 | 必填 | 说明 | 2702| -------- | -------- | ---- | ------------------------------------------------------------ | 2703| type | string | 是 | 事件回调类型,支持的事件为:'trackInfoUpdate'。 | 2704| callback | Callback\<Array\<[MediaDescription](#mediadescription8)>> | 是 | 轨道信息更新事件回调方法。 | 2705 2706**示例:** 2707 2708```ts 2709avPlayer.on('trackInfoUpdate', (info: Array<media.MediaDescription>) => { 2710 if (info) { 2711 for (let i = 0; i < info.length; i++) { 2712 let propertyIndex: Object = info[i][media.MediaDescriptionKey.MD_KEY_TRACK_INDEX]; 2713 let propertyType: Object = info[i][media.MediaDescriptionKey.MD_KEY_TRACK_TYPE]; 2714 console.info('track info: index=' + propertyIndex + ' tracktype=' + propertyType) 2715 } 2716 } else { 2717 console.info('track info is null') 2718 } 2719}) 2720``` 2721 2722### off('trackInfoUpdate')<sup>12+</sup> 2723 2724off(type: 'trackInfoUpdate', callback?: Callback\<Array\<MediaDescription>>): void 2725 2726取消订阅获取轨道变更的事件。 2727 2728**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2729 2730**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2731 2732**参数:** 2733 2734| 参数名 | 类型 | 必填 | 说明 | 2735| -------- | -------- | ---- | ------------------------------------------------------------ | 2736| type | string | 是 | 事件回调类型,支持的事件为:'trackInfoUpdate'。 | 2737| callback | Callback\<Array\<[MediaDescription](#mediadescription8)>> | 否 | 取消轨道信息更新事件的回调方法。 | 2738 2739**示例:** 2740 2741```ts 2742avPlayer.off('trackInfoUpdate') 2743``` 2744 2745### on('amplitudeUpdate')<sup>13+</sup> 2746 2747on(type: 'amplitudeUpdate', callback: Callback\<Array\<number>>): void 2748 2749订阅音频最大电平值,音频资源播放时定时上报。 2750 2751**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2752 2753**参数:** 2754 2755| 参数名 | 类型 | 必填 | 说明 | 2756| -------- | -------- | ---- | ------------------------------------------------------------ | 2757| type | string | 是 | 事件回调类型,支持的事件为:'amplitudeUpdate'。 | 2758| callback | Callback\<Array\<number>> | 是 | 音频最大电平值更新事件回调方法。 | 2759 2760**示例:** 2761 2762```ts 2763avPlayer.on('amplitudeUpdate', (value: Array<number>) => { 2764 console.info('amplitudeUpdate called,and amplitudeUpdate = ${value}') 2765}) 2766``` 2767 2768### off('amplitudeUpdate')<sup>13+</sup> 2769 2770off(type: 'amplitudeUpdate', callback?: Callback\<Array\<number>>): void 2771 2772取消订阅获取音频最大电平值事件。 2773 2774**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2775 2776**参数:** 2777 2778| 参数名 | 类型 | 必填 | 说明 | 2779| ------ | ------ | ---- | ------------------------------------------------------------ | 2780| type | string | 是 | 事件回调类型,支持的事件为:'amplitudeUpdate'。 | 2781| callback | Callback\<Array\<number>> | 否 | 取消音频最大电平值更新事件回调方法。 | 2782 2783**示例:** 2784 2785```ts 2786avPlayer.off('amplitudeUpdate') 2787``` 2788 2789## AVPlayerState<sup>9+</sup> 2790 2791type AVPlayerState = 'idle' | 'initialized' | 'prepared' | 'playing' | 'paused' | 'completed' | 'stopped' | 'released' | 'error' 2792 2793[AVPlayer](#avplayer9)的状态机,可通过state属性主动获取当前状态,也可通过监听[stateChange](#onstatechange9)事件上报当前状态,状态机之间的切换规则,可参考[音频播放开发指导](../../media/media/using-avplayer-for-playback.md)。 2794 2795**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 2796 2797**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2798 2799| 类型 | 说明 | 2800| :-----------------------------: | :----------------------------------------------------------- | 2801| '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属性会被重置,其他用户设置的属性将被保留。 | 2802| 'initialized' | 资源初始化,在idle 状态设置 url<sup>9+</sup> 或 fdSrc<sup>9+</sup>属性,AVPlayer会进入initialized状态,此时可以配置窗口、音频等静态属性。 | 2803| 'prepared' | 已准备状态,在initialized状态调用[prepare()](#prepare9)方法,AVPlayer会进入prepared状态,此时播放引擎的资源已准备就绪。 | 2804| 'playing' | 正在播放状态,在prepared/paused/completed状态调用[play()](#play9)方法,AVPlayer会进入playing状态。 | 2805| 'paused' | 暂停状态,在playing状态调用pause方法,AVPlayer会进入paused状态。 | 2806| 'completed' | 播放至结尾状态,当媒体资源播放至结尾时,如果用户未设置循环播放(loop = true),AVPlayer会进入completed状态,此时调用[play()](#play9)会进入playing状态和重播,调用[stop()](#stop9)会进入stopped状态。 | 2807| 'stopped' | 停止状态,在prepared/playing/paused/completed状态调用[stop()](#stop9)方法,AVPlayer会进入stopped状态,此时播放引擎只会保留属性,但会释放内存资源,可以调用[prepare()](#prepare9)重新准备,也可以调用[reset()](#reset9)重置,或者调用[release()](#release9)彻底销毁。 | 2808| 'released' | 销毁状态,销毁与当前AVPlayer关联的播放引擎,无法再进行状态转换,调用[release()](#release9)方法后,会进入released状态,结束流程。 | 2809| '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:播放过程发现码流问题,导致容器、解码短暂异常,不影响连续播放和播控操作的,不需要客户端设计容错机制。 | 2810 2811## OnTrackChangeHandler<sup>12+</sup> 2812 2813type OnTrackChangeHandler = (index: number, isSelected: boolean) => void 2814 2815track变更事件回调方法。 2816 2817**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2818 2819**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2820 2821| 参数名 | 类型 | 必填 | 说明 | 2822| ------ | ------ | ------ | ---------------------------------------------------------- | 2823| index | number | 是 | 当前选中的track索引。 | 2824| isSelected | boolean | 是 | 当前索引的选中状态。 | 2825 2826## OnAVPlayerStateChangeHandle<sup>12+</sup> 2827 2828type OnAVPlayerStateChangeHandle = (state: AVPlayerState, reason: StateChangeReason) => void 2829 2830状态机切换事件回调方法。 2831 2832**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2833 2834**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2835 2836| 参数名 | 类型 | 必填 | 说明 | 2837| ------ | ------ | ------ | ---------------------------------------------------------- | 2838| state | [AVPlayerState](#avplayerstate9) | 是 | 当前播放状态。 | 2839| reason | [StateChangeReason](#statechangereason9) | 是 | 当前播放状态的切换原因。 | 2840 2841## OnBufferingUpdateHandler<sup>12+</sup> 2842 2843type OnBufferingUpdateHandler = (infoType: BufferingInfoType, value: number) => void 2844 2845播放缓存事件回调方法。 2846 2847**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2848 2849**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2850 2851| 参数名 | 类型 | 必填 | 说明 | 2852| ------ | ------ | ------ | ------------------------------------------------------------ | 2853| infoType | [BufferingInfoType](#bufferinginfotype8) | 是 | 缓存时间类型。 | 2854| value | number | 是 | value值固定为0。 | 2855 2856## OnVideoSizeChangeHandler<sup>12+</sup> 2857 2858type OnVideoSizeChangeHandler = (width: number, height: number) => void 2859 2860视频播放宽高变化事件回调方法。 2861 2862**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2863 2864**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2865 2866| 参数名 | 类型 | 必填 | 说明 | 2867| ------ | ------ | ------ | ------------------------------------------------------------ | 2868| width | number | 是 | 视频宽度。 | 2869| height | number | 是 | 视频高度。 | 2870 2871## AVFileDescriptor<sup>9+</sup> 2872 2873音视频文件资源描述,一种特殊资源的播放方式,使用场景:应用中的音频资源被连续存储在同一个文件中,需要根据偏移量和长度进行播放。 2874 2875**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 2876 2877**系统能力:** SystemCapability.Multimedia.Media.Core 2878 2879| 名称 | 类型 | 必填 | 说明 | 2880| ------ | ------ | ---- | ------------------------------------------------------------ | 2881| 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)获取。 | 2882| offset | number | 否 | 资源偏移量,默认值为0,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 | 2883| length | number | 否 | 资源长度,默认值为文件中从偏移量开始的剩余字节,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 | 2884 2885## AVDataSrcDescriptor<sup>10+</sup> 2886 2887音视频文件资源描述,用于DataSource播放方式,使用场景:应用在未获取完整音视频资源时,允许用户创建播放实例并开始播放,达到提前播放的目的。 2888 2889**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 2890 2891**系统能力:** SystemCapability.Multimedia.Media.AVPlayer 2892 2893| 名称 | 类型 | 必填 | 说明 | 2894| ------ | ------ | ---- | ------------------------------------------------------------ | 2895| fileSize | number | 是 | 待播放文件大小(字节),-1代表大小未知。如果fileSize设置为-1, 播放模式类似于直播,不能进行seek及setSpeed操作,不能设置loop属性,因此不能重新播放。 | 2896| 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表示遇到不可恢复的错误。| 2897 2898## SubtitleInfo<sup>12+</sup> 2899 2900外挂字幕信息,使用场景:订阅外挂字幕事件,回调返回外挂字幕详细信息。 2901 2902**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2903 2904**系统能力:** SystemCapability.Multimedia.Media.Core 2905 2906| 名称 | 类型 | 必填 | 说明 | 2907| ------ | ------ | ---- | ------------------------------------------------------------ | 2908| text | string | 否 | 字幕文本信息。 | 2909| startTime | number | 否 | 显示当前字幕文本的开始时间(单位:毫秒)。 | 2910| duration | number | 否 | 显示当前字幕文本的持续时间(单位:毫秒)。 | 2911 2912## SeekMode<sup>8+</sup> 2913 2914视频播放的Seek模式枚举,可通过seek方法作为参数传递下去。 2915 2916**系统能力:** SystemCapability.Multimedia.Media.Core 2917 2918| 名称 | 值 | 说明 | 2919| -------------- | ---- | ------------------------------------------------------------ | 2920| SEEK_NEXT_SYNC | 0 | 表示跳转到指定时间点的下一个关键帧,建议向后快进的时候用这个枚举值。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | 2921| SEEK_PREV_SYNC | 1 | 表示跳转到指定时间点的上一个关键帧,建议向前快进的时候用这个枚举值。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | 2922| SEEK_CLOSEST<sup>12+</sup> | 2 | 表示跳转到距离指定时间点最近的帧,建议精准跳转进度的时候用这个枚举值。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 2923 2924## SwitchMode<sup>12+</sup> 2925 2926视频播放的selectTrack模式枚举,可通过selectTrack方法作为参数传递下去,当前仅DASH协议视频轨支持该扩展参数。 2927 2928**系统能力:** SystemCapability.Multimedia.Media.Core 2929 2930| 名称 | 值 | 说明 | 2931| -------------- | ---- | ------------------------------------------------------------ | 2932| SMOOTH | 0 | 表示切换后视频平滑播放,该模式切换存在延迟,不会立即生效。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 2933| SEGMENT | 1 | 表示切换后从当前分片开始位置播放,该模式立即切换,会有重复播放。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 2934| CLOSEST | 2 | 表示从距离当前播放时间点最近的帧开始播放,该模式立即切换,切换后会卡住3到5s,然后恢复播放。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 2935 2936## PlaybackSpeed<sup>8+</sup> 2937 2938视频播放的倍速枚举,可通过setSpeed方法作为参数传递下去。 2939 2940**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2941 2942**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 2943 2944| 名称 | 值 | 说明 | 2945| -------------------- | ---- | ------------------------------ | 2946| SPEED_FORWARD_0_75_X | 0 | 表示视频播放正常播速的0.75倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 2947| SPEED_FORWARD_1_00_X | 1 | 表示视频播放正常播速。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 2948| SPEED_FORWARD_1_25_X | 2 | 表示视频播放正常播速的1.25倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 2949| SPEED_FORWARD_1_75_X | 3 | 表示视频播放正常播速的1.75倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 2950| SPEED_FORWARD_2_00_X | 4 | 表示视频播放正常播速的2.00倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 2951| SPEED_FORWARD_0_50_X<sup>12+</sup> | 5 | 表示视频播放正常播速的0.50倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 2952| SPEED_FORWARD_1_50_X<sup>12+</sup> | 6 | 表示视频播放正常播速的1.50倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 2953| SPEED_FORWARD_3_00_X<sup>13+</sup> | 7 | 表示视频播放正常播速的3.00倍。<br>**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。 | 2954| SPEED_FORWARD_0_25_X<sup>12+</sup> | 8 | 表示视频播放正常播速的0.25倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 2955| SPEED_FORWARD_0_125_X<sup>12+</sup> | 9 | 表示视频播放正常播速的0.125倍。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 2956 2957## VideoScaleType<sup>9+</sup> 2958 2959枚举,视频缩放模式。 2960 2961**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2962 2963**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 2964 2965| 名称 | 值 | 说明 | 2966| ------------------------- | ---- | ------------------------------------------------ | 2967| VIDEO_SCALE_TYPE_FIT | 0 | 默认比例类型,视频拉伸至与窗口等大。 | 2968| VIDEO_SCALE_TYPE_FIT_CROP | 1 | 保持视频宽高比拉伸至填满窗口,内容可能会有裁剪。 | 2969 2970## MediaDescription<sup>8+</sup> 2971 2972通过key-value方式获取媒体信息。 2973 2974**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 2975 2976**系统能力:** SystemCapability.Multimedia.Media.Core 2977 2978| 名称 | 类型 | 必填 | 说明 | 2979| ------------- | ------ | ---- | ------------------------------------------------------------ | 2980| [key: string] | Object | 是 | 该键值对支持的key取值范围,请参考[MediaDescriptionKey](#mediadescriptionkey8);每个key值的Object类型和范围,请参考[MediaDescriptionKey](#mediadescriptionkey8)对应Key值的说明 | 2981 2982**示例:** 2983 2984```ts 2985import { BusinessError } from '@kit.BasicServicesKit'; 2986 2987function printfItemDescription(obj: media.MediaDescription, key: string) { 2988 let property: Object = obj[key]; 2989 console.info('audio key is ' + key); // 通过key值获取对应的value。key值具体可见[MediaDescriptionKey]。 2990 console.info('audio value is ' + property); //对应key值得value。其类型可为任意类型,具体key对应value的类型可参考[MediaDescriptionKey]。 2991} 2992 2993let avPlayer: media.AVPlayer | undefined = undefined; 2994media.createAVPlayer((err: BusinessError, player: media.AVPlayer) => { 2995 if(player != null) { 2996 avPlayer = player; 2997 console.info(`Succeeded in creating AVPlayer`); 2998 avPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => { 2999 if (arrList != null) { 3000 for (let i = 0; i < arrList.length; i++) { 3001 printfItemDescription(arrList[i], media.MediaDescriptionKey.MD_KEY_TRACK_TYPE); //打印出每条轨道MD_KEY_TRACK_TYPE的值。 3002 } 3003 } else { 3004 console.error(`Failed to get TrackDescription, error:${error}`); 3005 } 3006 }); 3007 } else { 3008 console.error(`Failed to create AVPlayer, error message:${err.message}`); 3009 } 3010}); 3011``` 3012 3013## PlaybackInfo<sup>12+</sup> 3014 3015通过key-value方式获取播放信息。 3016 3017**系统能力:** SystemCapability.Multimedia.Media.Core 3018 3019| 名称 | 类型 | 必填 | 说明 | 3020| ------------- | ------ | ---- | ------------------------------------------------------------ | 3021| [key: string] | Object | 是 | 该键值对支持的key取值范围,请参考[PlaybackInfoKey](#playbackinfokey12);每个key值的Object类型和范围,请参考[PlaybackInfoKey](#playbackinfokey12)对应Key值的说明。 | 3022 3023**示例:** 3024 3025```ts 3026import { BusinessError } from '@kit.BasicServicesKit'; 3027 3028function printfPlaybackInfo(obj: media.PlaybackInfo, key: string) { 3029 let property: Object = obj[key]; 3030 console.info('key is ' + key); // 通过key值获取对应的value。key值具体可见[PlaybackInfoKey]。 3031 console.info('value is ' + property); //对应key值得value。其类型可为任意类型,具体key对应value的类型可参考[PlaybackInfoKey]。 3032} 3033 3034let avPlayer: media.AVPlayer | undefined = undefined; 3035let playbackInfo: media.PlaybackInfo | undefined = undefined; 3036media.createAVPlayer(async (err: BusinessError, player: media.AVPlayer) => { 3037 if (player != null) { 3038 avPlayer = player; 3039 console.info(`Succeeded in creating AVPlayer`); 3040 if (avPlayer) { 3041 try { 3042 playbackInfo = await avPlayer.getPlaybackInfo(); 3043 console.info(`AVPlayer getPlaybackInfo = ${JSON.stringify(playbackInfo)}`); // 打印整个PlaybackInfo的值。 3044 printfPlaybackInfo(playbackInfo, media.PlaybackInfoKey.SERVER_IP_ADDRESS); // 打印ip的值。 3045 } catch (error) { 3046 console.error(`error = ${error}`); 3047 } 3048 } 3049 } else { 3050 console.error(`Failed to create AVPlayer, error message:${err.message}`); 3051 } 3052}); 3053``` 3054 3055## AVRecorder<sup>9+</sup> 3056 3057音视频录制管理类,用于音视频媒体录制。在调用AVRecorder的方法前,需要先通过[createAVRecorder()](#mediacreateavrecorder9)构建一个AVRecorder实例。 3058 3059音视频录制demo可参考:[音频录制开发指导](../../media/media/using-avrecorder-for-recording.md)、[视频录制开发指导](../../media/media/video-recording.md)。 3060 3061> **说明:** 3062> 3063> 使用相机进行视频录制时,需要与相机模块配合,相机模块接口的使用详情见[相机管理](../apis-camera-kit/js-apis-camera.md)。 3064 3065### 属性 3066 3067**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3068 3069| 名称 | 类型 | 只读 | 可选 | 说明 | 3070| ------- | ------------------------------------ | ---- | ---- | ------------------ | 3071| state9+ | [AVRecorderState](#avrecorderstate9) | 是 | 否 | 音视频录制的状态。<br>**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 | 3072 3073### prepare<sup>9+</sup> 3074 3075prepare(config: AVRecorderConfig, callback: AsyncCallback\<void>): void 3076 3077异步方式进行音视频录制的参数设置。通过注册回调函数获取返回值。 3078 3079**需要权限:** ohos.permission.MICROPHONE 3080 3081不涉及音频录制时,可以不需要获取ohos.permission.MICROPHONE权限。 3082 3083使用相机视频录制还需要与相机模块配合,相机模块接口的使用详情见[相机管理](../apis-camera-kit/js-apis-camera.md)。 3084 3085**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3086 3087**参数:** 3088 3089| 参数名 | 类型 | 必填 | 说明 | 3090| -------- | -------------------------------------- | ---- | ------------------------------------- | 3091| config | [AVRecorderConfig](#avrecorderconfig9) | 是 | 配置音视频录制的相关参数。 | 3092| callback | AsyncCallback\<void> | 是 | 回调函数。当prepare方法成功,err为undefined,否则为错误对象。 | 3093 3094**错误码:** 3095 3096以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3097 3098| 错误码ID | 错误信息 | 3099| -------- | --------------------------------------- | 3100| 201 | Permission denied. Return by callback. | 3101| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3102| 5400102 | Operate not permit. Return by callback. | 3103| 5400105 | Service died. Return by callback. | 3104 3105**示例:** 3106 3107```ts 3108import { BusinessError } from '@kit.BasicServicesKit'; 3109 3110// 配置参数以实际硬件设备支持的范围为准。 3111let avRecorderProfile: media.AVRecorderProfile = { 3112 audioBitrate : 48000, 3113 audioChannels : 2, 3114 audioCodec : media.CodecMimeType.AUDIO_AAC, 3115 audioSampleRate : 48000, 3116 fileFormat : media.ContainerFormatType.CFT_MPEG_4, 3117 videoBitrate : 2000000, 3118 videoCodec : media.CodecMimeType.VIDEO_AVC, 3119 videoFrameWidth : 640, 3120 videoFrameHeight : 480, 3121 videoFrameRate : 30 3122} 3123let avRecorderConfig: media.AVRecorderConfig = { 3124 audioSourceType : media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC, 3125 videoSourceType : media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV, 3126 profile : avRecorderProfile, 3127 url : 'fd://', // 文件需先由调用者创建,赋予读写权限,将文件fd传给此参数,eg.fd://45 3128 rotation : 0, // 合理值0、90、180、270,非合理值prepare接口将报错。 3129 location : { latitude : 30, longitude : 130 } 3130} 3131 3132avRecorder.prepare(avRecorderConfig, (err: BusinessError) => { 3133 if (err) { 3134 console.error('Failed to prepare and error is ' + err.message); 3135 } else { 3136 console.info('Succeeded in preparing'); 3137 } 3138}) 3139``` 3140 3141### prepare<sup>9+</sup> 3142 3143prepare(config: AVRecorderConfig): Promise\<void> 3144 3145异步方式进行音视频录制的参数设置。通过Promise获取返回值。 3146 3147**需要权限:** ohos.permission.MICROPHONE 3148 3149不涉及音频录制时,可以不需要获ohos.permission.MICROPHONE权限。 3150 3151使用相机视频录制还需要与相机模块配合,相机模块接口的使用详情见[相机管理](../apis-camera-kit/js-apis-camera.md)。 3152 3153**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 3154 3155**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3156 3157**参数:** 3158 3159| 参数名 | 类型 | 必填 | 说明 | 3160| ------ | -------------------------------------- | ---- | -------------------------- | 3161| config | [AVRecorderConfig](#avrecorderconfig9) | 是 | 配置音视频录制的相关参数。 | 3162 3163**返回值:** 3164 3165| 类型 | 说明 | 3166| -------------- | ------------------------------------------ | 3167| Promise\<void> | 异步音视频录制prepare方法的Promise返回值。 | 3168 3169**错误码:** 3170 3171以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3172 3173| 错误码ID | 错误信息 | 3174| -------- | -------------------------------------- | 3175| 201 | Permission denied. Return by promise. | 3176| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3177| 5400102 | Operate not permit. Return by promise. | 3178| 5400105 | Service died. Return by promise. | 3179 3180**示例:** 3181 3182```ts 3183import { BusinessError } from '@kit.BasicServicesKit'; 3184 3185// 配置参数以实际硬件设备支持的范围为准。 3186let avRecorderProfile: media.AVRecorderProfile = { 3187 audioBitrate : 48000, 3188 audioChannels : 2, 3189 audioCodec : media.CodecMimeType.AUDIO_AAC, 3190 audioSampleRate : 48000, 3191 fileFormat : media.ContainerFormatType.CFT_MPEG_4, 3192 videoBitrate : 2000000, 3193 videoCodec : media.CodecMimeType.VIDEO_AVC, 3194 videoFrameWidth : 640, 3195 videoFrameHeight : 480, 3196 videoFrameRate : 30 3197} 3198let avRecorderConfig: media.AVRecorderConfig = { 3199 audioSourceType : media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC, 3200 videoSourceType : media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV, 3201 profile : avRecorderProfile, 3202 url : 'fd://', // 文件需先由调用者创建,赋予读写权限,将文件fd传给此参数,eg.fd://45 3203 rotation : 0, // 合理值0、90、180、270,非合理值prepare接口报错。 3204 location : { latitude : 30, longitude : 130 } 3205} 3206 3207avRecorder.prepare(avRecorderConfig).then(() => { 3208 console.info('Succeeded in preparing'); 3209}).catch((err: BusinessError) => { 3210 console.error('Failed to prepare and catch error is ' + err.message); 3211}); 3212``` 3213 3214### getInputSurface<sup>9+</sup> 3215 3216getInputSurface(callback: AsyncCallback\<string>): void 3217 3218异步方式获得录制需要的surface。通过注册回调函数获取返回值。此surface提供给调用者,调用者从此surface中获取surfaceBuffer,填入相应的视频数据。 3219 3220应当注意,填入的视频数据需要携带时间戳(单位ns)和buffersize。时间戳的起始时间请以系统启动时间为基准。 3221 3222需在[prepare()](#prepare9-2)事件成功触发后,才能调用getInputSurface()方法。 3223 3224**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3225 3226**参数:** 3227 3228| 参数名 | 类型 | 必填 | 说明 | 3229| -------- | ---------------------- | ---- | --------------------------- | 3230| callback | AsyncCallback\<string> | 是 | 回调函数。当获取surface成功,err为undefined,data为获取到的surfaceId,否则为错误对象。 | 3231 3232**错误码:** 3233 3234以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 3235 3236| 错误码ID | 错误信息 | 3237| -------- | --------------------------------------- | 3238| 5400102 | Operate not permit. Return by callback. | 3239| 5400103 | IO error. Return by callback. | 3240| 5400105 | Service died. Return by callback. | 3241 3242**示例:** 3243 3244```ts 3245import { BusinessError } from '@kit.BasicServicesKit'; 3246let surfaceID: string; // 该surfaceID用于传递给相机接口创造videoOutput。 3247 3248avRecorder.getInputSurface((err: BusinessError, surfaceId: string) => { 3249 if (err) { 3250 console.error('Failed to do getInputSurface and error is ' + err.message); 3251 } else { 3252 console.info('Succeeded in doing getInputSurface'); 3253 surfaceID = surfaceId; 3254 } 3255}); 3256 3257``` 3258 3259### getInputSurface<sup>9+</sup> 3260 3261getInputSurface(): Promise\<string> 3262 3263异步方式获得录制需要的surface。通过Promise获取返回值。此surface提供给调用者,调用者从此surface中获取surfaceBuffer,填入相应的视频数据。 3264 3265应当注意,填入的视频数据需要携带时间戳(单位ns)和buffersize。时间戳的起始时间请以系统启动时间为基准。 3266 3267需在[prepare()](#prepare9-3)事件成功触发后,才能调用getInputSurface方法。 3268 3269**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3270 3271**返回值:** 3272 3273| 类型 | 说明 | 3274| ---------------- | -------------------------------- | 3275| Promise\<string> | 异步获得surface的Promise返回值。 | 3276 3277**错误码:** 3278 3279以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 3280 3281| 错误码ID | 错误信息 | 3282| -------- | -------------------------------------- | 3283| 5400102 | Operate not permit. Return by promise. | 3284| 5400103 | IO error. Return by promise. | 3285| 5400105 | Service died. Return by promise. | 3286 3287**示例:** 3288 3289```ts 3290import { BusinessError } from '@kit.BasicServicesKit'; 3291let surfaceID: string; // 该surfaceID用于传递给相机接口创造videoOutput。 3292 3293avRecorder.getInputSurface().then((surfaceId: string) => { 3294 console.info('Succeeded in getting InputSurface'); 3295 surfaceID = surfaceId; 3296}).catch((err: BusinessError) => { 3297 console.error('Failed to get InputSurface and catch error is ' + err.message); 3298}); 3299``` 3300 3301### updateRotation<sup>12+</sup> 3302 3303updateRotation(rotation: number): Promise\<void> 3304 3305更新视频旋转角度。通过Promise获取返回值。 3306 3307当且仅当[prepare()](#prepare9-3)事件成功触发后,且在[start()](#start9)之前,才能调用updateRotation方法。 3308 3309**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3310 3311**参数:** 3312 3313| 参数名 | 类型 | 必填 | 说明 | 3314| -------- | -------------------- | ---- | --------------------------- | 3315| rotation | number | 是 | 旋转角度,取值仅支持0、90、180、270度。 | 3316 3317**返回值:** 3318 3319| 类型 | 说明 | 3320| ---------------- | -------------------------------- | 3321| Promise\<void> | 异步返回函数执行结果。 | 3322 3323**错误码:** 3324 3325以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 3326 3327| 错误码ID | 错误信息 | 3328| -------- | -------------------------------------- | 3329| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 3330| 5400102 | Operation not allowed. Return by promise. | 3331| 5400103 | IO error. Return by promise. | 3332| 5400105 | Service died. Return by promise. | 3333 3334**示例:** 3335 3336```ts 3337import { BusinessError } from '@kit.BasicServicesKit'; 3338 3339let rotation = 90 3340 3341avRecorder.updateRotation(rotation).then(() => { 3342 console.info('Succeeded in updateRotation'); 3343}).catch((err: BusinessError) => { 3344 console.error('Failed to updateRotation and catch error is ' + err.message); 3345}); 3346``` 3347 3348### start<sup>9+</sup> 3349 3350start(callback: AsyncCallback\<void>): void 3351 3352异步方式开始视频录制。通过注册回调函数获取返回值。 3353 3354纯音频录制需在[prepare()](#prepare9-2)事件成功触发后,才能调用start方法。纯视频录制,音视频录制需在[getInputSurface()](#getinputsurface9)事件成功触发后,才能调用start方法。 3355 3356**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3357 3358**参数:** 3359 3360| 参数名 | 类型 | 必填 | 说明 | 3361| -------- | -------------------- | ---- | ---------------------------- | 3362| callback | AsyncCallback\<void> | 是 |回调函数。当开始录制视频成功,err为undefined,否则为错误对象。 | 3363 3364**错误码:** 3365 3366以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3367 3368| 错误码ID | 错误信息 | 3369| -------- | --------------------------------------- | 3370| 5400102 | Operate not permit. Return by callback. | 3371| 5400103 | IO error. Return by callback. | 3372| 5400105 | Service died. Return by callback. | 3373 3374**示例:** 3375 3376```ts 3377import { BusinessError } from '@kit.BasicServicesKit'; 3378 3379avRecorder.start((err: BusinessError) => { 3380 if (err) { 3381 console.error('Failed to start AVRecorder and error is ' + err.message); 3382 } else { 3383 console.info('Succeeded in starting AVRecorder'); 3384 } 3385}); 3386``` 3387 3388### start<sup>9+</sup> 3389 3390start(): Promise\<void> 3391 3392异步方式开始视频录制。通过Promise获取返回值。 3393 3394纯音频录制需在[prepare()](#prepare9-3)事件成功触发后,才能调用start方法。纯视频录制,音视频录制需在[getInputSurface()](#getinputsurface9-1)事件成功触发后,才能调用start方法。 3395 3396**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 3397 3398**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3399 3400**返回值:** 3401 3402| 类型 | 说明 | 3403| -------------- | ------------------------------------- | 3404| Promise\<void> | 异步开始视频录制方法的Promise返回值。 | 3405 3406**错误码:** 3407 3408以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3409 3410| 错误码ID | 错误信息 | 3411| -------- | -------------------------------------- | 3412| 5400102 | Operate not permit. Return by promise. | 3413| 5400103 | IO error. Return by promise. | 3414| 5400105 | Service died. Return by promise. | 3415 3416**示例:** 3417 3418```ts 3419import { BusinessError } from '@kit.BasicServicesKit'; 3420 3421avRecorder.start().then(() => { 3422 console.info('Succeeded in starting AVRecorder'); 3423}).catch((err: BusinessError) => { 3424 console.error('Failed to start AVRecorder and catch error is ' + err.message); 3425}); 3426``` 3427 3428### pause<sup>9+</sup> 3429 3430pause(callback: AsyncCallback\<void>): void 3431 3432异步方式暂停视频录制。通过注册回调函数获取返回值。 3433 3434需要[start()](#start9)事件成功触发后,才能调用pause方法,可以通过调用[resume()](#resume9)接口来恢复录制。 3435 3436**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3437 3438**参数:** 3439 3440| 参数名 | 类型 | 必填 | 说明 | 3441| -------- | -------------------- | ---- | --------------------------- | 3442| callback | AsyncCallback\<void> | 是 | 回调函数。当暂停视频录制成功,err为undefined,否则为错误对象。 | 3443 3444**错误码:** 3445 3446以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3447 3448| 错误码ID | 错误信息 | 3449| -------- | --------------------------------------- | 3450| 5400102 | Operate not permit. Return by callback. | 3451| 5400103 | IO error. Return by callback. | 3452| 5400105 | Service died. Return by callback. | 3453 3454**示例:** 3455 3456```ts 3457import { BusinessError } from '@kit.BasicServicesKit'; 3458 3459avRecorder.pause((err: BusinessError) => { 3460 if (err) { 3461 console.error('Failed to pause AVRecorder and error is ' + err.message); 3462 } else { 3463 console.info('Succeeded in pausing'); 3464 } 3465}); 3466``` 3467 3468### pause<sup>9+</sup> 3469 3470pause(): Promise\<void> 3471 3472异步方式暂停视频录制。通过Promise获取返回值。 3473 3474需要[start()](#start9-1)事件成功触发后,才能调用pause方法,可以通过调用[resume()](#resume9-1)接口来恢复录制。 3475 3476**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 3477 3478**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3479 3480**返回值:** 3481 3482| 类型 | 说明 | 3483| -------------- | ------------------------------------- | 3484| Promise\<void> | 异步暂停视频录制方法的Promise返回值。 | 3485 3486**错误码:** 3487 3488以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3489 3490| 错误码ID | 错误信息 | 3491| -------- | -------------------------------------- | 3492| 5400102 | Operate not permit. Return by promise. | 3493| 5400103 | IO error. Return by promise. | 3494| 5400105 | Service died. Return by promise. | 3495 3496**示例:** 3497 3498```ts 3499import { BusinessError } from '@kit.BasicServicesKit'; 3500 3501avRecorder.pause().then(() => { 3502 console.info('Succeeded in pausing'); 3503}).catch((err: BusinessError) => { 3504 console.error('Failed to pause AVRecorder and catch error is ' + err.message); 3505}); 3506``` 3507 3508### resume<sup>9+</sup> 3509 3510resume(callback: AsyncCallback\<void>): void 3511 3512异步方式恢复视频录制。通过注册回调函数获取返回值。 3513 3514需要在[pause()](#pause9-2)事件成功触发后,才能调用resume方法。 3515 3516**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3517 3518**参数:** 3519 3520| 参数名 | 类型 | 必填 | 说明 | 3521| -------- | -------------------- | ---- | ---------------------------- | 3522| callback | AsyncCallback\<void> | 是 | 回调函数。当恢复视频录制成功,err为undefined,否则为错误对象。 | 3523 3524**错误码:** 3525 3526以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3527 3528| 错误码ID | 错误信息 | 3529| -------- | --------------------------------------- | 3530| 5400102 | Operate not permit. Return by callback. | 3531| 5400103 | IO error. Return by callback. | 3532| 5400105 | Service died. Return by callback. | 3533 3534**示例:** 3535 3536```ts 3537import { BusinessError } from '@kit.BasicServicesKit'; 3538 3539avRecorder.resume((err: BusinessError) => { 3540 if (err) { 3541 console.error('Failed to resume AVRecorder and error is ' + err.message); 3542 } else { 3543 console.info('Succeeded in resuming AVRecorder'); 3544 } 3545}); 3546``` 3547 3548### resume<sup>9+</sup> 3549 3550resume(): Promise\<void> 3551 3552异步方式恢复视频录制。通过Promise获取返回值。 3553 3554需要在[pause()](#pause9-3)事件成功触发后,才能调用resume方法。 3555 3556**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 3557 3558**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3559 3560**返回值:** 3561 3562| 类型 | 说明 | 3563| -------------- | ------------------------------------- | 3564| Promise\<void> | 异步恢复视频录制方法的Promise返回值。 | 3565 3566**错误码:** 3567 3568以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3569 3570| 错误码ID | 错误信息 | 3571| -------- | -------------------------------------- | 3572| 5400102 | Operate not permit. Return by promise. | 3573| 5400103 | IO error. Return by promise. | 3574| 5400105 | Service died. Return by promise. | 3575 3576**示例:** 3577 3578```ts 3579import { BusinessError } from '@kit.BasicServicesKit'; 3580 3581avRecorder.resume().then(() => { 3582 console.info('Succeeded in resuming AVRecorder'); 3583}).catch((err: BusinessError) => { 3584 console.error('Failed to resume AVRecorder failed and catch error is ' + err.message); 3585}); 3586``` 3587 3588### stop<sup>9+</sup> 3589 3590stop(callback: AsyncCallback\<void>): void 3591 3592异步方式停止视频录制。通过注册回调函数获取返回值。 3593 3594需要在[start()](#start9)或[pause()](#pause9-2)事件成功触发后,才能调用stop方法。 3595 3596纯音频录制时,需要重新调用[prepare()](#prepare9-2)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-2)和[getInputSurface()](#getinputsurface9)接口才能重新录制。 3597 3598**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3599 3600**参数:** 3601 3602| 参数名 | 类型 | 必填 | 说明 | 3603| -------- | -------------------- | ---- | ---------------------------- | 3604| callback | AsyncCallback\<void> | 是 | 回调函数。当停止视频录制成功,err为undefined,否则为错误对象。 | 3605 3606**错误码:** 3607 3608以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3609 3610| 错误码ID | 错误信息 | 3611| -------- | --------------------------------------- | 3612| 5400102 | Operate not permit. Return by callback. | 3613| 5400103 | IO error. Return by callback. | 3614| 5400105 | Service died. Return by callback. | 3615 3616**示例:** 3617 3618```ts 3619import { BusinessError } from '@kit.BasicServicesKit'; 3620 3621avRecorder.stop((err: BusinessError) => { 3622 if (err) { 3623 console.error('Failed to stop AVRecorder and error is ' + err.message); 3624 } else { 3625 console.info('Succeeded in stopping AVRecorder'); 3626 } 3627}); 3628``` 3629 3630### stop<sup>9+</sup> 3631 3632stop(): Promise\<void> 3633 3634异步方式停止视频录制。通过Promise获取返回值。 3635 3636需要在[start()](#start9-1)或[pause()](#pause9-3)事件成功触发后,才能调用stop方法。 3637 3638纯音频录制时,需要重新调用[prepare()](#prepare9-3)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-3)和[getInputSurface()](#getinputsurface9-1)接口才能重新录制。 3639 3640**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 3641 3642**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3643 3644**返回值:** 3645 3646| 类型 | 说明 | 3647| -------------- | ------------------------------------- | 3648| Promise\<void> | 异步停止视频录制方法的Promise返回值。 | 3649 3650**错误码:** 3651 3652以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3653 3654| 错误码ID | 错误信息 | 3655| -------- | -------------------------------------- | 3656| 5400102 | Operate not permit. Return by promise. | 3657| 5400103 | IO error. Return by promise. | 3658| 5400105 | Service died. Return by promise. | 3659 3660**示例:** 3661 3662```ts 3663import { BusinessError } from '@kit.BasicServicesKit'; 3664 3665avRecorder.stop().then(() => { 3666 console.info('Succeeded in stopping AVRecorder'); 3667}).catch((err: BusinessError) => { 3668 console.error('Failed to stop AVRecorder and catch error is ' + err.message); 3669}); 3670``` 3671 3672### reset<sup>9+</sup> 3673 3674reset(callback: AsyncCallback\<void>): void 3675 3676异步方式重置音视频录制。通过注册回调函数获取返回值。 3677 3678纯音频录制时,需要重新调用[prepare()](#prepare9-2)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-2)和[getInputSurface()](#getinputsurface9)接口才能重新录制。 3679 3680**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3681 3682**参数:** 3683 3684| 参数名 | 类型 | 必填 | 说明 | 3685| -------- | -------------------- | ---- | ------------------------------ | 3686| callback | AsyncCallback\<void> | 是 | 回调函数。当重置音视频录制成功,err为undefined,否则为错误对象。 | 3687 3688**错误码:** 3689 3690以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3691 3692| 错误码ID | 错误信息 | 3693| -------- | --------------------------------- | 3694| 5400103 | IO error. Return by callback. | 3695| 5400105 | Service died. Return by callback. | 3696 3697**示例:** 3698 3699```ts 3700import { BusinessError } from '@kit.BasicServicesKit'; 3701 3702avRecorder.reset((err: BusinessError) => { 3703 if (err) { 3704 console.error('Failed to reset AVRecorder and error is ' + err.message); 3705 } else { 3706 console.info('Succeeded in resetting AVRecorder'); 3707 } 3708}); 3709``` 3710 3711### reset<sup>9+</sup> 3712 3713reset(): Promise\<void> 3714 3715异步方式重置音视频录制。通过Promise获取返回值。 3716 3717纯音频录制时,需要重新调用[prepare()](#prepare9-3)接口才能重新录制。纯视频录制,音视频录制时,需要重新调用[prepare()](#prepare9-3)和[getInputSurface()](#getinputsurface9-1)接口才能重新录制。 3718 3719**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3720 3721**返回值:** 3722 3723| 类型 | 说明 | 3724| -------------- | --------------------------------------- | 3725| Promise\<void> | 异步重置音视频录制方法的Promise返回值。 | 3726 3727**错误码:** 3728 3729以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3730 3731| 错误码ID | 错误信息 | 3732| -------- | -------------------------------- | 3733| 5400103 | IO error. Return by promise. | 3734| 5400105 | Service died. Return by promise. | 3735 3736**示例:** 3737 3738```ts 3739import { BusinessError } from '@kit.BasicServicesKit'; 3740 3741avRecorder.reset().then(() => { 3742 console.info('Succeeded in resetting AVRecorder'); 3743}).catch((err: BusinessError) => { 3744 console.error('Failed to reset and catch error is ' + err.message); 3745}); 3746``` 3747 3748### release<sup>9+</sup> 3749 3750release(callback: AsyncCallback\<void>): void 3751 3752异步方式释放音视频录制资源。通过注册回调函数获取返回值。 3753 3754释放音视频录制资源之后,该AVRecorder实例不能再进行任何操作。 3755 3756**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3757 3758**参数:** 3759 3760| 参数名 | 类型 | 必填 | 说明 | 3761| -------- | -------------------- | ---- | ---------------------------------- | 3762| callback | AsyncCallback\<void> | 是 | 回调函数。当释放音视频录制资源成功,err为undefined,否则为错误对象。 | 3763 3764**错误码:** 3765 3766以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3767 3768| 错误码ID | 错误信息 | 3769| -------- | --------------------------------- | 3770| 5400105 | Service died. Return by callback. | 3771 3772**示例:** 3773 3774```ts 3775import { BusinessError } from '@kit.BasicServicesKit'; 3776 3777avRecorder.release((err: BusinessError) => { 3778 if (err) { 3779 console.error('Failed to release AVRecorder and error is ' + err.message); 3780 } else { 3781 console.info('Succeeded in releasing AVRecorder'); 3782 } 3783}); 3784``` 3785 3786### release<sup>9+</sup> 3787 3788release(): Promise\<void> 3789 3790异步方式释放音视频录制资源。通过Promise获取返回值。 3791 3792释放音视频录制资源之后,该AVRecorder实例不能再进行任何操作。 3793 3794**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 3795 3796**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 3797 3798**返回值:** 3799 3800| 类型 | 说明 | 3801| -------------- | ------------------------------------------- | 3802| Promise\<void> | 异步释放音视频录制资源方法的Promise返回值。 | 3803 3804**错误码:** 3805 3806以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3807 3808| 错误码ID | 错误信息 | 3809| -------- | --------------------------------- | 3810| 5400105 | Service died. Return by callback. | 3811 3812**示例:** 3813 3814```ts 3815import { BusinessError } from '@kit.BasicServicesKit'; 3816 3817avRecorder.release().then(() => { 3818 console.info('Succeeded in releasing AVRecorder'); 3819}).catch((err: BusinessError) => { 3820 console.error('Failed to release AVRecorder and catch error is ' + err.message); 3821}); 3822``` 3823 3824### getCurrentAudioCapturerInfo<sup>11+</sup> 3825 3826getCurrentAudioCapturerInfo(callback: AsyncCallback\<audio.AudioCapturerChangeInfo>): void 3827 3828异步方式获取当前音频采集参数。通过注册回调函数获取返回值。 3829 3830在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。 3831 3832**系统能力**:SystemCapability.Multimedia.Media.AVRecorder 3833 3834**参数**: 3835 3836| 参数名 | 类型 | 必填 | 说明 | 3837| -------- | ------------------------------------------------------------ | ---- | ------------------------------------ | 3838| callback | AsyncCallback\<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | 是 | 回调函数。当获取音频采集参数成功时,err为undefined,data为获取到的audio.AudioCapturerChangeInfo,否则为错误对象。 | 3839 3840**错误码**: 3841 3842以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3843 3844| 错误码ID | 错误信息 | 3845| -------- | ------------------------------------------ | 3846| 5400102 | Operation not allowed. | 3847| 5400103 | I/O error. | 3848| 5400105 | Service died. Return by callback. | 3849 3850**示例**: 3851 3852```ts 3853import { audio } from '@kit.AudioKit'; 3854 3855let currentCapturerInfo: audio.AudioCapturerChangeInfo; 3856 3857avRecorder.getCurrentAudioCapturerInfo((err: BusinessError, capturerInfo: audio.AudioCapturerChangeInfo) => { 3858 if (err) { 3859 console.error('Failed to get CurrentAudioCapturerInfo and error is ' + err.message); 3860 } else { 3861 console.info('Succeeded in getting CurrentAudioCapturerInfo'); 3862 currentCapturerInfo = capturerInfo; 3863 } 3864}); 3865``` 3866 3867### getCurrentAudioCapturerInfo<sup>11+</sup> 3868 3869getCurrentAudioCapturerInfo(): Promise\<audio.AudioCapturerChangeInfo> 3870 3871异步方式获取当前音频采集参数。通过Promise获取返回值。 3872 3873在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。 3874 3875**系统能力**:SystemCapability.Multimedia.Media.AVRecorder 3876 3877**返回值**: 3878 3879| 类型 | 说明 | 3880| ------------------------------------------------------------ | ------------------------------------------------- | 3881| Promise\<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | Promise对象,返回获取的当前音频采集参数。 | 3882 3883**错误码**: 3884 3885以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3886 3887| 错误码ID | 错误信息 | 3888| -------- | -------------------------------- | 3889| 5400102 | Operation not allowed. | 3890| 5400103 | I/O error. | 3891| 5400105 | Service died. Return by promise. | 3892 3893**示例**: 3894 3895```ts 3896import { audio } from '@kit.AudioKit'; 3897 3898let currentCapturerInfo: audio.AudioCapturerChangeInfo; 3899 3900avRecorder.getCurrentAudioCapturerInfo().then((capturerInfo: audio.AudioCapturerChangeInfo) => { 3901 console.info('Succeeded in getting CurrentAudioCapturerInfo'); 3902 currentCapturerInfo = capturerInfo; 3903}).catch((err: BusinessError) => { 3904 console.error('Failed to get CurrentAudioCapturerInfo and catch error is ' + err.message); 3905}); 3906``` 3907 3908### getAudioCapturerMaxAmplitude<sup>11+</sup> 3909 3910getAudioCapturerMaxAmplitude(callback: AsyncCallback\<number>): void 3911 3912异步方式获取当前音频最大振幅。通过注册回调函数获取返回值。 3913 3914在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。 3915 3916调用接口时,获取到的返回值是上一次获取最大振幅的时刻到当前这段区间内的音频最大振幅。即,如果在1s的时刻获取了一次最大振幅,在2s时再获取到的最大振幅时1-2s这个区间里面的最大值。 3917 3918**系统能力**:SystemCapability.Multimedia.Media.AVRecorder 3919 3920**参数**: 3921 3922| 参数名 | 类型 | 必填 | 说明 | 3923| -------- | ---------------------- | ---- | ------------------------------------ | 3924| callback | AsyncCallback\<number> | 是 | 回调函数。获取当前音频最大振幅成功时,err为undefined,data为获取到的最大振幅,否则为错误对象。 | 3925 3926**错误码**: 3927 3928以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3929 3930| 错误码ID | 错误信息 | 3931| -------- | ------------------------------------------ | 3932| 5400102 | Operation not allowed. | 3933| 5400105 | Service died. Return by callback. | 3934 3935**示例**: 3936 3937```ts 3938let maxAmplitude: number; 3939 3940avRecorder.getAudioCapturerMaxAmplitude((err: BusinessError, amplitude: number) => { 3941 if (err) { 3942 console.error('Failed to get AudioCapturerMaxAmplitude and error is ' + err.message); 3943 } else { 3944 console.info('Succeeded in getting AudioCapturerMaxAmplitude'); 3945 maxAmplitude = amplitude; 3946 } 3947}); 3948``` 3949 3950### getAudioCapturerMaxAmplitude<sup>11+</sup> 3951 3952getAudioCapturerMaxAmplitude(): Promise\<number> 3953 3954异步方式获取当前音频最大振幅参数。通过Promise获取返回值。 3955 3956在prepare()成功触发后,才能调用此方法。在stop()成功触发后,调用此方法会报错。 3957 3958调用接口时,获取到的返回值是上一次获取最大振幅的时刻到当前这段区间内的音频最大振幅。即,如果在1s的时刻获取了一次最大振幅,在2s时再获取到的最大振幅时1-2s这个区间里面的最大值。 3959 3960**系统能力**:SystemCapability.Multimedia.Media.AVRecorder 3961 3962**返回值**: 3963 3964| 类型 | 说明 | 3965| ---------------- | ------------------------------------------------- | 3966| Promise\<number> | Promise对象,返回获取的当前音频最大振幅。 | 3967 3968**错误码**: 3969 3970以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 3971 3972| 错误码ID | 错误信息 | 3973| -------- | -------------------------------- | 3974| 5400102 | Operation not allowed. | 3975| 5400105 | Service died. Return by promise. | 3976 3977**示例**: 3978 3979```ts 3980let maxAmplitude: number; 3981 3982avRecorder.getAudioCapturerMaxAmplitude().then((amplitude: number) => { 3983 console.info('Succeeded in getting AudioCapturerMaxAmplitude'); 3984 maxAmplitude = amplitude; 3985}).catch((err: BusinessError) => { 3986 console.error('Failed to get AudioCapturerMaxAmplitude and catch error is ' + err.message); 3987}); 3988``` 3989 3990### getAvailableEncoder<sup>11+</sup> 3991 3992getAvailableEncoder(callback: AsyncCallback\<Array\<EncoderInfo>>): void 3993 3994异步方式获取可用的编码器参数。通过注册回调函数获取返回值。 3995 3996**系统能力**:SystemCapability.Multimedia.Media.AVRecorder 3997 3998**参数**: 3999 4000| 参数名 | 类型 | 必填 | 说明 | 4001| -------- | ----------------------------------------------------- | ---- | ------------------------------------ | 4002| callback | AsyncCallback\<Array\<[EncoderInfo](#encoderinfo11)>> | 是 | 回调函数。获取可用的编码器参数成功时,err为undefined,data为获取到的编码器参数,否则为错误对象。 | 4003 4004**错误码**: 4005 4006以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4007 4008| 错误码ID | 错误信息 | 4009| -------- | ------------------------------------------ | 4010| 5400102 | Operation not allowed. | 4011| 5400105 | Service died. Return by callback. | 4012 4013**示例**: 4014 4015```ts 4016let encoderInfo: media.EncoderInfo; 4017 4018avRecorder.getAvailableEncoder((err: BusinessError, info: media.EncoderInfo[]) => { 4019 if (err) { 4020 console.error('Failed to get AvailableEncoder and error is ' + err.message); 4021 } else { 4022 console.info('Succeeded in getting AvailableEncoder'); 4023 encoderInfo = info[0]; 4024 } 4025}); 4026``` 4027 4028### getAvailableEncoder<sup>11+</sup> 4029 4030getAvailableEncoder(): Promise\<Array\<EncoderInfo>> 4031 4032异步方式获取可用的编码器参数。通过注册回调函数获取返回值。 4033 4034**系统能力**:SystemCapability.Multimedia.Media.AVRecorder 4035 4036**返回值**: 4037 4038| 类型 | 说明 | 4039| ----------------------------------------------- | ----------------------------------------------- | 4040| Promise\<Array\<[EncoderInfo](#encoderinfo11)>> | Promise对象,返回获取的可用的编码器参数。 | 4041 4042**错误码**: 4043 4044以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4045 4046| 错误码ID | 错误信息 | 4047| -------- | -------------------------------- | 4048| 5400102 | Operation not allowed. | 4049| 5400105 | Service died. Return by promise. | 4050 4051**示例**: 4052 4053```ts 4054let encoderInfo: media.EncoderInfo; 4055 4056avRecorder.getAvailableEncoder().then((info: media.EncoderInfo[]) => { 4057 console.info('Succeeded in getting AvailableEncoder'); 4058 encoderInfo = info[0]; 4059}).catch((err: BusinessError) => { 4060 console.error('Failed to get AvailableEncoder and catch error is ' + err.message); 4061}); 4062``` 4063 4064### getAVRecorderConfig<sup>11+</sup> 4065 4066getAVRecorderConfig(callback: AsyncCallback\<AVRecorderConfig>): void 4067 4068异步方式获取实时的配置参数。通过注册回调函数获取返回值。 4069 4070只能在[prepare()](#prepare9-2)接口调用后调用。 4071 4072**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4073 4074**参数:** 4075 4076| 参数名 | 类型 | 必填 | 说明 | 4077| -------- | ---------------------- | ---- | --------------------------- | 4078| callback | AsyncCallback\<[AVRecorderConfig](#avrecorderconfig9)> | 是 | 回调函数。获取实时配置的参数成功时,err为undefined,data为获取到的配置参数,否则为错误对象。 | 4079 4080**错误码:** 4081 4082以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 4083 4084| 错误码ID | 错误信息 | 4085| -------- | ------------------------------------------ | 4086| 5400102 | Operate not permit. Return by callback. | 4087| 5400103 | IO error. Return by callback. | 4088| 5400105 | Service died. Return by callback. | 4089 4090**示例:** 4091 4092```ts 4093import { BusinessError } from '@kit.BasicServicesKit'; 4094 4095let avConfig: media.AVRecorderConfig; 4096 4097avRecorder.getAVRecorderConfig((err: BusinessError, config: media.AVRecorderConfig) => { 4098 if (err) { 4099 console.error('Failed to get avConfig and error is ' + err.message); 4100 } else { 4101 console.info('Succeeded in getting AVRecorderConfig'); 4102 avConfig = config; 4103 } 4104}); 4105``` 4106 4107### getAVRecorderConfig<sup>11+</sup> 4108 4109getAVRecorderConfig(): Promise\<AVRecorderConfig>; 4110 4111异步方式获取实时的配置参数。通过Promise获取返回值。 4112 4113只能在[prepare()](#prepare9-3)接口调用后调用。 4114 4115**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4116 4117**返回值:** 4118 4119| 类型 | 说明 | 4120| ---------------- | -------------------------------- | 4121| Promise\<[AVRecorderConfig](#avrecorderconfig9)> | 异步获得实时配置参数的回调方法。 | 4122 4123**错误码:** 4124 4125以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 4126 4127| 错误码ID | 错误信息 | 4128| -------- | ----------------------------------------- | 4129| 5400102 | Operate not permit. Return by promise. | 4130| 5400103 | IO error. Return by promise. | 4131| 5400105 | Service died. Return by promise. | 4132 4133**示例:** 4134 4135```ts 4136import { BusinessError } from '@kit.BasicServicesKit'; 4137 4138let avConfig: media.AVRecorderConfig; 4139 4140avRecorder.getAVRecorderConfig().then((config: media.AVRecorderConfig) => { 4141 console.info('Succeeded in getting AVRecorderConfig'); 4142 avConfig = config; 4143}).catch((err: BusinessError) => { 4144 console.error('Failed to get AVRecorderConfig and catch error is ' + err.message); 4145}); 4146``` 4147 4148### on('stateChange')<sup>9+</sup> 4149 4150on(type: 'stateChange', callback: OnAVRecorderStateChangeHandler): void 4151 4152订阅录制状态机AVRecorderState切换的事件,当 AVRecorderState状态机发生变化时,会通过订阅的回调方法通知用户。用户只能订阅一个状态机切换事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。 4153 4154**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 4155 4156**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4157 4158**参数:** 4159 4160| 参数名 | 类型 | 必填 | 说明 | 4161| -------- | -------- | ---- | ------------------------------------------------------------ | 4162| type | string | 是 | 状态机切换事件回调类型,支持的事件:'stateChange',用户操作和系统都会触发此事件。 | 4163| callback | [OnAVRecorderStateChangeHandler](#onavrecorderstatechangehandler12) | 是 | 状态机切换事件回调方法。 | 4164 4165**错误码:** 4166 4167以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4168 4169| 错误码ID | 错误信息 | 4170| -------- | --------------------------------- | 4171| 5400103 | IO error. Return by callback. | 4172| 5400105 | Service died. Return by callback. | 4173 4174**示例:** 4175 4176```ts 4177avRecorder.on('stateChange', async (state: media.AVRecorderState, reason: media.StateChangeReason) => { 4178 console.info('case state has changed, new state is :' + state + ',and new reason is : ' + reason); 4179}); 4180``` 4181 4182### off('stateChange')<sup>9+</sup> 4183 4184off(type: 'stateChange', callback?: OnAVRecorderStateChangeHandler): void 4185 4186取消订阅播放状态机[AVRecorderState](#avrecorderstate9)切换的事件。 4187 4188**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 4189 4190**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4191 4192**参数:** 4193 4194| 参数名 | 类型 | 必填 | 说明 | 4195| ------ | ------ | ---- | ------------------------------------------------------------ | 4196| type | string | 是 | 状态机切换事件回调类型,支持的事件:'stateChange',用户操作和系统都会触发此事件。 | 4197| callback | [OnAVRecorderStateChangeHandler](#onavrecorderstatechangehandler12) | 否 | 状态机切换事件回调方法。<br/>从API version 12开始支持此参数。 | 4198 4199**示例:** 4200 4201```ts 4202avRecorder.off('stateChange'); 4203``` 4204 4205### on('error')<sup>9+</sup> 4206 4207on(type: 'error', callback: ErrorCallback): void 4208 4209订阅AVRecorder的错误事件,该事件仅用于错误提示,不需要用户停止播控动作。如果此时[AVRecorderState](#avrecorderstate9)也切至error状态,用户需要通过[reset()](#reset9-2)或者[release()](#release9-2)退出录制操作。 4210 4211用户只能订阅一个错误事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。 4212 4213**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 4214 4215**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4216 4217**参数:** 4218 4219| 参数名 | 类型 | 必填 | 说明 | 4220| -------- | ------------- | ---- | ------------------------------------------------------------ | 4221| type | string | 是 | 录制错误事件回调类型'error'。 <br>- 'error':录制过程中发生错误,触发该事件。 | 4222| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是 | 录制错误事件回调方法。 | 4223 4224**错误码:** 4225 4226以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4227 4228| 错误码ID | 错误信息 | 4229| -------- | ------------------------------------------ | 4230| 201 | Permission denied. | 4231| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 4232| 801 | Capability not supported. | 4233| 5400101 | No memory. | 4234| 5400102 | Operation not allowed. | 4235| 5400103 | I/O error. | 4236| 5400104 | Time out. | 4237| 5400105 | Service died. | 4238| 5400106 | Unsupported format. | 4239| 5400107 | Audio interrupted. | 4240 4241**示例:** 4242 4243```ts 4244import { BusinessError } from '@kit.BasicServicesKit'; 4245 4246avRecorder.on('error', (err: BusinessError) => { 4247 console.info('case avRecorder.on(error) called, errMessage is ' + err.message); 4248}); 4249``` 4250 4251### off('error')<sup>9+</sup> 4252 4253off(type: 'error', callback?: ErrorCallback): void 4254 4255取消订阅录制错误事件,取消后不再接收到AVRecorder的错误事件。 4256 4257**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 4258 4259**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4260 4261**参数:** 4262 4263| 参数名 | 类型 | 必填 | 说明 | 4264| ------ | ------ | ---- | ------------------------------------------------------------ | 4265| type | string | 是 | 录制错误事件回调类型'error'。 <br>- 'error':录制过程中发生错误,触发该事件。 | 4266| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否 | 录制错误事件回调方法。<br/>从API version 12开始支持此参数。 | 4267 4268**示例:** 4269 4270```ts 4271avRecorder.off('error'); 4272``` 4273 4274### on('audioCapturerChange')<sup>11+</sup> 4275 4276on(type: 'audioCapturerChange', callback: Callback<audio.AudioCapturerChangeInfo>): void 4277 4278订阅录音配置变化的回调,任意录音配置的变化会触发变化后的录音配置全量信息回调。 4279 4280当用户重复订阅时,以最后一次订阅的回调接口为准。 4281 4282**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4283 4284**参数:** 4285 4286| 参数名 | 类型 | 必填 | 说明 | 4287| -------- | -------- | ---- | ------------------------------------------------------------ | 4288| type | string | 是 |录音配置变化的回调类型,支持的事件:'audioCapturerChange'。 | 4289| callback | Callback<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | 是 | 变化后的录音配置全量信息。| 4290 4291**错误码:** 4292 4293| 错误码ID | 错误信息 | 4294| -------- | ------------------------------------------ | 4295| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 4296 4297**示例:** 4298 4299```ts 4300import { audio } from '@kit.AudioKit' 4301 4302let capturerChangeInfo: audio.AudioCapturerChangeInfo; 4303 4304avRecorder.on('audioCapturerChange', (audioCapturerChangeInfo: audio.AudioCapturerChangeInfo) => { 4305 console.info('audioCapturerChange called'); 4306 capturerChangeInfo = audioCapturerChangeInfo; 4307}); 4308``` 4309 4310### off('audioCapturerChange')<sup>11+</sup> 4311 4312off(type: 'audioCapturerChange', callback?: Callback<audio.AudioCapturerChangeInfo>): void 4313 4314取消订阅录音变化的回调事件。 4315 4316**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4317 4318**参数:** 4319 4320| 参数名 | 类型 | 必填 | 说明 | 4321| ------ | ------ | ---- | ------------------------------------------------------------ | 4322| type | string | 是 | 录音配置变化的回调类型,支持的事件:'audioCapturerChange'。 | 4323| callback | Callback<[audio.AudioCapturerChangeInfo](../apis-audio-kit/js-apis-audio.md#audiocapturerchangeinfo9)> | 否 | 变化后的录音配置全量信息。<br/>从API version 12开始支持此参数。| 4324 4325**示例:** 4326 4327```ts 4328avRecorder.off('audioCapturerChange'); 4329``` 4330 4331### on('photoAssetAvailable')<sup>12+</sup> 4332 4333on(type: 'photoAssetAvailable', callback: Callback\<photoAccessHelper.PhotoAsset>): void 4334 4335订阅媒体资源回调事件,当[FileGenerationMode](#filegenerationmode12)枚举设置为系统创建媒体文件时,会在[stop](#stop9-2)操作结束后把[PhotoAsset](../apis-media-library-kit/js-apis-photoAccessHelper.md#photoasset)对象回调给应用。 4336 4337当用户重复订阅时,以最后一次订阅的回调接口为准。 4338 4339**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4340 4341**参数:** 4342 4343| 参数名 | 类型 | 必填 | 说明 | 4344| -------- | -------- | ---- | ------------------------------------------------------------ | 4345| type | string | 是 |录像资源的回调类型,支持的事件:'photoAssetAvailable'。 | 4346| callback | Callback<[photoAccessHelper.PhotoAsset](../apis-media-library-kit/js-apis-photoAccessHelper.md#photoasset)> | 是 | 系统创建的资源文件对应的PhotoAsset对象。| 4347 4348**错误码:** 4349 4350| 错误码ID | 错误信息 | 4351| -------- | ------------------------------------------ | 4352| 5400103 | IO error. Return by callback. | 4353| 5400105 | Service died. Return by callback. | 4354 4355**示例:** 4356 4357<!--code_no_check--> 4358```ts 4359import { photoAccessHelper } from '@kit.MediaLibraryKit'; 4360import { common } from '@kit.AbilityKit' 4361let photoAsset: photoAccessHelper.PhotoAsset; 4362let context = getContext(this) as common.UIAbilityContext 4363 4364// 例:处理photoAsset回调,保存video。 4365async function saveVideo(asset: photoAccessHelper.PhotoAsset) { 4366 console.info("saveVideo called"); 4367 try { 4368 let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); 4369 let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(asset); 4370 assetChangeRequest.saveCameraPhoto(); 4371 await phAccessHelper.applyChanges(assetChangeRequest); 4372 console.info('apply saveVideo successfully'); 4373 } catch (err) { 4374 console.error(`apply saveVideo failed with error: ${err.code}, ${err.message}`); 4375 } 4376} 4377// 注册photoAsset监听。 4378avRecorder.on('photoAssetAvailable', (asset: photoAccessHelper.PhotoAsset) => { 4379 console.info('photoAssetAvailable called'); 4380 if (asset != undefined) { 4381 photoAsset = asset; 4382 // 处理photoAsset回调。 4383 // 例: this.saveVideo(asset); 4384 } else { 4385 console.error('photoAsset is undefined'); 4386 } 4387}); 4388``` 4389 4390### off('photoAssetAvailable')<sup>12+</sup> 4391 4392off(type: 'photoAssetAvailable', callback?: Callback<photoAccessHelper.PhotoAsset>): void 4393 4394取消订阅媒体资源的回调类型。 4395 4396**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4397 4398**参数:** 4399 4400| 参数名 | 类型 | 必填 | 说明 | 4401| ------ | ------ | ---- | ------------------------------------------------------------ | 4402| type | string | 是 | 录音配置变化的回调类型,支持的事件:'photoAssetAvailable'。 | 4403| callback | Callback<[photoAccessHelper.PhotoAsset](../apis-media-library-kit/js-apis-photoAccessHelper.md#photoasset)> | 否 | 系统创建的资源文件对应的PhotoAsset对象。| 4404 4405**示例:** 4406 4407```ts 4408avRecorder.off('photoAssetAvailable'); 4409``` 4410 4411## AVRecorderState<sup>9+</sup> 4412 4413type AVRecorderState = 'idle' | 'prepared' | 'started' | 'paused' | 'stopped' | 'released' | 'error' 4414 4415音视频录制的状态机。可通过state属性获取当前状态。 4416 4417**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 4418 4419**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4420 4421| 类型 | 说明 | 4422| -------- | ------------------------------------------------------------ | 4423| 'idle' | 闲置状态。此时可以调用[AVRecorder.prepare()](#prepare9-2)方法设置录制参数,进入prepared状态。AVRecorder刚被创建,或者在任何非released状态下调用[AVRecorder.reset()](#reset9-2)方法,均进入idle状态。 | 4424| 'prepared' | 参数设置完成。此时可以调用[AVRecorder.start()](#start9)方法开始录制,进入started状态。 | 4425| 'started' | 正在录制。此时可以调用[AVRecorder.pause()](#pause9-2)方法暂停录制,进入paused状态。也可以调用[AVRecorder.stop()](#stop9-2)方法结束录制,进入stopped状态。 | 4426| 'paused' | 录制暂停。此时可以调用[AVRecorder.resume()](#resume9)方法继续录制,进入started状态。也可以调用[AVRecorder.stop()](#stop9-2)方法结束录制,进入stopped状态。 | 4427| 'stopped' | 录制停止。此时可以调用[AVRecorder.prepare()](#prepare9-2)方法设置录制参数,重新进入prepared状态。 | 4428| 'released' | 录制资源释放。此时不能再进行任何操作。在任何其他状态下,均可以通过调用[AVRecorder.release()](#release9-2)方法进入released状态。 | 4429| 'error' | 错误状态。当AVRecorder实例发生不可逆错误,会转换至当前状态。切换至error状态时会伴随[AVRecorder.on('error')事件](#onerror9-1),该事件会上报详细错误原因。在error状态时,用户需要调用[AVRecorder.reset()](#reset9-2)方法重置AVRecorder实例,或者调用[AVRecorder.release()](#release9-2)方法释放资源。 | 4430 4431## OnAVRecorderStateChangeHandler<sup>12+</sup> 4432 4433type OnAVRecorderStateChangeHandler = (state: AVRecorderState, reason: StateChangeReason) => void 4434 4435状态机切换事件回调方法。 4436 4437**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 4438 4439**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4440 4441| 参数名 | 类型 | 必填 | 说明 | 4442| ------ | ------ | ------ | ------------------------------------------------------------ | 4443| state | [AVRecorderState](#avrecorderstate9) | 必填 | 当前录制状态。 | 4444| reason | [StateChangeReason](#statechangereason9) | 必填 | 当前录制状态的切换原因。 | 4445 4446## AVRecorderConfig<sup>9+</sup> 4447 4448表示音视频录制的参数设置。 4449 4450通过audioSourceType和videoSourceType区分纯音频录制、纯视频录制或音视频录制。纯音频录制时,仅需要设置audioSourceType;纯视频录制时,仅需要设置videoSourceType;音视频录制时,audioSourceType和videoSourceType均需要设置。 4451 4452**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4453 4454| 名称 | 类型 | 必填 | 说明 | 4455| --------------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 4456| audioSourceType | [AudioSourceType](#audiosourcetype9) | 否 | 选择录制的音频源类型。选择音频录制时必填。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。| 4457| videoSourceType | [VideoSourceType](#videosourcetype9) | 否 | 选择录制的视频源类型。选择视频录制时必填。 | 4458| profile | [AVRecorderProfile](#avrecorderprofile9) | 是 | 录制的profile,必要参数。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。| 4459| url | string | 是 | 录制输出URL:fd://xx (fd number) ,必要参数。 <br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 | 4460|fileGenerationMode<sup>12+</sup> | [FileGenerationMode](#filegenerationmode12) | 否 | 创建媒体文件的模式,配合[on('photoAssetAvailable')](#onphotoassetavailable12)监听使用。| 4461| rotation<sup>(deprecated)</sup> | number | 否 | 录制的视频旋转角度,mp4格式支持0,90,180,270,默认值为0。<br>从API version 6开始支持,从API version 12开始废弃。建议使用[AVMetadata](#avmetadata11).videoOrientation替代。如果同时设置两个值,将会采用[AVMetadata](#avmetadata11).videoOrientation。 | 4462| location<sup>(deprecated)</sup> | [Location](#location) | 否 | 录制的地理位置,默认不记录地理位置信息。<br>从API version 6开始支持,从API version 12开始废弃。建议使用 [AVMetadata](#avmetadata11).location。如果同时设置两个值,将会采用[AVMetadata](#avmetadata11).location。 | 4463| metadata<sup>12+</sup> | [AVMetadata](#avmetadata11) | 否 | 设置元数据信息。详情见 [AVMetadata](#avmetadata11)。 | 4464 4465## AVRecorderProfile<sup>9+</sup> 4466 4467音视频录制的配置文件。 4468 4469**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4470 4471| 名称 | 类型 | 必填 | 说明 | 4472| ---------------- | -------------------------------------------- | ---- | ------------------------------------------------------------ | 4473| 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 开始,该接口支持在原子化服务中使用。 | 4474| 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 开始,该接口支持在原子化服务中使用。 | 4475| audioCodec | [CodecMimeType](#codecmimetype8) | 否 | 音频编码格式,选择音频录制时必填。当前支持AUDIO_AAC,AUDIO_MP3,AUDIO_G711MU。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 | 4476| 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 开始,该接口支持在原子化服务中使用。 | 4477| fileFormat | [ContainerFormatType](#containerformattype8) | 是 | 文件的容器格式,必要参数。当前支持MP4、M4A、MP3、WAV封装格式,不支持在MP4封装格式下使用AUDIO_MP3编码格式。<br>**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。| 4478| videoBitrate | number | 否 | 视频编码比特率,选择视频录制时必填,支持范围[10000 - 100000000]。 | 4479| videoCodec | [CodecMimeType](#codecmimetype8) | 否 | 视频编码格式,选择视频录制时必填。当前支持VIDEO_AVC。| 4480| videoFrameWidth | number | 否 | 视频帧的宽,选择视频录制时必填,支持范围[176 - 4096]。 | 4481| videoFrameHeight | number | 否 | 视频帧的高,选择视频录制时必填,支持范围[144 - 4096]。 | 4482| videoFrameRate | number | 否 | 视频帧率,选择视频录制时必填,支持范围[1 - 60]。 | 4483| isHdr<sup>11+</sup> | boolean | 否 | HDR编码,选择视频录制时选填,isHdr默认为false,对应编码格式没有要求,isHdr为true时,对应的编码格式必须为video/hevc。| 4484| enableTemporalScale<sup>12+</sup> | boolean | 否 | 视频录制是否支持时域分层编码功能,选择视频录制时选填,enableTemporalScale默认为false。设置为true时,编码输出的码流中部分帧可以支持跳过不编码。| 4485 4486## AudioSourceType<sup>9+</sup> 4487 4488表示视频录制中音频源类型的枚举。 4489 4490**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4491 4492| 名称 | 值 | 说明 | 4493| ------------------------- | ---- | ---------------------- | 4494| AUDIO_SOURCE_TYPE_DEFAULT | 0 | 默认的音频输入源类型。 | 4495| AUDIO_SOURCE_TYPE_MIC | 1 | 表示MIC的音频输入源。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 | 4496| AUDIO_SOURCE_TYPE_VOICE_RECOGNITION<sup>12+</sup> | 2 | 表示语音识别场景的音频源。 | 4497| AUDIO_SOURCE_TYPE_VOICE_COMMUNICATION<sup>12+</sup> | 7 | 表示语音通话场景的音频源。 | 4498| AUDIO_SOURCE_TYPE_VOICE_MESSAGE<sup>12+</sup> | 10 | 表示短语音消息的音频源。 | 4499| AUDIO_SOURCE_TYPE_CAMCORDER<sup>12+</sup> | 13 | 表示相机录像的音频源。 | 4500 4501## VideoSourceType<sup>9+</sup> 4502 4503表示视频录制中视频源类型的枚举。 4504 4505**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4506 4507| 名称 | 值 | 说明 | 4508| ----------------------------- | ---- | ------------------------------- | 4509| VIDEO_SOURCE_TYPE_SURFACE_YUV | 0 | 输入surface中携带的是raw data。 | 4510| VIDEO_SOURCE_TYPE_SURFACE_ES | 1 | 输入surface中携带的是ES data。 | 4511 4512## ContainerFormatType<sup>8+</sup> 4513 4514表示容器格式类型的枚举,缩写为CFT。 4515 4516**系统能力:** SystemCapability.Multimedia.Media.Core 4517 4518| 名称 | 值 | 说明 | 4519| ----------- | ----- | --------------------- | 4520| CFT_MPEG_4 | 'mp4' | 视频的容器格式,MP4。 | 4521| CFT_MPEG_4A | 'm4a' | 音频的容器格式,M4A。<br> **原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 | 4522| CFT_MP3<sup>12+</sup> | 'mp3' | 音频的容器格式,MP3。 | 4523| CFT_WAV<sup>12+</sup> | 'wav' | 音频的容器格式,WAV。 | 4524 4525## Location 4526 4527视频录制的地理位置。 4528 4529**系统能力:** SystemCapability.Multimedia.Media.Core 4530 4531| 名称 | 类型 | 必填 | 说明 | 4532| --------- | ------ | ---- | ---------------- | 4533| latitude | number | 是 | 地理位置的纬度,取值范围为[-90, 90]。 | 4534| longitude | number | 是 | 地理位置的经度,取值范围为[-180, 180]。 | 4535 4536## EncoderInfo<sup>11+</sup> 4537 4538编码器和规格参数 4539 4540系统能力:SystemCapability.Multimedia.Media.AVRecorder 4541 4542| 名称 | 类型 | 可读 | 可写 | 说明 | 4543| ---------- | -------------------------------- | ---- | ---- | ------------------------------------------------------------ | 4544| mimeType | [CodecMimeType](#codecmimetype8) | 是 | 否 | 编码器MIME类型名称。 | 4545| type | string | 是 | 否 | 编码器类型,audio表示音频编码器,video表示视频编码器。 | 4546| bitRate | [Range](#range11) | 是 | 否 | 比特率,包含该编码器的最大和最小值。 | 4547| frameRate | [Range](#range11) | 是 | 否 | 视频帧率,包含帧率的最大和最小值,仅视频编码器拥有。 | 4548| width | [Range](#range11) | 是 | 否 | 视频帧的宽度,包含宽度的最大和最小值,仅视频编码器拥有。 | 4549| height | [Range](#range11) | 是 | 否 | 视频帧的高度,包含高度的最大和最小值,仅视频编码器拥有。 | 4550| channels | [Range](#range11) | 是 | 否 | 音频采集声道数,包含声道数的最大和最小值,仅音频编码器拥有。 | 4551| sampleRate | Array\<number> | 是 | 否 | 音频采样率,包含所有可以使用的音频采样率值数组,具体数值依赖编码器类型,仅音频编码器拥有。 | 4552 4553## Range<sup>11+</sup> 4554 4555表示一个类型的范围 4556 4557系统能力:SystemCapability.Multimedia.Media.AVRecorder 4558 4559| 名称 | 类型 | 可读 | 可写 | 说明 | 4560| ---- | ------ | ---- | ---- | ------------ | 4561| min | number | 是 | 否 | 范围的最小值。 | 4562| max | number | 是 | 否 | 范围的最大值。 | 4563 4564## FileGenerationMode<sup>12+</sup> 4565 4566表示创建媒体文件模式的枚举。 4567 4568**系统能力:** SystemCapability.Multimedia.Media.AVRecorder 4569 4570| 名称 | 值 | 说明 | 4571| ----------------------------- | ---- | ------------------------------- | 4572| APP_CREATE | 0 | 由应用自行在沙箱创建媒体文件。 | 4573| AUTO_CREATE_CAMERA_SCENE | 1 | 由系统创建媒体文件,当前仅在相机录制场景下生效,会忽略应用设置的url。 | 4574 4575## AVTranscoder<sup>12+</sup> 4576 4577视频转码管理类,用于视频转码。在调用AVTranscoder的方法前,需要先通过createAVTranscoder()构建一个AVTranscoder实例。 4578 4579视频转码demo可参考:[视频转码开发指导](../../media/media/using-avtranscoder-for-transcodering.md) 4580 4581### 属性 4582 4583**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 4584 4585| 名称 | 类型 | 只读 | 可选 | 说明 | 4586| ------- | ------------------------------------ | ---- | ---- | ------------------ | 4587| fdSrc<sup>12+</sup> | [AVFileDescriptor](#avfiledescriptor9) | 否 | 否 | 源媒体文件描述,通过该属性设置数据源。<br/> **使用示例**:<br/>假设一个连续存储的媒体文件,地址偏移:0,字节长度:100。其文件描述为 AVFileDescriptor { fd = 资源句柄; offset = 0; length = 100; }。<br>**说明:** <br> - 将资源句柄(fd)传递给 AVTranscoder 实例之后,请不要通过该资源句柄做其他读写操作,包括但不限于将同一个资源句柄传递给多个 AVPlayer / AVMetadataExtractor / AVImageGenerator / AVTranscoder。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致视频转码数据获取异常。 | 4588| fdDst<sup>12+</sup> | number | 否 | 否 | 目标媒体文件描述,通过该属性设置数据输出。在创建AVTranscoder实例后,必须设置fdSrc和fdDst属性。<br>**说明:** <br> - 将资源句柄(fd)传递给 AVTranscoder 实例之后,请不要通过该资源句柄做其他读写操作,包括但不限于将同一个资源句柄传递给多个 AVPlayer / AVMetadataExtractor / AVImageGenerator / AVTranscoder。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致视频转码数据获取异常。 | 4589 4590### prepare<sup>12+</sup> 4591 4592prepare(config: AVTranscoderConfig): Promise\<void> 4593 4594异步方式进行视频转码的参数设置。通过Promise获取返回值。 4595 4596**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 4597 4598**参数:** 4599 4600| 参数名 | 类型 | 必填 | 说明 | 4601| ------ | -------------------------------------- | ---- | -------------------------- | 4602| config | [AVTranscoderConfig](#avtranscoderconfig12) | 是 | 配置视频转码的相关参数。 | 4603 4604**返回值:** 4605 4606| 类型 | 说明 | 4607| -------------- | ------------------------------------------ | 4608| Promise\<void> | 异步视频转码prepare方法的Promise返回值。 | 4609 4610**错误码:** 4611 4612以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4613 4614| 错误码ID | 错误信息 | 4615| -------- | -------------------------------------- | 4616| 401 | The parameter check failed. Return by promise. | 4617| 5400102 | Operation not allowed. Return by promise. | 4618| 5400105 | Service died. Return by promise. | 4619| 5400106 | Unsupported format. Returned by promise. | 4620 4621**示例:** 4622 4623```ts 4624import { BusinessError } from '@kit.BasicServicesKit'; 4625 4626// 配置参数以实际硬件设备支持的范围为准。 4627let avTranscoderConfig: media.AVTranscoderConfig = { 4628 audioBitrate : 200000, 4629 audioCodec : media.CodecMimeType.AUDIO_AAC, 4630 fileFormat : media.ContainerFormatType.CFT_MPEG_4, 4631 videoBitrate : 3000000, 4632 videoCodec : media.CodecMimeType.VIDEO_AVC, 4633 videoFrameWidth : 1280, 4634 videoFrameHeight : 720, 4635} 4636 4637avTranscoder.prepare(avTranscoderConfig).then(() => { 4638 console.info('prepare success'); 4639}).catch((err: BusinessError) => { 4640 console.error('prepare failed and catch error is ' + err.message); 4641}); 4642``` 4643 4644### start<sup>12+</sup> 4645 4646start(): Promise\<void> 4647 4648异步方式开始视频转码。通过Promise获取返回值。 4649 4650需要[prepare()](#prepare12)事件成功触发后,才能调用start方法。 4651 4652**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 4653 4654**返回值:** 4655 4656| 类型 | 说明 | 4657| -------------- | ------------------------------------- | 4658| Promise\<void> | 异步开始视频转码方法的Promise返回值。 | 4659 4660**错误码:** 4661 4662以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4663 4664| 错误码ID | 错误信息 | 4665| -------- | -------------------------------------- | 4666| 5400102 | Operation not allowed. Return by promise. | 4667| 5400103 | IO error. Return by promise. | 4668| 5400105 | Service died. Return by promise. | 4669 4670**示例:** 4671 4672```ts 4673import { BusinessError } from '@kit.BasicServicesKit'; 4674 4675avTranscoder.start().then(() => { 4676 console.info('start AVTranscoder success'); 4677}).catch((err: BusinessError) => { 4678 console.error('start AVTranscoder failed and catch error is ' + err.message); 4679}); 4680``` 4681 4682### pause<sup>12+</sup> 4683 4684pause(): Promise\<void> 4685 4686异步方式暂停视频转码。通过Promise获取返回值。 4687 4688需要[start()](#start12)事件成功触发后,才能调用pause方法,可以通过调用[resume()](#resume12)接口来恢复转码。 4689 4690**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 4691 4692**返回值:** 4693 4694| 类型 | 说明 | 4695| -------------- | ------------------------------------- | 4696| Promise\<void> | 异步暂停视频转码方法的Promise返回值。 | 4697 4698**错误码:** 4699 4700以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4701 4702| 错误码ID | 错误信息 | 4703| -------- | -------------------------------------- | 4704| 5400102 | Operation not allowed. Return by promise. | 4705| 5400103 | IO error. Return by promise. | 4706| 5400105 | Service died. Return by promise. | 4707 4708**示例:** 4709 4710```ts 4711import { BusinessError } from '@kit.BasicServicesKit'; 4712 4713avTranscoder.pause().then(() => { 4714 console.info('pause AVTranscoder success'); 4715}).catch((err: BusinessError) => { 4716 console.error('pause AVTranscoder failed and catch error is ' + err.message); 4717}); 4718``` 4719 4720### resume<sup>12+</sup> 4721 4722resume(): Promise\<void> 4723 4724异步方式恢复视频转码。通过Promise获取返回值。 4725 4726需要在[pause()](#pause12)事件成功触发后,才能调用resume方法。 4727 4728**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 4729 4730**返回值:** 4731 4732| 类型 | 说明 | 4733| -------------- | ------------------------------------- | 4734| Promise\<void> | 异步恢复视频转码方法的Promise返回值。 | 4735 4736**错误码:** 4737 4738以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4739 4740| 错误码ID | 错误信息 | 4741| -------- | -------------------------------------- | 4742| 5400102 | Operation not allowed. Return by promise. | 4743| 5400103 | IO error. Return by promise. | 4744| 5400105 | Service died. Return by promise. | 4745 4746**示例:** 4747 4748```ts 4749import { BusinessError } from '@kit.BasicServicesKit'; 4750 4751avTranscoder.resume().then(() => { 4752 console.info('resume AVTranscoder success'); 4753}).catch((err: BusinessError) => { 4754 console.error('resume AVTranscoder failed and catch error is ' + err.message); 4755}); 4756``` 4757 4758### cancel<sup>12+</sup> 4759 4760cancel(): Promise\<void> 4761 4762异步方式取消视频转码。通过Promise获取返回值。 4763 4764需要在[prepare()](#prepare12)、[start()](#start12)、[pause()](#pause12)或[resume()](#resume12)事件成功触发后,才能调用cancel方法。 4765 4766**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 4767 4768**返回值:** 4769 4770| 类型 | 说明 | 4771| -------------- | ------------------------------------- | 4772| Promise\<void> | 异步取消视频转码方法的Promise返回值。 | 4773 4774**错误码:** 4775 4776以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4777 4778| 错误码ID | 错误信息 | 4779| -------- | -------------------------------------- | 4780| 5400102 | Operation not allowed. Return by promise. | 4781| 5400103 | IO error. Return by promise. | 4782| 5400105 | Service died. Return by promise. | 4783 4784**示例:** 4785 4786```ts 4787import { BusinessError } from '@kit.BasicServicesKit'; 4788 4789avTranscoder.cancel().then(() => { 4790 console.info('cancel AVTranscoder success'); 4791}).catch((err: BusinessError) => { 4792 console.error('cancel AVTranscoder failed and catch error is ' + err.message); 4793}); 4794``` 4795 4796### release<sup>12+</sup> 4797 4798release(): Promise\<void> 4799 4800异步方式释放视频转码资源。通过Promise获取返回值。 4801 4802释放视频转码资源之后,该AVTranscoder实例不能再进行任何操作。 4803 4804**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 4805 4806**返回值:** 4807 4808| 类型 | 说明 | 4809| -------------- | ------------------------------------------- | 4810| Promise\<void> | 异步释放视频转码资源方法的Promise返回值。 | 4811 4812**错误码:** 4813 4814以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4815 4816| 错误码ID | 错误信息 | 4817| -------- | --------------------------------- | 4818| 5400102 | Operation not allowed. Return by promise. | 4819| 5400105 | Service died. Return by promise. | 4820 4821**示例:** 4822 4823```ts 4824import { BusinessError } from '@kit.BasicServicesKit'; 4825 4826avTranscoder.release().then(() => { 4827 console.info('release AVTranscoder success'); 4828}).catch((err: BusinessError) => { 4829 console.error('release AVTranscoder failed and catch error is ' + err.message); 4830}); 4831``` 4832 4833### on('progressUpdate')<sup>12+</sup> 4834 4835on(type: 'progressUpdate', callback: Callback\<number>): void 4836 4837注册转码进度更新事件,并通过注册的回调方法通知用户。用户只能注册一个进度更新事件的回调方法,当用户重复注册时,以最后一次注册的回调接口为准。 4838 4839**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 4840 4841**参数:** 4842 4843| 参数名 | 类型 | 必填 | 说明 | 4844| -------- | -------- | ---- | ------------------------------------------------------------ | 4845| type | string | 是 | 进度更新事件回调类型,支持的事件:'progressUpdate',在转码过程中系统会自动触发此事件。 | 4846| callback | [Callback](../apis-basic-services-kit/js-apis-base.md#callback) | 是 | 进度更新事件回调方法,progress: number,表示当前转码进度 | 4847 4848**示例:** 4849 4850```ts 4851avTranscoder.on('progressUpdate', (progress: number) => { 4852 console.info('avTranscoder progressUpdate = ' + progress); 4853}); 4854``` 4855 4856### off('progressUpdate')<sup>12+</sup> 4857 4858off(type:'progressUpdate', callback?: Callback\<number>): void 4859 4860取消注册转码进度更新事件。 4861 4862**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 4863 4864**参数:** 4865 4866| 参数名 | 类型 | 必填 | 说明 | 4867| ------ | ------ | ---- | ------------------------------------------------------------ | 4868| type | string | 是 | 进度更新事件回调类型,支持的事件:'progressUpdate',用户操作和系统都会触发此事件。 | 4869| callback | [Callback](../apis-basic-services-kit/js-apis-base.md#callback) | 否 | 已注册的进度更新事件回调。由于当前回调注册时,仅会保留最后一次注册的回调,建议此参数缺省。 | 4870 4871**示例:** 4872 4873```ts 4874avTranscoder.off('progressUpdate'); 4875``` 4876 4877### on('error')<sup>12+</sup> 4878 4879on(type: 'error', callback: ErrorCallback): void 4880 4881注册AVtranscoder的错误事件,该事件仅用于错误提示。如果AVTranscoder上报error事件,用户需要通过[release()](#release12)退出转码操作。 4882 4883用户只能订阅一个错误事件的回调方法,当用户重复订阅时,以最后一次订阅的回调接口为准。 4884 4885**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 4886 4887**参数:** 4888 4889| 参数名 | 类型 | 必填 | 说明 | 4890| -------- | ------------- | ---- | ------------------------------------------------------------ | 4891| type | string | 是 | 转码错误事件回调类型'error'。 <br>- 'error':录制过程中发生错误,触发该事件。 | 4892| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是 | 转码错误事件回调方法。 | 4893 4894**错误码:** 4895 4896以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 4897 4898| 错误码ID | 错误信息 | 4899| -------- | ------------------------------------------ | 4900| 401 | The parameter check failed. | 4901| 801 | Capability not supported. | 4902| 5400101 | No memory. | 4903| 5400102 | Operation not allowed. | 4904| 5400103 | I/O error. | 4905| 5400104 | Time out. | 4906| 5400105 | Service died. | 4907| 5400106 | Unsupported format. | 4908 4909**示例:** 4910 4911```ts 4912import { BusinessError } from '@kit.BasicServicesKit'; 4913 4914avTranscoder.on('error', (err: BusinessError) => { 4915 console.info('case avTranscoder.on(error) called, errMessage is ' + err.message); 4916}); 4917``` 4918 4919### off('error')<sup>12+</sup> 4920 4921off(type:'error', callback?: ErrorCallback): void 4922 4923取消注册转码错误事件,取消后不再接收到AVTranscoder的错误事件。 4924 4925**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 4926 4927**参数:** 4928 4929| 参数名 | 类型 | 必填 | 说明 | 4930| ------ | ------ | ---- | ------------------------------------------------------------ | 4931| type | string | 是 | 转码错误事件回调类型'error'。 <br>- 'error':转码过程中发生错误,触发该事件。 | 4932| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否 | 错误事件回调方法。 | 4933 4934**示例:** 4935 4936```ts 4937avTranscoder.off('error'); 4938``` 4939 4940### on('complete')<sup>12+</sup> 4941 4942on(type: 'complete', callback: Callback\<void>): void 4943 4944注册转码完成事件,并通过注册的回调方法通知用户。用户只能注册一个进度更新事件的回调方法,当用户重复注册时,以最后一次注册的回调接口为准。 4945 4946当AVTranscoder上报complete事件时,当前转码操作已完成,用户可通过[release()](#release12)退出转码操作。 4947 4948**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 4949 4950**参数:** 4951 4952| 参数名 | 类型 | 必填 | 说明 | 4953| -------- | -------- | ---- | ------------------------------------------------------------ | 4954| type | string | 是 | 完成事件回调类型,支持的事件:'complete',在转码过程中系统会自动触发此事件。 | 4955| callback | [Callback](../apis-basic-services-kit/js-apis-base.md#callback) | 是 | 完成事件回调方法。 | 4956 4957**示例:** 4958 4959```ts 4960avTranscoder.on('complete', () => { 4961 console.info('avTranscoder complete'); 4962}); 4963``` 4964 4965### off('complete')<sup>12+</sup> 4966 4967off(type:'complete', callback?: Callback\<void>): void 4968 4969取消注册转码完成事件。 4970 4971**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 4972 4973**参数:** 4974 4975| 参数名 | 类型 | 必填 | 说明 | 4976| ------ | ------ | ---- | ------------------------------------------------------------ | 4977| type | string | 是 | 转码完成事件回调类型,支持的事件:'complete',用户操作和系统都会触发此事件。 | 4978| callback | [Callback](../apis-basic-services-kit/js-apis-base.md#callback) | 否 | 完成事件回调方法。 | 4979 4980**示例:** 4981 4982```ts 4983avTranscoder.off('complete'); 4984``` 4985 4986## AVTranscoderConfig<sup>12+</sup> 4987 4988表示视频转码的参数设置。 4989 4990**系统能力:** SystemCapability.Multimedia.Media.AVTranscoder 4991 4992| 名称 | 类型 | 只读 | 可选 | 说明 | 4993| --------------- | ---------------------------------------- |---- | ---- | ------------------------------------------------------------ | 4994| audioBitrate | number | 否 | 是 | 输出音频的码率,单位为比特率(bps)。用户不设置,则默认设置为48Kbps。| 4995| audioCodec | [CodecMimeType](#codecmimetype8) | 否 | 是 | 输出音频的编码格式,当前仅支持AAC。 | 4996| fileFormat | [ContainerFormatType](#containerformattype8) | 否 | 否 | 输出视频文件的封装格式,当前视频文件仅支持MP4。| 4997| videoBitrate | number | 否 | 是 | 输出视频的码率,单位为比特率(bps)。用户不设置,则默认码率按输出视频的分辨率设置,[240p,480P]默认码率值为1Mbps,(480P,720P]默认码率值为2Mbps,(720P,1080P]默认码率值为4Mbps,1080P及以上默认值为8Mbps。| 4998| videoCodec | [CodecMimeType](#codecmimetype8) | 否 | 是 | 输出视频的编码格式,当前仅支持AVC和HEVC。| 4999| videoFrameWidth | number | 否 | 是 | 输出视频帧的宽,单位为像素(px)。用户不设置,则默认设置为源视频帧的宽。| 5000| videoFrameHeight | number | 否 | 是 | 输出视频帧的高,单位为像素(px)。用户不设置,则默认设置为源视频帧的高。| 5001 5002 5003 5004## AVMetadataExtractor<sup>11+</sup> 5005 5006元数据获取类,用于从媒体资源中获取元数据。在调用AVMetadataExtractor的方法前,需要先通过[createAVMetadataExtractor()](#mediacreateavmetadataextractor11)构建一个AVMetadataExtractor实例。 5007 5008获取音频或视频元数据的demo可参考:[获取音视频元数据开发指导](../../media/media/avmetadataextractor.md)。 5009 5010### 属性 5011 5012**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 5013 5014| 名称 | 类型 | 可读 | 可写 | 说明 | 5015| --------------------------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ | 5016| 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。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致音视频元数据获取异常。 | 5017| dataSrc<sup>11+</sup> | [AVDataSrcDescriptor](#avdatasrcdescriptor10) | 是 | 是 | 流式媒体资源描述,通过该属性设置数据源。在获取元数据之前,必须设置数据源属性,只能设置fdSrc和dataSrc的其中一个。<br/> 当应用从远端获取音视频媒体文件,在应用未下载完整音视频资源时,可以设置dataSrc提前获取该资源的元数据。| 5018 5019### fetchMetadata<sup>11+</sup> 5020 5021fetchMetadata(callback: AsyncCallback\<AVMetadata>): void 5022 5023异步方式获取媒体元数据。通过注册回调函数获取返回值。 5024 5025**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 5026 5027**参数:** 5028 5029| 参数名 | 类型 | 必填 | 说明 | 5030| -------- | -------------------------------------------- | ---- | ----------------------------------- | 5031| callback | AsyncCallback\<[AVMetadata](#avmetadata11)> | 是 | 回调函数。异步返回音视频元数据对象(AVMetadata)。| 5032 5033**错误码:** 5034 5035以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 5036 5037| 错误码ID | 错误信息 | 5038| -------- | ------------------------------------------ | 5039| 5400102 | Operation not allowed. Returned by callback. | 5040| 5400106 | Unsupported format. Returned by callback. | 5041 5042**示例:** 5043 5044```ts 5045import { BusinessError } from '@kit.BasicServicesKit'; 5046 5047avMetadataExtractor.fetchMetadata((error: BusinessError, metadata: media.AVMetadata) => { 5048 if (error) { 5049 console.error(`Failed to fetch Metadata, err = ${JSON.stringify(error)}`); 5050 return; 5051 } 5052 console.info(`Succeeded in fetching Metadata, genre: ${metadata.genre}`); 5053}); 5054``` 5055 5056### fetchMetadata<sup>11+</sup> 5057 5058fetchMetadata(): Promise\<AVMetadata> 5059 5060异步方式获取媒体元数据。通过Promise获取返回值。 5061 5062**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 5063 5064**返回值:** 5065 5066| 类型 | 说明 | 5067| -------------- | ---------------------------------------- | 5068| Promise\<[AVMetadata](#avmetadata11)> | Promise对象。异步返回音视频元数据对象(AVMetadata)。 | 5069 5070**错误码:** 5071 5072以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 5073 5074| 错误码ID | 错误信息 | 5075| -------- | ----------------------------------------- | 5076| 5400102 | Operation not allowed. Returned by promise. | 5077| 5400106 | Unsupported format. Returned by promise. | 5078 5079**示例:** 5080 5081```ts 5082import { BusinessError } from '@kit.BasicServicesKit'; 5083 5084avMetadataExtractor.fetchMetadata().then((metadata: media.AVMetadata) => { 5085 console.info(`Succeeded in fetching Metadata, genre: ${metadata.genre}`) 5086}).catch((error: BusinessError) => { 5087 console.error(`Failed to fetch Metadata, error message:${error.message}`); 5088}); 5089``` 5090 5091### fetchAlbumCover<sup>11+</sup> 5092 5093fetchAlbumCover(callback: AsyncCallback\<image.PixelMap>): void 5094 5095异步方式获取音频专辑封面。通过注册回调函数获取返回值。 5096 5097**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 5098 5099**参数:** 5100 5101| 参数名 | 类型 | 必填 | 说明 | 5102| -------- | -------------------------------------------- | ---- | ----------------------------------- | 5103| callback | AsyncCallback\<[image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7)> | 是 | 回调函数。异步返回专辑封面。 | 5104 5105**错误码:** 5106 5107以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 5108 5109| 错误码ID | 错误信息 | 5110| -------- | ------------------------------------------ | 5111| 5400102 | Operation not allowed. Return by callback. | 5112| 5400106 | Unsupported format. Returned by callback. | 5113 5114**示例:** 5115 5116```ts 5117import { BusinessError } from '@kit.BasicServicesKit'; 5118import { image } from '@kit.ImageKit'; 5119 5120let pixel_map : image.PixelMap | undefined = undefined; 5121 5122avMetadataExtractor.fetchAlbumCover((error: BusinessError, pixelMap: image.PixelMap) => { 5123 if (error) { 5124 console.error(`Failed to fetch AlbumCover, error = ${JSON.stringify(error)}`); 5125 return; 5126 } 5127 pixel_map = pixelMap; 5128}); 5129``` 5130 5131### fetchAlbumCover<sup>11+</sup> 5132 5133fetchAlbumCover(): Promise\<image.PixelMap> 5134 5135异步方式获取专辑封面。通过Promise获取返回值。 5136 5137**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 5138 5139**返回值:** 5140 5141| 类型 | 说明 | 5142| -------------- | ---------------------------------------- | 5143| Promise\<[image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7)> | Promise对象。异步返回专辑封面。 | 5144 5145**错误码:** 5146 5147以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 5148 5149| 错误码ID | 错误信息 | 5150| -------- | ----------------------------------------- | 5151| 5400102 | Operation not allowed. Returned by promise. | 5152| 5400106 | Unsupported format. Returned by promise. | 5153 5154**示例:** 5155 5156```ts 5157import { BusinessError } from '@kit.BasicServicesKit'; 5158import { image } from '@kit.ImageKit'; 5159 5160let pixel_map : image.PixelMap | undefined = undefined; 5161 5162avMetadataExtractor.fetchAlbumCover().then((pixelMap: image.PixelMap) => { 5163 pixel_map = pixelMap; 5164}).catch((error: BusinessError) => { 5165 console.error(`Failed to fetch AlbumCover, error message:${error.message}`); 5166}); 5167``` 5168 5169### release<sup>11+</sup> 5170 5171release(callback: AsyncCallback\<void>): void 5172 5173异步方式释放资源。通过注册回调函数获取返回值。 5174 5175**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 5176 5177**参数:** 5178 5179| 参数名 | 类型 | 必填 | 说明 | 5180| -------- | -------------------------------------------- | ---- | ----------------------------------- | 5181| callback | AsyncCallback\<void> | 是 |回调函数。当释放资源成功,err为undefined,否则为错误对象。 | 5182 5183**错误码:** 5184 5185以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 5186 5187| 错误码ID | 错误信息 | 5188| -------- | ------------------------------------------ | 5189| 5400102 | Operation not allowed. Returned by callback. | 5190 5191**示例:** 5192 5193```ts 5194import { BusinessError } from '@kit.BasicServicesKit'; 5195 5196avMetadataExtractor.release((error: BusinessError) => { 5197 if (error) { 5198 console.error(`Failed to release, err = ${JSON.stringify(error)}`); 5199 return; 5200 } 5201 console.info(`Succeeded in releasing.`); 5202}); 5203``` 5204 5205### release<sup>11+</sup> 5206 5207release(): Promise\<void> 5208 5209异步方式释放资源。通过Promise获取返回值。 5210 5211**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 5212 5213**返回值:** 5214 5215| 类型 | 说明 | 5216| -------------- | ---------------------------------------- | 5217| Promise\<void> | 异步方式释放资源release方法的Promise返回值。 | 5218 5219**错误码:** 5220 5221以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 5222 5223| 错误码ID | 错误信息 | 5224| -------- | ----------------------------------------- | 5225| 5400102 | Operation not allowed. Returned by promise. | 5226 5227**示例:** 5228 5229```ts 5230import { BusinessError } from '@kit.BasicServicesKit'; 5231 5232avMetadataExtractor.release().then(() => { 5233 console.info(`Succeeded in releasing.`); 5234}).catch((error: BusinessError) => { 5235 console.error(`Failed to release, error message:${error.message}`); 5236}); 5237``` 5238 5239## AVMetadata<sup>11+</sup> 5240 5241音视频元数据,包含各个元数据字段。在[AVRecorderConfig](#avrecorderconfig9)中使用时未声明为当前版本只读的参数可以作为使用[AVRecorder](#avrecorder9)录制时的入参。 5242 5243**系统能力:** SystemCapability.Multimedia.Media.AVMetadataExtractor 5244 5245| 名称 | 类型 | 必填 | 说明 | 5246| ------ | ------ | ---- | ------------------------------------------------------------ | 5247| album | string | 否 | 专辑的标题。当前版本为只读参数。 | 5248| albumArtist | string | 否 | 专辑的艺术家。当前版本为只读参数。 | 5249| artist | string | 否 | 媒体资源的艺术家。当前版本为只读参数。 | 5250| author | string | 否 | 媒体资源的作者。当前版本为只读参数。 | 5251| dateTime | string | 否 | 媒体资源的创建时间。当前版本为只读参数。 | 5252| dateTimeFormat | string | 否 | 媒体资源的创建时间,按YYYY-MM-DD HH:mm:ss格式输出。当前版本为只读参数。 | 5253| composer | string | 否 | 媒体资源的作曲家。当前版本为只读参数。 | 5254| duration | string | 否 | 媒体资源的时长。当前版本为只读参数。 | 5255| genre | string | 否 | 媒体资源的类型或体裁。| 5256| hasAudio | string | 否 | 媒体资源是否包含音频。当前版本为只读参数。 | 5257| hasVideo | string | 否 | 媒体资源是否包含视频。当前版本为只读参数。 | 5258| mimeType | string | 否 | 媒体资源的mime类型。当前版本为只读参数。 | 5259| trackCount | string | 否 | 媒体资源的轨道数量。当前版本为只读参数。 | 5260| sampleRate | string | 否 | 音频的采样率,单位为赫兹(Hz)。当前版本为只读参数。 | 5261| title | string | 否 | 媒体资源的标题。当前版本为只读参数。当前版本为只读参数。 | 5262| videoHeight | string | 否 | 视频的高度,单位为像素。当前版本为只读参数。 | 5263| videoWidth | string | 否 | 视频的宽度,单位为像素。当前版本为只读参数。 | 5264| videoOrientation | string | 否 | 视频的旋转方向,单位为度(°)。| 5265| hdrType<sup>12+</sup> | [HdrType](#hdrtype12) | 否 | 媒体资源的HDR类型。当前版本为只读参数。 | 5266| location<sup>12+</sup> | [Location](#location) | 否 | 视频的地理位置信息。 | 5267| customInfo<sup>12+</sup> | Record<string, string> | 否 | 从moov.meta.list 获取的自定义参数键值映射。| 5268 5269## HdrType<sup>12+</sup> 5270 5271表示视频HDR类型的枚举。 5272 5273**系统能力:** SystemCapability.Multimedia.Media.Core 5274 5275| 名称 | 值 | 说明 | 5276| ------------------------- | ---- | ---------------------- | 5277| AV_HDR_TYPE_NONE | 0 | 表示无HDR类型。 | 5278| AV_HDR_TYPE_VIVID | 1 | 表示为HDR VIVID类型。 | 5279 5280## media.createAudioPlayer<sup>(deprecated)</sup> 5281 5282createAudioPlayer(): AudioPlayer 5283 5284同步方式创建音频播放实例。 5285 5286> **说明:** 5287> 从API version 6开始支持,从API version 9开始废弃,建议使用[createAVPlayer](#mediacreateavplayer9)替代。 5288 5289**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5290 5291**返回值:** 5292 5293| 类型 | 说明 | 5294| --------------------------- | ------------------------------------------------------------ | 5295| [AudioPlayer](#audioplayerdeprecated) | 返回AudioPlayer类实例,失败时返回null。可用于音频播放、暂停、停止等操作。 | 5296 5297**示例:** 5298 5299```ts 5300let audioPlayer: media.AudioPlayer = media.createAudioPlayer(); 5301``` 5302 5303## media.createVideoPlayer<sup>(deprecated)</sup> 5304 5305createVideoPlayer(callback: AsyncCallback\<VideoPlayer>): void 5306 5307异步方式创建视频播放实例,通过注册回调函数获取返回值。 5308 5309> **说明:** 5310> 从API version 8开始支持,从API version 9开始废弃,建议使用[createAVPlayer](#mediacreateavplayer9)替代。 5311 5312**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 5313 5314**参数:** 5315 5316| 参数名 | 类型 | 必填 | 说明 | 5317| -------- | ------------------------------------------ | ---- | ------------------------------------------------------------ | 5318| callback | AsyncCallback<[VideoPlayer](#videoplayerdeprecated)> | 是 | 回调函数。创建VideoPlayer实例成功时,err为undefined,data为获取到的VideoPlayer实例,否则为错误对象。 | 5319 5320**示例:** 5321 5322```ts 5323import { BusinessError } from '@kit.BasicServicesKit'; 5324 5325let videoPlayer: media.VideoPlayer; 5326media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => { 5327 if (video != null) { 5328 videoPlayer = video; 5329 console.info('Succeeded in creating VideoPlayer'); 5330 } else { 5331 console.error(`Failed to create VideoPlayer, error:${error}`); 5332 } 5333}); 5334``` 5335 5336## media.createVideoPlayer<sup>(deprecated)</sup> 5337 5338createVideoPlayer(): Promise\<VideoPlayer> 5339 5340异步方式创建视频播放实例,通过Promise获取返回值。 5341 5342> **说明:** 5343> 从API version 8开始支持,从API version 9开始废弃,建议使用[createAVPlayer](#mediacreateavplayer9-1)替代。 5344 5345**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 5346 5347**返回值:** 5348 5349| 类型 | 说明 | 5350| ------------------------------------ | ------------------------------------------------------------ | 5351| Promise<[VideoPlayer](#videoplayerdeprecated)> | Promise对象。异步返回VideoPlayer实例,失败时返回null。可用于管理和播放视频媒体。 | 5352 5353**示例:** 5354 5355```ts 5356import { BusinessError } from '@kit.BasicServicesKit'; 5357 5358let videoPlayer: media.VideoPlayer; 5359media.createVideoPlayer().then((video: media.VideoPlayer) => { 5360 if (video != null) { 5361 videoPlayer = video; 5362 console.info('Succeeded in creating VideoPlayer'); 5363 } else { 5364 console.error('Failed to create VideoPlayer'); 5365 } 5366}).catch((error: BusinessError) => { 5367 console.error(`Failed to create VideoPlayer, error:${error}`); 5368}); 5369``` 5370 5371## media.createAudioRecorder<sup>(deprecated)</sup> 5372 5373createAudioRecorder(): AudioRecorder 5374 5375创建音频录制的实例来控制音频的录制。 5376一台设备只允许创建一个录制实例。 5377 5378> **说明:** 5379> 从API version 6开始支持,从API version 9开始废弃,建议使用[createAVRecorder](#mediacreateavrecorder9)替代。 5380 5381**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 5382 5383**返回值:** 5384 5385| 类型 | 说明 | 5386| ------------------------------- | ------------------------------------------------------------ | 5387| [AudioRecorder](#audiorecorderdeprecated) | 返回AudioRecorder类实例,失败时返回null。可用于录制音频媒体。 | 5388 5389**示例:** 5390 5391```ts 5392let audioRecorder: media.AudioRecorder = media.createAudioRecorder(); 5393``` 5394 5395## MediaErrorCode<sup>(deprecated)</sup> 5396 5397媒体服务错误类型枚举。 5398 5399> **说明:** 5400> 从API version 8开始支持,从API version 11开始废弃,建议使用[媒体错误码](#averrorcode9)替代。 5401 5402**系统能力:** SystemCapability.Multimedia.Media.Core 5403 5404| 名称 | 值 | 说明 | 5405| -------------------------- | ---- | -------------------------------------- | 5406| MSERR_OK | 0 | 表示操作成功。 | 5407| MSERR_NO_MEMORY | 1 | 表示申请内存失败,系统可能无可用内存。 | 5408| MSERR_OPERATION_NOT_PERMIT | 2 | 表示无权限执行此操作。 | 5409| MSERR_INVALID_VAL | 3 | 表示传入入参无效。 | 5410| MSERR_IO | 4 | 表示发生IO错误。 | 5411| MSERR_TIMEOUT | 5 | 表示操作超时。 | 5412| MSERR_UNKNOWN | 6 | 表示未知错误。 | 5413| MSERR_SERVICE_DIED | 7 | 表示服务端失效。 | 5414| MSERR_INVALID_STATE | 8 | 表示在当前状态下,不允许执行此操作。 | 5415| MSERR_UNSUPPORTED | 9 | 表示在当前版本下,不支持此操作。 | 5416 5417## AudioPlayer<sup>(deprecated)</sup> 5418 5419> **说明:** 5420> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer](#avplayer9)替代。 5421 5422音频播放管理类,用于管理和播放音频媒体。在调用AudioPlayer的方法前,需要先通过[createAudioPlayer()](#mediacreateaudioplayerdeprecated)构建一个AudioPlayer实例。 5423 5424### 属性<sup>(deprecated)</sup> 5425 5426**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5427 5428| 名称 | 类型 | 只读 | 可选 | 说明 | 5429| ------------------------------- | ------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ | 5430| 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。 | 5431| 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/> | 5432| loop | boolean | 否 | 否 | 音频循环播放属性,设置为'true'表示循环播放。 | 5433| audioInterruptMode<sup>9+</sup> | [audio.InterruptMode](../apis-audio-kit/js-apis-audio.md#interruptmode9) | 是 | 是 | 音频焦点模型。 | 5434| currentTime | number | 是 | 否 | 音频的当前播放位置,单位为毫秒(ms)。 | 5435| duration | number | 是 | 否 | 音频时长,单位为毫秒(ms)。 | 5436| state | [AudioState](#audiostatedeprecated) | 是 | 否 | 可以查询音频播放的状态,该状态不可作为调用play/pause/stop等状态切换的触发条件。 | 5437 5438### play<sup>(deprecated)</sup> 5439 5440play(): void 5441 5442开始播放音频资源,需在'dataLoad'事件成功触发后,才能调用。 5443 5444> **说明:** 5445> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.play](#play9)替代。 5446 5447**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5448 5449**示例:** 5450 5451```ts 5452audioPlayer.on('play', () => { //设置'play'事件回调。 5453 console.info('audio play called'); 5454}); 5455audioPlayer.play(); 5456``` 5457 5458### pause<sup>(deprecated)</sup> 5459 5460pause(): void 5461 5462暂停播放音频资源。 5463 5464> **说明:** 5465> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.pause](#pause9)替代。 5466 5467**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5468 5469**示例:** 5470 5471```ts 5472audioPlayer.on('pause', () => { //设置'pause'事件回调。 5473 console.info('audio pause called'); 5474}); 5475audioPlayer.pause(); 5476``` 5477 5478### stop<sup>(deprecated)</sup> 5479 5480stop(): void 5481 5482停止播放音频资源。 5483 5484> **说明:** 5485> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.stop](#stop9)替代。 5486 5487**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5488 5489**示例:** 5490 5491```ts 5492audioPlayer.on('stop', () => { //设置'stop'事件回调。 5493 console.info('audio stop called'); 5494}); 5495audioPlayer.stop(); 5496``` 5497 5498### reset<sup>(deprecated)</sup> 5499 5500reset(): void 5501 5502重置播放音频资源。 5503 5504> **说明:** 5505> 从API version 7开始支持,从API version 9开始废弃,建议使用[AVPlayer.reset](#reset9)替代。 5506 5507**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5508 5509**示例:** 5510 5511```ts 5512audioPlayer.on('reset', () => { //设置'reset'事件回调。 5513 console.info('audio reset called'); 5514}); 5515audioPlayer.reset(); 5516``` 5517 5518### seek<sup>(deprecated)</sup> 5519 5520seek(timeMs: number): void 5521 5522跳转到指定播放位置。 5523 5524> **说明:** 5525> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。 5526 5527**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5528 5529**参数:** 5530 5531| 参数名 | 类型 | 必填 | 说明 | 5532| ------ | ------ | ---- | ----------------------------------------------------------- | 5533| timeMs | number | 是 | 指定的跳转时间节点,单位毫秒(ms),取值范围[0, duration]。 | 5534 5535**示例:** 5536 5537```ts 5538audioPlayer.on('timeUpdate', (seekDoneTime: number) => { //设置'timeUpdate'事件回调。 5539 if (seekDoneTime == null) { 5540 console.error('Failed to seek'); 5541 return; 5542 } 5543 console.info('Succeeded in seek. seekDoneTime: ' + seekDoneTime); 5544}); 5545audioPlayer.seek(30000); //seek到30000ms的位置。 5546``` 5547 5548### setVolume<sup>(deprecated)</sup> 5549 5550setVolume(vol: number): void 5551 5552设置音量。 5553 5554> **说明:** 5555> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.setVolume](#setvolume9)替代。 5556 5557**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5558 5559**参数:** 5560 5561| 参数名 | 类型 | 必填 | 说明 | 5562| ------ | ------ | ---- | ------------------------------------------------------------ | 5563| vol | number | 是 | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 | 5564 5565**示例:** 5566 5567```ts 5568audioPlayer.on('volumeChange', () => { //设置'volumeChange'事件回调。 5569 console.info('audio volumeChange called'); 5570}); 5571audioPlayer.setVolume(1); //设置音量到100%。 5572``` 5573 5574### release<sup>(deprecated)</sup> 5575 5576release(): void 5577 5578释放音频资源。 5579 5580> **说明:** 5581> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.release](#release9)替代。 5582 5583**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5584 5585**示例:** 5586 5587```ts 5588audioPlayer.release(); 5589audioPlayer = undefined; 5590``` 5591 5592### getTrackDescription<sup>(deprecated)</sup> 5593 5594getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void 5595 5596获取音频轨道信息。需在'dataLoad'事件成功触发后,才能调用。通过回调函数获取返回值。 5597 5598> **说明:** 5599> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9)替代。 5600 5601**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5602 5603**参数:** 5604 5605| 参数名 | 类型 | 必填 | 说明 | 5606| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------ | 5607| callback | AsyncCallback\<Array\<[MediaDescription](#mediadescription8)>> | 是 | 回调函数。获取音频轨道信息成功时,err为undefined,data为获取到的MediaDescription数组,否则为错误对象。 | 5608 5609**示例:** 5610 5611```ts 5612import { BusinessError } from '@kit.BasicServicesKit'; 5613 5614audioPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => { 5615 if (arrList != null) { 5616 console.info('Succeeded in getting TrackDescription'); 5617 } else { 5618 console.error(`Failed to get TrackDescription, error:${error}`); 5619 } 5620}); 5621``` 5622 5623### getTrackDescription<sup>(deprecated)</sup> 5624 5625getTrackDescription(): Promise\<Array\<MediaDescription>> 5626 5627获取音频轨道信息。需在'dataLoad'事件成功触发后,才能调用。通过Promise获取返回值。 5628 5629> **说明:** 5630> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9-1)替代。 5631 5632**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5633 5634**返回值:** 5635 5636| 类型 | 说明 | 5637| ------------------------------------------------------ | ----------------------------------------------- | 5638| Promise<Array<[MediaDescription](#mediadescription8)>> | 音频轨道信息MediaDescription数组Promise返回值。 | 5639 5640**示例:** 5641 5642```ts 5643import { BusinessError } from '@kit.BasicServicesKit'; 5644 5645audioPlayer.getTrackDescription().then((arrList: Array<media.MediaDescription>) => { 5646 console.info('Succeeded in getting TrackDescription'); 5647}).catch((error: BusinessError) => { 5648 console.error(`Failed to get TrackDescription, error:${error}`); 5649}); 5650``` 5651 5652### on('bufferingUpdate')<sup>(deprecated)</sup> 5653 5654on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: number) => void): void 5655 5656开始订阅音频缓存更新事件。仅网络播放支持该订阅事件。 5657 5658> **说明:** 5659> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('bufferingUpdate')](#onbufferingupdate9)替代。 5660 5661**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5662 5663**参数:** 5664 5665| 参数名 | 类型 | 必填 | 说明 | 5666| -------- | -------- | ---- | ------------------------------------------------------------ | 5667| type | string | 是 | 音频缓存事件回调类型,支持的事件:'bufferingUpdate'。 | 5668| callback | function | 是 | 音频缓存事件回调方法。<br>[BufferingInfoType](#bufferinginfotype8)value值固定为0。 | 5669 5670**示例:** 5671 5672```ts 5673audioPlayer.on('bufferingUpdate', (infoType: media.BufferingInfoType, value: number) => { 5674 console.info('audio bufferingInfo type: ' + infoType); 5675 console.info('audio bufferingInfo value: ' + value); 5676}); 5677``` 5678 5679### on('play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange')<sup>(deprecated)</sup> 5680 5681on(type: 'play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeChange', callback: () => void): void 5682 5683开始订阅音频播放事件。 5684 5685> **说明:** 5686> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('stateChange')](#onstatechange9)替代。 5687 5688**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5689 5690**参数:** 5691 5692| 参数名 | 类型 | 必填 | 说明 | 5693| -------- | ---------- | ---- | ------------------------------------------------------------ | 5694| 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)调用,播放音量改变后触发该事件。 | 5695| callback | () => void | 是 | 播放事件回调方法。 | 5696 5697**示例:** 5698 5699```ts 5700import { fileIo as fs } from '@kit.CoreFileKit'; 5701import { BusinessError } from '@kit.BasicServicesKit'; 5702 5703let audioPlayer: media.AudioPlayer = media.createAudioPlayer(); //创建一个音频播放实例。 5704audioPlayer.on('dataLoad', () => { //设置'dataLoad'事件回调,src属性设置成功后,触发此回调。 5705 console.info('audio set source called'); 5706 audioPlayer.play(); //开始播放,并触发'play'事件回调。 5707}); 5708audioPlayer.on('play', () => { //设置'play'事件回调。 5709 console.info('audio play called'); 5710 audioPlayer.seek(30000); //调用seek方法,并触发'timeUpdate'事件回调。 5711}); 5712audioPlayer.on('pause', () => { //设置'pause'事件回调。 5713 console.info('audio pause called'); 5714 audioPlayer.stop(); //停止播放,并触发'stop'事件回调。 5715}); 5716audioPlayer.on('reset', () => { //设置'reset'事件回调。 5717 console.info('audio reset called'); 5718 audioPlayer.release(); //释放播放实例资源。 5719 audioPlayer = undefined; 5720}); 5721audioPlayer.on('timeUpdate', (seekDoneTime: number) => { //设置'timeUpdate'事件回调。 5722 if (seekDoneTime == null) { 5723 console.error('Failed to seek'); 5724 return; 5725 } 5726 console.info('Succeeded in seek, and seek time is ' + seekDoneTime); 5727 audioPlayer.setVolume(0.5); //设置音量为50%,并触发'volumeChange'事件回调。 5728}); 5729audioPlayer.on('volumeChange', () => { //设置'volumeChange'事件回调。 5730 console.info('audio volumeChange called'); 5731 audioPlayer.pause(); //暂停播放,并触发'pause'事件回调。 5732}); 5733audioPlayer.on('finish', () => { //设置'finish'事件回调。 5734 console.info('audio play finish'); 5735 audioPlayer.stop(); //停止播放,并触发'stop'事件回调。 5736}); 5737audioPlayer.on('error', (error: BusinessError) => { //设置'error'事件回调。 5738 console.error(`audio error called, error: ${error}`); 5739}); 5740 5741// 用户选择音频设置fd(本地播放)。 5742let fdPath = 'fd://'; 5743// path路径的码流可通过"hdc file send D:\xxx\01.mp3 /data/accounts/account_0/appdata" 命令,将其推送到设备上。 5744let path = '/data/accounts/account_0/appdata/ohos.xxx.xxx.xxx/01.mp3'; 5745fs.open(path).then((file) => { 5746 fdPath = fdPath + '' + file.fd; 5747 console.info('Succeeded in opening fd, fd is' + fdPath); 5748 audioPlayer.src = fdPath; //设置src属性,并触发'dataLoad'事件回调。 5749}, (err: BusinessError) => { 5750 console.error('Failed to open fd, err is' + err); 5751}).catch((err: BusinessError) => { 5752 console.error('Failed to open fd, err is' + err); 5753}); 5754``` 5755 5756### on('timeUpdate')<sup>(deprecated)</sup> 5757 5758on(type: 'timeUpdate', callback: Callback\<number>): void 5759 5760开始订阅音频播放时间更新事件。处于播放状态时,每隔1s上报一次该事件。 5761 5762> **说明:** 5763> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('timeUpdate')](#ontimeupdate9)替代。 5764 5765**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5766 5767**参数:** 5768 5769| 参数名 | 类型 | 必填 | 说明 | 5770| -------- | ----------------- | ---- | ------------------------------------------------------------ | 5771| type | string | 是 | 播放事件回调类型,支持的事件包括:'timeUpdate'。<br>- 'timeUpdate':音频播放时间戳更新,开始播放后自动触发该事件。 | 5772| callback | Callback\<number> | 是 | 播放事件回调方法。回调方法入参为更新后的时间戳。 | 5773 5774**示例:** 5775 5776```ts 5777audioPlayer.on('timeUpdate', (newTime: number) => { //设置'timeUpdate'事件回调。 5778 if (newTime == null) { 5779 console.error('Failed to do timeUpadate'); 5780 return; 5781 } 5782 console.info('Succeeded in doing timeUpadate. seekDoneTime: ' + newTime); 5783}); 5784audioPlayer.play(); //开始播放后,自动触发时间戳更新事件。 5785``` 5786 5787### on('audioInterrupt')<sup>(deprecated)</sup> 5788 5789on(type: 'audioInterrupt', callback: (info: audio.InterruptEvent) => void): void 5790 5791监听音频焦点变化事件,参考[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)。 5792 5793> **说明:** 5794> 从API version 9开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('audioInterrupt')](#onaudiointerrupt9)替代。 5795 5796**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5797 5798**参数:** 5799 5800| 参数名 | 类型 | 必填 | 说明 | 5801| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------------------- | 5802| type | string | 是 | 音频焦点变化事件回调类型,支持的事件:'audioInterrupt'。 | 5803| callback | function | 是 | 音频焦点变化事件回调方法。 | 5804 5805**示例:** 5806 5807```ts 5808import { audio } from '@kit.AudioKit'; 5809 5810audioPlayer.on('audioInterrupt', (info: audio.InterruptEvent) => { 5811 console.info('audioInterrupt called,and InterruptEvent info is:' + info) 5812}) 5813``` 5814 5815### on('error')<sup>(deprecated)</sup> 5816 5817on(type: 'error', callback: ErrorCallback): void 5818 5819开始订阅音频播放错误事件,当上报error错误事件后,用户需处理error事件,退出播放操作。 5820 5821> **说明:** 5822> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('error')](#onerror9)替代。 5823 5824**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5825 5826**参数:** 5827 5828| 参数名 | 类型 | 必填 | 说明 | 5829| -------- | ------------- | ---- | ------------------------------------------------------------ | 5830| type | string | 是 | 播放错误事件回调类型,支持的事件包括:'error'。<br>- 'error':音频播放中发生错误,触发该事件。 | 5831| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是 | 播放错误事件回调方法。 | 5832 5833**示例:** 5834 5835```ts 5836import { BusinessError } from '@kit.BasicServicesKit'; 5837 5838audioPlayer.on('error', (error: BusinessError) => { //设置'error'事件回调。 5839 console.error(`audio error called, error: ${error}`); 5840}); 5841audioPlayer.setVolume(3); //设置volume为无效值,触发'error'事件。 5842``` 5843 5844## AudioState<sup>(deprecated)</sup> 5845 5846type AudioState = 'idle' | 'playing' | 'paused' | 'stopped' | 'error' 5847 5848音频播放的状态机。可通过state属性获取当前状态。 5849 5850> **说明:** 5851> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVPlayerState](#avplayerstate9)替代。 5852 5853**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer 5854 5855| 类型 | 说明 | 5856| ------- | ---------------------------------------------- | 5857| 'idle' | 音频播放空闲,dataload/reset成功后处于此状态。 | 5858| 'playing' | 音频正在播放,play成功后处于此状态。 | 5859| 'paused' | 音频暂停播放,pause成功后处于此状态。 | 5860| 'stopped' | 音频播放停止,stop/播放结束后处于此状态。 | 5861| 'error' | 错误状态。 | 5862 5863## VideoPlayer<sup>(deprecated)</sup> 5864 5865> **说明:** 5866> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer](#avplayer9)替代。 5867 5868视频播放管理类,用于管理和播放视频媒体。在调用VideoPlayer的方法前,需要先通过[createVideoPlayer()](#mediacreatevideoplayerdeprecated)构建一个VideoPlayer实例。 5869 5870### 属性 5871 5872**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 5873 5874| 名称 | 类型 | 只读 | 可选 | 说明 | 5875| ------------------------------- | ------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ | 5876| 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。 | 5877| 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/> | 5878| loop<sup>8+</sup> | boolean | 否 | 否 | 视频循环播放属性,设置为'true'表示循环播放。 | 5879| videoScaleType<sup>9+</sup> | [VideoScaleType](#videoscaletype9) | 否 | 是 | 视频缩放模式。默认值为VIDEO_SCALE_TYPE_FIT。 | 5880| audioInterruptMode<sup>9+</sup> | [audio.InterruptMode](../apis-audio-kit/js-apis-audio.md#interruptmode9) | 否 | 是 | 音频焦点模型。 | 5881| currentTime<sup>8+</sup> | number | 是 | 否 | 视频的当前播放位置,单位为毫秒(ms)。 | 5882| duration<sup>8+</sup> | number | 是 | 否 | 视频时长,单位为毫秒(ms),返回-1表示直播模式。 | 5883| state<sup>8+</sup> | [VideoPlayState](#videoplaystatedeprecated) | 是 | 否 | 视频播放的状态。 | 5884| width<sup>8+</sup> | number | 是 | 否 | 视频宽,单位为像素(px)。 | 5885| height<sup>8+</sup> | number | 是 | 否 | 视频高,单位为像素(px)。 | 5886 5887### setDisplaySurface<sup>(deprecated)</sup> 5888 5889setDisplaySurface(surfaceId: string, callback: AsyncCallback\<void>): void 5890 5891设置SurfaceId。通过回调函数获取返回值。 5892 5893*注意:SetDisplaySurface需要在设置url和Prepare之间,无音频的视频流必须设置Surface否则Prepare失败。 5894 5895> **说明:** 5896> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.surfaceId](#属性)替代。 5897 5898**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 5899 5900**参数:** 5901 5902| 参数名 | 类型 | 必填 | 说明 | 5903| --------- | -------------------- | ---- | ------------------------- | 5904| surfaceId | string | 是 | SurfaceId. | 5905| callback | AsyncCallback\<void> | 是 | 回调函数。当设置SurfaceId成功,err为undefined,否则为错误对象。 | 5906 5907**示例:** 5908 5909```ts 5910import { BusinessError } from '@kit.BasicServicesKit'; 5911 5912let surfaceId: string = ''; 5913videoPlayer.setDisplaySurface(surfaceId, (err: BusinessError) => { 5914 if (err) { 5915 console.error('Failed to set DisplaySurface!'); 5916 } else { 5917 console.info('Succeeded in setting DisplaySurface!'); 5918 } 5919}); 5920``` 5921 5922### setDisplaySurface<sup>(deprecated)</sup> 5923 5924setDisplaySurface(surfaceId: string): Promise\<void> 5925 5926设置SurfaceId。通过Promise获取返回值。 5927 5928*注意:SetDisplaySurface需要在设置url和Prepare之间,无音频的视频流必须设置Surface否则Prepare失败。 5929 5930> **说明:** 5931> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.surfaceId](#属性)替代。 5932 5933**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 5934 5935**参数:** 5936 5937| 参数名 | 类型 | 必填 | 说明 | 5938| --------- | ------ | ---- | --------- | 5939| surfaceId | string | 是 | SurfaceId. | 5940 5941**返回值:** 5942 5943| 类型 | 说明 | 5944| -------------- | ------------------------------ | 5945| Promise\<void> | 设置SurfaceId的Promise返回值。 | 5946 5947**示例:** 5948 5949```ts 5950import { BusinessError } from '@kit.BasicServicesKit'; 5951 5952let surfaceId: string = ''; 5953videoPlayer.setDisplaySurface(surfaceId).then(() => { 5954 console.info('Succeeded in setting DisplaySurface'); 5955}).catch((error: BusinessError) => { 5956 console.error(`video catchCallback, error:${error}`); 5957}); 5958``` 5959 5960### prepare<sup>(deprecated)</sup> 5961 5962prepare(callback: AsyncCallback\<void>): void 5963 5964准备播放视频。通过回调函数获取返回值。 5965 5966> **说明:** 5967> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.prepare](#prepare9)替代。 5968 5969**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 5970 5971**参数:** 5972 5973| 参数名 | 类型 | 必填 | 说明 | 5974| -------- | -------------------- | ---- | ------------------------ | 5975| callback | AsyncCallback\<void> | 是 | 回调函数。当准备播放视频成功,err为undefined,否则为错误对象。| 5976 5977**示例:** 5978 5979```ts 5980import { BusinessError } from '@kit.BasicServicesKit'; 5981 5982videoPlayer.prepare((err: BusinessError) => { 5983 if (err) { 5984 console.error('Failed to prepare!'); 5985 } else { 5986 console.info('Succeeded in preparing!'); 5987 } 5988}); 5989``` 5990 5991### prepare<sup>(deprecated)</sup> 5992 5993prepare(): Promise\<void> 5994 5995准备播放视频。通过Promise获取返回值。 5996 5997> **说明:** 5998> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.prepare](#prepare9-1)替代。 5999 6000**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6001 6002**返回值:** 6003 6004| 类型 | 说明 | 6005| -------------- | ----------------------------- | 6006| Promise\<void> | 准备播放视频的Promise返回值。 | 6007 6008**示例:** 6009 6010```ts 6011import { BusinessError } from '@kit.BasicServicesKit'; 6012 6013videoPlayer.prepare().then(() => { 6014 console.info('Succeeded in preparing'); 6015}).catch((error: BusinessError) => { 6016 console.error(`video catchCallback, error:${error}`); 6017}); 6018``` 6019 6020### play<sup>(deprecated)</sup> 6021 6022play(callback: AsyncCallback\<void>): void 6023 6024开始播放视频。通过回调函数获取返回值。 6025 6026> **说明:** 6027> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.play](#play9)替代。 6028 6029**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6030 6031**参数:** 6032 6033| 参数名 | 类型 | 必填 | 说明 | 6034| -------- | -------------------- | ---- | ------------------------ | 6035| callback | AsyncCallback\<void> | 是 | 回调函数。当开始播放视频成功,err为undefined,否则为错误对象。 | 6036 6037**示例:** 6038 6039```ts 6040import { BusinessError } from '@kit.BasicServicesKit'; 6041 6042videoPlayer.play((err: BusinessError) => { 6043 if (err) { 6044 console.error('Failed to play!'); 6045 } else { 6046 console.info('Succeeded in playing!'); 6047 } 6048}); 6049``` 6050 6051### play<sup>(deprecated)</sup> 6052 6053play(): Promise\<void> 6054 6055开始播放视频。通过Promise获取返回值。 6056 6057> **说明:** 6058> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.play](#play9-1)替代。 6059 6060**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6061 6062**返回值:** 6063 6064| 类型 | 说明 | 6065| -------------- | ----------------------------- | 6066| Promise\<void> | 开始播放视频的Promise返回值。 | 6067 6068**示例:** 6069 6070```ts 6071import { BusinessError } from '@kit.BasicServicesKit'; 6072 6073videoPlayer.play().then(() => { 6074 console.info('Succeeded in playing'); 6075}).catch((error: BusinessError) => { 6076 console.error(`video catchCallback, error:${error}`); 6077}); 6078``` 6079 6080### pause<sup>(deprecated)</sup> 6081 6082pause(callback: AsyncCallback\<void>): void 6083 6084通过回调方式暂停播放视频。通过回调函数获取返回值。 6085 6086> **说明:** 6087> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.pause](#pause9)替代。 6088 6089**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6090 6091**参数:** 6092 6093| 参数名 | 类型 | 必填 | 说明 | 6094| -------- | -------------------- | ---- | ------------------------ | 6095| callback | AsyncCallback\<void> | 是 | 回调函数。当暂停播放视频成功,err为undefined,否则为错误对象。 | 6096 6097**示例:** 6098 6099```ts 6100import { BusinessError } from '@kit.BasicServicesKit'; 6101 6102videoPlayer.pause((err: BusinessError) => { 6103 if (err) { 6104 console.error('Failed to pause!'); 6105 } else { 6106 console.info('Succeeded in pausing!'); 6107 } 6108}); 6109``` 6110 6111### pause<sup>(deprecated)</sup> 6112 6113pause(): Promise\<void> 6114 6115暂停播放视频。通过Promise获取返回值。 6116 6117> **说明:** 6118> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.pause](#pause9-1)替代。 6119 6120**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6121 6122**返回值:** 6123 6124| 类型 | 说明 | 6125| -------------- | ----------------------------- | 6126| Promise\<void> | 暂停播放视频的Promise返回值。 | 6127 6128**示例:** 6129 6130```ts 6131import { BusinessError } from '@kit.BasicServicesKit'; 6132 6133videoPlayer.pause().then(() => { 6134 console.info('Succeeded in pausing'); 6135}).catch((error: BusinessError) => { 6136 console.error(`video catchCallback, error:${error}`); 6137}); 6138``` 6139 6140### stop<sup>(deprecated)</sup> 6141 6142stop(callback: AsyncCallback\<void>): void 6143 6144通过回调方式停止播放视频。通过回调函数获取返回值。 6145 6146> **说明:** 6147> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.stop](#stop9)替代。 6148 6149**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6150 6151**参数:** 6152 6153| 参数名 | 类型 | 必填 | 说明 | 6154| -------- | -------------------- | ---- | ------------------------ | 6155| callback | AsyncCallback\<void> | 是 | 回调函数。当停止播放视频成功,err为undefined,否则为错误对象。 | 6156 6157**示例:** 6158 6159```ts 6160import { BusinessError } from '@kit.BasicServicesKit'; 6161 6162videoPlayer.stop((err: BusinessError) => { 6163 if (err) { 6164 console.error('Failed to stop!'); 6165 } else { 6166 console.info('Succeeded in stopping!'); 6167 } 6168}); 6169``` 6170 6171### stop<sup>(deprecated)</sup> 6172 6173stop(): Promise\<void> 6174 6175停止播放视频。通过Promise获取返回值。 6176 6177> **说明:** 6178> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.stop](#stop9-1)替代。 6179 6180**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6181 6182**返回值:** 6183 6184| 类型 | 说明 | 6185| -------------- | ----------------------------- | 6186| Promise\<void> | 停止播放视频的Promise返回值。 | 6187 6188**示例:** 6189 6190```ts 6191import { BusinessError } from '@kit.BasicServicesKit'; 6192 6193videoPlayer.stop().then(() => { 6194 console.info('Succeeded in stopping'); 6195}).catch((error: BusinessError) => { 6196 console.error(`video catchCallback, error:${error}`); 6197}); 6198``` 6199 6200### reset<sup>(deprecated)</sup> 6201 6202reset(callback: AsyncCallback\<void>): void 6203 6204重置播放视频。通过回调函数获取返回值。 6205 6206> **说明:** 6207> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.reset](#reset9)替代。 6208 6209**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6210 6211**参数:** 6212 6213| 参数名 | 类型 | 必填 | 说明 | 6214| -------- | -------------------- | ---- | ------------------------ | 6215| callback | AsyncCallback\<void> | 是 | 回调函数。当重置播放视频成功,err为undefined,否则为错误对象。 | 6216 6217**示例:** 6218 6219```ts 6220import { BusinessError } from '@kit.BasicServicesKit'; 6221 6222videoPlayer.reset((err: BusinessError) => { 6223 if (err) { 6224 console.error('Failed to reset!'); 6225 } else { 6226 console.info('Succeeded in resetting!'); 6227 } 6228}); 6229``` 6230 6231### reset<sup>(deprecated)</sup> 6232 6233reset(): Promise\<void> 6234 6235重置播放视频。通过Promise获取返回值。 6236 6237> **说明:** 6238> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.reset](#reset9-1)替代。 6239 6240**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6241 6242**返回值:** 6243 6244| 类型 | 说明 | 6245| -------------- | ----------------------------- | 6246| Promise\<void> | Promise对象。无返回结果的Promise对象。 | 6247 6248**示例:** 6249 6250```ts 6251import { BusinessError } from '@kit.BasicServicesKit'; 6252 6253videoPlayer.reset().then(() => { 6254 console.info('Succeeded in resetting'); 6255}).catch((error: BusinessError) => { 6256 console.error(`video catchCallback, error:${error}`); 6257}); 6258``` 6259 6260### seek<sup>(deprecated)</sup> 6261 6262seek(timeMs: number, callback: AsyncCallback\<number>): void 6263 6264跳转到指定播放位置,默认跳转到指定时间点的上一个关键帧。通过回调函数获取返回值。 6265 6266> **说明:** 6267> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。 6268 6269**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6270 6271**参数:** 6272 6273| 参数名 | 类型 | 必填 | 说明 | 6274| -------- | ---------------------- | ---- | ------------------------------------------------------------ | 6275| timeMs | number | 是 | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, duration]。 | 6276| callback | AsyncCallback\<number> | 是 | 回调函数。跳转到指定播放位置成功时,err为undefined,data为获取到的跳转到的播放位置,否则为错误对象。 | 6277 6278**示例:** 6279 6280```ts 6281import { BusinessError } from '@kit.BasicServicesKit'; 6282 6283let videoPlayer: media.VideoPlayer; 6284media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => { 6285 if (video != null) { 6286 videoPlayer = video; 6287 console.info('Succeeded in creating VideoPlayer'); 6288 } else { 6289 console.error(`Failed to create VideoPlayer, error:${error}`); 6290 } 6291}); 6292 6293let seekTime: number = 5000; 6294videoPlayer.seek(seekTime, (err: BusinessError, result: number) => { 6295 if (err) { 6296 console.error('Failed to do seek!'); 6297 } else { 6298 console.info('Succeeded in doing seek!'); 6299 } 6300}); 6301``` 6302 6303### seek<sup>(deprecated)</sup> 6304 6305seek(timeMs: number, mode:SeekMode, callback: AsyncCallback\<number>): void 6306 6307跳转到指定播放位置。通过回调函数获取返回值。 6308 6309> **说明:** 6310> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。 6311 6312**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6313 6314**参数:** 6315 6316| 参数名 | 类型 | 必填 | 说明 | 6317| -------- | ---------------------- | ---- | ------------------------------------------------------------ | 6318| timeMs | number | 是 | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, duration]。 | 6319| mode | [SeekMode](#seekmode8) | 是 | 跳转模式。 | 6320| callback | AsyncCallback\<number> | 是 | 回调函数。跳转到指定播放位置成功时,err为undefined,data为获取到的跳转到的播放位置,否则为错误对象。 | 6321 6322**示例:** 6323 6324```ts 6325import { BusinessError } from '@kit.BasicServicesKit'; 6326 6327let videoPlayer: media.VideoPlayer | null = null; 6328media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => { 6329 if (video != null) { 6330 videoPlayer = video; 6331 console.info('Succeeded in creating VideoPlayer'); 6332 } else { 6333 console.error(`Failed to create VideoPlayer, error:${error}`); 6334 } 6335}); 6336let seekTime: number = 5000; 6337if (videoPlayer) { 6338 (videoPlayer as media.VideoPlayer).seek(seekTime, media.SeekMode.SEEK_NEXT_SYNC, (err: BusinessError, result: number) => { 6339 if (err) { 6340 console.error('Failed to do seek!'); 6341 } else { 6342 console.info('Succeeded in doing seek!'); 6343 } 6344 }); 6345} 6346``` 6347 6348### seek<sup>(deprecated)</sup> 6349 6350seek(timeMs: number, mode?:SeekMode): Promise\<number> 6351 6352跳转到指定播放位置,如果没有设置mode则跳转到指定时间点的上一个关键帧。通过Promise获取返回值。 6353 6354> **说明:** 6355> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.seek](#seek9)替代。 6356 6357**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6358 6359**参数:** 6360 6361| 参数名 | 类型 | 必填 | 说明 | 6362| ------ | ---------------------- | ---- | ------------------------------------------------------------ | 6363| timeMs | number | 是 | 指定的跳转时间节点,单位毫秒(ms),取值范围为[0, duration]。 | 6364| mode | [SeekMode](#seekmode8) | 否 | 基于视频I帧的跳转模式,默认为SEEK_PREV_SYNC模式。 | 6365 6366**返回值:** 6367 6368| 类型 | 说明 | 6369| ---------------- | ------------------------------------------- | 6370| Promise\<number> | 跳转到指定播放位置的Promise返回值,单位ms。 | 6371 6372**示例:** 6373 6374```ts 6375import { BusinessError } from '@kit.BasicServicesKit'; 6376 6377let videoPlayer: media.VideoPlayer | null = null; 6378media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => { 6379 if (video != null) { 6380 videoPlayer = video; 6381 console.info('Succeeded in creating VideoPlayer'); 6382 } else { 6383 console.error(`Failed to create VideoPlayer, error:${error}`); 6384 } 6385}); 6386let seekTime: number = 5000; 6387if (videoPlayer) { 6388 (videoPlayer as media.VideoPlayer).seek(seekTime).then((seekDoneTime: number) => { // seekDoneTime表示seek完成后的时间点。 6389 console.info('Succeeded in doing seek'); 6390 }).catch((error: BusinessError) => { 6391 console.error(`video catchCallback, error:${error}`); 6392 }); 6393 6394 (videoPlayer as media.VideoPlayer).seek(seekTime, media.SeekMode.SEEK_NEXT_SYNC).then((seekDoneTime: number) => { 6395 console.info('Succeeded in doing seek'); 6396 }).catch((error: BusinessError) => { 6397 console.error(`video catchCallback, error:${error}`); 6398 }); 6399} 6400``` 6401 6402### setVolume<sup>(deprecated)</sup> 6403 6404setVolume(vol: number, callback: AsyncCallback\<void>): void 6405 6406设置音量。通过回调函数获取返回值。 6407 6408> **说明:** 6409> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setVolume](#setvolume9)替代。 6410 6411**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6412 6413**参数:** 6414 6415| 参数名 | 类型 | 必填 | 说明 | 6416| -------- | -------------------- | ---- | ------------------------------------------------------------ | 6417| vol | number | 是 | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 | 6418| callback | AsyncCallback\<void> | 是 | 回调函数。当设置音量成功,err为undefined,否则为错误对象。 | 6419 6420**示例:** 6421 6422```ts 6423import { BusinessError } from '@kit.BasicServicesKit'; 6424 6425let vol: number = 0.5; 6426videoPlayer.setVolume(vol, (err: BusinessError) => { 6427 if (err) { 6428 console.error('Failed to set Volume!'); 6429 } else { 6430 console.info('Succeeded in setting Volume!'); 6431 } 6432}); 6433``` 6434 6435### setVolume<sup>(deprecated)</sup> 6436 6437setVolume(vol: number): Promise\<void> 6438 6439设置音量。通过Promise获取返回值。 6440 6441> **说明:** 6442> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setVolume](#setvolume9)替代。 6443 6444**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6445 6446**参数:** 6447 6448| 参数名 | 类型 | 必填 | 说明 | 6449| ------ | ------ | ---- | ------------------------------------------------------------ | 6450| vol | number | 是 | 指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。 | 6451 6452**返回值:** 6453 6454| 类型 | 说明 | 6455| -------------- | ------------------------- | 6456| Promise\<void> | 设置音量的Promise返回值。 | 6457 6458**示例:** 6459 6460```ts 6461import { BusinessError } from '@kit.BasicServicesKit'; 6462 6463let vol: number = 0.5; 6464videoPlayer.setVolume(vol).then(() => { 6465 console.info('Succeeded in setting Volume'); 6466}).catch((error: BusinessError) => { 6467 console.error(`video catchCallback, error:${error}`); 6468}); 6469``` 6470 6471### release<sup>(deprecated)</sup> 6472 6473release(callback: AsyncCallback\<void>): void 6474 6475释放视频资源。通过回调函数获取返回值。 6476 6477> **说明:** 6478> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.release](#release9)替代。 6479 6480**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6481 6482**参数:** 6483 6484| 参数名 | 类型 | 必填 | 说明 | 6485| -------- | -------------------- | ---- | ------------------------ | 6486| callback | AsyncCallback\<void> | 是 | 回调函数。当释放视频资源成功,err为undefined,否则为错误对象。 | 6487 6488**示例:** 6489 6490```ts 6491import { BusinessError } from '@kit.BasicServicesKit'; 6492 6493videoPlayer.release((err: BusinessError) => { 6494 if (err) { 6495 console.error('Failed to release!'); 6496 } else { 6497 console.info('Succeeded in releasing!'); 6498 } 6499}); 6500``` 6501 6502### release<sup>(deprecated)</sup> 6503 6504release(): Promise\<void> 6505 6506释放视频资源。通过Promise获取返回值。 6507 6508> **说明:** 6509> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.release](#release9-1)替代。 6510 6511**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6512 6513**返回值:** 6514 6515| 类型 | 说明 | 6516| -------------- | ----------------------------- | 6517| Promise\<void> | 释放视频资源的Promise返回值。 | 6518 6519**示例:** 6520 6521```ts 6522import { BusinessError } from '@kit.BasicServicesKit'; 6523 6524videoPlayer.release().then(() => { 6525 console.info('Succeeded in releasing'); 6526}).catch((error: BusinessError) => { 6527 console.error(`video catchCallback, error:${error}`); 6528}); 6529``` 6530 6531### getTrackDescription<sup>(deprecated)</sup> 6532 6533getTrackDescription(callback: AsyncCallback\<Array\<MediaDescription>>): void 6534 6535获取视频轨道信息。通过回调函数获取返回值。 6536 6537> **说明:** 6538> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9)替代。 6539 6540**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6541 6542**参数:** 6543 6544| 参数名 | 类型 | 必填 | 说明 | 6545| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------ | 6546| callback | AsyncCallback\<Array\<[MediaDescription](#mediadescription8)>> | 是 | 回调函数。获取视频轨道信息成功时,err为undefined,data为获取到的视频轨道信息MediaDescription数组,否则为错误对象。 | 6547 6548**示例:** 6549 6550```ts 6551import { BusinessError } from '@kit.BasicServicesKit'; 6552 6553videoPlayer.getTrackDescription((error: BusinessError, arrList: Array<media.MediaDescription>) => { 6554 if ((arrList) != null) { 6555 console.info('Succeeded in getting TrackDescription'); 6556 } else { 6557 console.error(`Failed to get TrackDescription, error:${error}`); 6558 } 6559}); 6560``` 6561 6562### getTrackDescription<sup>(deprecated)</sup> 6563 6564getTrackDescription(): Promise\<Array\<MediaDescription>> 6565 6566获取视频轨道信息。通过Promise获取返回值。 6567 6568> **说明:** 6569> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.getTrackDescription](#gettrackdescription9-1)替代。 6570 6571**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6572 6573**返回值:** 6574 6575| 类型 | 说明 | 6576| ------------------------------------------------------ | ----------------------------------------------- | 6577| Promise<Array<[MediaDescription](#mediadescription8)>> | Promise对象,返回获取的视频轨道信息MediaDescription数组。 | 6578 6579**示例:** 6580 6581```ts 6582import { BusinessError } from '@kit.BasicServicesKit'; 6583 6584videoPlayer.getTrackDescription().then((arrList: Array<media.MediaDescription>) => { 6585 if (arrList != null) { 6586 console.info('Succeeded in getting TrackDescription'); 6587 } else { 6588 console.error('Failed to get TrackDescription'); 6589 } 6590}).catch((error: BusinessError) => { 6591 console.error(`video catchCallback, error:${error}`); 6592}); 6593``` 6594 6595### setSpeed<sup>(deprecated)</sup> 6596 6597setSpeed(speed: number, callback: AsyncCallback\<number>): void 6598 6599设置播放速度。通过回调函数获取返回值。 6600 6601> **说明:** 6602> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setSpeed](#setspeed9)替代。 6603 6604**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6605 6606**参数:** 6607 6608| 参数名 | 类型 | 必填 | 说明 | 6609| -------- | ---------------------- | ---- | ---------------------------------------------------------- | 6610| speed | number | 是 | 指定播放视频速度,具体见[PlaybackSpeed](#playbackspeed8)。 | 6611| callback | AsyncCallback\<number> | 是 | 回调函数。设置播放速度成功时,err为undefined,data为设置的播放速度,否则为错误对象。 | 6612 6613**示例:** 6614 6615```ts 6616import { BusinessError } from '@kit.BasicServicesKit'; 6617 6618let videoPlayer: media.VideoPlayer | null = null; 6619media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => { 6620 if (video != null) { 6621 videoPlayer = video; 6622 console.info('Succeeded in creating VideoPlayer'); 6623 } else { 6624 console.error(`Failed to create VideoPlayer, error:${error}`); 6625 } 6626}); 6627let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X; 6628if (videoPlayer) { 6629 (videoPlayer as media.VideoPlayer).setSpeed(speed, (err: BusinessError, result: number) => { 6630 if (err) { 6631 console.error('Failed to set Speed!'); 6632 } else { 6633 console.info('Succeeded in setting Speed!'); 6634 } 6635 }); 6636} 6637``` 6638 6639### setSpeed<sup>(deprecated)</sup> 6640 6641setSpeed(speed: number): Promise\<number> 6642 6643设置播放速度。通过Promise获取返回值。 6644 6645> **说明:** 6646> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.setSpeed](#setspeed9)替代。 6647 6648**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6649 6650**参数:** 6651 6652| 参数名 | 类型 | 必填 | 说明 | 6653| ------ | ------ | ---- | ---------------------------------------------------------- | 6654| speed | number | 是 | 指定播放视频速度,具体见[PlaybackSpeed](#playbackspeed8)。 | 6655 6656**返回值:** 6657 6658| 类型 | 说明 | 6659| ---------------- | ------------------------------------------------------------ | 6660| Promise\<number> | Promise对象,返回设置的播放速度,具体见[PlaybackSpeed](#playbackspeed8)。 | 6661 6662**示例:** 6663 6664```ts 6665import { BusinessError } from '@kit.BasicServicesKit'; 6666 6667let videoPlayer: media.VideoPlayer | null = null; 6668media.createVideoPlayer((error: BusinessError, video: media.VideoPlayer) => { 6669 if (video != null) { 6670 videoPlayer = video; 6671 console.info('Succeeded in creating VideoPlayer'); 6672 } else { 6673 console.error(`Failed to create VideoPlayer, error:${error}`); 6674 } 6675}); 6676let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X; 6677if (videoPlayer) { 6678 (videoPlayer as media.VideoPlayer).setSpeed(speed).then((result: number) => { 6679 console.info('Succeeded in setting Speed'); 6680 }).catch((error: BusinessError) => { 6681 console.error(`Failed to set Speed, error:${error}`);//todo:: error. 6682 }); 6683} 6684``` 6685 6686### on('playbackCompleted')<sup>(deprecated)</sup> 6687 6688on(type: 'playbackCompleted', callback: Callback\<void>): void 6689 6690开始监听视频播放完成事件。 6691 6692> **说明:** 6693> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('stateChange')](#onstatechange9)替代。 6694 6695**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6696 6697**参数:** 6698 6699| 参数名 | 类型 | 必填 | 说明 | 6700| -------- | -------- | ---- | ----------------------------------------------------------- | 6701| type | string | 是 | 视频播放完成事件回调类型,支持的事件:'playbackCompleted'。 | 6702| callback | Callback\<void> | 是 | 视频播放完成事件回调方法。 | 6703 6704**示例:** 6705 6706```ts 6707videoPlayer.on('playbackCompleted', () => { 6708 console.info('playbackCompleted called!'); 6709}); 6710``` 6711 6712### on('bufferingUpdate')<sup>(deprecated)</sup> 6713 6714on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: number) => void): void 6715 6716开始监听视频缓存更新事件。仅网络播放支持该订阅事件。 6717 6718> **说明:** 6719> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('bufferingUpdate')](#onbufferingupdate9)替代。 6720 6721**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6722 6723**参数:** 6724 6725| 参数名 | 类型 | 必填 | 说明 | 6726| -------- | -------- | ---- | ------------------------------------------------------------ | 6727| type | string | 是 | 视频缓存事件回调类型,支持的事件:'bufferingUpdate'。 | 6728| callback | function | 是 | 视频缓存事件回调方法。<br>[BufferingInfoType](#bufferinginfotype8)value值固定为0。 | 6729 6730**示例:** 6731 6732```ts 6733videoPlayer.on('bufferingUpdate', (infoType: media.BufferingInfoType, value: number) => { 6734 console.info('video bufferingInfo type: ' + infoType); 6735 console.info('video bufferingInfo value: ' + value); 6736}); 6737``` 6738 6739### on('startRenderFrame')<sup>(deprecated)</sup> 6740 6741on(type: 'startRenderFrame', callback: Callback\<void>): void 6742 6743开始监听视频播放首帧送显上报事件。 6744 6745> **说明:** 6746> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('startRenderFrame')](#onstartrenderframe9)替代。 6747 6748**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6749 6750**参数:** 6751 6752| 参数名 | 类型 | 必填 | 说明 | 6753| -------- | --------------- | ---- | ------------------------------------------------------------ | 6754| type | string | 是 | 视频播放首帧送显上报事件回调类型,支持的事件:'startRenderFrame'。 | 6755| callback | Callback\<void> | 是 | 视频播放首帧送显上报事件回调方法。 | 6756 6757**示例:** 6758 6759```ts 6760videoPlayer.on('startRenderFrame', () => { 6761 console.info('startRenderFrame called!'); 6762}); 6763``` 6764 6765### on('videoSizeChanged')<sup>(deprecated)</sup> 6766 6767on(type: 'videoSizeChanged', callback: (width: number, height: number) => void): void 6768 6769开始监听视频播放宽高变化事件。 6770 6771> **说明:** 6772> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('videoSizeChange')](#onvideosizechange9)替代。 6773 6774**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6775 6776**参数:** 6777 6778| 参数名 | 类型 | 必填 | 说明 | 6779| -------- | -------- | ---- | ------------------------------------------------------------ | 6780| type | string | 是 | 视频播放宽高变化事件回调类型,支持的事件:'videoSizeChanged'。 | 6781| callback | function | 是 | 视频播放宽高变化事件回调方法,width表示宽,height表示高。 | 6782 6783**示例:** 6784 6785```ts 6786videoPlayer.on('videoSizeChanged', (width: number, height: number) => { 6787 console.info('video width is: ' + width); 6788 console.info('video height is: ' + height); 6789}); 6790``` 6791### on('audioInterrupt')<sup>(deprecated)</sup> 6792 6793on(type: 'audioInterrupt', callback: (info: audio.InterruptEvent) => void): void 6794 6795监听音频焦点变化事件,参考[audio.InterruptEvent](../apis-audio-kit/js-apis-audio.md#interruptevent9)。 6796 6797> **说明:** 6798> 从API version 9开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('audioInterrupt')](#onaudiointerrupt9)替代。 6799 6800**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6801 6802**参数:** 6803 6804| 参数名 | 类型 | 必填 | 说明 | 6805| -------- | ------------------------------------------------------------ | ---- | -------------------------------------------------------- | 6806| type | string | 是 | 音频焦点变化事件回调类型,支持的事件:'audioInterrupt'。 | 6807| callback | function | 是 | 音频焦点变化事件回调方法。 | 6808 6809**示例:** 6810 6811```ts 6812import { audio } from '@kit.AudioKit'; 6813 6814videoPlayer.on('audioInterrupt', (info: audio.InterruptEvent) => { 6815 console.info('audioInterrupt called,and InterruptEvent info is:' + info) 6816}) 6817``` 6818 6819### on('error')<sup>(deprecated)</sup> 6820 6821on(type: 'error', callback: ErrorCallback): void 6822 6823开始监听视频播放错误事件,当上报error错误事件后,用户需处理error事件,退出播放操作。 6824 6825> **说明:** 6826> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayer.on('error')](#onerror9)替代。 6827 6828**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6829 6830**参数:** 6831 6832| 参数名 | 类型 | 必填 | 说明 | 6833| -------- | ------------- | ---- | ------------------------------------------------------------ | 6834| type | string | 是 | 播放错误事件回调类型,支持的事件包括:'error'。<br>- 'error':视频播放中发生错误,触发该事件。 | 6835| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是 | 播放错误事件回调方法。 | 6836 6837**示例:** 6838 6839```ts 6840import { BusinessError } from '@kit.BasicServicesKit'; 6841 6842videoPlayer.on('error', (error: BusinessError) => { // 设置'error'事件回调。 6843 console.error(`video error called, error: ${error}`); 6844}); 6845videoPlayer.url = 'fd://error'; //设置错误的播放地址,触发'error'事件。 6846``` 6847 6848## VideoPlayState<sup>(deprecated)</sup> 6849 6850type VideoPlayState = 'idle' | 'prepared' | 'playing' | 'paused' | 'stopped' | 'error' 6851 6852视频播放的状态机,可通过state属性获取当前状态。 6853 6854> **说明:** 6855> 从API version 8开始支持,从API version 9开始废弃,建议使用[AVPlayerState](#avplayerstate9)替代。 6856 6857**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer 6858 6859| 类型 | 说明 | 6860| -------- | -------------- | 6861| 'idle' | 视频播放空闲。 | 6862| 'prepared' | 视频播放准备。 | 6863| 'playing' | 视频正在播放。 | 6864| 'paused' | 视频暂停播放。 | 6865| 'stopped' | 视频播放停止。 | 6866| 'error' | 错误状态。 | 6867 6868## AudioRecorder<sup>(deprecated)</sup> 6869 6870> **说明:** 6871> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder](#avrecorder9)替代。 6872 6873音频录制管理类,用于录制音频媒体。在调用AudioRecorder的方法前,需要先通过[createAudioRecorder()](#mediacreateaudiorecorderdeprecated) 构建一个AudioRecorder实例。 6874 6875### prepare<sup>(deprecated)</sup> 6876 6877prepare(config: AudioRecorderConfig): void 6878 6879录音准备。 6880 6881> **说明:** 6882> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.prepare](#prepare9-2)替代。 6883 6884**需要权限:** ohos.permission.MICROPHONE 6885 6886**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 6887 6888**参数:** 6889 6890| 参数名 | 类型 | 必填 | 说明 | 6891| ------ | ------------------------------------------- | ---- | ------------------------------------------------------------ | 6892| config | [AudioRecorderConfig](#audiorecorderconfigdeprecated) | 是 | 配置录音的相关参数,包括音频输出URI、编码格式、采样率、声道数、输出格式等。 | 6893 6894**错误码:** 6895 6896以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 6897 6898| 错误码ID | 错误信息 | 6899| -------- | --------------------- | 6900| 201 | permission denied | 6901 6902**示例:** 6903 6904```ts 6905let audioRecorderConfig: media.AudioRecorderConfig = { 6906 audioEncoder : media.AudioEncoder.AAC_LC, 6907 audioEncodeBitRate : 22050, 6908 audioSampleRate : 22050, 6909 numberOfChannels : 2, 6910 format : media.AudioOutputFormat.AAC_ADTS, 6911 uri : 'fd://1', // 文件需先由调用者创建,并给予适当的权限。 6912 location : { latitude : 30, longitude : 130}, 6913} 6914audioRecorder.on('prepare', () => { //设置'prepare'事件回调。 6915 console.info('prepare called'); 6916}); 6917audioRecorder.prepare(audioRecorderConfig); 6918``` 6919 6920### start<sup>(deprecated)</sup> 6921 6922start(): void 6923 6924开始录制,需在'prepare'事件成功触发后,才能调用start方法。 6925 6926> **说明:** 6927> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.start](#start9)替代。 6928 6929**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 6930 6931**示例:** 6932 6933```ts 6934audioRecorder.on('start', () => { //设置'start'事件回调。 6935 console.info('audio recorder start called'); 6936}); 6937audioRecorder.start(); 6938``` 6939 6940### pause<sup>(deprecated)</sup> 6941 6942pause():void 6943 6944暂停录制,需要在'start'事件成功触发后,才能调用pause方法。 6945 6946> **说明:** 6947> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.pause](#pause9-2)替代。 6948 6949**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 6950 6951**示例:** 6952 6953```ts 6954audioRecorder.on('pause', () => { //设置'pause'事件回调。 6955 console.info('audio recorder pause called'); 6956}); 6957audioRecorder.pause(); 6958``` 6959 6960### resume<sup>(deprecated)</sup> 6961 6962resume():void 6963 6964恢复录制,需要在'pause'事件成功触发后,才能调用resume方法。 6965 6966> **说明:** 6967> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.resume](#resume9)替代。 6968 6969**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 6970 6971**示例:** 6972 6973```ts 6974audioRecorder.on('resume', () => { //设置'resume'事件回调。 6975 console.info('audio recorder resume called'); 6976}); 6977audioRecorder.resume(); 6978``` 6979 6980### stop<sup>(deprecated)</sup> 6981 6982stop(): void 6983 6984停止录音。 6985 6986> **说明:** 6987> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.stop](#stop9-2)替代。 6988 6989**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 6990 6991**示例:** 6992 6993```ts 6994audioRecorder.on('stop', () => { //设置'stop'事件回调。 6995 console.info('audio recorder stop called'); 6996}); 6997audioRecorder.stop(); 6998``` 6999 7000### release<sup>(deprecated)</sup> 7001 7002release(): void 7003 7004释放录音资源。 7005 7006> **说明:** 7007> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.release](#release9-2)替代。 7008 7009**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7010 7011**示例:** 7012 7013```ts 7014audioRecorder.on('release', () => { //设置'release'事件回调。 7015 console.info('audio recorder release called'); 7016}); 7017audioRecorder.release(); 7018audioRecorder = undefined; 7019``` 7020 7021### reset<sup>(deprecated)</sup> 7022 7023reset(): void 7024 7025重置录音。 7026 7027进行重置录音之前,需要先调用stop()停止录音。重置录音之后,需要调用prepare()设置录音参数项,才能再次进行录音。 7028 7029> **说明:** 7030> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.reset](#reset9-2)替代。 7031 7032**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7033 7034**示例:** 7035 7036```ts 7037audioRecorder.on('reset', () => { //设置'reset'事件回调。 7038 console.info('audio recorder reset called'); 7039}); 7040audioRecorder.reset(); 7041``` 7042 7043### on('prepare' | 'start' | 'pause' | 'resume' | 'stop' | 'release' | 'reset')<sup>(deprecated)</sup> 7044 7045on(type: 'prepare' | 'start' | 'pause' | 'resume' | 'stop' | 'release' | 'reset', callback: () => void): void 7046 7047开始订阅音频录制事件。 7048 7049> **说明:** 7050> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.on('stateChange')](#onstatechange9-1)替代。 7051 7052**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7053 7054**参数:** 7055 7056| 参数名 | 类型 | 必填 | 说明 | 7057| -------- | -------- | ---- | ------------------------------------------------------------ | 7058| 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调用,音频重置为初始状态,触发该事件。 | 7059| callback | ()=>void | 是 | 录制事件回调方法。 | 7060 7061**示例:** 7062 7063```ts 7064import { BusinessError } from '@kit.BasicServicesKit'; 7065 7066let audioRecorder: media.AudioRecorder = media.createAudioRecorder(); // 创建一个音频录制实例。 7067let audioRecorderConfig: media.AudioRecorderConfig = { 7068 audioEncoder : media.AudioEncoder.AAC_LC, 7069 audioEncodeBitRate : 22050, 7070 audioSampleRate : 22050, 7071 numberOfChannels : 2, 7072 format : media.AudioOutputFormat.AAC_ADTS, 7073 uri : 'fd://xx', // 文件需先由调用者创建,并给予适当的权限。 7074 location : { latitude : 30, longitude : 130} 7075} 7076audioRecorder.on('error', (error: BusinessError) => { // 设置'error'事件回调。 7077 console.error(`audio error called, error: ${error}`); 7078}); 7079audioRecorder.on('prepare', () => { // 设置'prepare'事件回调。 7080 console.info('prepare called'); 7081 audioRecorder.start(); // 开始录制,并触发'start'事件回调。 7082}); 7083audioRecorder.on('start', () => { // 设置'start'事件回调。 7084 console.info('audio recorder start called'); 7085}); 7086audioRecorder.on('pause', () => { // 设置'pause'事件回调。 7087 console.info('audio recorder pause called'); 7088}); 7089audioRecorder.on('resume', () => { // 设置'resume'事件回调。 7090 console.info('audio recorder resume called'); 7091}); 7092audioRecorder.on('stop', () => { // 设置'stop'事件回调。 7093 console.info('audio recorder stop called'); 7094}); 7095audioRecorder.on('release', () => { // 设置'release'事件回调。 7096 console.info('audio recorder release called'); 7097}); 7098audioRecorder.on('reset', () => { // 设置'reset'事件回调。 7099 console.info('audio recorder reset called'); 7100}); 7101audioRecorder.prepare(audioRecorderConfig) // 设置录制参数 ,并触发'prepare'事件回调。 7102``` 7103 7104### on('error')<sup>(deprecated)</sup> 7105 7106on(type: 'error', callback: ErrorCallback): void 7107 7108开始订阅音频录制错误事件,当上报error错误事件后,用户需处理error事件,退出录制操作。 7109 7110> **说明:** 7111> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorder.on('error')](#onerror9-1)替代。 7112 7113**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7114 7115**参数:** 7116 7117| 参数名 | 类型 | 必填 | 说明 | 7118| -------- | ------------- | ---- | ------------------------------------------------------------ | 7119| type | string | 是 | 录制错误事件回调类型'error'。<br/>- 'error':音频录制过程中发生错误,触发该事件。 | 7120| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是 | 录制错误事件回调方法。 | 7121 7122**示例:** 7123 7124```ts 7125import { BusinessError } from '@kit.BasicServicesKit'; 7126 7127let audioRecorderConfig: media.AudioRecorderConfig = { 7128 audioEncoder : media.AudioEncoder.AAC_LC, 7129 audioEncodeBitRate : 22050, 7130 audioSampleRate : 22050, 7131 numberOfChannels : 2, 7132 format : media.AudioOutputFormat.AAC_ADTS, 7133 uri : 'fd://xx', // 文件需先由调用者创建,并给予适当的权限。 7134 location : { latitude : 30, longitude : 130} 7135} 7136audioRecorder.on('error', (error: BusinessError) => { // 设置'error'事件回调。 7137 console.error(`audio error called, error: ${error}`); 7138}); 7139audioRecorder.prepare(audioRecorderConfig); // prepare不设置参数,触发'error'事件。 7140``` 7141 7142## AudioRecorderConfig<sup>(deprecated)</sup> 7143 7144> **说明:** 7145> 从API version 6开始支持,从API version 9开始废弃,建议使用[AVRecorderConfig](#avrecorderconfig9)替代。 7146 7147表示音频的录音配置。 7148 7149**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7150 7151| 名称 | 类型 | 必填 | 说明 | 7152| ----------------------------------- | -------------------------------------------- | ---- | ------------------------------------------------------------ | 7153| audioEncoder | [AudioEncoder](#audioencoderdeprecated) | 否 | 音频编码格式,默认设置为AAC_LC。<br/>**说明:** 从API version 8开始废弃,建议使用audioEncoderMime替代。 | 7154| audioEncodeBitRate | number | 否 | 音频编码比特率,默认值为48000。 | 7155| audioSampleRate | number | 否 | 音频采集采样率,默认值为48000。<br>可变比特率模式,码率仅作参考。 | 7156| numberOfChannels | number | 否 | 音频采集声道数,默认值为2。 | 7157| format | [AudioOutputFormat](#audiooutputformatdeprecated) | 否 | 音频输出封装格式,默认设置为MPEG_4。<br/>**说明:** 从API version 8开始废弃,建议使用fileFormat替代。 | 7158| location | [Location](#location) | 否 | 音频采集的地理位置。 | 7159| uri | string | 是 | 音频输出URI:fd://xx (fd number)<br/> <br/>文件需要由调用者创建,并赋予适当的权限。 | 7160| audioEncoderMime<sup>8+</sup> | [CodecMimeType](#codecmimetype8) | 否 | 容器编码格式。 | 7161| fileFormat<sup>8+</sup> | [ContainerFormatType](#containerformattype8) | 否 | 音频编码格式。 | 7162 7163## AudioEncoder<sup>(deprecated)</sup> 7164 7165> **说明:** 7166> 从API version 6开始支持,从API version 8开始废弃,建议使用[CodecMimeType](#codecmimetype8)替代。 7167 7168表示音频编码格式的枚举。 7169 7170**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7171 7172| 名称 | 值 | 说明 | 7173| ------- | ---- | ------------------------------------------------------------ | 7174| DEFAULT | 0 | 默认编码格式。<br/>仅做接口定义,暂不支持使用。 | 7175| AMR_NB | 1 | AMR-NB(Adaptive Multi Rate-Narrow Band Speech Codec) 编码格式。<br/>仅做接口定义,暂不支持使用。 | 7176| AMR_WB | 2 | AMR-WB(Adaptive Multi Rate-Wide Band Speech Codec) 编码格式。<br/>仅做接口定义,暂不支持使用。 | 7177| AAC_LC | 3 | AAC-LC(Advanced Audio Coding Low Complexity)编码格式。 | 7178| HE_AAC | 4 | HE_AAC(High-Efficiency Advanced Audio Coding)编码格式。<br/>仅做接口定义,暂不支持使用。 | 7179 7180## AudioOutputFormat<sup>(deprecated)</sup> 7181 7182> **说明:** 7183> 从API version 6开始支持,从API version 8 开始废弃,建议使用[ContainerFormatType](#containerformattype8)替代。 7184 7185表示音频封装格式的枚举。 7186 7187**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder 7188 7189| 名称 | 值 | 说明 | 7190| -------- | ---- | ------------------------------------------------------------ | 7191| DEFAULT | 0 | 默认封装格式。<br/>仅做接口定义,暂不支持使用。 | 7192| MPEG_4 | 2 | 封装为MPEG-4格式。 | 7193| AMR_NB | 3 | 封装为AMR_NB格式。<br/>仅做接口定义,暂不支持使用。 | 7194| AMR_WB | 4 | 封装为AMR_WB格式。<br/>仅做接口定义,暂不支持使用。 | 7195| AAC_ADTS | 6 | 封装为ADTS(Audio Data Transport Stream)格式,是AAC音频的传输流格式。 | 7196 7197 7198## media.createAVImageGenerator<sup>12+</sup> 7199 7200createAVImageGenerator(callback: AsyncCallback\<AVImageGenerator>): void 7201 7202创建AVImageGenerator实例,通过回调函数获取返回值。 7203 7204**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator 7205 7206**参数:** 7207 7208| 参数名 | 类型 | 必填 | 说明 | 7209| -------- | ------------------------------------- | ---- | ------------------------------------------------------------ | 7210| callback | AsyncCallback\<[AVImageGenerator](#avimagegenerator12)> | 是 | 回调函数。异步返回AVImageGenerator实例,失败时返回null。可用于获取视频缩略图。 | 7211 7212**错误码:** 7213 7214以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 7215 7216| 错误码ID | 错误信息 | 7217| -------- | ------------------------------ | 7218| 5400101 | No memory. Returned by callback. | 7219 7220**示例:** 7221 7222```ts 7223import { BusinessError } from '@kit.BasicServicesKit'; 7224 7225let avImageGenerator: media.AVImageGenerator; 7226media.createAVImageGenerator((error: BusinessError, generator: media.AVImageGenerator) => { 7227 if (generator != null) { 7228 avImageGenerator = generator; 7229 console.info('Succeeded in creating AVImageGenerator'); 7230 } else { 7231 console.error(`Failed to creat AVImageGenerator, error message:${error.message}`); 7232 } 7233}); 7234``` 7235 7236## media.createAVImageGenerator<sup>12+</sup> 7237 7238createAVImageGenerator(): Promise\<AVImageGenerator> 7239 7240创建AVImageGenerator对象,通过Promise获取返回值。 7241 7242**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator 7243 7244**返回值:** 7245 7246| 类型 | 说明 | 7247| ------------------------------- | ------------------------------------------------------------ | 7248| Promise\<[AVImageGenerator](#avimagegenerator12)> | Promise对象。异步返回AVImageGenerator实例,失败时返回null。可用于获取视频缩略图。 | 7249 7250**错误码:** 7251 7252以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 7253 7254| 错误码ID | 错误信息 | 7255| -------- | ----------------------------- | 7256| 5400101 | No memory. Returned by promise. | 7257 7258**示例:** 7259 7260```ts 7261import { BusinessError } from '@kit.BasicServicesKit'; 7262 7263let avImageGenerator: media.AVImageGenerator; 7264media.createAVImageGenerator().then((generator: media.AVImageGenerator) => { 7265 if (generator != null) { 7266 avImageGenerator = generator; 7267 console.info('Succeeded in creating AVImageGenerator'); 7268 } else { 7269 console.error('Failed to creat AVImageGenerator'); 7270 } 7271}).catch((error: BusinessError) => { 7272 console.error(`Failed to creat AVImageGenerator, error message:${error.message}`); 7273}); 7274``` 7275 7276## AVImageGenerator<sup>12+</sup> 7277 7278视频缩略图获取类,用于从视频资源中获取缩略图。在调用AVImageGenerator的方法前,需要先通过[createAVImageGenerator()](#mediacreateavimagegenerator12)构建一个AVImageGenerator实例。 7279 7280获取视频缩略图的demo可参考:[获取视频缩略图开发指导](../../media/media/avimagegenerator.md)。 7281 7282### 属性 7283 7284**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator 7285 7286| 名称 | 类型 | 可读 | 可写 | 说明 | 7287| --------------------------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ | 7288| 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。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致视频缩略图数据获取异常。 | 7289 7290### fetchFrameByTime<sup>12+</sup> 7291 7292fetchFrameByTime(timeUs: number, options: AVImageQueryOptions, param: PixelMapParams, callback: AsyncCallback\<image.PixelMap>): void 7293 7294异步方式获取视频缩略图。通过注册回调函数获取返回值。 7295 7296**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator 7297 7298**参数:** 7299 7300| 参数名 | 类型 | 必填 | 说明 | 7301| -------- | -------------------------------------------- | ---- | ----------------------------------- | 7302| timeUs | number | 是 | 需要获取的缩略图在视频中的时间点,单位为微秒(μs)。 | 7303| options | [AVImageQueryOptions](#avimagequeryoptions12) | 是 | 需要获取的缩略图时间点与视频帧的对应关系。 | 7304| param | [PixelMapParams](#pixelmapparams12) | 是 | 需要获取的缩略图的格式参数。 | 7305| callback | AsyncCallback\<[image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7)> | 是 | 回调函数。获取缩略图成功时,err为undefined,data为PixelMap实例,否则为错误对象。 | 7306 7307**错误码:** 7308 7309以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 7310 7311| 错误码ID | 错误信息 | 7312| -------- | ------------------------------------------ | 7313| 5400102 | Operation not allowed. Returned by callback. | 7314| 5400106 | Unsupported format. Returned by callback. | 7315 7316**示例:** 7317 7318```ts 7319import { BusinessError } from '@kit.BasicServicesKit'; 7320import { image } from '@kit.ImageKit'; 7321 7322let avImageGenerator: media.AVImageGenerator | undefined = undefined; 7323let pixel_map : image.PixelMap | undefined = undefined; 7324 7325// 初始化入参。 7326let timeUs: number = 0 7327 7328let queryOption: media.AVImageQueryOptions = media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC 7329 7330let param: media.PixelMapParams = { 7331 width : 300, 7332 height : 300, 7333} 7334 7335// 获取缩略图。 7336media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => { 7337 if(generator != null){ 7338 avImageGenerator = generator; 7339 console.info(`Succeeded in creating AVImageGenerator`); 7340 avImageGenerator.fetchFrameByTime(timeUs, queryOption, param, (error: BusinessError, pixelMap) => { 7341 if (error) { 7342 console.error(`Failed to fetch FrameByTime, err = ${JSON.stringify(error)}`) 7343 return 7344 } 7345 pixel_map = pixelMap; 7346 }); 7347 } else { 7348 console.error(`Failed to creat AVImageGenerator, error message:${err.message}`); 7349 }; 7350}); 7351``` 7352 7353### fetchFrameByTime<sup>12+</sup> 7354 7355fetchFrameByTime(timeUs: number, options: AVImageQueryOptions, param: PixelMapParams): Promise<image.PixelMap> 7356 7357异步方式获取视频缩略图。通过Promise获取返回值。 7358 7359**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator 7360 7361**参数:** 7362 7363| 参数名 | 类型 | 必填 | 说明 | 7364| -------- | -------------------------------------------- | ---- | ----------------------------------- | 7365| timeUs | number | 是 | 需要获取的缩略图在视频中的时间点,单位为微秒(μs)。 | 7366| options | [AVImageQueryOptions](#avimagequeryoptions12) | 是 | 需要获取的缩略图时间点与视频帧的对应关系。 | 7367| param | [PixelMapParams](#pixelmapparams12) | 是 | 需要获取的缩略图的格式参数。 | 7368 7369**返回值:** 7370 7371| 类型 | 说明 | 7372| -------------- | ---------------------------------------- | 7373| Promise\<[image.PixelMap](../apis-image-kit/js-apis-image.md#pixelmap7)> | Promise对象,返回视频缩略图对象。 | 7374 7375**错误码:** 7376 7377以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 7378 7379| 错误码ID | 错误信息 | 7380| -------- | ----------------------------------------- | 7381| 5400102 | Operation not allowed. Returned by promise. | 7382| 5400106 | Unsupported format. Returned by promise. | 7383 7384**示例:** 7385 7386```ts 7387import { BusinessError } from '@kit.BasicServicesKit'; 7388import { image } from '@kit.ImageKit'; 7389 7390let avImageGenerator: media.AVImageGenerator | undefined = undefined; 7391let pixel_map : image.PixelMap | undefined = undefined; 7392 7393// 初始化入参。 7394let timeUs: number = 0 7395 7396let queryOption: media.AVImageQueryOptions = media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC 7397 7398let param: media.PixelMapParams = { 7399 width : 300, 7400 height : 300, 7401} 7402 7403// 获取缩略图。 7404media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => { 7405 if(generator != null){ 7406 avImageGenerator = generator; 7407 console.info(`Succeeded in creating AVImageGenerator`); 7408 avImageGenerator.fetchFrameByTime(timeUs, queryOption, param).then((pixelMap: image.PixelMap) => { 7409 pixel_map = pixelMap; 7410 }).catch((error: BusinessError) => { 7411 console.error(`Failed to fetch FrameByTime, error message:${error.message}`); 7412 }); 7413 } else { 7414 console.error(`Failed to creat AVImageGenerator, error message:${err.message}`); 7415 }; 7416}); 7417``` 7418 7419### release<sup>12+</sup> 7420 7421release(callback: AsyncCallback\<void>): void 7422 7423异步方式释放资源。通过注册回调函数获取返回值。 7424 7425**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator 7426 7427**参数:** 7428 7429| 参数名 | 类型 | 必填 | 说明 | 7430| -------- | -------------------------------------------- | ---- | ----------------------------------- | 7431| callback | AsyncCallback\<void> | 是 | 回调函数。当释放资源成功,err为undefined,否则为错误对象。 | 7432 7433**错误码:** 7434 7435以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 7436 7437| 错误码ID | 错误信息 | 7438| -------- | ------------------------------------------ | 7439| 5400102 | Operation not allowed. Returned by callback. | 7440 7441**示例:** 7442 7443```ts 7444import { BusinessError } from '@kit.BasicServicesKit'; 7445 7446let avImageGenerator: media.AVImageGenerator | undefined = undefined; 7447 7448//释放资源。 7449media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => { 7450 if(generator != null){ 7451 avImageGenerator = generator; 7452 console.info(`Succeeded in creating AVImageGenerator`); 7453 avImageGenerator.release((error: BusinessError) => { 7454 if (error) { 7455 console.error(`Failed to release, err = ${JSON.stringify(error)}`); 7456 return; 7457 } 7458 console.info(`Succeeded in releasing`); 7459 }); 7460 } else { 7461 console.error(`Failed to creat AVImageGenerator, error message:${err.message}`); 7462 }; 7463}); 7464``` 7465 7466### release<sup>12+</sup> 7467 7468release(): Promise\<void> 7469 7470异步方式释放资源。通过Promise获取返回值。 7471 7472**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator 7473 7474**返回值:** 7475 7476| 类型 | 说明 | 7477| -------------- | ---------------------------------------- | 7478| Promise\<void> | 异步方式释放资源release方法的Promise返回值。 | 7479 7480**错误码:** 7481 7482以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 7483 7484| 错误码ID | 错误信息 | 7485| -------- | ----------------------------------------- | 7486| 5400102 | Operation not allowed. Returned by promise. | 7487 7488**示例:** 7489 7490```ts 7491import { BusinessError } from '@kit.BasicServicesKit'; 7492 7493let avImageGenerator: media.AVImageGenerator | undefined = undefined; 7494 7495//释放资源。 7496media.createAVImageGenerator((err: BusinessError, generator: media.AVImageGenerator) => { 7497 if(generator != null){ 7498 avImageGenerator = generator; 7499 console.info(`Succeeded in creating AVImageGenerator`); 7500 avImageGenerator.release().then(() => { 7501 console.info(`Succeeded in releasing.`); 7502 }).catch((error: BusinessError) => { 7503 console.error(`Failed to release, error message:${error.message}`); 7504 }); 7505 } else { 7506 console.error(`Failed to creat AVImageGenerator, error message:${err.message}`); 7507 }; 7508}); 7509``` 7510 7511## AVImageQueryOptions<sup>12+</sup> 7512 7513需要获取的缩略图时间点与视频帧的对应关系。 7514 7515在获取视频缩略图时,传入的时间点与实际取得的视频帧所在时间点不一定相等,需要指定传入的时间点与实际取得的视频帧的时间关系。 7516 7517**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator 7518 7519| 名称 | 值 | 说明 | 7520| ------------------------ | --------------- | ------------------------------------------------------------ | 7521| AV_IMAGE_QUERY_NEXT_SYNC | 0 | 表示选取传入时间点或之后的关键帧。 | 7522| AV_IMAGE_QUERY_PREVIOUS_SYNC | 1 | 表示选取传入时间点或之前的关键帧。 | 7523| AV_IMAGE_QUERY_CLOSEST_SYNC | 2 | 表示选取离传入时间点最近的关键帧。 | 7524| AV_IMAGE_QUERY_CLOSEST | 3 | 表示选取离传入时间点最近的帧,该帧不一定是关键帧。 | 7525 7526## PixelMapParams<sup>12+</sup> 7527 7528获取视频缩略图时,输出缩略图的格式参数。 7529 7530**系统能力:** SystemCapability.Multimedia.Media.AVImageGenerator 7531 7532| 名称 | 类型 | 可读 | 可写 | 说明 | 7533|--------|--------|------|------|---------------------------------------------------------------------------------| 7534| width | number | 是 | 是 | 输出的缩略图宽度。应保证大于0且不大于原始视频宽度。否则返回的缩略图不会进行缩放。 | 7535| height | number | 是 | 是 | 输出的缩略图高度。应保证大于0且不大于原始视频高度。否则返回的缩略图不会进行缩放。 | 7536 7537## media.createMediaSourceWithUrl<sup>12+</sup> 7538 7539createMediaSourceWithUrl(url: string, headers?: Record\<string, string>): MediaSource 7540 7541创建流媒体预下载媒体来源实例方法。 7542 7543**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。 7544 7545**系统能力:** SystemCapability.Multimedia.Media.Core 7546 7547**参数:** 7548 7549| 参数名 | 类型 | 必填 | 说明 | 7550| -------- | -------- | ---- | -------------------- | 7551| url | string | 是 | - 流媒体预下载媒体来源url,支持的流媒体格式:HLS、HTTP-FLV、Dash、Https。<br> - 本地m3u8的fd路径。 | 7552| headers | Record\<string, string> | 否 | 支持流媒体预下载HttpHeader自定义。 | 7553 7554**返回值:** 7555 7556| 类型 | 说明 | 7557| -------------- | ------------------------------------------ | 7558| [MediaSource](#mediasource12) | MediaSource返回值。 | 7559 7560**错误码:** 7561 7562以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md) 7563 7564| 错误码ID | 错误信息 | 7565| -------- | ----------------------------------------- | 7566| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 7567| 5400101 | No memory. | 7568 7569**示例1:** 7570 7571```ts 7572let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"}; 7573let mediaSource : media.MediaSource = media.createMediaSourceWithUrl("http://xxx", headers); 7574``` 7575 7576**示例2:** 7577 7578<!--code_no_check--> 7579```ts 7580import { common } from '@kit.AbilityKit'; 7581import { resourceManager } from '@kit.LocalizationKit'; 7582 7583let context = getContext(this) as common.UIAbilityContext; 7584let mgr = context.resourceManager; 7585let fileDescriptor = await mgr.getRawFd("xxx.m3u8"); 7586 7587let fd:string = fileDescriptor.fd.toString(); 7588let offset:string = fileDescriptor.offset.toString(); 7589let length:string = fileDescriptor.length.toString(); 7590let fdUrl:string = "fd://" + fd + "?offset=" + offset + "&size=" + length; 7591 7592let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"}; 7593let mediaSource : media.MediaSource = media.createMediaSourceWithUrl(fdUrl, headers); 7594 7595let mimeType : media.AVMimeTypes = media.AVMimeTypes.APPLICATION_M3U8; 7596mediaSource.setMimeType(mimeType); 7597 7598``` 7599 7600## MediaSource<sup>12+</sup> 7601 7602媒体数据信息。来源自[createMediaSourceWithUrl](#mediacreatemediasourcewithurl12)。 7603 7604**系统能力:** SystemCapability.Multimedia.Media.Core 7605 7606### setMimeType<sup>12+</sup> 7607 7608setMimeType(mimeType: AVMimeTypes): void 7609 7610设置媒体MIME类型,以帮助播放器处理扩展的媒体源。 7611 7612**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 7613 7614**系统能力:** SystemCapability.Multimedia.Media.Core 7615 7616**参数:** 7617 7618| 参数名 | 类型 | 必填 | 说明 | 7619| -------- | -------- | ---- | -------------------- | 7620| mimeType | [AVMimeTypes](#mediasource12) | 是 | 媒体MIME类型。 | 7621 7622## AVMimeTypes<sup>12+</sup> 7623 7624媒体MIME类型,通过[setMimeType](#setmimetype12)设置。 7625 7626**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 7627 7628**系统能力:** SystemCapability.Multimedia.Media.Core 7629 7630 7631| 名称 | 值 | 说明 | 7632| ---------- | ---- | ------------------------------------------------------------ | 7633| APPLICATION_M3U8 | application/m3u8 | 表示m3u8本地文件。 | 7634 7635 7636## PlaybackStrategy<sup>12+</sup> 7637 7638播放策略。 7639 7640**系统能力:** SystemCapability.Multimedia.Media.Core 7641 7642| 名称 | 类型 | 必填 | 说明 | 7643| -------- | -------- | ---- | -------------------- | 7644| preferredWidth| number | 否 | 播放策略首选宽度,int类型,如1080。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 7645| preferredHeight | number | 否 | 播放策略首选高度,int类型,如1920。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 7646| preferredBufferDuration | number | 否 | 播放策略首选缓冲持续时间,单位s,取值范围1-20。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 7647| preferredHdr | boolean | 否 | 播放策略true是hdr,false非hdr,默认非hdr。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 7648| mutedMediaType | [MediaType](#mediatype8) | 否 | 静音播放的媒体类型,仅支持设置 MediaType.MEDIA_TYPE_AUD。 | 7649| preferredAudioLanguage<sup>13+</sup> | string | 否 | 播放策略首选音轨语言。dash场景下应用可按需设置。非dash场景暂不支持,建议缺省。<br>**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。 | 7650| preferredSubtitleLanguage<sup>13+</sup> | string | 否 | 播放策略首选字幕语言。dash场景下应用可按需设置。非dash场景暂不支持,建议缺省。<br>**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。 | 7651 7652## AVScreenCaptureRecordPreset<sup>12+</sup> 7653 7654进行屏幕录制时的编码、封装格式参数的枚举。 7655 7656**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 7657 7658| 名称 | 值 | 说明 | 7659| --------------------------------- | ---- | -------------------------------------------- | 7660| SCREEN_RECORD_PRESET_H264_AAC_MP4 | 0 | 使用视频H264编码,音频AAC编码,MP4封装格式。 | 7661| SCREEN_RECORD_PRESET_H265_AAC_MP4 | 1 | 使用视频H265编码,音频AAC编码,MP4封装格式。 | 7662 7663## AVScreenCaptureStateCode<sup>12+</sup> 7664 7665屏幕录制的状态回调。 7666 7667**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 7668 7669| 名称 | 值 | 说明 | 7670| ---------------------------------------- | ---- | ------------------------ | 7671| SCREENCAPTURE_STATE_STARTED | 0 | 录屏已开始。 | 7672| SCREENCAPTURE_STATE_CANCELED | 1 | 录屏被取消。 | 7673| SCREENCAPTURE_STATE_STOPPED_BY_USER | 2 | 录屏被用户手动停止。 | 7674| SCREENCAPTURE_STATE_INTERRUPTED_BY_OTHER | 3 | 录屏被其他录屏打断。 | 7675| SCREENCAPTURE_STATE_STOPPED_BY_CALL | 4 | 录屏被来电打断。 | 7676| SCREENCAPTURE_STATE_MIC_UNAVAILABLE | 5 | 录屏无法使用麦克风收音。 | 7677| SCREENCAPTURE_STATE_MIC_MUTED_BY_USER | 6 | 麦克风被用户关闭。 | 7678| SCREENCAPTURE_STATE_MIC_UNMUTED_BY_USER | 7 | 麦克风被用户打开。 | 7679| SCREENCAPTURE_STATE_ENTER_PRIVATE_SCENE | 8 | 录屏进入隐私页面。 | 7680| SCREENCAPTURE_STATE_EXIT_PRIVATE_SCENE | 9 | 录屏退出隐私页面。 | 7681| SCREENCAPTURE_STATE_STOPPED_BY_USER_SWITCHES | 10 | 系统用户切换,录屏中断。 | 7682 7683## AVScreenCaptureRecordConfig<sup>12+</sup> 7684 7685表示录屏参数配置。 7686 7687**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 7688 7689| 名称 | 类型 | 必填 | 说明 | 7690| ----------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 7691| fd | number | 是 | 录制输出的文件fd。 | 7692| frameWidth | number | 否 | 录屏的视频宽度,默认屏幕宽度,根据不同屏幕默认值不同,单位px。 | 7693| frameHeight | number | 否 | 录屏的视频高度,默认屏幕高度,根据不同屏幕默认值不同,单位px。 | 7694| videoBitrate | number | 否 | 录屏的视频比特率,默认10000000。 | 7695| audioSampleRate | number | 否 | 录屏的音频采样率,内录的系统音和外录的麦克风都是用此采样率,默认48000,仅支持设置48000或16000。 | 7696| audioChannelCount | number | 否 | 录屏的音频通道数,内录的系统音和外录的麦克风都是用此通道数,默认2声道,仅支持设置1或2声道。 | 7697| audioBitrate | number | 否 | 录屏的音频比特率,内录的系统音和外录的麦克风都是用此比特率,默认96000。 | 7698| preset | [AVScreenCaptureRecordPreset](#avscreencapturerecordpreset12) | 否 | 录屏使用的编码和封装格式,默认SCREEN_RECORD_PRESET_H264_AAC_MP4格式。 | 7699| displayId<sup>15+</sup> | number | 否 | 指定录屏使用的屏幕,默认主屏幕。 | 7700 7701## AVScreenCaptureRecorder<sup>12+</sup> 7702 7703屏幕录制管理类,用于进行屏幕录制。在调用AVScreenCaptureRecorder的方法前,需要先通过[createAVScreenCaptureRecorder()](#mediacreateavscreencapturerecorder12)创建一个AVScreenCaptureRecorder实例。 7704 7705### init<sup>12+</sup> 7706 7707init(config: AVScreenCaptureRecordConfig): Promise\<void> 7708 7709异步方式进行录屏初始化,设置录屏参数。通过Promise获取返回值。 7710 7711**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 7712 7713**参数:** 7714 7715| 参数名 | 类型 | 必填 | 说明 | 7716| ------ | ------------------------------------------------------------ | ---- | ------------------------ | 7717| config | [AVScreenCaptureRecordConfig](#avscreencapturerecordconfig12) | 是 | 配置屏幕录制的相关参数。 | 7718 7719**返回值:** 7720 7721| 类型 | 说明 | 7722| -------------- | ----------------------------------- | 7723| Promise\<void> | 异步录屏初始化方法的Promise返回值。 | 7724 7725**错误码:** 7726 7727| 错误码ID | 错误信息 | 7728| -------- | ---------------------------------------------- | 7729| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. Return by promise. | 7730| 5400103 | IO error. Return by promise. | 7731| 5400105 | Service died. Return by promise. | 7732 7733**示例:** 7734 7735```ts 7736import { BusinessError } from '@kit.BasicServicesKit'; 7737 7738let avCaptureConfig: media.AVScreenCaptureRecordConfig = { 7739 fd: 0, // 文件需要先有调用者创建,赋予写权限,将文件fd传给此参数。 7740 frameWidth: 640, 7741 frameHeight: 480 7742 // 补充其他参数。 7743} 7744 7745avScreenCaptureRecorder.init(avCaptureConfig).then(() => { 7746 console.info('Succeeded in initing avScreenCaptureRecorder'); 7747}).catch((err: BusinessError) => { 7748 console.info('Failed to init avScreenCaptureRecorder, error: ' + err.message); 7749}) 7750``` 7751 7752### startRecording<sup>12+</sup> 7753 7754startRecording(): Promise\<void> 7755 7756异步方式开始录屏。通过Promise获取返回值。 7757 7758**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 7759 7760**返回值:** 7761 7762| 类型 | 说明 | 7763| -------------- | -------------------------------- | 7764| Promise\<void> | 异步开始录屏方法的Promise返回值. | 7765 7766**错误码:** 7767 7768| 错误码ID | 错误信息 | 7769| -------- | -------------------------------- | 7770| 5400103 | IO error. Return by promise. | 7771| 5400105 | Service died. Return by promise. | 7772 7773**示例:** 7774 7775```ts 7776import { BusinessError } from '@kit.BasicServicesKit'; 7777 7778avScreenCaptureRecorder.startRecording().then(() => { 7779 console.info('Succeeded in starting avScreenCaptureRecorder'); 7780}).catch((err: BusinessError) => { 7781 console.info('Failed to start avScreenCaptureRecorder, error: ' + err.message); 7782}) 7783``` 7784 7785### stopRecording<sup>12+</sup> 7786 7787stopRecording(): Promise\<void> 7788 7789异步方式结束录屏。通过Promise获取返回值。 7790 7791**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 7792 7793**返回值:** 7794 7795| 类型 | 说明 | 7796| -------------- | --------------------------------- | 7797| Promise\<void> | 异步结束录屏方法的Promise返回值。 | 7798 7799**错误码:** 7800 7801| 错误码ID | 错误信息 | 7802| -------- | -------------------------------- | 7803| 5400103 | IO error. Return by promise. | 7804| 5400105 | Service died. Return by promise. | 7805 7806**示例:** 7807 7808```ts 7809import { BusinessError } from '@kit.BasicServicesKit'; 7810 7811avScreenCaptureRecorder.stopRecording().then(() => { 7812 console.info('Succeeded in stopping avScreenCaptureRecorder'); 7813}).catch((err: BusinessError) => { 7814 console.info('Failed to stop avScreenCaptureRecorder, error: ' + err.message); 7815}) 7816``` 7817 7818### skipPrivacyMode<sup>12+</sup> 7819 7820skipPrivacyMode(windowIDs: Array\<number>): Promise\<void> 7821 7822录屏时,应用可对本应用的隐私窗口做安全豁免。通过Promise获取返回值。 7823如录屏时,用户在本应用进行输入密码等操作,应用不会进行黑屏处理。 7824 7825**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 7826 7827**参数:** 7828 7829| 参数名 | 类型 | 必填 | 说明 | 7830| ------ | ------- | ---- | --------------------------------------------------------- | 7831| windowIDs | Array\<number> | 是 | 需要豁免隐私的窗口列表,包括主窗口id和子窗口id,窗口属性获取方法可以参考[窗口API引用](../apis-arkui/js-apis-window.md#getwindowproperties9)。 | 7832 7833**返回值:** 7834 7835| 类型 | 说明 | 7836| -------------- | -------------------------------- | 7837| Promise\<void> | 豁免隐私窗口的Promise返回值. | 7838 7839**错误码:** 7840 7841| 错误码ID | 错误信息 | 7842| -------- | -------------------------------- | 7843| 5400103 | IO error. Return by promise. | 7844| 5400105 | Service died. Return by promise. | 7845 7846**示例:** 7847 7848```ts 7849import { BusinessError } from '@kit.BasicServicesKit'; 7850 7851let windowIDs = []; 7852avScreenCaptureRecorder.skipPrivacyMode(windowIDs).then(() => { 7853 console.info('Succeeded in skipping privacy mode'); 7854}).catch((err: BusinessError) => { 7855 console.info('Failed to skip privacy mode, error: ' + err.message); 7856}) 7857``` 7858 7859### setMicEnabled<sup>12+</sup> 7860 7861setMicEnabled(enable: boolean): Promise\<void> 7862 7863异步方式设置麦克风开关。通过Promise获取返回值。 7864 7865**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 7866 7867**参数:** 7868 7869| 参数名 | 类型 | 必填 | 说明 | 7870| ------ | ------- | ---- | --------------------------------------------------------- | 7871| enable | boolean | 是 | 麦克风开关控制,true代表麦克风打开,false代表麦克风关闭。 | 7872 7873**返回值:** 7874 7875| 类型 | 说明 | 7876| -------------- | --------------------------------------- | 7877| Promise\<void> | 异步设置麦克风开关方法的Promise返回值。 | 7878 7879**错误码:** 7880 7881| 错误码ID | 错误信息 | 7882| -------- | -------------------------------- | 7883| 5400103 | IO error. Return by promise. | 7884| 5400105 | Service died. Return by promise. | 7885 7886**示例:** 7887 7888```ts 7889import { BusinessError } from '@kit.BasicServicesKit'; 7890 7891avScreenCaptureRecorder.setMicEnabled(true).then(() => { 7892 console.info('Succeeded in setMicEnabled avScreenCaptureRecorder'); 7893}).catch((err: BusinessError) => { 7894 console.info('Failed to setMicEnabled avScreenCaptureRecorder, error: ' + err.message); 7895}) 7896``` 7897 7898### release<sup>12+</sup> 7899 7900release(): Promise\<void> 7901 7902异步方式释放录屏。通过Promise获取返回值。 7903 7904**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 7905 7906**返回值:** 7907 7908| 类型 | 说明 | 7909| -------------- | --------------------------------- | 7910| Promise\<void> | 异步释放录屏方法的Promise返回值。 | 7911 7912**错误码:** 7913 7914| 错误码ID | 错误信息 | 7915| -------- | -------------------------------- | 7916| 5400103 | IO error. Return by promise. | 7917| 5400105 | Service died. Return by promise. | 7918 7919**示例:** 7920 7921```ts 7922import { BusinessError } from '@kit.BasicServicesKit'; 7923 7924avScreenCaptureRecorder.release().then(() => { 7925 console.info('Succeeded in releasing avScreenCaptureRecorder'); 7926}).catch((err: BusinessError) => { 7927 console.info('Faile to release avScreenCaptureRecorder, error: ' + err.message); 7928}) 7929``` 7930 7931### on('stateChange')<sup>12+</sup> 7932 7933on(type: 'stateChange', callback: Callback\<AVScreenCaptureStateCode>): void 7934 7935订阅录屏状态切换的事件,当状态发生的时候,会通过订阅的回调通知用户。用户只能订阅一个状态切换的回调方法,重复订阅时,以最后一次订阅的回调接口为准。 7936 7937**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 7938 7939**参数:** 7940 7941| 参数名 | 类型 | 必填 | 说明 | 7942| -------- | -------- | ---- | ------------------------------------------------------------ | 7943| type | string | 是 | 状态切换事件回调类型,支持的事件:'stateChange'。 | 7944| callback | function | 是 | 状态切换事件回调方法,[AVScreenCaptureStateCode](#avscreencapturestatecode12)表示切换到的状态。 | 7945 7946**示例:** 7947 7948```ts 7949avScreenCaptureRecorder.on('stateChange', (state: media.AVScreenCaptureStateCode) => { 7950 console.info('avScreenCaptureRecorder stateChange to ' + state); 7951}) 7952``` 7953 7954### on('error')<sup>12+</sup> 7955 7956on(type: 'error', callback: ErrorCallback): void 7957 7958订阅AVScreenCaptureRecorder的错误事件,用户可以根据应用自身逻辑对错误事件进行处理。用户只能订阅一个错误事件的回调方法,重复订阅时,以最后一次订阅的回调接口为准。 7959 7960**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 7961 7962**参数:** 7963 7964| 参数名 | 类型 | 必填 | 说明 | 7965| -------- | ------------- | ---- | --------------------------------------- | 7966| type | string | 是 | 错误事件回调类型,支持的事件:'error'。 | 7967| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是 | 录屏错误事件回调方法。 | 7968 7969**错误码:** 7970 7971| 错误码ID | 错误信息 | 7972| -------- | -------------------------------- | 7973| 201 | permission denied. | 7974| 5400103 | IO error. Return by ErrorCallback. | 7975| 5400105 | Service died. Return by ErrorCallback. | 7976 7977**示例:** 7978 7979```ts 7980avScreenCaptureRecorder.on('error', (err: BusinessError) => { 7981 console.error('avScreenCaptureRecorder error:' + err.message); 7982}) 7983``` 7984 7985### off('stateChange')<sup>12+</sup> 7986 7987 off(type: 'stateChange', callback?: Callback\<AVScreenCaptureStateCode>): void 7988 7989取消订阅状态切换回调事件。用户可以指定填入状态切换的回调方法来取消订阅。 7990 7991**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 7992 7993**参数:** 7994 7995| 参数名 | 类型 | 必填 | 说明 | 7996| -------- | -------- | ---- | ------------------------------------------------------------ | 7997| type | string | 是 | 状态切换事件回调类型,支持的事件:'stateChange'。 | 7998| callback | function | 否 | 状态切换事件回调方法,[AVScreenCaptureStateCode](#avscreencapturestatecode12)表示切换到的状态,不填此参数则会取消最后一次订阅事件。 | 7999 8000**示例:** 8001 8002```ts 8003avScreenCaptureRecorder.off('stateChange'); 8004``` 8005 8006### off('error')<sup>12+</sup> 8007 8008off(type: 'error', callback?: ErrorCallback): void 8009 8010取消订阅错误回调事件。用户可以指定填入错误回调方法来取消订阅。 8011 8012**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 8013 8014**参数:** 8015 8016| 参数名 | 类型 | 必填 | 说明 | 8017| -------- | -------- | ---- | ---------------------------------------------------------- | 8018| type | string | 是 | 状态切换事件回调类型,支持的事件:'error'。 | 8019| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否 | 录屏错误事件回调方法,不填此参数则会取消最后一次订阅事件。 | 8020 8021**示例:** 8022 8023```ts 8024avScreenCaptureRecorder.off('error'); 8025```