public int creteAndJoinRTCRoom(String token, String userId, String roomID, boolean autoPublish) {
mRTCRoom = mRTCVideo.createRTCRoom(roomID);
if (mRoomEventHandler != null) {
mRTCRoom.setRTCRoomEventHandler(mRoomEventHandler);
RTCRoomConfig roomConfig = new RTCRoomConfig(ChannelProfile.CHANNEL_PROFILE_COMMUNICATION, autoPublish, true, true);
return mRTCRoom.joinRoom(token, new UserInfo(userId, null), roomConfig);
public void onUserJoined(UserInfo userInfo, int elapsed) {
Runnable runnable = () -> {
setRemoteVideoCanvas(userInfo.getUid(), mLocalVideoView);
AppExecutors.execRunnableInMainThread(runnable);
public void switchCamera() {
if (mRTCVideo == null) {
CameraId targetId = mCameraId == CameraId.CAMERA_ID_FRONT
? CameraId.CAMERA_ID_BACK
: CameraId.CAMERA_ID_FRONT;
mRTCVideo.setLocalVideoMirrorType(
cameraId == CameraId.CAMERA_ID_FRONT
? MirrorType.MIRROR_TYPE_RENDER_AND_ENCODER
: MirrorType.MIRROR_TYPE_NONE);
mRTCVideo.switchCamera(targetId);
public void setRemoteVideoCanvas(String remoteUserId, TextureView view) {
if (mRTCVideo == null || TextUtils.isEmpty(remoteUserId)) {
VideoCanvas canvas = new VideoCanvas(view, VideoCanvas.RENDER_MODE_HIDDEN);
mRTCVideo.setRemoteVideoCanvas(new RemoteStreamKey(mRoomId, remoteUserId, StreamIndex.STREAM_INDEX_MAIN), canvas);