产品百科 | RTC Windows SDK 如何调用屏幕分享接口

简介: 阿里云 RTC SDK 为您提供屏幕分享使用的接口方法,通过本文档您可以了解实现的具体调用流程。

阿里云 RTC SDK 为您提供屏幕分享使用的接口方法,通过本文档您可以了解实现的具体调用流程。

背景信息

目前 Windows SDK 屏幕分享功能支持屏幕分享和窗口分享两种类型,其中屏幕分享还支持指定区域进行分享,应用侧可根据业务场景设置分享内容并推流。

说明 本文将推流端的操作分为屏幕分享和窗口分享两种类型。

屏幕分享

  1. 推流端创建 SDK 实例后,通过接口 getScreenShareSourceInfo 可以获取当前屏幕分享源,其中参数 source_type 指定 AliRtcScreenShareDesktop,然后 SDK 通过 source_list 参数返回当前设备所有显示器设备。
AliRtcEngine *pEngine = AliRtcEngine::sharedInstance(this, "");
// 获取屏幕分享source
AliRtcScreenSourceList sourceList;
pEngine->getScreenShareSourceInfo(AliRtcScreenShareDesktop, sourceList);
// 遍历所有支持屏幕
for (int i = 0; i < sourceList.sourceNum; i++) {
}


说明 屏幕分享只有在当前设备接入显示器超过 1 个时,会返回多个 source。


  1. 通过接口 setScreenShareSource 设置屏幕分享 source,其中 source 参数中的 sourceId 设置为需要分享的屏幕 source id(上一步骤中获取),同时如果业务需要只分享屏幕中的部分区域,则设置 source 参数中的 isShareByRegion 字段为 true,同时将要分享区域的左上角坐标和宽高,赋值给 source 参数中的 shareRegion 变量。
// 设置屏幕分享源为屏幕分享,并指定分享屏幕source id
AliRtcScreenSource source;
source.eType = AliRtcScreenShareDesktop;
source.sourceId = sourceId;
// 如果需要按区域分享,则设置isShareByRegion为true,并指定分享区域,如分享屏幕左上角100 x 100的区域
source.isShareByRegion = true;
source.shareRegion.originX = 0.f;
source.shareRegion.originY = 0.f;
source.shareRegion.width = 100.f;
source.shareRegion.height = 100.f;
// 设置分享内容
pEngine->setScreenShareSource(source);


说明 按区域分享时,设置分享区域最小分辨率为 16x16,设置区域小于最小分辨率时重置为最小分辨率;按区域分享时,设置分享区域超过实际桌面分辨率时,将按照完整桌面分辨率分享,桌面分辨率可通过接口 getDesktopResolution 接口获取,用于分享区域设置校验。


  1. 配置分享内容完成后,启动屏幕共享推流。
// 配置屏幕分享推流
pEngine->configLocalScreenPublish(true);
// 启动推流
pEngine->publish();
  1. 结束分享时,配置屏幕共享流停推。
// 配置屏幕分享停止
pEngine->configLocalScreenPublish(false);
// 启动停推
pEngine->publish();

窗口分享

  1. 推流端创建 SDK 实例后,通过接口 getScreenShareSourceInfo 可以获取当前屏幕分享源,其中参数 source_type 指定 AliRtcScreenShareWindow,然后 SDK 通过 source_list 参数返回当前电脑上所有可见窗口的 source id 和 source title。
AliRtcEngine *pEngine = AliRtcEngine::sharedInstance(this, "");
// 获取屏幕分享source
AliRtcScreenSourceList sourceList;
pEngine->getScreenShareSourceInfo(AliRtcScreenShareWindow, sourceList);
// 遍历所有支持分享窗口
for (int i = 0; i < sourceList.sourceNum; i++) {
}


说明 SDK 只会返回所有当前可见(没有最小化且 Size 不为 0)的窗口作为分享源。


  1. 通过接口 setScreenShareSource 设置屏幕分享 source,其中 source 参数的 sourceId 设置为需要分享窗口 id(上一步骤中获取)。
// 设置屏幕分享源为屏幕分享,并指定分享屏幕source id
AliRtcScreenSource source;
source.eType = AliRtcScreenShareWindow;
source.sourceId = sourceId;
// 设置分享内容
pEngine->setScreenShareSource(source);
  1. 配置分享内容完成后,启动屏幕共享推流。
// 配置屏幕分享推流
pEngine->configLocalScreenPublish(true);
// 启动推流
pEngine->publish();


说明 设置分享源到启动推流过程中,如果指定的分享窗口发送变化(被关闭 / 不可见)导致无法分享,推流将会发生失败,业务方调用时需要关注推流结果是否成功;分享过程中,如果分享窗口被最小化,同样会导致 SDK 无法抓取数据,分享内容异常。


  1. 结束分享时,配置屏幕共享流停推。
// 配置屏幕分享停止
pEngine->configLocalScreenPublish(false);
// 启动停推
pEngine->publish();

订阅端

订阅端用户可通过自动或手动方式订阅推流端屏幕分享视频流,并设置对应 View 显示,详情请参见 AliRtcEngine 接口


「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。

image.png

相关文章
|
11月前
|
API 开发工具 C#
神策SDK不支持Windows客户端全埋点,怎么实现用户统计分析?
本文将介绍,ClkLog针对神策不支持全埋点的客户端实现用户访问基础统计分析 1。
神策SDK不支持Windows客户端全埋点,怎么实现用户统计分析?
|
11月前
|
API 开发工具 UED
在 UWP 中使用 Windows App SDK
【10月更文挑战第17天】在UWP中使用Windows App SDK可增强应用功能和性能。首先了解SDK特性,接着安装Visual Studio 2022及以上版本,并从微软官网下载安装SDK。配置项目时,确保目标版本支持SDK,添加SDK引用后即可使用新API提升应用体验。开发过程中应充分利用调试工具进行测试,确保应用的兼容性和稳定性。
207 0
|
编解码 开发工具 C#
[大牛直播SDK]Windows平台RTMP直播推送模块功能设计
大牛直播SDK采用全自研框架,具备高度可扩展性与自适应算法,显著降低延迟并提高采集编码效率。SDK以模块化设计,支持RTMP推流及多种音视频编码格式(如AAC、SPEEX、H.264、H.265),并能与播放器SDK组合实现丰富功能,包括流媒体转发、内置RTSP服务等。提供了详尽的参数配置选项,支持多摄像头、屏幕采集与水印叠加,并兼容Windows 7及以上操作系统。该SDK以C++/C#双接口形式提供,集成简便,同时包含调试与发布版本库,便于开发者快速上手。此外,支持断网重连、实时预览及多种编码前后的数据对接需求。
294 0
|
移动开发 JavaScript Java
windows7下安装配置phonegap3.0 (cordavo)开发环境 (涉及android sdk配置)
windows7下安装配置phonegap3.0 (cordavo)开发环境 (涉及android sdk配置)
|
前端开发 Java Maven
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
1812 0
|
Dart Shell 开发工具
解决windows安装Flutter时出现Unknown operating system. Cannot install Dart SDK.问题
解决windows安装Flutter时出现Unknown operating system. Cannot install Dart SDK.问题
266 0
|
JavaScript Java 开发工具
在Windows系统对接良田高拍仪驱动SDK (EloamView java)
良田高拍仪驱动是能较好的与Java平台交互的,但不知为何官方的SDK驱动中已没有java的samples,但我在2021年使用时是有java的包的,特意记录一下我在IDEA开发工具中测试运行这个demo的过程
1198 0
在Windows系统对接良田高拍仪驱动SDK (EloamView java)
|
编解码 Ubuntu IDE
基于Ubuntu交叉编译X264, FFmpeg Windows SDK详细教程
基于Ubuntu交叉编译X264, FFmpeg Windows SDK详细教程
353 0
|
7月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
416 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
365 0