SDK集成

如下是一个总体接入流程,详细细节请参见 RTC服务开通指南。

alt

整体实现流程
整体业务流程图

alt

核心功能实现
进入退出房间
时序图

alt

示例代码
/**
  * 初始化并加入房间
  *  @param appId 应用申请的appId
  *  @param roomId 要加入的RTC房间
  *  @param userId 用户的UserId
  *  @param userName 用户的UserName
  *  @param token 要加入RTC房间对应的Token
  */
public void initAndJoinRoom(String appId, String roomId, String userId, String userName,
                            String token) {
    // 创建RTC引擎对象
    mRTCVideo = RTCVideo.createRTCVideo(Utilities.getApplicationContext(), appId,
            mIRTCEngineEventHandler, null, null);
    // 创建RTC Room对象
    mRTCRoom = mRTCVideo.createRTCRoom(roomId);
    mRTCRoom.setRTCRoomEventHandler(mRTCRoomEventHandler);
    // 开启音频采集
    mRTCVideo.startAudioCapture();
    // 根据设置开启/关闭视频采集
    if (mIsCameraOn) {
        mRTCVideo.startVideoCapture();
    } else {
        mRTCVideo.stopVideoCapture();
    }
    // 根据设置开启/关闭音频推送
    if (mIsAudioMute) {
        mRTCRoom.unpublishStream(MediaStreamType.RTC_MEDIA_STREAM_TYPE_AUDIO);
    } else {
        mRTCRoom.publishStream(MediaStreamType.RTC_MEDIA_STREAM_TYPE_AUDIO);
    }
    // 根据设置选择音频路由模式,扬声器/听筒
    mRTCVideo.setAudioRoute(mIsSpeakerphone
            ? AudioRoute.AUDIO_ROUTE_SPEAKERPHONE
            : AudioRoute.AUDIO_ROUTE_EARPIECE);
    // 启用音频信息提示,回调周期 1000ms
    mRTCVideo.enableAudioPropertiesReport(
            new AudioPropertiesConfig(
                    1000,
                    true,
                    false));
    // 加入RTC房间,开启自动发布和订阅
    RTCRoomConfig roomConfig = new RTCRoomConfig(ChannelProfile.CHANNEL_PROFILE_COMMUNICATION,
            true, true, true);
    mRTCRoom.joinRoom(token, userIdNameToUserInfo(userId, userName), roomConfig);
}

/**
  * 组装RTC的userInfo
  * 用户昵称使用json格式记录在extraInfo里面,其他用户可以在 onUserJoined 回调中解析出来
  *  
  *  @param userId   用户id
  *  @param userName 用户昵称
  *  @return userinfo
  */
private UserInfo userIdNameToUserInfo(String userId, String userName) {
    VideoCallUserInfo userInfo = new VideoCallUserInfo();
    userInfo.userId = userId;
    userInfo.userName = userName;
    String extra = GsonUtils.gson().toJson(userInfo);
    return new UserInfo(userId, extra);
}

/**
  * 用户数据模型
  */
public class VideoCallUserInfo {

    // 用户昵称
    @SerializedName("user_name")
    public String userName;
    // 用户id
    @SerializedName("user_id")
    public String userId;
    
    ......
}
java
public void leaveRoom()  {
    if  (mRTCVideo !=  null) {
        // 停止音频采集
                mRTCVideo.stopAudioCapture();
        }
    if  (mRTCRoom !=  null) {
    //离开频道
                mRTCRoom.leaveRoom();
                mRTCRoom.destroy();
                mRTCRoom =  null;
        }

}
java
断线重连
时序图

alt

示例代码
/**
  * 房间状态改变回调,加入房间、离开房间、发生房间相关的警告或错误时会收到此回调。
  *  @param  roomId 房间id
  *  @param  uid 用户id
  *  @param  state 房间状态码
  *  @param  extraInfo 额外信息
  */
@Override
public void onRoomStateChanged(String roomId, String uid,  int  state, String extraInfo)  {
    super.onRoomStateChanged(roomId, uid, state, extraInfo);
    int joinType =  getJoinType(extraInfo);
    if  (joinType ==  1  && state ==  0) {
                SolutionDemoEventManager.post(new NetworkTypeChangedEvent(true));
        }

}

/**
  * 获取加入房间类型
  *  @param extraInfo 额外信息
  *  @return 加入房间类型
  */
private int getJoinType(String extraInfo)  {
    int joinType =  -1;
    try  {
        // joinType表示加入房间的类型,0为首次进房,1为重连进房。
        JSONObject json = new JSONObject(extraInfo);
                joinType = json.getInt("join_type");
        }  catch  (Exception e) {
                e.printStackTrace();
        }
    return  joinType;
}
java
屏幕共享

屏幕共享参看Android 端屏幕共享

核心功能 API 与回调参考
API
功能点API
创建 ByteRTCVideo 实例createRTCVideo
设置视频发布参数SetVideoEncoderConfig
开启本地音频采集startAudioCapture
开启本地视频采集startVideoCapture
设置本地视频渲染setLocalVideoCanvas
加入 RTC 房间joinRoom
设置视频渲染视图setRemoteVideoCanvas
离开房间leaveRoom
关闭内部音频采集stopAudioCapture
关闭内部视频采集stopVideoCapture
销毁引擎实例对象destroy
发布本地通过摄像头/麦克风采集的媒体流publishStream
取消发布本地通过摄像头/麦克风采集的媒体流unpublishStream
设置音频播放设备为扬声器或者听筒setAudioRoute
开启音量提示enableAudioPropertiesReport
开启镜像setLocalVideoMirrorType
设置音质档位setAudioProfile
切换视前置/后置摄像头switchCamera
回调
功能点回调
本地进房成功回调onRoomStateChanged
远端可见用户加入房间onUserJoined