Skip to content
v1
文档/iOS SDK/开发指南

控制通话与媒体设备

挂载会议画面

挂载的是 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 状态调用挂断会映射为取消呼叫,接通后则映射为离开通话。

群聊或临时多人通话可以重新邀请 RejectedBusyLeft 成员。是否显示邀请按钮以 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 或移除监听来代替挂断。