通过 API 可实现会议共享屏幕、外接屏幕、应用、区域共享,并且支持共享时采集系统声音。 共享内容的状态变更将通过事件回调进行通知。
示例代码
// 获取显示器列表
const monitorNameList: string[] = xyRTC.getMonitorList();
// 开始共享
xyRTC.startSendContent({
contentCaptureType: 0, // 0表示共享类型是屏幕
contentStreamMode: 3, // 3表示共享流是音视频流
contentInfo: {
source: monitorName, // 显示器标识,monitorNameList中的某一个
withAudio: true, // 是否共享桌面声音
enableFluentMode: true, // 是否流畅模式
}
})
另外可以通过以下方式获取显示器缩略图,具体请看getMonitorThumbnail方法
xyRTC.getMonitorThumbnail(monitorName: string): IMonitorThumbnail
区域共享属于屏幕共享中的一种特殊场景,相当于只共享屏幕的某一个区域。区域共享是靠屏幕区域的坐标来决定共享内容,因此区域共享无需传monitorName,而是需要传region区域坐标数据;
示例代码
// 开始共享
xyRTC.startSendContent({
contentCaptureType: 0, // 0表示共享类型是屏幕
contentStreamMode: 3, // 3表示共享流是音视频流
contentInfo: {
source: '', // 无需显示器标识,传空即可
region: { x, y, w, h }, // 必传,区域坐标
withAudio: true, // 是否共享桌面声音
enableFluentMode: true, // 是否流畅模式
}
})
共享过程中,如果共享区域有变化,可调用updateContentCaptureRegion更新区域坐标
xyRTC.updateContentCaptureRegion({ x, y, w, h });
需要注意的是,这里的坐标数据指的是屏幕的物理像素,并且对于多个显示器来说,坐标原点位于主屏幕的左上角,因为对于外接屏幕上的区域,x、y值是可能出现负值情况;
示例代码
// 获取应用列表
const appInfoList: IApp[] = xyRTC.getAppList();
// 开始共享应用
xyRTC.startSendContent({
contentCaptureType: 1, // 1表示共享类型是应用
contentStreamMode: 3, // 3表示共享流是音视频流
contentInfo: {
viewId: hwnd, // 应用窗口句柄,必传
withAudio: true, // 是否共享桌面声音
enableFluentMode: true, // 是否流畅模式
}
});
/**
* App 应用信息
*
* @property {number} appId appId
* @property {string} appName app 名称
* @property {number} hwnd app 窗口句柄
*/
export interface IApp {
appId: number;
appName: string;
hwnd: number;
}
应用共享过程中,用户可能关闭了应用或者应用被遮挡,此时应用采集状态会通过AppWindowCaptureState事件上报
// App 共享采集状态
xyRTC.on('AppWindowCaptureState', (e: IAppWindowCaptureState) => {
});
/**
* App共享采集状态
*
* @property {boolean} isClosed 应用是否被关闭
* @property {boolean} isOccluded 应用是否被遮挡
* @property {boolean} isPaused 应用采集是否已暂停,应用最小化或者被遮挡可能会自动暂停
*/
export interface IAppWindowCaptureState {
isClosed: boolean;
isOccluded: boolean;
isPaused: boolean;
}
另外sdk还额外提供了获取应用icon和应用缩略图的方法,方便用户功能有更好的体验
// 获取App缩略图
xyRTC.getAppThumbnail(hwnd: number): IAppThumbnail
// 获取App icon
xyRTC.getAppIcon(hwnd: number): IAppIcon
上述分别讲述了屏幕共享、区域共享以及应用共享如何开始共享,除此之外共享还可以暂停、恢复、结束,方法如下
// 暂停content采集
xyRTC.pauseContentCapture();
// 恢复content采集
xyRTC.resumeContentCapture();
// 结束共享
xyRTC.stopSendContent();
除此之外,共享过程中各个状态都会通过ContentState事件上报
// 共享状态回调
xyRTC.current.on('ContentState', (e: ShareContentState) => {
if (e === 1) {
// 正在分享Content内容
} else if (e === 0) {
// 已结束分享
}
});
/**
* 内容共享状态
*
* @param IDLE 空闲状态
* @param SENDING 正在发送
* @param RECEIVING 正在接受
* @param NO_BAND_WIDTH 带宽不足
* @param ERROR 共享错误
* @param EXCEED_MAX_SHARE_CONTENT_COUNT 共享路数超过最大限制
*/
export enum ShareContentState {
IDLE,
SENDING,
RECEIVING,
NO_BAND_WIDTH,
ERROR,
EXCEED_MAX_SHARE_CONTENT_COUNT
};