控制通话与媒体设备
挂载会议画面
挂载的是 SDK 托管的整场会议画面,不是单个成员的视频轨道。容器可以在媒体入会前传入,SDK 会在画面准备好后自动挂载。
objc
[session attachRenderViewToContainer:self.callContainer
succ:nil
fail:nil];swift
session.attachRenderView(to: callContainer, succ: nil, fail: nil)页面退出时调用:
objc
[session detachRenderView];设备控制
objc
[session setMicrophoneMuted:YES succ:nil fail:nil];
[session setCameraEnabled:NO succ:nil fail:nil];
[session switchCameraWithSucc:nil fail:nil];
[session setAudioOutput:BIMCallAudioOutputSpeaker succ:nil fail:nil];
[session setScreenSharing:YES succ:nil fail:nil];swift
session.setMicrophoneMuted(true, succ: nil, fail: nil)
session.setCameraEnabled(false, succ: nil, fail: nil)
session.switchCamera(succ: nil, fail: nil)
session.setAudioOutput(.speaker, succ: nil, fail: nil)
session.setScreenSharing(true, succ: nil, fail: nil)麦克风、摄像头开关和音频输出可以在连接阶段预设;切换前后摄像头与屏幕共享仅在 Connected 状态可用。请优先根据 snapshot.availableActions 控制按钮状态。
每个控制接口都可能因设备、权限或当前状态失败。不要在成功回调前直接修改最终 UI;以随后收到的 snapshot.localMediaState 为准。
邀请成员与挂断
objc
[session inviteUserIDs:@[@"user03"] succ:nil fail:nil];
[session hangupWithSucc:nil fail:nil];单聊不支持继续邀请。OutgoingRinging 状态调用挂断会映射为取消呼叫,接通后则映射为离开通话。
群聊或临时多人通话可以重新邀请 Rejected、Busy 或 Left 成员。是否显示邀请按钮以 BIMCallAvailableActionInviteParticipant 为准。
转移组织者
当前用户是已加入的组织者、目标成员已经加入且 Snapshot 包含 BIMCallAvailableActionTransferOrganizer 时,可以转移组织者:
objc
[session transferOrganizerToUserID:@"user03"
succ:^{
} fail:^(int code, NSString *desc) {
NSLog(@"transfer failed: %d %@", code, desc);
}];操作成功后,以最新 snapshot.organizerUserID 和每个 participant 的 role 更新 UI,不要缓存初始发起者作为永久组织者。
页面退出
页面临时被覆盖或进入后台时可以只卸载画面,Session 和媒体连接继续由 SDK 维护:
objc
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[self.callSession detachRenderView];
}只有用户主动结束时调用 hangupWithSucc:fail:。不要通过释放 Session 或移除监听来代替挂断。
