- (void)joinRoomWithToken:(NSString *)token roomID:(NSString *)roomID uid:(NSString *)uid complete:(void(^)(BOOL success))complete {
// 设置音频场景为 ByteRTCAudioScenarioHighqualityChat
[self.rtcEngineKit setAudioScenario:ByteRTCAudioScenarioHighqualityChat];
self.joinRoomBlock = complete;
self.rtcRoom = [self.rtcEngineKit createRTCRoom:roomID];
self.rtcRoom.delegate = self;
ByteRTCUserInfo *info = [[ByteRTCUserInfo alloc] init];
ByteRTCRoomConfig *roomConfig = [[ByteRTCRoomConfig alloc] init];
// room profile使用ByteRTCRoomProfileCommunication
roomConfig.profile = ByteRTCRoomProfileCommunication;
roomConfig.isAutoPublish = NO;
roomConfig.isAutoSubscribeAudio = YES;
roomConfig.isAutoSubscribeVideo = YES;
[self.rtcRoom joinRoom:token userInfo:info roomConfig:roomConfig];
#pragma mark - ByteRTCRoomDelegate
- (void)rtcRoom:(ByteRTCRoom *)rtcRoom onRoomStateChanged:(NSString *)roomId withUid:(NSString *)uid state:(NSInteger)state extraInfo:(NSString *)extraInfo {
dispatch_async(dispatch_get_main_queue(), ^{
if (self.joinRoomBlock) {
self.joinRoomBlock(state == 0);
self.joinRoomBlock = nil;
- (void)rtcRoom:(ByteRTCRoom *)rtcRoom onUserJoined:(ByteRTCUserInfo *)userInfo elapsed:(NSInteger)elapsed {
dispatch_async(dispatch_get_main_queue(), ^{
[self setRemoteVideoCanvas:self.remoteView.renderView userID:userInfo.userId];
- (void)setRemoteVideoCanvas:(UIView *)view userID:(NSString *)userID {
ByteRTCRemoteStreamKey *streamKey = [[ByteRTCRemoteStreamKey alloc] init];
streamKey.userId = userID;
streamKey.roomId = [self.rtcRoom getRoomId];
streamKey.streamIndex = ByteRTCStreamIndexMain;
ByteRTCVideoCanvas *canvas = [[ByteRTCVideoCanvas alloc] init];
canvas.renderMode = ByteRTCRenderModeHidden;
[self.rtcEngineKit setRemoteVideoCanvas:streamKey withCanvas:canvas];
- (void)switchToCamera:(ByteRTCCameraID)cameraID {
if (cameraID == ByteRTCCameraIDFront) { // 前置:ByteRTCMirrorTypeRenderAndEncoder
[self.rtcEngineKit setLocalVideoMirrorType:ByteRTCMirrorTypeRenderAndEncoder];
} else { // 后置:ByteRTCMirrorTypeNone
[self.rtcEngineKit setLocalVideoMirrorType:ByteRTCMirrorTypeNone];
[self.rtcEngineKit switchCamera:cameraID];
self.currnetCameraID = cameraID;