Windows端屏幕分享功能分为屏幕分享和窗口分享,应用侧可根据实际需求分享屏幕内容并进行推流。通过阅读本文,您可以了解到Windows端屏幕分享的方法。
屏幕分享
推流端创建 SDK 实例后,通过接口 GetScreenShareSourceInfo 可以获取当前屏幕分享源,其中参数 sourceType 指定 RtcEngineScreenShareDesktop,然后 SDK 返回当前设备所有显示器设备。
ding::rtc::RtcEngine *engine_ =; // 获取屏幕分享source ding::rtc::RtcEngineDeviceInfoList *list = engine_->GetScreenShareSourceInfo(ding::rtc::RtcEngineScreenShareDesktop); // 遍历所有支持屏幕 for (int i = 0; i < list.GetCount(); i++) { } // 释放list list->Release();
说明屏幕分享只有在当前设备接入显示器超过1个时,会返回多个source。
通过接口 StartScreenShareByDesktopId 设置屏幕分享 config 并根据桌面ID进行屏幕分享。其中 desktopId 设置为需要分享的屏幕 desktopId(上一步骤中获取)。
// 设置屏幕分享源为屏幕分享,并指定分享屏幕source id ding::rtc::RtcEngineScreenShareConfig config; // share whole screen by default // 设置分享内容 engine_->StartScreenShareByDesktopId(desktopId, config);
共享后通过回调判断屏幕共享是否发布成功。
void OnScreenSharePublishStateChanged(RtcEnginePublishState oldState, RtcEnginePublishState newState, int elapseSinceLastState, const char *channel);
名称
类型
描述
oldState
RtcEnginePublishState
之前的推流状态。
newState
RtcEnginePublishState
当前的推流状态。
elapseSinceLastState
int
状态变更时间间隔。
channel
const char *
当前频道ID。
结束分享时,配置屏幕共享流停推。
// 配置屏幕分享停止 engine_->StopScreenShare();
停推屏幕共享流之后通过回调判断屏幕共享是否取消发布成功。
void OnScreenSharePublishStateChanged(RtcEnginePublishState oldState, RtcEnginePublishState newState, int elapseSinceLastState, const char *channel);
名称
类型
描述
oldState
RtcEnginePublishState
之前的推流状态。
newState
RtcEnginePublishState
当前的推流状态。
elapseSinceLastState
int
状态变更时间间隔。
channel
const char *
当前频道ID。
窗口分享
推流端创建 SDK 实例后,通过接口 GetScreenShareSourceInfo 可以获取当前屏幕分享源,其中参数 sourceType 指定 RtcEngineScreenShareWindow,然后 SDK 返回当前设备所有显示器设备。
ding::rtc::RtcEngine *engine_ =; // 获取屏幕分享source ding::rtc::RtcEngineDeviceInfoList *list = engine_->GetScreenShareSourceInfo(ding::rtc::RtcEngineScreenShareWindow); // 遍历所有支持屏幕 for (int i = 0; i < list.GetCount(); i++) { } // 释放list list->Release();
说明SDK 只会返回所有当前可见(没有最小化且 Size 不为 0)的窗口作为分享源。
通过接口 StartScreenShareByWindowId 设置屏幕分享 windowId 和 config,其中 windowId 参数设置为需要分享窗口 id(上一步骤中获取)。
// 设置屏幕分享源为屏幕分享,并指定分享屏幕source id ding::rtc::RtcEngineScreenShareConfig config; // share whole windowby default // 设置分享内容 engine_->StartScreenShareByWindowId(windowId, config);
共享后通过回调判断屏幕共享是否发布成功。
void OnScreenSharePublishStateChanged(RtcEnginePublishState oldState, RtcEnginePublishState newState, int elapseSinceLastState, const char *channel);
名称
类型
描述
oldState
RtcEnginePublishState
之前的推流状态。
newState
RtcEnginePublishState
当前的推流状态。
elapseSinceLastState
int
状态变更时间间隔。
channel
const char *
当前频道ID。
结束分享时,配置屏幕共享流停推。
// 配置屏幕分享停止 pEngine->StopScreenShare();
停推屏幕共享流之后通过回调判断屏幕共享是否取消发布成功。
void OnScreenSharePublishStateChanged(RtcEnginePublishState oldState, RtcEnginePublishState newState, int elapseSinceLastState, const char *channel);
名称
类型
描述
oldState
RtcEnginePublishState
之前的推流状态。
newState
RtcEnginePublishState
当前的推流状态。
elapseSinceLastState
int
状态变更时间间隔。
channel
const char *
当前频道ID。
订阅端
订阅端用户可通过自动或手动方式订阅推流端屏幕分享视频流,并设置对应View显示,详情请参见DingRtcEngine接口。