集成通信功能-Windows
简介
本文档描述了Windows 端集成通信功能的实现,集成通信主要会涉及到三个类:JCEngine, JCRoomInfo, JCparticipant。JCEngine 用于管理通信的基本操作。JCRoomInfo用于获取通信会场的基础属性(会场ID,会场主题等)。JCparticipant 用于管理通信会场的成员。在做会议相关操作前请先确认你已经初始化SDK和完成登录。
加入通信会场
和登录操作类似,通信会场需要创建JCEngine和JCEngineEventHandler的实例。
同样和登录操作类似,会场需要创建管理回调的子类:public class MyEventHandler : SimpleEventHandler
初始化回调管理器和添加回调管理器。会场初始化时需要初始化回调管理器和添加回调管理器 mEventHandler = new MyEventHandler(this); eventHandler().addEventHandler(mEventHandler);
加入会场统一调用以下接口
mJCEngine.join(roomId, password, nickname);
roomId: 通信会场号 (如果存在此会场号则加入此通信会场,如果不存在则会创建这个会场号的通信会场)
password:会场密码
nickname:昵称(会场中使用的昵称)发起Join后,SDK会回调界面回调子类里的的事件监听函数,界面可以根据不同的事件实现更新
比如onJoinRoomSuccess()实现加入会场成功后的界面更新。和登录操作类似,通信相关操作结束后也需要删除回调管理器。 eventHandler().removeEventHandler(mEventHandler);
离开通信
离开通信调用以下接口
mJCEngine.leave();
发起leave后,SDK会回调界面的事件监听函数,界面实现更新
public override void onLeftRoom(int reason)
{
//界面更新代码
...
}
通信会场成员变化
- 当通信会场有新成员加入退出或者会场成员状态变化时,SDK会回调界面的成员加入离开和音视频状态更新事件函数:
//加入成员 public override void onParticipantJoin(String userId) { mMeetingPresenter.addParticipant(userId); } //成员离开 public override void onParticipantLeft(String userId, int reason) { mMeetingPresenter.removeParticipant(userId); } //成员音视频状态更新 public override void onParticipantUpdated(string userId) { mMeetingPresenter.updateParticipant(userId); }
渲染本地视频和成员视频
请求成员视频调用以下接口
public abstract int requestVideo(string userId, int picSize);
userId: 对应成员ID
picSize: 对应分辨率大小(PICTURE_SIZE_LARGE, PICTURE_SIZE_SMALL, etc)渲染成员视频调用以下接口
public abstract void startRender(ZmfImageSource view, string userId, int renderMode);
view: 渲染的view
userId: 渲染的用户ID
renderMode: 渲染的方式(RENDER_MODE_FULLCONTENT, RENDER_MODE_FULLSCREEN, etc)
离开通信会场后需要调用 stopRender(ZmfImageSource view) 释放内存。
切换不同成员视频需要先stopRender原先的视频然后再渲染切换的成员视频。
切换不同的分辨率只需请求新的分辨率的视频,无需重新渲染。
开关语音发送
加入通信会场后默认是关闭语音的,此时会场中的成员是听不到该成员的声音的。开关语音需要调用以下接口
public abstract int enableLocalAudioStream(bool enable);
enable: 开启或关闭。会场成员通过回调函数收到该成员的语音状态变化。然后更新UI状态
private void updateParticipant(string userId) { JCParticipant partp = engine().getParticipant(userId); if(partp.hasAudio() && partp.IsPermitAudio) { //此成员有音频时,UI的状态更新 } else { //此成员无音频时,UI的状态更新 } ... }
开关视频发送
加入通信会场后默认是开启视频的,此时会议里的成员都能看到此成员的视频。开关视频需要调用以下接口:
public abstract int enableLocalVideoStream(bool enable);
enable: 开启或关闭会场成员通过回调函数收到该成员的视频状态变化。然后更新UI的状态:
private void updateParticipant(string userId)
{
JCParticipant partp = engine().getParticipant(userId);
if(partp.hasVideo() && partp.IsPermitVideo)
{
//此成员有视频时,UI的状态更新
}
else
{
//此成员无视频时,UI的状态更新
}
...
}
成员对象常用属性
属性名称 | 说明 |
---|---|
public string UserUri | 成员URL |
public string UserId | 成员ID |
public int UserType | 成员类型 |
private bool isLocal | 成员是否是本地 |
public bool hasAudio | 是否存在音频 |
public bool hasVideo | 是否存在视频 |