集成屏幕共享功能 - iOS
简介
屏幕共享是会议内成员共享本终端的屏幕内容,其他成员以视频的方式观看共享的屏幕内容。iOS 端可以显示其他终端共享的屏幕内容,但是暂不支持发起共享。
在集成屏幕共享前,确保已完成了会议的基本功能。
屏幕共享发起
屏幕共享发起分两种情况:
- 单人共享。
- 多人共享
单人共享
会议中还没有成员发起屏幕共享,此时某个成员(以下称作发起方)发起屏幕共享,其他成员(以下称作接收方)收到屏幕共享发起的事件。
发起方的实现
iOS 端暂不支持发起屏幕共享。
接收方的实现
屏幕共享发起后,UI 会收到
JCConferenceEventScreenShare
屏幕共享的事件回调,并且事件的结果是JCReasonScreenShareStart
。UI 获取发起成员的信息。
UI 显示屏幕共享的视频。
接收方实现代码如下:
- (void)conferenceEvent:(JCConferenceEvent)event eventReason:(JCEventReason)eventReason
{
//JCConferenceEventScreenShare是屏幕共享的事件
if (event == JCConferenceEventScreenShare) {
//JCReasonScreenShareStart表示有成员发起了共享
if (eventReason == JCReasonScreenShareStart) {
JCConferenceManager *confManager = [JCConferenceManager sharedManager];
//获取会议信息
JCConferenceModel *confInfo = [confManager getConferenceInfo];
//获取发起成员的信息
JCParticipantModel *screenSharer = confInfo.screenSharer;
//UI 可以显示发起者的昵称
NSString *displayName = screenSharer.displayName;
//先请求共享的视频
[confManager requestScreenVideoWithPictureSize:JCVideoPictureSizeLarge];
//在把视频渲染到UIView上
[confManager startScreenRender:renderView
mode:JCRenderFullContent
completed:nil];
}
}
}
注:请求屏幕共享视频分辨率的原则和请求成员视频分辨率的原则一致。
多人共享
会议中已经有成员发起了屏幕共享,此时另一个成员也发起屏幕共享,其他成员收到屏幕共享发起成员变化的事件。
发起方的实现
iOS 端暂不支持发起屏幕共享。
接收方的实现
屏幕共享发起后,UI 会收到
JCConferenceEventScreenShare
屏幕共享的事件回调,并且事件的结果是JCReasonScreenShareChanged
。UI 更新发起成员的信息。
UI 显示屏幕共享的视频。
注:如果 UI 已经显示了屏幕共享的视频,随屏幕共享发起成员改变后,视频的内容会自动改变。因此上面第3步可以忽略。
接收方实现代码如下:
- (void)conferenceEvent:(JCConferenceEvent)event eventReason:(JCEventReason)eventReason
{
//JCConferenceEventScreenShare是屏幕共享的事件
if (event == JCConferenceEventScreenShare) {
//JCReasonScreenShareChanged表示发起屏幕共享的成员改变了
if (eventReason == JCReasonScreenShareChanged) {
JCConferenceManager *confManager = [JCConferenceManager sharedManager];
//获取会议信息
JCConferenceModel *confInfo = [confManager getConferenceInfo];
//获取当前发起成员的信息
JCParticipantModel *screenSharer = confInfo.screenSharer;
//UI 更新发起者的昵称
NSString *displayName = screenSharer.displayName;
}
}
}
屏幕共享取消
屏幕共享取消的过程分为:
- 会议中发起屏幕共享的成员(发起方)取消了屏幕共享
- 会议中其他成员(接收方)收到屏幕共享取消的事件。
发起方的实现
iOS 端暂不支持取消屏幕共享
接收方的实现
屏幕共享取消后,UI 会收到
JCConferenceEventScreenShare
屏幕共享的事件回调,并且事件的结果是JCReasonScreenShareStop
。UI 关闭屏幕共享的视频。
接收方实现代码如下:
- (void)conferenceEvent:(JCConferenceEvent)event eventReason:(JCEventReason)eventReason
{
//JCConferenceEventScreenShare是屏幕共享的事件
if (event == JCConferenceEventScreenShare) {
//JCReasonScreenShareStop表示发起的成员取消了共享
if (eventReason == JCReasonScreenShareStop) {
JCConferenceManager *confManager = [JCConferenceManager sharedManager];
//停止请求共享的视频
[confManager requestScreenVideoWithPictureSize:JCVideoPictureSizeOff];
//渲染了屏幕共享视频的View 停止渲染,释放资源
[confManager stopRender:renderView];
}
}
}