[TOC]
## 3.进阶功能
此部分针对有自定义视图需求的客户，主要对排麦，音视频，文档白版，聊天，人员列表五个模块进行说明

### 一.音视频聊天

#### 1.功能描述

该模块主要负责音视频数据的采集，预览展示，对远端流的订阅、取消订阅及对一些流属性设置修改；

#### 2.时序图

![文档时序图](./res/进阶对接-音视频接入时序图.jpg)

#### 3.实现方法

1.创建房间，详见OpenApi文档

https://doc.bokecc.com/class/developer/api/api.html#1%E5%88%9B%E5%BB%BA%E7%9B%B4%E6%92%AD%E9%97%B4

2.获取节点信息

通过此接口获取当前用户地域推荐节点及所有节点列表
其中，mUserId 可为客户账号id

```
CCAtlasClient.getInstance().dispatch(mUserId, new CCAtlasCallBack<CCCityListSet>() {
            @Override
            public void onSuccess(final CCCityListSet ccCityBean) {
                String mFisrtCityName = ccCityBean.getloc();//节点名称
                String mAreaCode = ccCityBean.getareacode();//节点编码
                mCityList = ccCityBean.getLiveListSet();//节点列表
            }

            @Override
            public void onFailure(int errCode, String errMsg) {}
        });
```

3.登录接口

通过此接口获取用户的sessionId，sessionId为用户进入房间的唯一身份标识；
其中，mRoomId为创建房间返回，mUserId为客户账号id，mRole为角色，mNickName 为昵称，mPwd 为密码

```
CCAtlasClient.getInstance().login(mRoomId,mUserId, mRole, mNickName, mPwd, new CCAtlasCallBack<String>() {
	@Override
	public void onSuccess(String sessionid) {

	}

	@Override
	public void onFailure(int errCode, String errMsg) {

	}
});
```

4.进入房间

```java
/**
 * 加入直播间
 *
 * @param sessionId          会话id 通过登录接口获取
 * @param appId              用户账号
 * @param areaCode           节点
 * @param isUpdateRtmpLayout 设置是否合流布局里面有学生画面，默认是false有画面，true无画面。
 * @param callBack           回调
 * @modify 1.暖场视频需要手动重新获取
 */
public void join(String sessionId, String appId, String areaCode, boolean isUpdateRtmpLayout, CCAtlasCallBack<CCInteractBean> callBack)
```

 5.预览

```java
/**
 * 开始预览
 *
 * @param context    当前页面的句柄
 * @param renderMode 渲染模式
 * RENDER_MODE_HIDDEN = 1;全铺满
 * RENDER_MODE_FIT = 2;自适应
 * @return
 */
public SurfaceView startPreview(Context context, int renderMode)
```

6.开始直播

```java
/**
 * 开始直播
 *
 * @param isRecord 0不开启录制/1开启录制
 * @param callBack
 */
public void startLive(int isRecord,String callbackData, final CCAtlasCallBack<Void> callBack)
```

7.推流

```java
/**
 * 开始推流
 *
 * @param callBack
 */
public void publish(final CCAtlasCallBack<Void> callBack)
```

8.结束推流

```java
/**
 * 停止推流
 *
 * @param callBack
 */
public void unpublish(final CCAtlasCallBack<Void> callBack) 
```

9.结束直播

```java
/**
 * 结束直播
 *
 * @param callBack
 */
public void stopLive(final CCAtlasCallBack<Void> callBack)
```

10.结束预览

```java
/**
 * 停止预览
 */
public void stopPreview() 
```

#### 4.API链接



#### 5.开发注意事项

1.房间参数详见api接口文档和demo；

#### 6.FAQ



### 二.排麦

#### 1.功能描述

该模块主要负责修改用户的推拉流状态，负责处理用户是否该推流，是否该订阅、取消订阅某条流；

#### 2.时序图

![barley](./res/进阶对接-连麦时序图.jpg)

#### 3.实现方法



#### 4.API链接



#### 5.开发注意事项



#### 6.FAQ



### 三.文档白版

#### 1.功能描述

该模块主要负责直播间内文档相关内容的展示及状态处理； 

白板与文档组件的核心类是CCDocViewManager

获取核心类的实例: CCDocViewManager mDocViewManager = CCDocViewManager.getInstance();

#### 2.时序图

![截屏2020-08-0514.44.33](./res/进阶对接-文档时序图.jpg)

#### 3.实现方法
##### 3.1 主要功能方法
###### 3.1.1 初始化管理类
```java
CCDocViewManager mDocViewManager = CCDocViewManager.getInstance();
mDocViewManager.addInteractListeners();
```
###### 3.1.2 初始化角色设置
设置画笔 noIntercept true可以用画笔，用户角色CCAtlasClient.PRESENTER(老师红色笔)、CCAtlasClient.TALKER（学生蓝色画笔）
        
```java
mDocView.setTouchInterceptor(false, CCAtlasClient.TALKER);
```

手指触发画笔（支持老师端，或是被设为讲师，或是授权标注，才需要设置）,初始化采用上面方法，直播中可用下面方法，注意此方法仅改变画笔权限，不改变颜色
```java
mDocView.setNoInterceptor(true);
```
单独设置角色并初始化画笔颜色的方法
```java
public void setRolePaint(int role)
```
###### 3.1.3 关联控件
关联文档画板控件
```java
mDocView.setDocWebViewSetVisibility(mDocWebView);
```
###### 3.1.4 画笔设置
支持老师端，或是被设为讲师，或是授权标注，才需要设置
1.设置画笔的粗细
```java
mDocView.setStrokeWidth(float width);
```
object 参数说明：

| 参数名称 | 参数类型 | 说明               | 是否必须 |
| -------- | -------- | ------------------ | -------- |
| width  | float  | 设置画笔的粗细，精度为float类型  | 必选     |

2.设置画笔的颜色

```javascript
 mDocView.setColor(int color, int colorStr) {
```
object 参数说明：

| 参数名称 | 参数类型 | 说明                       | 是否必须 |
| -------- | -------- | -------------------------- | -------- |
| color    | int      | 画笔的颜色                 | 必选     |
| colorStr | int      | 当前的颜色，十六进制int 型 | 必选     |

3.撤销画笔
只撤销自己的画笔数据
```javascript
mDocView.undo() {
```
老师撤销所有人的画笔数据
```javascript
mDocView.teacherUndo() 
```
4.清空画笔数据
清空当前页的画笔数据：
```javascript
 mDocView.clear() 
```

清空整个文档的画笔数据， 结束直播时使用
```javascript
 mDocView.clearAll() {
```
###### 3.1.5 橡皮檫功能
默认画笔功能打开，橡皮擦功能关闭，可以不设置
```java
mDocView.setEraser(boolean isEraser)
```

参数说明：

| 参数名称 | 参数类型 | 说明               | 是否必须 |
| -------- | -------- | ------------------ | -------- |
| isEraser | boolean  | true打开橡皮檫功能，false：画笔功能，默认是走的false画笔功能  | 必选     |

例子：
```java
//支持画笔功能
  mDocView.setEraser(false);
//支持橡皮檫功能
  mDocView.setEraser(true);
```
###### 3.1.6 获取历史数据
进入房间首先要获取画笔和文档的历史数据
```java
  mDocViewManager.setDocHistory(mDocView,mWebView);
```
###### 3.1.7 设置白板和文档的宽高
```java
mDocView.setWhiteboard(width, height,isWhiteBoard);
```
| 参数名称 | 参数类型 | 说明               | 是否必须 |
| -------- | -------- | ------------------ | -------- |
| width    | int | 文档宽 | 必选     |
| height   | int | 文档高 | 必选     |
此方法为老版本文档设置宽高方法，可满足仅用窗口适配模式下文档处理，窗口适配模式，适配宽或者适配高，边缘可能留白，适合 ppt 类型的宽文档。Demo RoomUI  为宽度适配模式。

###### 3.1.8 CCDocViewManager 功能方法
文档管理类CCDocViewManager含有较多方法 ，比如获取直播间文档、获取单个文档、删除文档、 翻页、局部动画、授权标注、设为讲师、加载监听等 ，参考 api 文档

###### 3.1.9 设置文档默认背景颜色
文档默认的背景颜色为白色，可以不设置
```java
mDocWebView.setDocBackGroundColor(“#FFFFFF“）
```
###### 3.1.10 文档加载回调
```java
mDocWebView.setOnDpCompleteListener(OnDpCompleteListener mOnDpCompleteListening)
```

| 参数名                 | 类型                 | 说明                             |
| ---------------------- | -------------------- | -------------------------------- |
| mOnDpCompleteListening | OnDpCompleteListener | 默认背景颜色，默认为白色 #FFFFFF |

```java
public interface OnDpCompleteListener {

    /**
     * 加载完成
     * @param w 宽度
     * @param h 高度
     */
    void dpLoadComplete(int w, int h);

    /**
     * 正在加载
     */
    void dpLoading();

    /**
     * 加载图片动画翻页完成
     * @param index 页码
     */
    void dpAnimationChange(int index);
    /**
     * 加载出错
     */
    void dpLoadError();
}
```
###### 3.1.11 设为讲师和授权标注
###### 3.1.11.1、设为讲师/取消设为讲师
DocViewManager 方法
```
public boolean authUserTeacher(@NonNull String userId)
```
| 参数 | 参数说明  |
| -------- | -------- |
| userId   | 指定的用户id|

```
public boolean cancleAuthUserTeacher(@NonNull String userId)
```

| 参数 | 参数说明  |
| -------- | -------- |
| userId   | 指定的用户id|

###### 3.1.11.2、授权标注/取消授权标注

```
public boolean authUserDraw(@NonNull String userId)
```

| 参数 | 参数说明  |
| -------- | -------- |
| userId   | 指定的用户id|

```
public boolean cancleAuthUserDraw(@NonNull String userId)
```

| 参数 | 参数说明  |
| -------- | -------- |
| userId   | 指定的用户id|

###### 3.1.11.3、老师授权学生权限操作文档监听回调通知状态给应用层

需要去设置监听多媒体事件，其中设为讲师和授权标注为最主要方法，其他方法按需使用
```
public void setOnTalkerAuthDocListener(OnTalkerAuthDocListener onTalkerAuthDocListener)

/**
 * 老师授权学生权限操作文档监听器
 */
public interface OnTalkerAuthDocListener{
    /**
     * 授权标注通知
     *
     * @param userid      当前被老师操作的用户id
     * @param isAllowDraw <ul><li>true授权标注</li><li>false取消授权</li></ul>
     */
    void onAuth(String userid, boolean isAllowDraw);

    /**
     * 设为讲师状态通知
     *
     * @param userid      当前被老师操作的用户id
     * @param isAllowsetupteacher <ul><li>true设为讲师</li><li>false取消设为讲师</li></ul>
     */
    void onSetTeacherStatus(String userid, boolean isAllowsetupteacher);

    /**
     * 设为讲师翻页监听
     */
    void onSetTeacherToPage(DocInfo mDocInfo,int position);

    /**
     * 设为讲师文档发生变化通知
     */
    void onSetTeacherToDoc(DocInfo mDocInfo,int position);

    /**
     * 学生被设为讲师以后，老师需要去监听学生的翻页事件
     *
     * @param position      当前被老师操作的用户id
     */
    void onTeacherToTalkerAuth(int position);
}
```



###### 3.1.12 释放资源
文档资源回收,当文档不再使用时调用
```java
CCDocViewManager.getInstance().release ()
```
##### 3.2 文档Demo版本说明
###### 3.2.1 版本说明
	文档 SDK 从 6.x.x 版本对 SDK 进行较大调整，优化 SDK 的翻页、画笔及动画加载。Demo 中应用层直播室也进行了重构，并对文档相关功能进行了封装（CCDocView控件），{@link TeacherRoomActivity} 和 {@link StudentRoomActivity}中只需调用对应方法即可，如果接入使用的文档UI和 demo 中文档相关的 UI 相同可以使用 CCDocView简化处理逻辑，如果要自行处理，SDK 内部原有接口没有较大变动，可以继续使用，也可以参考CCDocView自己封装。

注意：此部分只是处理应用层文档相关逻辑，如果对接原有SDK没有问题，可以忽略此部分，如果使用中遇到问题请优先使用 demo 验证是否存在此问题，然后对照 demo 和文档排查。
###### 3.2.2 CCDocView主要方法
###### 3.2.2.1 初始化
```
		/**
     * 初始化角色方向等
     * @param activity activity
     * @param mRole       用户角色
     * @param orientation 屏幕模式
     */
    public void initRole(Activity activity, int mRole,final int orientation) 
```
######3.2.2.2 设置文档相关监听
```
		/**
     * 设置文档相关监听
     * @param mDocHandleListener 监听器回调
     */
    public void setDocHandleListener(IDocHandleListener mDocHandleListener)

		/**
     * 文档去监听回调接口
     */
    public interface IDocHandleListener {

        /**
         * 点击退出文档全屏模式的方法
         */
        void exitDocFullScreen();

        /**
         * 点击文档全屏模式的方法
         */
        void docFullScreen();

        /**
         * 横屏状态点击显示上下菜单的方法
         */
        void showActionBar();

        /**
         * 竖屏非全屏状态点击文档区的回调方法
         */
        void onClickDocView(View view);

        /**
         * 竖屏非全屏状态点击文档区菜单出现动画开始
         */
        void onMenuShowAnimStart();

        /**
         * 竖屏非全屏状态点击文档区菜单隐藏动画开始
         */
        void onMenuHideAnimStart();

    }
```
###### 3.2.2.3 讲师推流后发送当前文档页面
```
public void sendCurrentDocPage()
```
###### 3.2.2.4 处理竖屏状态下文档点击出现菜单
```
public void handleClickRootView()
```
###### 3.2.2.5 老师设置学生为讲师老师回调（仅讲师调用）
```
public void teacherSetupTeacherPage(int CurPosition)
```
###### 3.2.2.6 设为讲师以后文档加载监听事件（仅讲师调用）
```
public void setAssistDocInfo(DocInfo docInfo, int position, boolean isFirst) 
```
###### 3.2.2.7 开始上课
开始上课，文档重置，竖屏默认不支持手势
```
public void startClass() 
```
###### 3.2.2.8 结束上课
停止上课文档处理，清除画笔学生或者横屏状态默认支持手势
```
public void stopClass() 
```
###### 3.2.2.9处理文档跳页、上传图片、选择文档等
```
public void onActivityResult(int requestCode, int resultCode, Intent data)
```
###### 3.2.2.10 文档是否全屏
当前是否是全屏文档，竖屏状态下
```
public boolean isDocFullScreen() 
```
###### 3.2.2.11 点击退出文档按钮（在竖屏模式下才有这个按钮）
```
public void docExitFullScreen()
```

###### 3.2.2.12 切换到白板的快捷方法
```
public void docPageToWhiteBoard（）
```

###### 3.2.2.13 监听授权标注和设为讲师的状态（仅互动者调用）
```
public void authDrawOrSetupTeacher(String userid, boolean isAuth,int flag)
```
###### 3.2.2.14 设置文档信息
```
public void setDocInfo(DocInfo docInfo, int position, int where)
```
###### 3.2.2.15 设为讲师的通知接口（仅互动者调用）
```
public void setupTeacherFlag(DocInfo docInfo, int position)
```
###### 3.2.2.16 设置文档背景颜色
设置文档背景颜色，默认为白色，如"#FFFFFF"
```
public void setDocBackgroundColor(String color)
```
###### 3.2.2.17 释放资源
```
public void release()
```
##### 3.3 文档加载模式
文档模式分为窗口适应和宽度适配
窗口适应即以当前窗口为最大宽高适配，等比缩放显示，可完整显示，但可能留白，不可滑动
宽度适配即以当前窗口的宽度等比缩放文档，文档宽度可能超出屏幕，此时会滚动显示
通常情况可以使用窗口适配模式。注意基础模式为窗口适应的话仅能窗口适配，基础模式为宽度适配的话，可以切换宽度适配和窗口适应，基础模式只能设置一种。
###### 3.3.1窗口适配模式
###### 3.3.1.1 基础介绍
窗口适应即以当前窗口为最大宽高适配，简易 demo 使用此模式，完整 demo  roomUI 为宽度适配模式。

###### 3.3.1.2加载方法
```java
mDocView.setWhiteboard(width, height, isWhiteBoard);
```
###### 3.3.1.3手势控制
设置支持手势
```java
mDocView.setGestureAction(supportGesture);
```
绑定控件
```java
GestureViewBinder.bind(this, mDocContainer, mDocWebView);
```
缩放回弹
```java
mGestureViewBinder.setBigBack();
```
简易 Demo 手势控制
```javascript
	<RelativeLayout
        android:id="@+id/id_lecture_doc_area"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FFFFFF">

        <com.bokecc.ccdocview.DocWebView
            android:id="@+id/id_lecture_docppt_display"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        <com.bokecc.ccdocview.DocView
            android:id="@+id/id_lecture_doc_display"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
        </com.bokecc.ccdocview.DocWebView>
    </RelativeLayout>
```
```java
 		/**
     * 手势控制主方法
     *
     * @param supportGesture 是否支持手势
     */
    private void setGestureAction(boolean supportGesture) {
        mDocView.setGestureAction(supportGesture);
        if (mGestureViewBinder == null) {
            mGestureViewBinder = GestureViewBinder.bind(this, mDocContainer, mDocWebView);
            mGestureViewBinder.setFullGroup(true);
            //缩放背景颜色
            mDocContainer.setBackgroundColor(Color.WHITE);
        }
        mGestureViewBinder.setGestureEnable(supportGesture);
    }
```
###### 3.3.2 宽度适配模式
###### 3.3.2.1 基础介绍
注意基础模式为窗口适应的话仅能窗口适配，基础模式为宽度适配的话，可以切换宽度适配和窗口适应，基础模式只能设置一种。
新版 RoomUI 的基础模式为宽度适配，可以自由切换窗口适应和宽度适配。demo 中小屏为窗口适应，大屏为窗口适配。

###### 3.3.2.2 加载方法
1.基础模式设置方法
新增重载方法，第三个参数为模式
```java
mCCDocViewManager.setDocHistory(mDocView, mDocWebView,mode);
```
mode : CCDocViewManager.DOC_MODE_FIT(1),DOC_MODE_FILL_WIDTH(2) ，即 1 适应窗口，2 宽度适配
如果要采用宽度适配的基础模式 mode 应为 DOC_MODE_FILL_WIDTH（2）
2.设置文档显示窗口大小及模式
mDocView.setDocFrame(width,height,mode);
此方法可以取代mDocView.setWhiteboard(width, height, true); 见demo  CCDocView 中的使用
包括文档全屏（docFullScreen()）和恢复小屏的方法（docExitFullScreen()) ，参照 demo，此方法使用会更加简洁
###### 3.3.2.3 手势缩放
如果使用手势放大缩小，在窗口适应下可以按照之前api 处理，在宽度适配下，因相关冲突，需要调整布局及设置方法
###### 3.3.2.3.1 布局文件结构
```java
<com.bokecc.ccsskt.example.view.CCDocRelativeLayout
                android:id="@+id/bigContainer"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
            <com.bokecc.ccdocview.DocWebView
                android:id="@+id/id_lecture_docppt_display"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_centerInParent="true"
                android:visibility="gone">

                <com.bokecc.ccdocview.DocView
                    android:id="@+id/id_lecture_doc_display"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />
            </com.bokecc.ccdocview.DocWebView>
            </com.bokecc.ccsskt.example.view.CCDocRelativeLayout>
```
###### 3.3.2.3.2 新增控件
Demo 中新增了CCDocRelativeLayout控件，主要目的是为了缩放处理，这里动手能力强的，可以自行处理缩放,注意使用这个控件来显示宽度适配模式时，mDocView 不能设置点击事件,点击事件可通过下面的方法实现

```java
bigContainer.setClickEventListener(new CCDocRelativeLayout.OnClickListener() {
                @Override
                public void onClick() {
                
                	
                }
            });
```
手势模式和绘制模式切换变化，新增bigContainer.setCanDraw(!supportGesture); ，控制是否能够使用画笔
```
mDragTouchListener.setOnClickListener(new DragTouchListener.DragOnclickListener() {
                @Override
                public void onClick() {
                    supportGesture = !supportGesture;
                    bigContainer.setCanDraw(!supportGesture);
                    gestureButton.setText(supportGesture?"手势模式":"绘制模式");
                    setGestureAction(supportGesture);
                }
            });
```
###### 3.3.2.3.3手势控制主方法
参考 Demo CCDocView 中的方法

```java
private void setGestureAction(boolean supportGesture) {
        this.supportGesture = supportGesture;
        mDocView.setGestureAction(supportGesture);
        bigContainer.setIntercept(!supportGesture);//新增
        if(supportGesture){
            if(mGestureViewBinder==null){
                mGestureViewBinder = GestureViewBinder.bind(mActivity, bigContainer, mDocWebView);
                //使用了 WebView 的下上滑动，这里就不需要了
                mGestureViewBinder.setSupportVerticalScroll(false);

                mGestureViewBinder.setFullGroup(true);
                bigContainer.setBackgroundColor(Color.WHITE);
                //事件处理
                bigContainer.setOnDownListener(new CCDocRelativeLayout.OnDownListener() {
                    @Override
                    public void onDown(MotionEvent motionEvent) {
                        mGestureViewBinder.setDownEvent(motionEvent);
                    }
                });
            }
            mGestureViewBinder.setGestureEnable(true);
            //切换文档后缩放还原处理
            mCCDocViewManager.setDocPageChangeListener(new CCDocViewManager.OnDocPageChangeListener() {
                @Override
                public void onDocPageChange(String docID) {
                    if((isDocFullScreen||CCApplication.sClassDirection==1)&&!TextUtils.equals(docID,lastDocId)){
                        mGestureViewBinder.setBigBack();
                        lastDocId = docID;
                    }

                }
            });

        }else {
            if(mGestureViewBinder!=null)
                mGestureViewBinder.setGestureEnable(false);
        }

}
```
#### 4.API链接



#### 5.开发注意事项



#### 6.FAQ



### 四.聊天

#### 1.功能描述

该模块主要负责直播间内的聊天、禁言等相关操作；

#### 2.时序图

![截屏2020-08-0514.44.33](res/进阶对接-聊天时序图.jpg)

#### 3.实现方法

聊天组件的核心类是CCChatManager,获取核心类的实例:CCChatManager mChatManager = CCChatManager.getInstance();

##### 3.1 消息的接收(包括图片,以及表情,文本)
##### 3.1.1 监听消息事件的回调通知
首先获取聊天插件的消息监听事件: mChatManager.setOnChatListener(mChatList)

使用例子：（demo里有实现的代码逻辑，可供参考）
```java
private CCChatManager.OnChatListener mChatList = new CCChatManager.OnChatListener() {
        @Override
        public void onReceived(CCUser from, ChatMsg msg, boolean self) {
         
        }

        @Override
        public void onError(String err) {

        }
    };
```
##### 3.2 消息的发送

由发送端发起通知
```java
public void sendMsg(String msg) {
```
object 参数说明：

| 参数名称 | 参数类型 | 说明               | 是否必须 |
| -------- | -------- | ------------------ | -------- |
| msg      | String | 发送消息 | 必选     |

##### 3.3 禁言
##### 3.3.1禁言事件通知
首先获取聊天插件的禁言监听事件:  mChatManager.setOnGagListener(mGagListener);

使用例子：（demo里有实现的代码逻辑，可供参考）
```java
private CCChatManager.OnGagListener mGagListener = new CCChatManager.OnGagListener() {

        @Override
        public void onChatGagOne(String userid, boolean isAllowChat) {
           //指定某个用户禁言
        }

        @Override
        public void onChatGagAll(boolean isAllowChat) {
          //全体禁言
        }
    };
```
##### 3.4 图片的处理
主要是图片压缩逻辑处理
###### 3.4.1从手机端本地获取图片
```java
   public String getImageAbsolutePath(Uri imageUri) 
```
object 参数说明：

| 参数名称 | 参数类型 | 说明               | 是否必须 |
| -------- | -------- | ------------------ | -------- |
| imageUri  | Uri | image地址   | 必选     |

###### 3.4.2图片压缩
```java
public int readPictureDegree(String path) //读取照片exif信息中的旋转角度
public void compressBitmap(String imgPath, int degree) {
 chatManager.updatePic1(file);
}
```
readPictureDegree方法：object 参数说明：

| 参数名称 | 参数类型 | 说明               | 是否必须 |
| -------- | -------- | ------------------ | -------- |
| path  | String | image路径   | 必选     |

compressBitmap方法：object 参数说明：

| 参数名称 | 参数类型 | 说明               | 是否必须 |
| -------- | -------- | ------------------ | -------- |
| path  | String | image路径   | 必选     |
| degree  | int | 旋转角度   | 必选     |

##### 3.5 公有的方法
###### 3.5.1 当前房间是否禁言
```java
  public boolean isRoomGag() 
```
###### 3.5.2 当前用户是否被禁言
```java
 public boolean isGag() 
```

##### 3.6 其他方法
demo中设置页面 老师端可能配置关于房间的设置，参考 api 文档

#### 4.API链接



#### 5.开发注意事项

禁言某个人参考 CCAtlasClient 如下方法

```java
public boolean gagOne(boolean flag, String userId)
```

获取聊天历史数据参考CCAtlasClient 如下方法

```java
public void getChatHistory(final CCAtlasCallBack<ChatMsgHistory> callBack)
```

#### 6.FAQ



### 五.人员列表

#### 1.功能描述

​	这里主要说明人员列表的获取及人员状态的说明；

#### 2.时序图

​	无

#### 3.实现方法

##### 3.1、人员列表获取

```java
ArrayList<CCUser> users = CCAtlasClient.getInstance().getUserList()
```
##### 3.2、人员信息
```
CCUser  中的主要字段
```
```java

		/**
     * 用户id
     */
    private String mUserId;
    /**
     * 用户名
     */
    private String mUserName;
    /**
     * 用户ip
     */
    private String mUserIp;
    /**
     * 用户角色 
     * 老师 PRESENTER = 0;学生 TALKER = 1;旁听 AUDITOR = 2;
     * 隐身者 INSPECTOR = 3; 助教 ASSISTANT = 4;
     */
    private int mUserRole;
    /**
     * 可以为空 用户头像地址
     */
    private String mUserAvatar;

    /**
     * 用户流 id
     */
    private String mStreamId;
    
   	/**
     * 推流开始时间
     */
    private String mPublishTime;
		/**
     * 用户请求连麦时间
     */
    private String mRequestTime;
		/**
     * 用户join时间
     */
    private String joinTime;
		/**
     * 用户当前连麦状态
     */
    private int mLianmaiStatus;
		/**
     * 是否锁定
     */
    private boolean isLock = false;
    /**
     * 是否举手
     */
    private boolean isHandup = false;
    /**
     * 举手时间
     */
    private long handUpTime = 0;
    /**
     * 用户自定义字段
     */
    private int  custom = 0;

		/**
     *  用户音视频、授权、禁言等
     */
    private UserSetting mUserSetting;

```
```
UserSetting 相关字段
```

```java
/**
 * 是否禁言
 */
private boolean isAllowChat = true;
/**
 * 视频是否开启
 */
private volatile boolean isAllowVideo = true;
/**
 * 音频是否开启
 */
private boolean isAllowAudio = true;
/**
 * 是否授权了标注
 */
private boolean isAllowDraw = false;

/**
 * 自动连麦模式 是否举手
 */
private boolean isHandUp = false; 
/**
 * 是否设置为讲师
 */
private boolean isAllSetupTeacher = false;
```

#### 4.API链接

​	无

#### 5.开发注意事项

​	参考快速接入文档

#### 6.FAQ




```

```

