You need to enable JavaScript to run this app.
导航
场景搭建(Android)
最近更新时间:2023.12.28 20:05:12首次发布时间:2022.11.15 18:43:12

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(applicationContext, 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.setDefaultAudioRoute(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;
}
public void leaveRoom() {
    if (mRTCVideo != null) {
        // 停止音频采集
        mRTCVideo.stopAudioCapture();
    }
    if (mRTCRoom != null) {
        //离开频道
        mRTCRoom.leaveRoom();
        mRTCRoom.destroy();
        mRTCRoom = null;
    }
}

断线重连

时序图

alt

示例代码

  • 短时间断网
    无需处理。RTC SDK 会补发断网期间丢失的消息。
    例如:本地用户网络从 WIFI 切换到 5G,在网络切换中有远端用户加入房间。当本地用户网络切换成功后,就会收到 RTC SDK -onUserJoined 回调。
  • 长时间断网,时序图和关键代码如下:
/**
 * 房间状态改变回调,加入房间、离开房间、发生房间相关的警告或错误时会收到此回调。
 * @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 {
        // 341后 SDK传的固定键 joinType表示加入房间的类型,0为首次进房,1为重连进房。
        JSONObject json = new JSONObject(extraInfo);
        joinType = json.getInt("join_type");
    } catch (Exception e) {
        e.printStackTrace();
    }
    return joinType;
}

屏幕共享

屏幕共享参看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