跳到主要内容

AVScreenCapture录屏自定义场景

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

设置录屏策略

蜂窝通话设置

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

使用OH_AVScreenCapture_StrategyForKeepCaptureDuringCall设置蜂窝通话时是否保持录屏。

OH_AVScreenCapture_CaptureStrategy* strategy = OH_AVScreenCapture_CreateCaptureStrategy();
OH_AVScreenCapture_StrategyForKeepCaptureDuringCall(strategy, true);
OH_AVScreenCapture_SetCaptureStrategy(capture, strategy);

设置B帧编码

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

使用OH_AVScreenCapture_StrategyForBFramesEncoding设置是否使用B帧编码,用于减小录制文件的大小。

OH_AVScreenCapture_CaptureStrategy* strategy = OH_AVScreenCapture_CreateCaptureStrategy();
OH_AVScreenCapture_StrategyForBFramesEncoding(strategy, true);
OH_AVScreenCapture_SetCaptureStrategy(capture, strategy);

设置屏幕捕获Picker

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

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

使用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,可设置录屏时是否自动跟随屏幕旋转。

调用此接口完成设置后,无需再调用OH_AVScreenCapture_ResizeCanvas手动修改分辨率。

OH_AVScreenCapture_CaptureStrategy* strategy = OH_AVScreenCapture_CreateCaptureStrategy();
// 设为true,表示跟随屏幕旋转,并在横竖屏旋转后,自动调换虚拟屏尺寸,确保输出画面及时跟随旋转。
OH_AVScreenCapture_StrategyForCanvasFollowRotation(strategy, true);
OH_AVScreenCapture_SetCaptureStrategy(capture, strategy);

设置麦克风开关

使用OH_AVScreenCapture_SetMicrophoneEnabled,可设置在录屏过程中是否开启麦克风,默认麦克风开关为开启状态。

使用麦克风录制,需要:

bool isMic = true;
OH_AVScreenCapture_SetMicrophoneEnabled(capture, isMic);

隐私设置

从API version 20开始,支持使用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设置录屏时的豁免隐私窗口。目前设置豁免隐私窗口需要传入所有隐私子窗口和主窗口ID,传空数组取消豁免隐私窗口。

std::vector<int> windowIdsSkipPrivacy = {};
OH_AVScreenCapture_SkipPrivacyMode(capture, &windowIdsSkipPrivacy[0],
static_cast<int32_t>(windowIdsSkipPrivacy.size()));

设置捕获区域

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

可以根据需要设置区域坐标和大小,使用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设置光标显示开关,开始录屏前后均可调用。

OH_AVScreenCapture_ShowCursor(capture, false);

设置最大帧率

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

使用OH_AVScreenCapture_SetMaxVideoFrameRate设置录屏时的最大帧率,需在录屏启动后被调用。

OH_AVScreenCapture_SetMaxVideoFrameRate(capture, 20);

设置屏幕分辨率

使用OH_AVScreenCapture_ResizeCanvas调整录屏分辨率,需在启动后调用。分辨率有范围限制,视频的宽度和高度最大值不能超过OH_AVCapability_GetVideoWidthRangeOH_AVCapability_GetVideoHeightRange接口中定义的范围。

OH_AVScreenCapture_ResizeCanvas(capture, 768, 1280);

设置内容过滤

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

使用OH_AVScreenCapture_ContentFilter_AddAudioContent设置可过滤的声音,包含系统音和应用自身声音。

使用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);

更多资源