• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Interface (PreviewOutput)
2<!--Kit: Camera Kit-->
3<!--Subsystem: Multimedia-->
4<!--Owner: @qano-->
5<!--Designer: @leo_ysl-->
6<!--Tester: @xchaosioda-->
7<!--Adviser: @zengyawen-->
8
9> **说明:**
10>
11> 本模块首批接口从API version 10开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
12
13预览输出类。继承[CameraOutput](arkts-apis-camera-CameraOutput.md)。
14
15## 导入模块
16
17```ts
18import { camera } from '@kit.CameraKit';
19```
20
21## on('frameStart')
22
23on(type: 'frameStart', callback: AsyncCallback\<void\>): void
24
25监听预览帧启动,通过注册回调函数获取结果。使用callback异步回调。
26
27> **说明:**
28>
29> 当前注册监听接口,不支持在on监听的回调方法里,调用off注销回调。
30
31**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
32
33**系统能力:** SystemCapability.Multimedia.Camera.Core
34
35**参数:**
36
37| 参数名      | 类型                  | 必填 | 说明                                     |
38| -------- | -------------------- | ---- | --------------------------------------- |
39| type     | string               | 是   | 监听事件,固定为'frameStart',previewOutput创建成功可监听。底层第一次开始曝光时触发该事件并返回。 |
40| callback | AsyncCallback\<void\> | 是   | 回调函数,用于获取结果。只要有该事件返回就证明预览开始。                    |
41
42**示例:**
43
44```ts
45import { BusinessError } from '@kit.BasicServicesKit';
46
47function callback(err: BusinessError): void {
48  if (err !== undefined && err.code !== 0) {
49    console.error(`Callback Error, errorCode: ${err.code}`);
50    return;
51  }
52  console.info('Preview frame started');
53}
54
55function registerPreviewOutputFrameStart(previewOutput: camera.PreviewOutput): void {
56  previewOutput.on('frameStart', callback);
57}
58```
59
60## off('frameStart')
61
62off(type: 'frameStart', callback?: AsyncCallback\<void\>): void
63
64注销预览帧启动的监听。
65
66**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
67
68**系统能力:** SystemCapability.Multimedia.Camera.Core
69
70**参数:**
71
72| 参数名      | 类型                  | 必填 | 说明                                     |
73| -------- | -------------------- | ---- | --------------------------------------- |
74| type     | string               | 是   | 监听事件,固定为'frameStart',previewOutput创建成功可监听。 |
75| callback | AsyncCallback\<void\> | 否   | 回调函数,如果指定参数则取消对应callback(callback对象不可是匿名函数),否则取消所有callback。 |
76
77**示例:**
78
79```ts
80function unregisterPreviewOutputFrameStart(previewOutput: camera.PreviewOutput): void {
81  previewOutput.off('frameStart');
82}
83```
84
85## on('frameEnd')
86
87on(type: 'frameEnd', callback: AsyncCallback\<void\>): void
88
89监听预览帧结束,通过注册回调函数获取结果。使用callback异步回调。
90
91> **说明:**
92>
93> 当前注册监听接口,不支持在on监听的回调方法里,调用off注销回调。
94
95**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
96
97**系统能力:** SystemCapability.Multimedia.Camera.Core
98
99**参数:**
100
101| 参数名      | 类型                  | 必填 | 说明                                  |
102| -------- | -------------------- | ---- | ------------------------------------- |
103| type     | string               | 是   | 监听事件,固定为'frameEnd',previewOutput创建成功可监听。预览完全结束最后一帧时触发该事件并返回。 |
104| callback | AsyncCallback\<void\> | 是   | 回调函数,用于获取结果。只要有该事件返回就证明预览结束。                |
105
106**示例:**
107
108```ts
109import { BusinessError } from '@kit.BasicServicesKit';
110
111function callback(err: BusinessError): void {
112  if (err !== undefined && err.code !== 0) {
113    console.error(`Callback Error, errorCode: ${err.code}`);
114    return;
115  }
116  console.info('Preview frame ended');
117}
118
119function registerPreviewOutputFrameEnd(previewOutput: camera.PreviewOutput): void {
120  previewOutput.on('frameEnd', callback);
121}
122```
123
124## off('frameEnd')
125
126off(type: 'frameEnd', callback?: AsyncCallback\<void\>): void
127
128注销监听预览帧结束。
129
130**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
131
132**系统能力:** SystemCapability.Multimedia.Camera.Core
133
134**参数:**
135
136| 参数名      | 类型                  | 必填 | 说明                                  |
137| -------- | -------------------- | ---- | ------------------------------------- |
138| type     | string               | 是   | 监听事件,固定为'frameEnd',previewOutput创建成功可监听。 |
139| callback | AsyncCallback\<void\> | 否   | 回调函数,如果指定参数则取消对应callback(callback对象不可是匿名函数),否则取消所有callback。 |
140
141**示例:**
142
143```ts
144function unregisterPreviewOutputFrameEnd(previewOutput: camera.PreviewOutput): void {
145  previewOutput.off('frameEnd');
146}
147```
148
149## on('error')
150
151on(type: 'error', callback: ErrorCallback): void
152
153监听预览输出的错误事件,通过注册回调函数获取结果。使用callback异步回调。
154
155> **说明:**
156>
157> 当前注册监听接口,不支持在on监听的回调方法里,调用off注销回调。
158
159**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
160
161**系统能力:** SystemCapability.Multimedia.Camera.Core
162
163**参数:**
164
165| 参数名     | 类型         | 必填 | 说明                       |
166| -------- | --------------| ---- | ------------------------ |
167| type     | string        | 是   | 监听事件,固定为'error',previewOutput创建成功可监听。预览接口使用错误时触发该事件,比如调用[Session.start](arkts-apis-camera-Session.md#start11-1),[CameraOutput.release](arkts-apis-camera-CameraOutput.md#release-1)等接口发生错误时返回对应错误信息。 |
168| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是   | 回调函数,用于获取错误信息。返回错误码,错误码类型[CameraErrorCode](arkts-apis-camera-e.md#cameraerrorcode)。  |
169
170**示例:**
171
172```ts
173import { BusinessError } from '@kit.BasicServicesKit';
174
175function callback(previewOutputError: BusinessError): void {
176  console.error(`Preview output error code: ${previewOutputError.code}`);
177}
178
179function registerPreviewOutputError(previewOutput: camera.PreviewOutput): void {
180  previewOutput.on('error', callback)
181}
182```
183
184## off('error')
185
186off(type: 'error', callback?: ErrorCallback): void
187
188注销监听预览输出的错误事件。
189
190**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
191
192**系统能力:** SystemCapability.Multimedia.Camera.Core
193
194**参数:**
195
196| 参数名     | 类型         | 必填 | 说明                       |
197| -------- | --------------| ---- | ------------------------ |
198| type     | string        | 是   | 监听事件,固定为'error',previewOutput创建成功可监听。 |
199| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否   | 回调函数,如果指定参数则取消对应callback(callback对象不可是匿名函数),否则取消所有callback。 |
200
201**示例:**
202
203```ts
204function unregisterPreviewOutputError(previewOutput: camera.PreviewOutput): void {
205  previewOutput.off('error');
206}
207```
208
209## getSupportedFrameRates<sup>12+</sup>
210
211 getSupportedFrameRates(): Array\<FrameRateRange\>
212
213查询支持的帧率范围。
214
215**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
216
217**系统能力:** SystemCapability.Multimedia.Camera.Core
218
219**返回值:**
220
221|      类型      |     说明     |
222| -------------  | ------------ |
223| Array<[FrameRateRange](arkts-apis-camera-i.md#frameraterange)> | 支持的帧率范围列表 |
224
225**示例:**
226
227```ts
228function getSupportedFrameRates(previewOutput: camera.PreviewOutput): Array<camera.FrameRateRange> {
229  let supportedFrameRatesArray: Array<camera.FrameRateRange> = previewOutput.getSupportedFrameRates();
230  return supportedFrameRatesArray;
231}
232```
233
234## setFrameRate<sup>12+</sup>
235
236setFrameRate(minFps: number, maxFps: number): void
237
238设置预览流帧率范围,设置的范围必须在支持的帧率范围内。
239进行设置前,可通过[getSupportedFrameRates](#getsupportedframerates12)接口查询支持的帧率范围。
240
241> **说明:**
242> 仅在[PhotoSession](arkts-apis-camera-PhotoSession.md)或[VideoSession](arkts-apis-camera-VideoSession.md)模式下支持。
243
244**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
245
246**系统能力:** SystemCapability.Multimedia.Camera.Core
247
248**参数:**
249
250| 参数名     | 类型         | 必填 | 说明                       |
251| -------- | --------------| ---- | ------------------------ |
252| minFps   | number        | 是   | 最小帧率(单位:fps),当传入的最大值小于最小值时,传参异常,接口不生效。 |
253| maxFps   | number        | 是   | 最大帧率(单位:fps),当传入的最小值大于最大值时,传参异常,接口不生效。|
254
255**错误码:**
256
257以下错误码的详细介绍请参见[Camera错误码](errorcode-camera.md)。
258
259| 错误码ID        | 错误信息        |
260| --------------- | --------------- |
261| 7400101                |  Parameter missing or parameter type incorrect.        |
262| 7400110                |  Unresolved conflicts with current configurations.     |
263
264**示例:**
265
266```ts
267function setFrameRateRange(previewOutput: camera.PreviewOutput, frameRateRange: Array<number>): void {
268  previewOutput.setFrameRate(frameRateRange[0], frameRateRange[1]);
269}
270```
271
272## getActiveFrameRate<sup>12+</sup>
273
274getActiveFrameRate(): FrameRateRange
275
276获取已设置的帧率范围。
277
278使用[setFrameRate](#setframerate12)接口对预览流设置过帧率后可查询。
279
280**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
281
282**系统能力:** SystemCapability.Multimedia.Camera.Core
283
284**返回值:**
285
286|      类型      |     说明     |
287| -------------  | ------------ |
288| [FrameRateRange](arkts-apis-camera-i.md#frameraterange) | 帧率范围 |
289
290**示例:**
291
292```ts
293function getActiveFrameRate(previewOutput: camera.PreviewOutput): camera.FrameRateRange {
294  let activeFrameRate: camera.FrameRateRange = previewOutput.getActiveFrameRate();
295  return activeFrameRate;
296}
297```
298
299## getActiveProfile<sup>12+</sup>
300
301getActiveProfile(): Profile
302
303获取当前生效的配置信息。
304
305**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
306
307**系统能力:** SystemCapability.Multimedia.Camera.Core
308
309**返回值:**
310
311|      类型      | 说明        |
312| -------------  |-----------|
313| [Profile](arkts-apis-camera-i.md#profile) | 当前生效的配置信息 |
314
315**错误码:**
316
317以下错误码的详细介绍请参见[Camera错误码](errorcode-camera.md)。
318
319| 错误码ID   | 错误信息                         |
320|---------|------------------------------|
321| 7400201 | Camera service fatal error.  |
322
323**示例:**
324
325```ts
326import { BusinessError } from '@kit.BasicServicesKit';
327
328function testGetActiveProfile(previewOutput: camera.PreviewOutput): camera.Profile | undefined {
329  let activeProfile: camera.Profile | undefined = undefined;
330  try {
331    activeProfile = previewOutput.getActiveProfile();
332  } catch (error) {
333    // 失败返回错误码error.code并处理。
334    let err = error as BusinessError;
335    console.error(`The previewOutput.getActiveProfile call failed. error code: ${err.code}`);
336  }
337  return activeProfile;
338}
339```
340
341## getPreviewRotation<sup>12+</sup>
342
343getPreviewRotation(displayRotation: number): ImageRotation
344
345获取预览旋转角度。
346
347- 设备自然方向:设备默认使用方向,手机为竖屏(充电口向下)。
348- 相机镜头角度:值等于相机图像顺时针旋转到设备自然方向的角度,手机后置相机传感器是横屏安装的,所以需要顺时针旋转90度到设备自然方向。
349- 屏幕显示方向:需要屏幕显示的图片左上角为第一个像素点为坐标原点。锁屏时与自然方向一致。
350
351**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
352
353**系统能力:** SystemCapability.Multimedia.Camera.Core
354
355**参数:**
356
357| 参数名     | 类型         | 必填 | 说明                       |
358| -------- | --------------| ---- | ------------------------ |
359| displayRotation | number  | 是   | 显示设备的屏幕旋转角度,通过[display.getDefaultDisplaySync](../apis-arkui/js-apis-display.md#displaygetdefaultdisplaysync9)获得。 |
360
361**返回值:**
362
363|      类型      | 说明        |
364| -------------  |-----------|
365| [ImageRotation](arkts-apis-camera-e.md#imagerotation) | 获取预览旋转角度。 |
366
367**错误码:**
368
369以下错误码的详细介绍请参见[Camera错误码](errorcode-camera.md)。
370
371| 错误码ID   | 错误信息                         |
372|---------|------------------------------|
373| 7400101 | Parameter missing or parameter type incorrect.  |
374| 7400201 | Camera service fatal error.  |
375
376**示例:**
377
378```ts
379import { BusinessError } from '@kit.BasicServicesKit';
380
381function testGetPreviewRotation(previewOutput: camera.PreviewOutput, imageRotation : camera.ImageRotation): camera.ImageRotation {
382  let previewRotation: camera.ImageRotation = camera.ImageRotation.ROTATION_0;
383  try {
384    previewRotation = previewOutput.getPreviewRotation(imageRotation);
385    console.log(`Preview rotation is: ${previewRotation}`);
386  } catch (error) {
387    // 失败返回错误码error.code并处理。
388    let err = error as BusinessError;
389    console.error(`The previewOutput.getPreviewRotation call failed. error code: ${err.code}`);
390  }
391  return previewRotation;
392}
393```
394
395## setPreviewRotation<sup>12+</sup>
396
397setPreviewRotation(previewRotation: ImageRotation, isDisplayLocked?: boolean): void
398
399设置预览旋转角度。
400
401**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。
402
403**系统能力:** SystemCapability.Multimedia.Camera.Core
404
405**参数:**
406
407| 参数名     | 类型         | 必填 | 说明                       |
408| -------- | --------------| ---- | ------------------------ |
409| previewRotation | [ImageRotation](arkts-apis-camera-e.md#imagerotation)  | 是   | 预览旋转角度 |
410| isDisplayLocked | boolean  | 否   | Surface在屏幕旋转时是否锁定方向,未设置时默认取值为false,即不锁定方向。true表示锁定方向,false表示不锁定方向。详情请参考[SurfaceRotationOptions](../../reference/apis-arkui/arkui-ts/ts-basic-components-xcomponent.md#surfacerotationoptions12对象说明)。 |
411
412**错误码:**
413
414以下错误码的详细介绍请参见[Camera错误码](errorcode-camera.md)。
415
416| 错误码ID   | 错误信息                         |
417|---------|------------------------------|
418| 7400101 | Parameter missing or parameter type incorrect.  |
419| 7400201 | Camera service fatal error.  |
420
421**示例:**
422
423```ts
424import { BusinessError } from '@kit.BasicServicesKit';
425
426function testSetPreviewRotation(previewOutput: camera.PreviewOutput, previewRotation : camera.ImageRotation, isDisplayLocked: boolean): void {
427  try {
428    previewOutput.setPreviewRotation(previewRotation, isDisplayLocked);
429  } catch (error) {
430    // 失败返回错误码error.code并处理。
431    let err = error as BusinessError;
432    console.error(`The previewOutput.setPreviewRotation call failed. error code: ${err.code}`);
433  }
434  return;
435}
436```
437
438
439## start<sup>(deprecated)</sup>
440
441start(callback: AsyncCallback\<void\>): void
442
443开始输出预览流,通过注册回调函数获取结果。使用callback异步回调。
444
445> **说明:**
446>从 API version 10开始支持,从API version 11开始废弃。建议使用[Session.start](arkts-apis-camera-Session.md#start11)替代。
447
448**系统能力:** SystemCapability.Multimedia.Camera.Core
449
450**参数:**
451
452| 参数名      | 类型                  | 必填 | 说明                 |
453| -------- | -------------------- | ---- | -------------------- |
454| callback | AsyncCallback\<void\> | 是   | 回调函数。当开始输出预览流成功,err为undefined,否则为错误对象。错误码类型[CameraErrorCode](arkts-apis-camera-e.md#cameraerrorcode)。 |
455
456**错误码:**
457
458以下错误码的详细介绍请参见[Camera错误码](errorcode-camera.md)。
459
460| 错误码ID         | 错误信息        |
461| --------------- | --------------- |
462| 7400103                |  Session not config.                                   |
463
464**示例:**
465
466```ts
467import { BusinessError } from '@kit.BasicServicesKit';
468
469function startPreviewOutput(previewOutput: camera.PreviewOutput): void {
470  previewOutput.start((err: BusinessError) => {
471    if (err) {
472      console.error(`Failed to start the preview output, error code: ${err.code}.`);
473      return;
474    }
475    console.info('Callback returned with preview output started.');
476  });
477}
478```
479
480## start<sup>(deprecated)</sup>
481
482start(): Promise\<void\>
483
484开始输出预览流。使用Promise异步回调。
485
486> **说明:**
487>从 API version 10开始支持,从API version 11开始废弃。建议使用[Session.start](arkts-apis-camera-Session.md#start11-1)替代。
488
489**系统能力:** SystemCapability.Multimedia.Camera.Core
490
491**返回值:**
492
493| 类型            | 说明                |
494| -------------- |-------------------|
495| Promise\<void\> | Promise对象,无返回结果。  |
496
497**错误码:**
498
499以下错误码的详细介绍请参见[Camera错误码](errorcode-camera.md)。
500
501| 错误码ID         | 错误信息        |
502| --------------- | --------------- |
503| 7400103                |  Session not config.                                   |
504
505**示例:**
506
507```ts
508import { BusinessError } from '@kit.BasicServicesKit';
509
510function startPreviewOutput(previewOutput: camera.PreviewOutput): void {
511  previewOutput.start().then(() => {
512    console.info('Promise returned with preview output started.');
513  }).catch((error: BusinessError) => {
514    console.error(`Failed to preview output start, error code: ${error.code}.`);
515  });
516}
517```
518
519## stop<sup>(deprecated)</sup>
520
521stop(callback: AsyncCallback\<void\>): void
522
523停止输出预览流,通过注册回调函数获取结果。使用callback异步回调。
524
525> **说明:**
526>从 API version 10开始支持,从API version 11开始废弃。建议使用[Session.stop](arkts-apis-camera-Session.md#stop11)替代。
527
528**系统能力:** SystemCapability.Multimedia.Camera.Core
529
530**参数:**
531
532| 参数名      | 类型                  | 必填 | 说明                 |
533| -------- | -------------------- | ---- | -------------------- |
534| callback | AsyncCallback\<void\> | 是   | 回调函数。当停止输出预览流成功,err为undefined,否则为错误对象。 |
535
536**示例:**
537
538```ts
539import { BusinessError } from '@kit.BasicServicesKit';
540
541function stopPreviewOutput(previewOutput: camera.PreviewOutput): void {
542  previewOutput.stop((err: BusinessError) => {
543    if (err) {
544      console.error(`Failed to stop the preview output, error code: ${err.code}.`);
545      return;
546    }
547    console.info('Returned with preview output stopped.');
548  })
549}
550```
551
552## stop<sup>(deprecated)</sup>
553
554stop(): Promise\<void\>
555
556停止输出预览流。使用Promise异步回调。
557
558> **说明:**
559>从 API version 10开始支持,从API version 11开始废弃。建议使用[Session.stop](arkts-apis-camera-Session.md#stop11-1)替代。
560
561**系统能力:** SystemCapability.Multimedia.Camera.Core
562
563**返回值:**
564
565| 类型            | 说明                     |
566| -------------- | ------------------------ |
567| Promise\<void\> | Promise对象,无返回结果。 |
568
569**示例:**
570
571```ts
572import { BusinessError } from '@kit.BasicServicesKit';
573
574function stopPreviewOutput(previewOutput: camera.PreviewOutput): void {
575  previewOutput.stop().then(() => {
576    console.info('Callback returned with preview output stopped.');
577  }).catch((error: BusinessError) => {
578    console.error(`Failed to preview output stop, error code: ${error.code}.`);
579  });
580}
581```
582
583