AVScreenCapture录屏自定义场景
======================

AVScreenCapture支持应用完成场景化的自定义配置，具体配置可参考下述指导。

#### 设置录屏策略

#### \[h2\]蜂窝通话设置

从API version 20开始支持蜂窝通话设置。

使用[OH\_AVScreenCapture\_StrategyForKeepCaptureDuringCall](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avscreen-capture-h#oh_avscreencapture_strategyforkeepcaptureduringcall)设置蜂窝通话时是否保持录屏。

OH\_AVScreenCapture\_CaptureStrategy\* strategy = OH\_AVScreenCapture\_CreateCaptureStrategy();
OH\_AVScreenCapture\_StrategyForKeepCaptureDuringCall(strategy, true);
OH\_AVScreenCapture\_SetCaptureStrategy(capture, strategy);

#### \[h2\]设置B帧编码

从API version 20开始支持设置B帧编码。

使用[OH\_AVScreenCapture\_StrategyForBFramesEncoding](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avscreen-capture-h#oh_avscreencapture_strategyforbframesencoding)设置是否使用B帧编码，用于减小录制文件的大小。

OH\_AVScreenCapture\_CaptureStrategy\* strategy = OH\_AVScreenCapture\_CreateCaptureStrategy();
OH\_AVScreenCapture\_StrategyForBFramesEncoding(strategy, true);
OH\_AVScreenCapture\_SetCaptureStrategy(capture, strategy);

#### \[h2\]设置屏幕捕获Picker

从API version 20开始，支持在PC/2in1设备上设置屏幕捕获Picker。

从API version 23开始，支持在Phone/Tablet设备上设置屏幕捕获Picker。

使用[OH\_AVScreenCapture\_StrategyForPickerPopUp](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avscreen-capture-h#oh_avscreencapture_strategyforpickerpopup)设置是否弹出屏幕捕获Picker。

OH\_AVScreenCapture\_CaptureStrategy\* strategy = OH\_AVScreenCapture\_CreateCaptureStrategy();
OH\_AVScreenCapture\_StrategyForPickerPopUp(strategy, true);
OH\_AVScreenCapture\_SetCaptureStrategy(capture, strategy);

#### 设置旋转适配

从API version 20开始支持设置旋转适配。

使用[OH\_AVScreenCapture\_StrategyForCanvasFollowRotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avscreen-capture-h#oh_avscreencapture_strategyforcanvasfollowrotation)，可设置录屏时是否自动跟随屏幕旋转。

调用此接口完成设置后，无需再调用[OH\_AVScreenCapture\_ResizeCanvas](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avscreen-capture-h#oh_avscreencapture_resizecanvas)手动修改分辨率。

OH\_AVScreenCapture\_CaptureStrategy\* strategy = OH\_AVScreenCapture\_CreateCaptureStrategy();
// 设为true，表示跟随屏幕旋转，并在横竖屏旋转后，自动调换虚拟屏尺寸，确保输出画面及时跟随旋转。
OH\_AVScreenCapture\_StrategyForCanvasFollowRotation(strategy, true);
OH\_AVScreenCapture\_SetCaptureStrategy(capture, strategy);

#### 设置麦克风开关

使用[OH\_AVScreenCapture\_SetMicrophoneEnabled](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avscreen-capture-h#oh_avscreencapture_setmicrophoneenabled)，可设置在录屏过程中是否开启麦克风，默认麦克风开关为开启状态。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/c5/v3/A3_Sx-tNSAy7sqsC4Sn5AQ/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260612T073524Z&HW-CC-Expire=86400&HW-CC-Sign=5EBA6ED4CADD9FB39AF8B02127E50C6EE56390497F392F6F090AE811ACA778C9)

使用麦克风录制，需要：

*   配置麦克风权限ohos.permission.MICROPHONE，配置方式请参见[向用户申请权限](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/request-user-authorization)。
*   申请长时任务，申请方式请参见[申请长时任务](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/continuous-task)。

bool isMic = true;
OH\_AVScreenCapture\_SetMicrophoneEnabled(capture, isMic);

#### 隐私设置

从API version 20开始，支持使用[OH\_AVScreenCapture\_StrategyForPrivacyMaskMode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avscreen-capture-h#oh_avscreencapture_strategyforprivacymaskmode)设置屏幕录制隐私窗口屏蔽模式。

// value值设为0，表示全屏屏蔽模式。value值设为1，表示窗口屏蔽模式。默认为全屏屏蔽模式。
int value = 0;
OH\_AVScreenCapture\_CaptureStrategy\* strategy = OH\_AVScreenCapture\_CreateCaptureStrategy();
OH\_AVScreenCapture\_StrategyForPrivacyMaskMode(strategy, value);
OH\_AVScreenCapture\_SetCaptureStrategy(capture, strategy);

在API version 12时，支持使用[OH\_AVScreenCapture\_SkipPrivacyMode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avscreen-capture-h#oh_avscreencapture_skipprivacymode)设置录屏时的豁免隐私窗口。目前设置豁免隐私窗口需要传入所有隐私子窗口和主窗口ID，传空数组取消豁免隐私窗口。

std::vector<int> windowIdsSkipPrivacy = {};
OH\_AVScreenCapture\_SkipPrivacyMode(capture, windowIdsSkipPrivacy.empty() ? nullptr : &windowIdsSkipPrivacy\[0\],
    static\_cast<int32\_t>(windowIdsSkipPrivacy.size()));

#### 设置捕获区域

从API version 20开始支持设置捕获区域。

可以根据需要设置区域坐标和大小，使用[OH\_AVScreenCapture\_SetCaptureArea](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avscreen-capture-h#oh_avscreencapture_setcapturearea)设置想要捕获的区域，如下方创建了一个从（0，0）为起点的长100px，宽100px的矩形区域。此接口在录屏开始前后都可以设置。

OH\_Rect\* region = new OH\_Rect;
    region->x = 0;
    region->y = 0;
    region->width = 100;
    region->height = 100;
uint64\_t regionDisplayId = 0; // 传入矩形区域所在的屏幕Id。
OH\_AVScreenCapture\_SetCaptureArea(capture, regionDisplayId, region);

#### 设置捕获光标

从API version 15开始支持设置捕获光标。

使用[OH\_AVScreenCapture\_ShowCursor](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avscreen-capture-h#oh_avscreencapture_showcursor)设置光标显示开关，开始录屏前后均可调用。

OH\_AVScreenCapture\_ShowCursor(capture, false);

#### 设置最大帧率

从API version 14开始支持设置最大帧率。

使用[OH\_AVScreenCapture\_SetMaxVideoFrameRate](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avscreen-capture-h#oh_avscreencapture_setmaxvideoframerate)设置录屏时的最大帧率，需在录屏启动后被调用。

OH\_AVScreenCapture\_SetMaxVideoFrameRate(capture, 20);

#### 设置屏幕分辨率

使用[OH\_AVScreenCapture\_ResizeCanvas](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avscreen-capture-h#oh_avscreencapture_resizecanvas)调整录屏分辨率，需在启动后调用。分辨率有范围限制，视频的宽度和高度最大值不能超过[OH\_AVCapability\_GetVideoWidthRange](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avcapability-h#oh_avcapability_getvideowidthrange)和[OH\_AVCapability\_GetVideoHeightRange](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avcapability-h#oh_avcapability_getvideoheightrange)接口中定义的范围。

OH\_AVScreenCapture\_ResizeCanvas(capture, 768, 1280);

#### 设置内容过滤

选择录屏时要过滤的声音和窗口。

使用[OH\_AVScreenCapture\_ContentFilter\_AddAudioContent](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avscreen-capture-h#oh_avscreencapture_contentfilter_addaudiocontent)设置可过滤的声音，包含系统音和应用自身声音。

使用[OH\_AVScreenCapture\_ContentFilter\_AddWindowContent](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avscreen-capture-h#oh_avscreencapture_contentfilter_addwindowcontent)设置可过滤的窗口，通过窗口ID来指定。

OH\_AVScreenCapture\_ContentFilter \*contentFilter= OH\_AVScreenCapture\_CreateContentFilter();
// 添加过滤通知音。
OH\_AVScreenCapture\_ContentFilter\_AddAudioContent(contentFilter, OH\_SCREEN\_CAPTURE\_NOTIFICATION\_AUDIO);
// 排除指定窗口id。
std::vector<int> windowIdsExclude = {};
OH\_AVScreenCapture\_ContentFilter\_AddWindowContent(contentFilter, &windowIdsExclude\[0\],
    static\_cast<int32\_t>(windowIdsExclude.size()));

OH\_AVScreenCapture\_ExcludeContent(capture, contentFilter);

#### 更多资源

*   API参考：详细的API描述请见[native\_avscreen\_capture.h](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avscreen-capture-h)。
    
*   示例工程：该示例调用了媒体AVScreenCapture组件提供的接口能力，提供屏幕捕获的功能，详情见[录屏示例工程](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample)。