多人互动白板

通过阅读本章节,您将快速了解多人互动白板的相关功能,并且能通过本章节中介绍的流程和接口快速搭建多人互动白板会话。多人互动白板,顾名思义,参与互动白板的有多方,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)

预订多人互动白板

创建一个多人实时会话频道,通过传入 sessionId 来表示频道名, extraMessage 创建会话时传入的附加信息,所有加入频道的用户都会收到此消息。

    /**
     * 通过会话名预定一个会话房间
     *
     * @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>() { ... });

加入多人互动白板

通过 sessionId 频道名来加入一个已经创建好的频道, 加入时可以指定 enableServerRecord 来决定是否录制传输数据。

    /**
     * 通过会话名加入一个已经成功预定的房间
     *
     * @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>() { ... });

发送多人互动白板数据

发送数据,需要构造 RTSTunData, 需要指定会话 ID,通道类型,对方帐号,数据(字节数组)及数据的长度。如果需要发送数据到所有用户,对方帐号填 null。

    /**
     * 向指定会话的某个通道中的某个用户发送数据,也可以广播给所有用户(在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);

接收多人互动白板数据

数据通道建立完之后,就可以监听对方发送来的数据。

  /**
     * 注册/注销对方从某个通道发来的数据
     *
     * @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);
    }
};

监听互动白板通道状态

发起会话(对方接受后),或者接受了会话请求后,需要立即注册对通道状态的监听。

    /**
     * 注册/注销通道状态变化的通知
     *
     * @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) {
        // 网络信号强弱
    }
};

异常离开多人互动白板通知

监听实时会话通道状态后,在状态回调中有onError回调通道发生错误。

    /**
     * 通道发生错误
     *
     * @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>() { ... });
        }

用户加入多人互动白板通知

监听实时数据通道状态后,在状态回调中有onUserJoin回调通道有用户加入。

    /**
     * 用户加入
     *
     * @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
             ...
        }

用户离开多人互动白板通知

监听实时数据通道状态后,在状态回调中有onUserLeave回调通道有用户离开。


    /**
     * 用户离开
     *
     * @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
        ...
   }

发送多人互动白板控制指令

会话建立之后,就可以发送控制信息了。

    /**
     * 发送控制指令
     *
     * @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>() { ... });

监听多人互动白板控制回调

会话建立之后,需要监听会话控制通知。

    /**
     * 注册/注销会话控制消息
     *
     * @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
        ...
    }
};

离开多人互动白板

通过 sessionId 频道名来离开一个已经加入的频道。

    /**
     * 离开多人通话的房间
     *
     * @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>() { ... });