1# Interface (AVScreenCaptureRecorder) 2<!--Kit: Media Kit--> 3<!--Subsystem: Multimedia--> 4<!--Owner: @zzs_911--> 5<!--Designer: @stupig001--> 6<!--Tester: @xdlinc--> 7<!--Adviser: @zengyawen--> 8 9> **说明:** 10> 11> - 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 12> - 本Interface首批接口从API version 12开始支持。 13 14屏幕录制管理类,用于进行屏幕录制。在调用AVScreenCaptureRecorder的方法前,需要先通过[createAVScreenCaptureRecorder()](arkts-apis-media-f.md#mediacreateavscreencapturerecorder12)创建一个AVScreenCaptureRecorder实例。 15 16## 导入模块 17 18```ts 19import { media } from '@kit.MediaKit'; 20``` 21 22## init<sup>12+</sup> 23 24init(config: AVScreenCaptureRecordConfig): Promise\<void> 25 26异步方式进行录屏初始化,设置录屏参数。通过Promise获取返回值。 27 28**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 29 30**参数:** 31 32| 参数名 | 类型 | 必填 | 说明 | 33| ------ | ------------------------------------------------------------ | ---- | ------------------------ | 34| config | [AVScreenCaptureRecordConfig](arkts-apis-media-i.md#avscreencapturerecordconfig12) | 是 | 配置屏幕录制的相关参数。 | 35 36**返回值:** 37 38| 类型 | 说明 | 39| -------------- | ----------------------------------- | 40| Promise\<void> | 异步录屏初始化方法的Promise返回值。 | 41 42**错误码:** 43 44以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[媒体错误码](errorcode-media.md)。 45 46| 错误码ID | 错误信息 | 47| -------- | ---------------------------------------------- | 48| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. Return by promise. | 49| 5400103 | IO error. Return by promise. | 50| 5400105 | Service died. Return by promise. | 51 52**示例:** 53 54```ts 55import { BusinessError } from '@kit.BasicServicesKit'; 56import { fileIo as fs } from '@kit.CoreFileKit'; 57 58public getFileFd(): number { 59 let filesDir = '/data/storage/el2/base/haps'; 60 let file = fs.openSync(filesDir + '/screenCapture.mp4', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 61 return file.fd; 62} 63 64let avCaptureConfig: media.AVScreenCaptureRecordConfig = { 65 fd: this.getFileFd(), // 文件需要先由调用者创建,通常是MP4文件,赋予写权限,将文件fd传给此参数。 66 frameWidth: 640, 67 frameHeight: 480 68 // 补充其他参数。 69}; 70 71avScreenCaptureRecorder.init(avCaptureConfig).then(() => { 72 console.info('Succeeded in initing avScreenCaptureRecorder'); 73}).catch((err: BusinessError) => { 74 console.info('Failed to init avScreenCaptureRecorder, error: ' + err.message); 75}); 76``` 77 78## startRecording<sup>12+</sup> 79 80startRecording(): Promise\<void> 81 82异步方式开始录屏。通过Promise获取返回值。 83 84**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 85 86**返回值:** 87 88| 类型 | 说明 | 89| -------------- | -------------------------------- | 90| Promise\<void> | Promise对象,无返回结果。 | 91 92**错误码:** 93 94以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 95 96| 错误码ID | 错误信息 | 97| -------- | -------------------------------- | 98| 5400103 | IO error. Return by promise. | 99| 5400105 | Service died. Return by promise. | 100 101**示例:** 102 103```ts 104import { BusinessError } from '@kit.BasicServicesKit'; 105 106avScreenCaptureRecorder.startRecording().then(() => { 107 console.info('Succeeded in starting avScreenCaptureRecorder'); 108}).catch((err: BusinessError) => { 109 console.info('Failed to start avScreenCaptureRecorder, error: ' + err.message); 110}); 111``` 112 113## stopRecording<sup>12+</sup> 114 115stopRecording(): Promise\<void> 116 117异步方式结束录屏。通过Promise获取返回值。 118 119**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 120 121**返回值:** 122 123| 类型 | 说明 | 124| -------------- | --------------------------------- | 125| Promise\<void> | 异步结束录屏方法的Promise返回值。 | 126 127**错误码:** 128 129以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 130 131| 错误码ID | 错误信息 | 132| -------- | -------------------------------- | 133| 5400103 | IO error. Return by promise. | 134| 5400105 | Service died. Return by promise. | 135 136**示例:** 137 138```ts 139import { BusinessError } from '@kit.BasicServicesKit'; 140 141avScreenCaptureRecorder.stopRecording().then(() => { 142 console.info('Succeeded in stopping avScreenCaptureRecorder'); 143}).catch((err: BusinessError) => { 144 console.error(`Failed to stop avScreenCaptureRecorder. Code: ${err.code}, message: ${err.message}`); 145}); 146``` 147 148## skipPrivacyMode<sup>12+</sup> 149 150skipPrivacyMode(windowIDs: Array\<number>): Promise\<void> 151 152录屏时,应用可对本应用的隐私窗口做安全豁免。通过Promise获取返回值。 153如录屏时,用户在本应用进行输入密码等操作,应用不会进行黑屏处理。 154 155**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 156 157**参数:** 158 159| 参数名 | 类型 | 必填 | 说明 | 160| ------ | ------- | ---- | --------------------------------------------------------- | 161| windowIDs | Array\<number> | 是 | 需要豁免隐私的窗口列表,包括主窗口id和子窗口id,窗口属性获取方法可以参考[窗口API引用](../apis-arkui/arkts-apis-window-Window.md#getwindowproperties9)。 | 162 163**返回值:** 164 165| 类型 | 说明 | 166| -------------- | -------------------------------- | 167| Promise\<void> | Promise对象,无返回结果。 | 168 169**错误码:** 170 171以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 172 173| 错误码ID | 错误信息 | 174| -------- | -------------------------------- | 175| 5400103 | IO error. Return by promise. | 176| 5400105 | Service died. Return by promise. | 177 178**示例:** 179 180```ts 181import { BusinessError } from '@kit.BasicServicesKit'; 182 183let windowIDs = []; 184avScreenCaptureRecorder.skipPrivacyMode(windowIDs).then(() => { 185 console.info('Succeeded in skipping privacy mode'); 186}).catch((err: BusinessError) => { 187 console.info('Failed to skip privacy mode, error: ' + err.message); 188}); 189``` 190 191## setMicEnabled<sup>12+</sup> 192 193setMicEnabled(enable: boolean): Promise\<void> 194 195异步方式设置麦克风开关。通过Promise获取返回值。 196 197**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 198 199**参数:** 200 201| 参数名 | 类型 | 必填 | 说明 | 202| ------ | ------- | ---- | --------------------------------------------------------- | 203| enable | boolean | 是 | 麦克风开关控制,true代表麦克风打开,false代表麦克风关闭。 | 204 205**返回值:** 206 207| 类型 | 说明 | 208| -------------- | --------------------------------------- | 209| Promise\<void> | 异步设置麦克风开关方法的Promise返回值。 | 210 211**错误码:** 212 213以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 214 215| 错误码ID | 错误信息 | 216| -------- | -------------------------------- | 217| 5400103 | IO error. Return by promise. | 218| 5400105 | Service died. Return by promise. | 219 220**示例:** 221 222```ts 223import { BusinessError } from '@kit.BasicServicesKit'; 224 225avScreenCaptureRecorder.setMicEnabled(true).then(() => { 226 console.info('Succeeded in setMicEnabled avScreenCaptureRecorder'); 227}).catch((err: BusinessError) => { 228 console.error(`Failed to setMicEnabled avScreenCaptureRecorder. Code: ${err.code}, message: ${err.message}`); 229}); 230``` 231 232## release<sup>12+</sup> 233 234release(): Promise\<void> 235 236异步方式释放录屏。通过Promise获取返回值。 237 238**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 239 240**返回值:** 241 242| 类型 | 说明 | 243| -------------- | --------------------------------- | 244| Promise\<void> | 异步释放录屏方法的Promise返回值。 | 245 246**错误码:** 247 248以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。 249 250| 错误码ID | 错误信息 | 251| -------- | -------------------------------- | 252| 5400103 | IO error. Return by promise. | 253| 5400105 | Service died. Return by promise. | 254 255**示例:** 256 257```ts 258import { BusinessError } from '@kit.BasicServicesKit'; 259 260avScreenCaptureRecorder.release().then(() => { 261 console.info('Succeeded in releasing avScreenCaptureRecorder'); 262}).catch((err: BusinessError) => { 263 console.error(`Failed to release avScreenCaptureRecorder. Code: ${err.code}, message: ${err.message}`); 264}); 265``` 266 267## on('stateChange')<sup>12+</sup> 268 269on(type: 'stateChange', callback: Callback\<AVScreenCaptureStateCode>): void 270 271订阅录屏状态切换的事件,当状态发生的时候,会通过订阅的回调通知用户。用户只能订阅一个状态切换的回调方法,重复订阅时,以最后一次订阅的回调接口为准。 272 273**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 274 275**参数:** 276 277| 参数名 | 类型 | 必填 | 说明 | 278| -------- | -------- | ---- | ------------------------------------------------------------ | 279| type | string | 是 | 状态切换事件回调类型,支持的事件:'stateChange'。 | 280| callback | Callback\<[AVScreenCaptureStateCode](arkts-apis-media-e.md#avscreencapturestatecode12)> | 是 | 状态切换事件回调方法,[AVScreenCaptureStateCode](arkts-apis-media-e.md#avscreencapturestatecode12)表示切换到的状态。 | 281 282**示例:** 283 284```ts 285avScreenCaptureRecorder.on('stateChange', (state: media.AVScreenCaptureStateCode) => { 286 console.info('avScreenCaptureRecorder stateChange to ' + state); 287}); 288``` 289 290## on('error')<sup>12+</sup> 291 292on(type: 'error', callback: ErrorCallback): void 293 294订阅AVScreenCaptureRecorder的错误事件,用户可以根据应用自身逻辑对错误事件进行处理。用户只能订阅一个错误事件的回调方法,重复订阅时,以最后一次订阅的回调接口为准。 295 296**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 297 298**参数:** 299 300| 参数名 | 类型 | 必填 | 说明 | 301| -------- | ------------- | ---- | --------------------------------------- | 302| type | string | 是 | 错误事件回调类型,支持的事件:'error'。 | 303| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是 | 录屏错误事件回调方法。 | 304 305**错误码:** 306 307以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[媒体错误码](errorcode-media.md)。 308 309| 错误码ID | 错误信息 | 310| -------- | -------------------------------- | 311| 201 | permission denied. | 312| 5400103 | IO error. Return by ErrorCallback. | 313| 5400105 | Service died. Return by ErrorCallback. | 314 315**示例:** 316 317```ts 318avScreenCaptureRecorder.on('error', (err: BusinessError) => { 319 console.error('avScreenCaptureRecorder error:' + err.message); 320}); 321``` 322 323## off('stateChange')<sup>12+</sup> 324 325 off(type: 'stateChange', callback?: Callback\<AVScreenCaptureStateCode>): void 326 327取消订阅状态切换回调事件。用户可以指定填入状态切换的回调方法来取消订阅。 328 329**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 330 331**参数:** 332 333| 参数名 | 类型 | 必填 | 说明 | 334| -------- | -------- | ---- | ------------------------------------------------------------ | 335| type | string | 是 | 状态切换事件回调类型,支持的事件:'stateChange'。 | 336| callback | Callback\<[AVScreenCaptureStateCode](arkts-apis-media-e.md#avscreencapturestatecode12)> | 否 | 状态切换事件回调方法,[AVScreenCaptureStateCode](arkts-apis-media-e.md#avscreencapturestatecode12)表示切换到的状态,不填此参数则会取消最后一次订阅事件。 | 337 338**示例:** 339 340```ts 341avScreenCaptureRecorder.off('stateChange'); 342``` 343 344## off('error')<sup>12+</sup> 345 346off(type: 'error', callback?: ErrorCallback): void 347 348取消订阅错误回调事件。用户可以指定填入错误回调方法来取消订阅。 349 350**系统能力:** SystemCapability.Multimedia.Media.AVScreenCapture 351 352**参数:** 353 354| 参数名 | 类型 | 必填 | 说明 | 355| -------- | -------- | ---- | ---------------------------------------------------------- | 356| type | string | 是 | 状态切换事件回调类型,支持的事件:'error'。 | 357| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否 | 录屏错误事件回调方法,不填此参数则会取消最后一次订阅事件。 | 358 359**示例:** 360 361```ts 362avScreenCaptureRecorder.off('error'); 363```