集成通信功能-Windows

简介

本文档描述了Windows 端集成通信功能的实现,集成通信主要会涉及到三个类:JCEngine, JCRoomInfo, JCparticipant。JCEngine 用于管理通信的基本操作。JCRoomInfo用于获取通信会场的基础属性(会场ID,会场主题等)。JCparticipant 用于管理通信会场的成员。在做会议相关操作前请先确认你已经初始化SDK和完成登录

加入通信会场

  1. 和登录操作类似,通信会场需要创建JCEngine和JCEngineEventHandler的实例。

  2. 同样和登录操作类似,会场需要创建管理回调的子类:public class MyEventHandler : SimpleEventHandler

  3. 初始化回调管理器和添加回调管理器。会场初始化时需要初始化回调管理器和添加回调管理器 mEventHandler = new MyEventHandler(this); eventHandler().addEventHandler(mEventHandler);

  4. 加入会场统一调用以下接口
    mJCEngine.join(roomId, password, nickname);

    roomId: 通信会场号 (如果存在此会场号则加入此通信会场,如果不存在则会创建这个会场号的通信会场)
    password:会场密码
    nickname:昵称(会场中使用的昵称)

  5. 发起Join后,SDK会回调界面回调子类里的的事件监听函数,界面可以根据不同的事件实现更新
    比如onJoinRoomSuccess()实现加入会场成功后的界面更新。

  6. 和登录操作类似,通信相关操作结束后也需要删除回调管理器。 eventHandler().removeEventHandler(mEventHandler);

离开通信

  1. 离开通信调用以下接口
    mJCEngine.leave();

  2. 发起leave后,SDK会回调界面的事件监听函数,界面实现更新

   public override void onLeftRoom(int reason)
   {
       //界面更新代码
       ...
   }

通信会场成员变化

  1. 当通信会场有新成员加入退出或者会场成员状态变化时,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);
     }
    

渲染本地视频和成员视频

  1. 请求成员视频调用以下接口

    public abstract int requestVideo(string userId, int picSize);
    

    userId: 对应成员ID
    picSize: 对应分辨率大小(PICTURE_SIZE_LARGE, PICTURE_SIZE_SMALL, etc)

  2. 渲染成员视频调用以下接口
    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原先的视频然后再渲染切换的成员视频。
    切换不同的分辨率只需请求新的分辨率的视频,无需重新渲染。

开关语音发送

  1. 加入通信会场后默认是关闭语音的,此时会场中的成员是听不到该成员的声音的。开关语音需要调用以下接口
    public abstract int enableLocalAudioStream(bool enable);enable: 开启或关闭。

  2. 会场成员通过回调函数收到该成员的语音状态变化。然后更新UI状态

     private void updateParticipant(string userId)
     {
         JCParticipant partp = engine().getParticipant(userId);
         if(partp.hasAudio() && partp.IsPermitAudio)
         {
             //此成员有音频时,UI的状态更新
         }
         else
         {
             //此成员无音频时,UI的状态更新
         }
         ...    
    
     }
    

开关视频发送

  1. 加入通信会场后默认是开启视频的,此时会议里的成员都能看到此成员的视频。开关视频需要调用以下接口:
    public abstract int enableLocalVideoStream(bool enable); enable: 开启或关闭

  2. 会场成员通过回调函数收到该成员的视频状态变化。然后更新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 是否存在视频

results matching ""

    No results matching ""