Seat Management

本文档主要介绍 SeatGridView 的麦位管理能力。
SeatGridView 支持如下麦位管理能力:

前提条件

在使用 SeatGridView 前,您需要先 集成与登录 SeatGridView ,以便后续功能正常使用。

使用指引

步骤1:将 SeatGridView 添加到视图上

您需要先导入 SeatGridView 模块,然后创建一个 SeatGridView 视图对象,并将其添加到自己的视图上。
iOS
Android
import UIKit
import RTCRoomEngine
import SeatGridView

class SeatManagementController: UIViewController {
private let seatGridView: SeatGridView = {
let view = SeatGridView()
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
seatGridView.addObserver(observer: self)
// 将 seatGridView 添加到视图上,同时设置好布局约束
}
deinit {
seatGridView.removeObserver(observer: self)
}
}
import com.trtc.uikit.livekit.seatGridView.SeatGridView;

public class SeatManagementActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SeatGridView seatGridView = new SeatGridView(this);
addContentView(seatGridView,
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

}
}

步骤2:管理麦位

说明:
使用麦位管理时,您需要确保您已经开播或进入到了直播间。

申请上麦

申请上麦的行为与上麦模式相关。
当直播间的上麦模式为“申请上麦模式(applyToTake)”时,申请上麦需要等待房主同意才可上麦。
当直播间的上麦模式为“自由上麦模式(freeToTake)”时,申请上麦无需等待房主同意,可直接上麦。
当您想要上麦时,调用 takeSeat 接口,传入两个参数: 麦位索引和超时时长。
iOS
Android
let index = 1 // 请将这里替换成您想要申请的麦位号
let timeout = 30 // 请将这里替换成您申请上麦的超时时间,单位秒,如果设置为 0,SDK 不会做超时检测,也不会触发超时回调
self.seatGridView.takeSeat(index: index, timeout: timeout) { userInfo in
// 上麦申请被接受
} onRejected: { userInfo in
// 上麦申请被拒绝
} onCancelled: { userInfo in
// 上麦申请被取消
} onTimeout: { userInfo in
// 上麦申请已超时
} onError: { userInfo, code, message in
// 上麦异常
}
int index = 1; // 请将这里替换成您想要申请的麦位号
int timeout = 30; // 请将这里替换成您申请上麦的超时时间,单位秒,如果设置为 0,SDK 不会做超时检测,也不会触发超时回调
seatGridView.takeSeat(index, timeout, new TUIRoomDefine.RequestCallback() {
@Override
public void onAccepted(String requestId, String userId) {
// 上麦申请被接受
}

@Override
public void onRejected(String requestId, String userId, String message) {
// 上麦申请被拒绝
}

@Override
public void onCancelled(String requestId, String userId) {
// 上麦申请被取消
}

@Override
public void onTimeout(String requestId, String userId) {
// 上麦申请已超时
}

@Override
public void onError(String requestId, String userId, TUICommonDefine.Error error, String message) {
// 上麦异常
}
});
当您是房主时,有人申请上麦时,您会收到 onSeatRequestReceived 回调,您可通过调用 responseRemoteRequest 同意/拒绝对方的上麦申请。
iOS
Android
func onSeatRequestReceived(type: SGRequestType, userInfo: TUIUserInfo) {
if type == .applyToTakeSeat {
let agree = true // true为
self.seatGridView.responseRemoteRequest(userId: userInfo.userId, agree: true) {
// 同意上麦成功
} onError: { code, message in
// 同意上麦失败
}
}
}
void onSeatRequestReceived(VoiceRoomDefine.RequestType type, TUIRoomDefine.UserInfo userInfo) {
if (type == APPLY_TO_TAKE_SEAT) {
boolean agree = true; // true:同意连麦, false:拒绝连麦
seatGridView.seatGridView.responseRemoteRequest(userInfo.userId, agree, new TUIRoomDefine.ActionCallback() {
@Override
public void onSuccess () {
// 同意上麦成功
}

@Override
public void onError (TUICommonDefine.Error error, String message) {
// 同意上麦成功
}
});
}
}

主动下麦

当您在麦上且想主动下麦时,可调用 leaveSeat 接口。
iOS
Android
self.seatGridView.leaveSeat {
// 主动下麦成功
} onError: { code, message in
// 主动下麦失败
}
seatGridView.leaveSeat(new TUIRoomDefine.ActionCallback {
@Override
public void onSuccess () {
// 主动下麦成功
}

@Override
public void onError (TUICommonDefine.Error error, String message) {
// 主动下麦失败
}
});

移动麦位

当您在1号麦并向切换到2号麦时,可调用 moveToSeat 接口,传入需要切换的麦位索引。
iOS
Android
let index = 2
self.seatGridView.moveToSeat(index: destinationIndex) {
// 移动麦位成功
} onError: { code, message in
// 移动麦位失败
}
int index = 2;
seatGridView.moveToSeat(index, new TUIRoomDefine.ActionCallback {
@Override
public void onSuccess () {
//移动麦位成功
}

@Override
public void onError (TUICommonDefine.Error error, String message) {
// 移动麦位失败
}
});

邀请上麦

当您是房主,且想将未在麦位上的人邀请到4号麦位上,可调用 takeUserOnSeatByAdmin 接口,传入三个参数:被邀请上麦的麦位索引、超时时间和被邀请上麦的用户Id。
iOS
Android
let tartgetIndex = 4
let timeout = 30
let targetUserId = "100002" // 请替换成您想要踢下麦的主播的用户Id
self.takeUserOnSeatByAdmin(index: targetIndex, timeout: timeout, userId: targetUserId) {
// 上麦邀请被接受
} onRejected: { userInfo in
// 上麦邀请被拒绝
} onTimeout: { userInfo in
// 上麦邀请超时
} onCancelled: { userInfo in
// 上麦邀请被取消
} onError: { userInfo, code, message in
// 上麦邀请异常
}

int tartgetIndex = 4;
int timeout = 30;
String targetUserId = "100002"; // 请替换成您想要踢下麦的主播的用户Id
seatGridView.takeUserOnSeatByAdmin(targetIndex, timeout, targetUserId, new new TUIRoomDefine.RequestCallback() {
@Override
public void onAccepted(String requestId, String userId) {
// 上麦邀请被接受
}

@Override
public void onRejected(String requestId, String userId, String message) {
// 上麦邀请被拒绝
}

@Override
public void onCancelled(String requestId, String userId) {
// 上麦邀请被取消
}

@Override
public void onTimeout(String requestId, String userId) {
// 上麦邀请已超时
}

@Override
public void onError(String requestId, String userId, TUICommonDefine.Error error, String message) {
// 上麦邀请异常
}
});
当有人邀请您上麦时, 您会收到 onSeatRequestReceived 回调, 您可通过调用 responseRemoteRequest 同意/拒绝对方的上麦邀请。
iOS
Android
func onSeatRequestReceived(type: SGRequestType, userInfo: TUIUserInfo) {
if type == .inviteToTakeSeat {
let isAccepted = true // true表示同意邀请, false表示拒绝邀请
self.seatGridView.responseRemoteRequest(userId: userInfo.userId, agree: isAccepted) {
// 同意上麦邀请成功
} onError: { code, message in
// 同意上麦邀请失败
}
}
}

void onSeatRequestReceived(VoiceRoomDefine.RequestType type, TUIRoomDefine.UserInfo userInfo) {
if (type == INVITE_TO_TAKE_SEAT) {
boolean isAccepted = true; // true表示同意邀请, false表示拒绝邀请
seatGridView.responseRemoteRequest(userInfo.userId, isAccepted, new TUIRoomDefine.ActionCallback {
@Override
public void onSuccess () {
// 同意上麦邀请成功
}

@Override
public void onError (TUICommonDefine.Error error, String message) {
// 同意上麦邀请失败
}
});
}
}

踢人下麦

当您是房主,且想将4号麦位上的主播踢下麦时,可调用 kickUserOffSeatByAdmin 接口,传入想要踢下麦的用户Id。
iOS
Android
let targetUserId = "100002" // 请替换成您想要踢下麦的主播的用户Id
self.seatGridView.kickUserOffSeatByAdmin(userId: targetUserId) {
// 踢人下麦成功
} onError: { code, message in
// 踢人下麦失败
}
String targetUserId = "100002"; // 请替换成您想要踢下麦的主播的用户Id
seatGridView.kickUserOffSeatByAdmin(targetUserId, new TUIRoomDefine.ActionCallback {
@Override
public void onSuccess () {
// 踢人下麦成功
}

@Override
public void onError (TUICommonDefine.Error error, String message) {
// 踢人下麦失败
}
});

锁定麦位

当您是房主,且想将5号空麦位锁定不让其他人上麦,或想将6号麦位上的主播静音时时,可调用 lockSeat 接口,传入两个参数:将要锁定的麦位索引和锁定模式。
锁定模式(TUISeatLockParams)的结构如下:
属性名称
字段含义
补充说明
数据类型
填写示例
lockSeat

锁定麦位

锁定对应麦位则该麦位不允许申请上麦。
布尔值
当锁定麦位时为true
lockVideo
锁定麦位摄像头
锁定对应麦位摄像头则该麦位不再发布视频流。
布尔值
false
lockAudio
锁定麦位麦克风

锁定对应麦位摄像头则该麦位不再发布音频流。


布尔值
当锁定麦位麦克风时为true
iOS
Android
// 锁定麦位
let lockSeatIndex = 5
let lockSeatParam = TUISeatLockParams()
lockSeatParam.lockSeat = true
self.seatGridView.lockSeat(index: lockSeatIndex, lockMode: lockSeatParam) {
// 锁定麦位成功
} onError: { code, message in
// 锁定麦位失败
}

// 锁定麦位麦克风
let lockSeatAudioIndex = 6
let lockSeatAudioParam = TUISeatLockParams()
lockSeatAudioParam.lockAudio = true
self.seatGridView.lockSeat(index: lockSeatAudioIndex, lockMode: lockSeatAudioParam) {
// 锁定麦位麦克风成功
} onError: { code, message in
// 锁定麦位麦克风失败
}
// 锁定麦位
int lockSeatIndex = 5;
TUIRoomDefine.SeatLockParams lockSeatParam = new TUIRoomDefine.SeatLockParams();
lockSeatParam.lockSeat = true;
seatGridView.lockSeat(lockSeatIndex, lockSeatParam, new TUIRoomDefine.ActionCallback() {
@Override
public void onSuccess() {
// 锁定麦位成功
}

@Override
public void onError(TUICommonDefine.Error error, String message) {
// 锁定麦位失败
}
});

// 锁定麦位麦克风
int lockSeatIndex = 6;
TUIRoomDefine.SeatLockParams lockSeatAudioParam = new TUIRoomDefine.SeatLockParams();
lockSeatAudioParam.lockAudio = true;
seatGridView.lockSeat(lockSeatIndex, lockSeatAudioParam, new TUIRoomDefine.ActionCallback() {
@Override
public void onSuccess() {
// 锁定麦位麦克风成功
}

@Override
public void onError(TUICommonDefine.Error error, String message) {
// 锁定麦位麦克风失败
}
});