腾讯云 TRTC 支持屏幕分享功能,Windows 平台下的屏幕分享支持主路分享和辅路分享两种方案:
辅路分享
在 TRTC 中,我们可以单独为屏幕分享开启一路上行的视频流,并称之为“辅路(substream)”。辅路分享即主播同时上行摄像头画面和屏幕画面两路画面。这是腾讯会议的使用方案,您可以在调用 startScreenCapture
接口时,通过将 TRTCVideoStreamType
参数指定为 TRTCVideoStreamTypeSub
来启用该模式。观看该路画面需要使用专门的 startRemoteSubStreamView
接口。
主路分享
在 TRTC 中,我们一般把摄像头走的通道叫做“主路(bigstream)”,主路分享即用摄像头通道分享屏幕。该模式下,主播只有一路上行视频流,要么上行摄像头画面,要么上行屏幕画面,两者是互斥的。您可以在调用 startScreenCapture
接口时,通过将 TRTCVideoStreamType
参数指定为 TRTCVideoStreamTypeBig
来启用该模式。
iOS | Android | Mac OS | Windows | Electron | 微信小程序 | Chrome 浏览器 |
---|---|---|---|---|---|---|
? | ? | ? | ? | ? | × | ? |
API 功能 | C++ 版本 | C# 版本 | Electron 版本 |
---|---|---|---|
选择分享目标 | selectScreenCaptureTarget | selectScreenCaptureTarget | selectScreenCaptureTarget |
开始屏幕分享 | startScreenCapture | startScreenCapture | startScreenCapture |
暂停屏幕分享 | pauseScreenCapture | pauseScreenCapture | pauseScreenCapture |
恢复屏幕分享 | resumeScreenCapture | resumeScreenCapture | resumeScreenCapture |
结束屏幕分享 | stopScreenCapture | stopScreenCapture | stopScreenCapture |
通过 getScreenCaptureSources
可以枚举可共享的窗口列表,列表通过出参 sourceInfoList 返回。
说明:Windows 里的桌面屏幕也是一个窗口,叫桌面窗口(Desktop),有两台显示器时,每一台显示器都有一个对应的桌面窗口。所以,getScreenCaptureSources 返回的窗口列表里也会有 Desktop 窗口。
sourceInfoList 中每一个 sourceInfo 可以分享的目标,它由如下字段描述。
字段 | 类型 | 含义 |
---|---|---|
type | TRTCScreenCaptureSourceType | 采集源类型,指定类型为窗口或屏幕 |
sourceId | HWND | 采集源 ID |
sourceName | string | 窗口名字,如果是屏幕则返回 Screen0 Screen1... |
thumbWidth | int32 | 窗口缩略图宽度 |
thumbHeight | int32 | 窗口缩略图高度 |
thumbBGRA | buffer | 窗口缩略图的二进制 buffer |
iconWidth | int32 | 窗口图标的宽度 |
iconHeight | int32 | 窗口图标的高度 |
iconBGRA | buffer | 窗口图标的二进制 buffer |
根据上述信息,您可以实现一个简单的列表页面,将可以分享的目标罗列出来供用户选择,如下图:
TRTC SDK 支持三种分享模式,您可以通过 selectScreenCaptureTarget
来指定:
整个屏幕分享:
即分享整个屏幕窗口,支持多显示器分屏的情况。需要指定一个 sourceInfoList 中 type 为 TRTCScreenCaptureSourceTypeScreen
的 source 参数 ,并将 captureRect 设为 { 0, 0, 0, 0 }。
指定区域分享:
即分享屏幕的某个区域,需要用户圈定区域的位置坐标。需要指定一个 sourceInfoList 中 type 为 TRTCScreenCaptureSourceTypeScreen
的 source 参数 ,并将 captureRect 设为非 NULL,例如 { 100, 100, 300, 300 }。
指定窗口分享:
即分享目标窗口的内容,需要用户选择要分享的窗口。需要指定一个 sourceInfoList 中 type 为 TRTCScreenCaptureSourceTypeWindow
的 source 参数,并将 captureRect 设为 { 0, 0, 0, 0 }。
说明:两个额外参数:
- 参数 captureMouse 用于指定是否捕获鼠标指针。
- 参数 highlightWindow 用于指定是否高亮正在共享的窗口,以及当捕获图像被遮挡时提示用户移走遮挡。这部分的 UI 特效是由 SDK 内部实现的。
startScreenCapture
接口可以启动屏幕分享。selectScreenCaptureTarget
更换分享目标。pauseScreenCapture
和 stopScreenCapture
的区别在于 pause 会停止屏幕内容的采集,并以暂停那一刻的画面垫片,所以在远端看到一直都是最后一帧画面,直到 resume。 /**
* \brief 7.5 【屏幕共享】启动屏幕分享
* \param:rendHwnd - 承载预览画面的 HWND
*/
void startScreenCapture(HWND rendHwnd);
/**
* \brief 7.6 【屏幕共享】暂停屏幕分享
*/
void pauseScreenCapture();
/**
* \brief 7.7 【屏幕共享】恢复屏幕分享
*/
void resumeScreenCapture();
/**
* \brief 7.8 【屏幕共享】关闭屏幕分享
*/
void stopScreenCapture();
您可以通过 setSubStreamEncoderParam
接口设定屏幕分享的画面质量,包括分辨率、码率和帧率,我们提供如下建议参考值:
清晰度级别 | 分辨率 | 帧率 | 码率 |
---|---|---|---|
超高清(HD+) | 1920 × 1080 | 10 | 800kbps |
高清(HD) | 1280 × 720 | 10 | 600kbps |
标清(SD) | 960 × 720 | 10 | 400kbps |
观看 Mac / Windows 屏幕分享
当房间里有一个 Mac / Windows 用户启动了屏幕分享,会通过辅流进行分享。房间里的其他用户会通过 TRTCCloudDelegate 中的 onUserSubStreamAvailable 事件获得这个通知。
希望观看屏幕分享的用户可以通过 startRemoteSubStreamView 接口来启动渲染远端用户辅流画面。
观看 Android / iOS 屏幕分享
若用户通过 Android / iOS 进行屏幕分享,会通过主流进行分享。房间里的其他用户会通过 TRTCCloudDelegate 中的 onUserVideoAvailable 事件获得这个通知。
希望观看屏幕分享的用户可以通过 startRemoteView 接口来启动渲染远端用户主流画面。
//示例代码:观看屏幕分享的画面
void CTRTCCloudSDK::onUserSubStreamAvailable(const char * userId, bool available)
{
LINFO(L"onUserSubStreamAvailable userId[%s] available[%d]\n", UTF82Wide(userId).c_str(), available);
if (available) {
startRemoteSubStreamView(userId, hWnd);
} else {
stopRemoteSubStreamView(userId);
}
}
一个房间里可以同时有多路屏幕分享吗?
目前一个 TRTC 音视频房间只能有一路屏幕分享。
指定窗口分享(SourceTypeWindow),当窗口大小变化时,视频流的分辨率会不会也跟着变化?
默认情况下,SDK 内部会自动根据分享的窗口大小进行编码参数的调整。
如需固定分辨率,需调用 setSubStreamEncoderParam 接口设置屏幕分享的编码参数,或在调用 startScreenCapture 时指定对应的编码参数。
OBS 支持HTTPS访问。 使用 OBS 分配的域名进行访问时,只要在浏览器中将桶或对象...
本文介绍SAE产品的价格调整信息及优惠活动。 优惠通知 为期一年的SAE按量付费6折...
调用DeleteCustomDomain接口删除自定义域名。 请求头 该接口使用公共请求头,无...
提到DevOps这个词,相信很多人一定不会陌生。 作为一个热门的概念,DevOps近年来...
执行主机漏洞扫描后,可以通过 “主机基线” 界面查看基线检查的各项检测结果。 ...
日志服务提供投递功能,支持通过控制台将数据实时投递至OSS、MaxCompute等阿里云...
从 3.2.4 版本开始,游戏引擎 Godot 上线了 Web 版本。Godot 本身已足够轻量,所...
最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上所...
您可以在创建实例时指定SSH密钥对,也可以在创建实例后绑定SSH密钥对。本文介绍...
本文转载自微信公众号「 无敌码农」,作者 无敌码农 。转载本文请联系 无敌码农...