[TOC]

0. 基础SDK以及音视频

CC视频推拉流以及各个组件都依赖CCAtlasClient这个核心类, 获取核心类的实例:CCAtlasClient mAtlasClient = CCAtlasClient.getInstance();

获取一个context实例:CCInteractSDK.init(this.getApplicationContext(), true);

0.1 获取sessionid

登入房间需要获取sessionid才可以登入房间

public void login(String roomId, String userId, @CCAtlasClient.Role int role,
                      String username, String password,final CCAtlasCallBack<String> callBack) {

object 参数说明:

参数名称 参数类型 说明 是否必须
roomId String 房间ID 必选
userId String 用户ID 必选
role int 用户角色 必选
username String 用户名 必选
password String 用户密码 必选
callBack CCAtlasCallBack 回调 必选

0.1 获取sessionid

登入房间需要获取sessionid才可以登入房间

public void login(String roomId, String userId, @CCAtlasClient.Role int role,
                      String username, String password,final CCAtlasCallBack<String> callBack) {

object 参数说明:

参数名称 参数类型 说明 是否必须
roomId String 房间ID 必选
userId String 用户ID 必选
role int 用户角色 必选
username String 用户名 必选
password String 用户密码 必选
callBack CCAtlasCallBack 回调 必选

0.1.1 登录成功

join登录成功以后,给客户返回配置信息data

public void join(String sessionId, String userAcount, String areaCode, final CCAtlasCallBack<CCInteractBean> callBack) {

object 参数说明:

参数名称 参数类型 说明 是否必须
sessionId String sessionid 必选
userAcount String 用户ID 必选
areaCode String 节点区域,可以传null 可选
callBack CCAtlasCallBack 回调 必选

返回 CCInteractBean部分数据格式如下

{

     result:"OK",
     data:{

            "desc": "9DC1A878A164F696",   //房间描述

            "talker_bitrate": 200,      //学生推流码率

            "publisher_bitrate": 200,    //老师推流码率

           "live": {
                  "id": 1231,   // 直播id
                  "status": 0,   // 1为开始
                  "last": "2000" // 如果status为1,则last为直播持续时长,单位毫秒
                "startTime":"1503908480000"  //直播开始时间戳
            }

            "max_streams": 6,   //允许最大视频流数

            "name": "ha",      //用户昵称

            "result": "OK",

            "user": {

                 "id": "6e373a456cd04b45b00f7b97986a45fc",   //用户唯一id

                 "name": "123123123",   //用户name

                 "role": "talker",    //'talker'学生   'presenter'老师

                 "roomid": "EC05E15A770D84AC9C33DC5901307461", // 房间id

            },

            "video_mode": 1,   // 视频模式1为音视频模式  , 2为仅音频模式

            "is_follow": '',  // 默认为空,如果是跟随模式,则为流id

            "max_users": 1, // 最大支持连麦人数

            "allow_chat": true  // 是否允许发言,默认为True, 房间级配置

            "allow_audio": true   // 是否允许麦克风 默认为True, 房间级配置

            "allow_speak": true  // 是否允许上麦,默认为True 房间级配置

            "rtspurl": "" //第三方推流地址
        }
    }

1. 流相关方法

1.1 本地流相关方法

1.1.1 创建本地流

创建本地流,需要

 public CCStream createLocalStream(@NonNull LocalStreamConfig config) throws StreamException {

参数说明:

参数名称 参数类型 说明 是否必须
config LocalStreamConfig 创建本地流自定义参数 必选

1.1.2 关闭远程流声音

public void pauseAudio(@NonNull CCStream stream, final CCAtlasCallBack<Void> callBack) {

参数说明:

参数名称 参数类型 说明 是否必须
stream CCStream 远程流 必选
success function 成功回调 可选
fail function 失败回调 可选

1.1.3 开启远程流声音

  public void playAudio(@NonNull CCStream stream, final CCAtlasCallBack<Void> callBack) {

参数说明:

参数名称 参数类型 说明 是否必须
stream CCStream 本地流名称 必选
success function 成功回调 可选
fail function 失败回调 可选

1.1.4 关闭本地流视频画面

 public void pauseVideo(@NonNull CCStream stream, final CCAtlasCallBack<Void> callBack) {

参数说明:

参数名称 参数类型 说明 是否必须
stream CCStream 本地流名称 必选
success function 成功回调 可选
fail function 失败回调 可选

1.1.5 开启本地流视频画面

public void playVideo(@NonNull CCStream stream, final CCAtlasCallBack<Void> callBack) {

参数说明:

参数名称 参数类型 说明 是否必须
stream CCStream 本地流名称 必选
success function 成功回调 可选
fail function 失败回调 可选

1.1.6 销毁本地流的资源

public void destoryLocalStream() {

1.1.7 推送本地流

  public synchronized void publish(final CCAtlasCallBack<Void> callBack) {

参数说明:

参数名称 参数类型 说明 是否必须
success function 成功回调(含参数) 可选
fail function 失败回调(含参数) 可选

1.1.8 取消推送本地流

 private synchronized void _publish(final CCAtlasCallBack<Void> callBack) {

参数说明:

参数名称 参数类型 说明 是否必须
success function 成功回调(含参数) 可选
fail function 失败回调(含参数) 可选

1.2 远程流方法

1.2.1 订阅远程流

public synchronized void SubscribeStream(CCStream remoteStream, CCAtlasCallBack<CCStream> callBack)
            throws StreamException {

参数说明:

参数名称 参数类型 说明 是否必须
remoteStream CCStream 要订阅的流对象 必选
success CCStream 成功回调(含参数) 可选
fail function 失败回调(含参数) 可选

1.2.2 取消订阅远程流

 public synchronized void unSubscribeStream(CCStream remoteStream, CCAtlasCallBack<Void>
            callBack) throws StreamException {

参数说明:

参数名称 参数类型 说明 是否必须
unSubStream object 要取消订阅的流对象 必选
success function 成功回调(含参数) 可选
fail function 失败回调(含参数) 可选

1.3 监听流相关事件

事件监听,建议在初始化sdk后做监听

1.3.1 监听流服务事件通知

监听atlas的流服务事件,不使用排麦组件则监听该事件,使用排麦组件监听排麦流服务事件。

首先获取流服务的监听事件:mAtlasClient.setOnNotifyStreamListener(mClientObserver);

使用例子:(demo里有实现的代码逻辑,可供参考)

 private CCAtlasClient.OnNotifyStreamListener mClientObserver = new CCAtlasClient.OnNotifyStreamListener() {

        @Override
        public void onStreamAllowSub(CCStream stream) {
           //这块监听是监听到有流可订阅,逻辑可以根据需要设置。
        }

        @Override
        public void onStreamRemoved(CCStream stream) {
            //这块监听是监听到流移除事件,逻辑可以根据需要设置
        }

        @Override
        public void onStreamError() {
            //这块监听是流错误事件,可以根据自己需要设置
        }
    };

1.4 部分高级功能

1.4.1 推流至cdn平台

直播开启后,讲师端推流成功后,可以调用该方法,将房间内的流推入cdn平台

 public void addExternalOutput(@NonNull String serverUrl, final CCAtlasCallBack<Void> callBack) {

参数说明:

参数名称 参数类型 说明 是否必须
url String 推流地址 可选
success function 成功回调(含参数) 可选
fail function 失败回调(含参数) 可选

1.4.2 取消推流至cdn平台

讲师端调用推流至cdn平台成功后,如果要取消推送,可以调用该方法

 public void removeExternalOutput(@NonNull String serverUrl, final CCAtlasCallBack<Void> callBack) {

参数说明:

参数名称 参数类型 说明 是否必须
url String 推流地址 可选
success function 成功回调(含参数) 可选
fail function 失败回调(含参数) 可选

1.4.3 更新推流平台地址

 public void updateExternalOutput(@NonNull String serverUrl, final CCAtlasCallBack<Void> callBack) {

参数说明:

参数名称 参数类型 说明 是否必须
url String 推流地址 必选
success function 成功回调(含参数) 可选
fail function 失败回调(含参数) 可选

1.4.4 mix 流

此方法只有讲师角色有权限调用,将本地流合并入混流

public void mix(final CCAtlasCallBack<Void> callBack) {

参数说明:

参数名称 参数类型 说明 是否必须
success function 成功回调(含参数) 可选
fail function 失败回调(含参数) 可选

1.4.5 unMix 流

此方法只有讲师角色有权限调用,将已加入混流的流取消混流

public void unmix(final CCAtlasCallBack<Void> callBack) {

参数说明:

参数名称 参数类型 说明 是否必须
success function 成功回调(含参数) 可选
fail function 失败回调(含参数) 可选

1.4.6 设置混流位置

此方法只有讲师角色有权限调用,为已加入混流的流设置显示区域

public void setRegion(@NonNull CCStream stream, final CCAtlasCallBack<Void> callBack) {

参数说明:

参数名称 参数类型 说明 是否必须
stream stream 设置混流参数 必选
success function 成功回调(含参数) 可选
fail function 失败回调(含参数) 可选

1.4.7 获取混流位置

此方法只有讲师角色有权限调用,获取已加入混流的流的显示区域

 public void getRegion(@NonNull CCStream stream, final CCAtlasCallBack<String> callBack) {

参数说明:

参数名称 参数类型 说明 是否必须
stream stream 获取混流位置参数 必选
success function 成功回调(含参数) 可选
fail function 失败回调(含参数) 可选

1.4.8 获取单条流状态

此方法用于获取已经订阅到或已经推出去的流对象的音视频状态

 public void getConnectionStats(@NonNull CCStream stream, final CCAtlasCallBack<ConnectionStatsWrapper> callBack) {

参数说明:

参数名称 参数类型 说明 是否必须
stream stream 已经订阅到或已经推出去的流对象 必选
success function 成功回调(含参数) 可选
fail function 失败回调(含参数) 可选

1.4.9 获取城市节点列表

此方法主要是获取到城市节点的列表

 public void dispatch(String userid,final CCAtlasCallBack<CCCityBean> callBack){

参数说明:

参数名称 参数类型 说明 是否必须
userid String 账户ID 必选
callBack CCAtlasCallBack 回调 可选

2. 公有的SDK接口

2.1 主动调用事件

2.1.1 开启直播

直播开启接口由老师角色去控制

 public void startLive(final CCAtlasCallBack<Void> callBack) {

参数说明:

参数名称 参数类型 说明 是否必须
success function 成功回调(含参数) 可选
fail function 失败回调(含参数) 可选

2.1.2 关闭直播

直播关闭接口由老师角色去控制

public void stopLive(final CCAtlasCallBack<Void> callBack)

参数说明:

参数名称 参数类型 说明 是否必须
success function 成功回调 可选
fail function 失败回调(含参数) 可选

2.1.3 判断直播是否开启

老师端是否开启了直播,返回true开始直播,false结束直播

 public boolean isRoomLive() {

2.1.4 获取本地流ID

 public String getLocalStreamId() {

2.1.4 获取直播间用户列表

  public @Nullable ArrayList<CCUser> getUserList() {

2.1.5 资源释放接口,退出房间,需要释放资源

   public void disconnectSocket() {

2.2 被动监听事件

事件监听,建议在初始化sdk后做监听

2.2.1 监听开启/结束直播事件通知

当老师角色调用开启/结束直播接口后,房间内所有人都会监听到该事件

首先获取开启/结束直播监听事件: mAtlasClient.setOnClassStatusListener(mClassStatusListener);

使用例子:(demo里有实现的代码逻辑,可供参考)

 private CCAtlasClient.OnClassStatusListener mClassStatusListener = new CCAtlasClient.OnClassStatusListener() {

        @Override
        public void onStart() {

        }

        @Override
        public void onStop() {

        }
    };

2.2.2 用户加入房间、退出房间通知

人员加入房间/退出房间通知事件

首先获取加入/退出房间监听事件:ccAtlasClient.setOnUserRoomStatus(mUpdateUserList);

使用例子:(demo里有实现的代码逻辑,可供参考)

 //人员加入房间/退出房间通知事件
    private CCAtlasClient.OnUserRoomStatus mUpdateUserList = new CCAtlasClient.OnUserRoomStatus() {
        @Override
        public void OnExitRoomUser(CCUserRoomStatus ccUserRoomStatus) {
            message(ccUserRoomStatus.getUserName() + "退出房间");
        }

        @Override
        public void OnJoinRoomUser(CCUserRoomStatus ccUserRoomStatus) {
            message(ccUserRoomStatus.getUserName() + "加入房间");
        }
    };

2.2.3 学员举手通知

人员在举手连麦模式下,举手通知事件

首先获取举手通知事件:ccAtlasClient.setOnUserHand(mUserHand);

使用例子:(demo里有实现的代码逻辑,可供参考)

//人员在举手连麦模式下,举手通知事件
    private CCAtlasClient.OnUserHand mUserHand = new CCAtlasClient.OnUserHand() {
        @Override
        public void UserHand(CCUser user) {
            message(user.getUserName() + "举手了");
        }
    };

2.2.4 用户自定义pusher 事件

首先设置自己的pusher事件:

 JSONObject data = new JSONObject();
        try {
            data.put("action","nihao");
            //用户自己定义socket事件
            ccAtlasClient.sendPublishMessage(data);
        } catch (JSONException e) {
            e.printStackTrace();
        }

监听自己的pusher事件:ccAtlasClient.setOnPublishMessageListener(mPublishMessage);

使用例子:(demo里有实现的代码逻辑,可供参考)

//用户监听自己设置的socket事件
    private CCAtlasClient.OnPublishMessageListener mPublishMessage = new CCAtlasClient.OnPublishMessageListener() {
        @Override
        public void onPublishMessage(JSONObject object) {
            try {
                message(object.getString("action"));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    };

3、音视频属性流程

1、视频

1.1 开启或者关闭指定用户id的学生视频,该接口是老师端操作

public boolean toggleVideo(boolean flag, @NonNull String userId)
参数 参数说明
flag true:开始视频,false;关闭视频
userId 指定的用户id

1.2 开启视频

开启自己的视频,是否需要通知别人

public void enableVideo(boolean isDoBroadcast)
参数 参数说明
isDoBroadcast 是否通知其他用户

1.3 关闭视频

关闭自己的视频,是否需要通知别人

public void disableVideo(boolean isDoBroadcast)
参数 参数说明
isDoBroadcast 是否通知其他用户

2、音频

2.1 开启或者关闭指定用户id的学生音频,该接口是老师端操作

public boolean toggleAudio(boolean flag, @NonNull String userId)
参数 参数说明
flag true:开始音频,false;关闭音频
userId 指定的用户id

2.2 开启音频

开启自己音频,是否需要通知别人

public void enableAudio(boolean isDoBroadcast)
参数 参数说明
isDoBroadcast 是否通知其他用户

2.3 关闭音频

关闭自己视频,是否需要通知别人

public void disableAudio(boolean isDoBroadcast)
参数 参数说明
isDoBroadcast 是否通知其他用户

3、音视频更新通知,回调给应用层

3.1 学生多媒体状态被动变化回调

需要去设置监听多媒体事件

public void setOnMediaListener(OnMediaListener onMediaListener)

public interface OnMediaListener{
    /**
     * 麦克风更新通知
     *
     * @param userid       当前操作的用户id
     * @param isAllowAudio <ul><li>true开启麦克风</li><li>false关闭麦克风</li></ul>
     * @param isSelf       <ul><li>true是自己</li><li>false不是自己</li></ul>
     */
    void onAudio(String userid, boolean isAllowAudio, boolean isSelf);

    /**
     * 摄像头更新通知
     *
     * @param userid       当前操作的用户id
     * @param isAllowVideo <ul><li>true开启摄像头</li><li>false关闭摄像头</li></ul>
     * @param isSelf       <ul><li>true是自己</li><li>false不是自己</li></ul>
     */
    void onVideo(String userid, boolean isAllowVideo, boolean isSelf);
}

4、插播音视频(自定义控件CCMediaSurfaceView)

4.1使用方法布局文件使用,如下

  <com.bokecc.sskt.base.view.CCMediaSurfaceView
            android:id="@+id/id_ccmediasurface"
            android:layout_width="160dp"
            android:layout_height="90dp"
            android:visibility="visible" />

4.2自定义控件的回调

4.2.1 是不是显示自定义控件

业务需要:视频显示控件、音频隐藏控件,可根据此监听写自己的业务逻辑

public interface OnIsVisiableMadieListener {
        /**
         * @param isShow 是否显示插播音视频
         */
        void isShowMadie(boolean isShow);
    }

4.2.2 获取真实视频的宽高

业务需要:获取真实视频的宽高,进行做视频,防止视频变形;音频的时候宽高都是0

public interface OnVideoWHListener {
        void setVideoWH(int w, int h);
    }

4.2.3 视频加载

业务需要:视频需要有个加载过程

public interface OnProgressShowHide {
        void show();//显示加载动画

        void hide();//隐藏加载动画
    }

4.3视频播放操作方法

如果没有特殊需求,不建议使用,以为只是展示web端的,并且内部都已经实现

getVideoType()//获取视频类型true 视频,false 音频,进入房间的时候时候判断

seekToVideo() //视频跳转

pauseVideo() //视频暂停

results matching ""

    No results matching ""