如下是一个总体接入流程,详细细节请参见 RTC服务开通指南。
/** * 初始化并加入房间 * @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; } }
-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 |
---|---|
创建 ByteRTCVideo 实例 | createRTCVideo |
设置视频发布参数 | SetVideoEncoderConfig |
开启本地音频采集 | startAudioCapture |
开启本地视频采集 | startVideoCapture |
设置本地视频渲染 | setLocalVideoCanvas |
加入 RTC 房间 | joinRoom |
设置视频渲染视图 | setRemoteVideoCanvas |
离开房间 | leaveRoom |
关闭内部音频采集 | stopAudioCapture |
关闭内部视频采集 | stopVideoCapture |
销毁引擎实例对象 | destroy |
发布本地通过摄像头/麦克风采集的媒体流 | publishStream |
取消发布本地通过摄像头/麦克风采集的媒体流 | unpublishStream |
设置音频播放设备为扬声器或者听筒 | setAudioRoute |
开启音量提示 | enableAudioPropertiesReport |
开启镜像 | setLocalVideoMirrorType |
设置音质档位 | setAudioProfile |
切换视前置/后置摄像头 | switchCamera |
功能点 | 回调 |
---|---|
本地进房成功回调 | onRoomStateChanged |
远端可见用户加入房间 | onUserJoined |