屏幕采集
- Android
更新时间不可用
queryScreenCaptureCapability
查询设备在屏幕共享时支持的最高帧率。
public abstract int queryScreenCaptureCapability();自从
自 v4.2.0 版本新增。
为了确保屏幕共享的最佳性能,特别是在启用如 60 fps 的高帧率时,声网建议你在共享前使用该方法查询设备支持的最大帧率。如果设备无法支持如此高的帧率,你可以相应地调整屏幕共享流的帧率,以避免影响共享质量。
适用场景
为确保屏幕共享的最佳性能,特别是在启用如 60 fps 的高帧率时,建议你在共享前使用该方法查询设备支持的最高帧率。
返回值
- 0:设备最多支持 15 fps 的帧率。
- 1:设备最多支持 30 fps 的帧率。
- 2:设备最多支持 60 fps 的帧率。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
所属接口类
setExternalMediaProjection
配置 SDK 外部的 MediaProjection 以采集屏幕视频流。
public abstract int setExternalMediaProjection(MediaProjection mediaProjection);调用该方法成功后,设置的外部 MediaProjection 将替代 SDK 申请的 MediaProjection 用于采集屏幕视频流。当屏幕共享停止或 RtcEngine 被销毁时,SDK 会自动释放该 MediaProjection。
注: 在调用该方法前,必须先申请 MediaProjection 权限。
适用场景
如果你已申请到 MediaProjection,可以直接使用你自己的 MediaProjection,而无需使用 SDK 申请的对象。适用场景包括:
- 在定制系统设备上,避免系统弹窗(如用户授权采集屏幕)并直接开始采集屏幕视频流。
- 在涉及一个或多个子进程的屏幕共享流程中,避免在子进程中创建对象时可能出现的错误,从而防止屏幕采集失败。
该方法适用于多频道场景。
调用时机
在调用 startScreenCapture 之后调用该方法。
参数
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
所属接口类
setScreenCaptureScenario
设置屏幕共享场景。
public abstract int setScreenCaptureScenario(Constants.ScreenScenarioType screenScenario);自从
自 v4.2.0 版本新增。
SDK 会根据设置的场景自动调整共享的视频质量和用户体验。
注: 声网建议你在加入频道前调用此方法。
参数
| 参数名 | 描述 |
|---|---|
screenScenario | 屏幕共享场景。详见 ScreenScenarioType。 |
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
所属接口类
startScreenCapture
开始屏幕采集。
public abstract int startScreenCapture(ScreenCaptureParameters screenCaptureParameters);自从
自 v3.7.0 版本新增。
你可以在加入频道前或加入频道后调用该方法开始采集屏幕视频流,具体如下:
- 先调用该方法,再调用
joinChannel加入频道,并将publishScreenCaptureVideo设置为 true,以开始屏幕共享。 - 加入频道后调用该方法,再调用 updateChannelMediaOptions 并将
publishScreenCaptureVideo设置为 true,以开始屏幕共享。
注:
-
在 Android 平台,如果用户未授予应用屏幕采集权限,SDK 会触发 onPermissionError(错误码 2)回调。
-
在 Android 9 及以上版本,为避免应用进入后台后被系统杀死,声网建议你在
/app/Manifests/AndroidManifest.xml文件中添加前台服务权限android.permission.FOREGROUND_SERVICE。 -
由于性能限制,Android TV 不支持屏幕共享。
-
由于系统限制,使用华为手机时,请勿在屏幕共享过程中调整屏幕共享流的视频编码分辨率,否则可能会导致崩溃。
-
由于系统限制,部分小米设备在屏幕共享时不支持采集系统音频。
-
为避免屏幕共享时系统音频采集失败,声网建议你在加入频道前通过 setAudioScenario 方法将音频应用场景设置为
AUDIO_SCENARIO_GAME_STREAMING。 -
屏幕共享流的计费基于 VideoCaptureParameters 中的
dimensions:- 如果未传入该值,声网按 1280 × 720 计费。
- 如果传入该值,声网按传入的值计费。
适用场景
在屏幕共享场景中。
调用时机
你可以在加入频道前或加入频道后调用此方法。
参数
| 参数名 | 描述 |
|---|---|
screenCaptureParameters | 屏幕共享的编码参数,详见 ScreenCaptureParameters。 |
返回值
-
0:方法调用成功。
-
< 0:方法调用失败。详见错误码了解详情和解决建议。
- -2:系统版本过低。请确保 Android API 级别不低于 21。
- -3:无法采集系统音频。请确保 Android API 级别不低于 29。
所属接口类
stopScreenCapture
停止屏幕采集。
public abstract int stopScreenCapture();自从
自 v3.7.0 版本新增。
如果你通过调用 startScreenCapture 开始了屏幕采集,则需要调用 stopScreenCapture 停止屏幕采集。
适用场景
适用于以下场景:
- iOS:如果你通过调用
startScreenCapture:开始屏幕采集,则需要调用此方法停止屏幕采集。 - macOS:如果你通过调用
startScreenCaptureByWindowId:regionRect:captureParams:或startScreenCaptureByDisplayId:regionRect:captureParams:开始屏幕采集,则需要调用此方法停止屏幕采集。
调用时机
你可以在加入频道前或后调用此方法。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
所属接口类
updateScreenCaptureParameters
更新屏幕采集参数。
public abstract int updateScreenCaptureParameters(ScreenCaptureParameters screenCaptureParameters);自从
自 v3.7.0 版本新增。
注: 请在开始屏幕共享或窗口共享后调用此方法。
参数
| 参数名 | 描述 |
|---|---|
screenCaptureParameters |
返回值
-
0:方法调用成功。
-
< 0:方法调用失败。详见错误码了解详情和解决建议。
- -2:参数无效。
- -8:屏幕共享状态无效。可能是因为你已共享了其他屏幕或窗口。请尝试调用 stopScreenCapture 停止当前共享,然后重新开始共享屏幕。