多人互动白板
通过阅读本章节,您将快速了解多人互动白板的相关功能,并且能通过本章节中介绍的流程和接口快速搭建多人互动白板会话。多人互动白板,顾名思义,参与互动白板的有多方,SDK提供多人互动白板从创建白板会话、加入会话、会话互动到解散会话整个过程的能力,包括创建多人白板会话、发送白板数据、结束白板等基础能力接口与异常流程控制与回调。 多人互动白板不配套提供语音通道,如果需要,可以与多人音视频通话功能结合使用,方便灵活满足各类音视频与白板相结合的多人场景。
sequenceDiagram
participant A
participant Conference
participant B
participant ...
A->>Conference:预订多人实时会话(createSession)
A->>Conference:加入多人会话(joinSession)
B->>Conference:加入多人会话(joinSession)
Conference->>A:用户加入多人实时会话通知(onUserJoin)
A->>Conference:发送多人会话数据(sendData)
Conference->>A:接收多人实时会话数据(observeReceiveData)
B->>B:异常离开多人实时会话通知(onError)
Conference->>A:用户离开多人实时会话通知(onUserLeave)
A->>Conference:离开多人实时会话(leaveSession)
预订多人互动白板
- API介绍
创建一个多人实时会话频道,通过传入 sessionId
来表示频道名, extraMessage
创建会话时传入的附加信息,所有加入频道的用户都会收到此消息。
- API原型
/**
* 通过会话名预定一个会话房间
*
* @param sessionId 会话ID
* @param extraMessage 附加信息,后续加入会话的用户都会收到此信息
* @param callback 回调. <code>200</code> 创建成功, <code>417</code> 房间已经被预定。
*/
public abstract void createSession(String sessionId, String extraMessage, RTSCallback<Void> callback);
- 参数说明
参数 | 说明 |
---|---|
sessionId | 会话ID。 |
extraMessage | 附加信息,后续加入会话的用户都会收到此信息。 |
callback | 回调,参考RTSCallback。 |
- 示例
String sessionId = "sessionId"
String extraMessage = "extra msg";
RTSManager2.getInstance().createSession(sessionId, extraMessage, new RTSCallback<Void>() { ... });
加入多人互动白板
- API介绍
通过 sessionId
频道名来加入一个已经创建好的频道, 加入时可以指定 enableServerRecord
来决定是否录制传输数据。
- API原型
/**
* 通过会话名加入一个已经成功预定的房间
*
* @param sessionId 会话ID
* @param enableServerRecord 是否服务器录制
* @param callback 回调
*
* @return
*/
public abstract boolean joinSession(String sessionId, boolean enableServerRecord, RTSCallback<RTSData> callback);
- 参数说明
参数 | 说明 |
---|---|
sessionId | 会话ID。 |
enableServerRecord | 是否服务器录制。 |
callback | 回调, RTSCallback参考RTSCallback,RTSData参考RTSData 。 |
- 示例
String sessionId = "sessionId"
boolean enableServerRecord = true;
RTSManager2.getInstance().joinSession(sessionId, enableServerRecord, new RTSCallback<RTSData>() { ... });
发送多人互动白板数据
- API介绍
发送数据,需要构造 RTSTunData
, 需要指定会话 ID,通道类型,对方帐号,数据(字节数组)及数据的长度。如果需要发送数据到所有用户,对方帐号填 null。
- API原型
/**
* 向指定会话的某个通道中的某个用户发送数据,也可以广播给所有用户(在RTSTunData中,对方帐号填null)
*
* @param data 要发送的数据信息,其中toAccount表示目标用户(填null,表示广播给所有用户)
* @return 参数是否有效
*/
public abstract boolean sendData(RTSTunData data);
- 参数说明
参数 | 说明 |
---|---|
data | 要发送的数据信息,其中toAccount表示目标用户(填null,表示广播给所有用户),参考RTSTunData。 |
- 示例
RTSTunData channelData = new RTSTunData(sessionId, RTSTunnelType.DATA, toAccount, data.getBytes("UTF-8"), data.getBytes().length);
RTSManager.getInstance().sendData(channelData);
接收多人互动白板数据
- API介绍
数据通道建立完之后,就可以监听对方发送来的数据。
- API原型
/**
* 注册/注销对方从某个通道发来的数据
*
* @param sessionId 会话ID
* @param observer 观察者,参数为收到的数据信息
* @param register true为注册,false为注销
*/
public abstract void observeReceiveData(String sessionId, Observer<RTSTunData> observer, boolean register);
- 参数说明
参数 | 说明 |
---|---|
sessionId | 会话ID。 |
observer | 观察者,参数为收到的数据信息,参考RTSTunData。 |
register | true为注册,false为注销。 |
- 示例
RTSManager.getInstance().observeReceiveData(sessionId, receiveDataObserver, register);
Observer<RTSTunData> receiveDataObserver = new Observer<RTSTunData>() {
@Override
public void onEvent(RTSTunData rtsTunData) {
String data = "[parse bytes error]";
try {
data = new String(rtsTunData.getData(), 0, rtsTunData.getLength(), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
TransactionCenter.getInstance().onReceive(sessionId, data);
}
};
监听互动白板通道状态
- API介绍
发起会话(对方接受后),或者接受了会话请求后,需要立即注册对通道状态的监听。
- API原型
/**
* 注册/注销通道状态变化的通知
*
* @param sessionId 会话ID
* @param observer 观察者,参数为通话会话(通道)状态回调(例如是否连接上服务器,通道是否有成员加入等)
* @param register true为注册,false为注销
* @return 是否成功调用
*/
public abstract boolean observeChannelState(String sessionId, RTSChannelStateObserver observer, boolean register);
- 参数说明
参数 | 说明 |
---|---|
sessionId | 会话ID。 |
observer | 观察者,参数为通话会话(通道)状态回调(例如是否连接上服务器,通道是否有成员加入等)。 |
register | true为注册,false为注销。 |
- 示例
RTSManager.getInstance().observeChannelState(sessionId, channelStateObserver, register);
RTSChannelStateObserver channelStateObserver = new RTSChannelStateObserver() {
@Override
public void onConnectResult(String localSessionId, RTSTunnelType tunType, long channelId, int code, String recordFile) {
// 与服务器连接结果通知,成功返回 200, 同时返回服务器录制文件的地址
}
@Override
public void onChannelEstablished(String localSessionId, RTSTunnelType tunType) {
// 双方通道连接建立(对方用户已加入)
}
@Override
public void onUserJoin(String localSessionId, RTSTunnelType tunType, String account) {
// 用户加入
}
@Override
public void onUserLeave(String localSessionId, RTSTunnelType tunType, String account, int event) {
// 用户离开
}
@Override
public void onDisconnectServer(String localSessionId, RTSTunnelType tunType) {
// 与服务器断开连接
}
@Override
public void onError(String localSessionId, RTSTunnelType tunType, int error) {
// 通道发生错误
}
@Override
public void onNetworkStatusChange(String localSessionId, RTSTunnelType channelType, int value) {
// 网络信号强弱
}
};
异常离开多人互动白板通知
- API介绍
监听实时会话通道状态后,在状态回调中有onError
回调通道发生错误。
- API原型
/**
* 通道发生错误
*
* @param localSessionId 本地 Session ID
* @param tunType 通道类型
* @param error 错误码
* @see com.netease.nimlib.sdk.rts.constant.RTSError
*/
void onError(String localSessionId, RTSTunnelType tunType, int error);
- 参数说明
参数 | 说明 |
---|---|
localSessionId | 本地 Session ID。 |
tunType | 通道类型,参考RTSTunnelType。 |
error | 错误码。 |
- 示例
public void onError(String sessionId, RTSTunnelType tunType, int code) {
Toast.makeText(RTSActivity.this, "onError, tunType=" + tunType.toString() + ", error=" + code, Toast.LENGTH_LONG).show();
RTSManager.getInstance().close(sessionId, new RTSCallback<Void>() { ... });
}
用户加入多人互动白板通知
- API介绍
监听实时数据通道状态后,在状态回调中有onUserJoin
回调通道有用户加入。
- API原型
/**
* 用户加入
*
* @param localSessionId 本地 Session ID
* @param tunType 通道类型
* @param account 用户账号
*/
void onUserJoin(String localSessionId, RTSTunnelType tunType, String account);
- 参数说明
参数 | 说明 |
---|---|
localSessionId | 本地 Session ID。 |
tunType | 通道类型,参考RTSTunnelType。 |
account | 用户账号。 |
- 示例
public void onUserJoin(String sessionId, RTSTunnelType tunType, String account) {
// your codes
...
}
用户离开多人互动白板通知
- API介绍
监听实时数据通道状态后,在状态回调中有onUserLeave
回调通道有用户离开。
- API原型
/**
* 用户离开
*
* @param localSessionId 本地 Session ID
* @param tunType 通道类型
* @param account 用户账号
* @param event
*/
void onUserLeave(String localSessionId, RTSTunnelType tunType, String account, int event);
- 参数说明
参数 | 说明 |
---|---|
localSessionId | 本地 Session ID。 |
tunType | 通道类型,参考RTSTunnelType。 |
account | 用户账号。 |
event | 事件类型。 |
- 示例
public void onUserLeave(String sessionId, RTSTunnelType tunType, String account, int event) {
// your codes
...
}
发送多人互动白板控制指令
- API介绍
会话建立之后,就可以发送控制信息了。
- API原型
/**
* 发送控制指令
*
* @param sessionId 会话ID
* @param data 控制指令内容
* @param callback 回调函数
* @return 是否调用成功
*/
public abstract boolean sendControlCommand(String sessionId, String data, RTSCallback<Void> callback);
- 参数说明
参数 | 说明 |
---|---|
sessionId | 会话ID。 |
data | 控制指令内容。 |
callback | 回调函数,参考RTSCallback。 |
- 示例
RTSManager2.getInstance().sendControlCommand(sessionId, content, new RTSCallback<Void>() { ... });
监听多人互动白板控制回调
- API介绍
会话建立之后,需要监听会话控制通知。
- API原型
/**
* 注册/注销会话控制消息
*
* @param sessionId 会话ID
* @param observer 观察者, 参数为接收到的会话控制消息
* @param register true为注册,false为注销
* @return 是否成功调用
*/
public abstract boolean observeControlNotification(String sessionId, Observer<RTSControlEvent> observer, boolean register);
- 参数说明
参数 | 说明 |
---|---|
sessionId | 会话ID。 |
observer | 观察者, 参数为接收到的会话控制消息,参考RTSControlEvent。 |
register | true为注册,false为注销。 |
- 示例
RTSManager2.getInstance().observeControlNotification(sessionId, controlObserver, register);
Observer<RTSControlEvent> controlObserver = new Observer<RTSControlEvent>() {
@Override
public void onEvent(RTSControlEvent rtsControlEvent) {
// your codes
...
}
};
离开多人互动白板
- API介绍
通过 sessionId
频道名来离开一个已经加入的频道。
- API原型
/**
* 离开多人通话的房间
*
* @param sessionId Session ID
* @param callback 回调
*
*/
public abstract boolean leaveSession(String sessionId, RTSCallback<Void> callback);
- 参数说明
参数 | 说明 |
---|---|
sessionId | 会话ID。 |
callback | 回调,参考RTSCallback。 |
- 示例
String sessionId = "sessionId"
RTSManager2.getInstance().leaveSession(String sessionId, new RTSCallback<Void>() { ... });
本篇文档内容是否对您有帮助?
有帮助
我要吐槽
此文档对你是否有帮助
×
有帮助
我要吐槽
×