屏幕采集
queryScreenCaptureCapability
查询设备在屏幕共享时支持的最高帧率。
Objective-C
- (AgoraScreenCaptureFrameRateCapability)queryScreenCaptureCapability NS_SWIFT_NAME(queryScreenCaptureCapability());
详情
自从
v4.2.0
适用场景
在屏幕共享场景下,如果你想启用高帧率(如 60 fps)、但不确定设备是否支持时,可以先调用该方法查询设备支持的最高帧率。如果设备不支持高帧率,你可以在开启屏幕共享时适当调低屏幕共享流的帧率,以确保共享场景的效果符合预期。
返回值
- 方法调用成功时,返回设备支持的最高帧率。详见 AgoraScreenCaptureFrameRateCapability。
- 方法调用失败时,返回 nil。
setScreenCaptureScenario:
设置屏幕共享的场景。
Objective-C
- (int)setScreenCaptureScenario:(AgoraScreenScenarioType)scenarioType
NS_SWIFT_NAME(setScreenCaptureScenario(_:));
详情
开启屏幕共享或窗口共享时,你可以调用该方法设置屏幕共享的场景,SDK 会根据你设置的场景调整共享画面的画质。
信息
声网建议你在加入频道前调用该方法。
参数
- scenarioType
- 屏幕共享的场景,详见 AgoraScreenScenarioType。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
startScreenCapture:
开始屏幕采集。
Objective-C
- (int)startScreenCapture:(AgoraScreenCaptureParameters2* _Nullable)parameters NS_SWIFT_NAME(startScreenCapture(_:));
注意
- 屏幕共享流的计费标准以 AgoraScreenVideoParameters 中的 dimensions 值为准:
- 当你未传值时,以 1280 × 720 计费。
- 当你传值时,以你传入的值计费。
适用场景
在屏幕共享场景下,你需要调用该方法开始采集屏幕视频流。有关屏幕共享的实现方法,详见屏幕共享。
调用时机
该方法在加入频道前后均可调用,区别如下:
- 如果在加入频道前调用该方法,然后调用 joinChannelByToken:channelId:uid:mediaOptions:joinSuccess: 加入频道,并设置 publishScreenCaptureVideo 为
YES
,即可开始屏幕共享。 - 如果在加入频道后调用该方法,然后调用 updateChannelWithMediaOptions: 更新频道媒体选项,并设置 publishScreenCaptureVideo 为
YES
,即可开始屏幕共享。
调用限制
- 在 iOS 平台上,屏幕共享仅适用于 iOS 12.0 及以上。
- 在 iOS 平台上,如果你使用音频自采集而非 SDK 采集音频,为避免应用退后台后屏幕共享停止,建议你对应用添加保活处理逻辑。
- 在 iOS 平台上,该功能对设备性能要求较高,建议你在 iPhone X 及之后机型上使用。
- 在 iOS 平台上,该方法依赖于屏幕共享动态库
AgoraReplayKitExtension.xcframework
,如果删除该动态库会导致无法正常开启屏幕共享。 - 为提高屏幕共享时采集系统音频的成功率,建议你在加入频道前通过 setAudioScenario: 方法设置音频场景为 AgoraAudioScenarioGameStreaming。
相关回调
屏幕共享 Extension 进程状态发生改变时,SDK 会相应地触发 rtcEngine:localVideoStateChangedOfState:reason:sourceType: 回调,当 sourceType 的类型为 AgoraVideoSourceTypeScreen 时,state 参数表示屏幕共享的状态。
参数
- parameters
- 屏幕共享的编码参数配置。详见 AgoraScreenCaptureParameters2。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
- -2 (iOS 平台): 参数为空。
stopScreenCapture
停止屏幕采集。
Objective-C
- (int)stopScreenCapture NS_SWIFT_NAME(stopScreenCapture());
适用场景
如果你调用了 startScreenCapture: 开启屏幕采集,则停止屏幕采集时需要调用该方法。
调用时机
该方法在加入频道前后均可调用。
调用限制
无。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
updateScreenCapture:
更新屏幕采集的参数配置。
Objective-C
- (int)updateScreenCapture:(AgoraScreenCaptureParameters2* _Nonnull)parameters NS_SWIFT_NAME(updateScreenCapture(_:));
详情
如果在开启屏幕共享时未采集系统音频、然后想要更新参数配置、发布系统音频,可参考以下步骤:
- 调用该方法并设置 captureAudio 为
YES
。 - 调用 updateChannelWithMediaOptions: 设置 publishScreenCaptureAudio 为
YES
,即可发布屏幕采集的音频。
注意
- 在 iOS 平台上,屏幕共享仅适用于 iOS 12.0 及以上。
参数
- parameters
- 屏幕共享的编码参数配置。详见 AgoraScreenCaptureParameters2。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
- -2:传入的参数无效。
- -8:屏幕共享状态无效。可能因为你已经共享了其他屏幕或窗口。尝试调用 stopScreenCapture 停止当前共享,再重新开始共享屏幕。