tencent cloud

文档反馈

最后更新时间:2024-12-03 17:51:36

    功能介绍

    麦位管理是一种实时互动交流方式,主播可以麦位上的观众进行实时互动,无论是解答问题、分享经验还是进行娱乐互动,都能极大地提升观众的参与感满意度。这种直接的互动和交流为商业化运营提供了更加便捷和高效的渠道,使用此功能,可以实现申请上麦,邀请上麦,移动麦位,踢人下麦,锁定麦位能功能,极大的丰富了语音聊天室的可玩性。
    麦位列表
    观众申请上麦
    主播处理上麦
    
    
    
    
    
    
    
    
    

    接入流程

    观众申请上麦流程

    TUILiveKit 观众申请上麦功能 主要是通过 SeatGridView 实现,您可以调用如下 API 函数,实现观众申请上麦功能。以观众 B 申请上麦为例实现如下。

    观众发送申请上麦请求

    观众 B 给主播 A 发送申请上麦请求,主播 A 会在 onSeatRequestReceived 回调中收到观众 B 的上麦请求。
    Kotlin
    Java
    val seatIndex = 1;
    val timeout = 60;
    seatGridView.takeSeat(seatIndex, timeout, object : VoiceRoomDefine.RequestCallback {
    override fun onAccepted(userInfo: TUIRoomDefine.UserInfo) {
    Log.i(TAG, "申请上麦被同意")
    }
    
    override fun onRejected(userInfo: TUIRoomDefine.UserInfo) {
    Log.i(TAG, "申请上麦被拒绝")
    }
    
    override fun onCancelled(userInfo: TUIRoomDefine.UserInfo) {
    Log.i(TAG, "申请上麦被取消")
    }
    
    override fun onTimeout(userInfo: TUIRoomDefine.UserInfo) {
    Log.i(TAG, "申请上麦超时")
    }
    
    override fun onError(userInfo: TUIRoomDefine.UserInfo, error: TUICommonDefine.Error, message: String) {
    Log.i(TAG, "申请上麦错误")
    }
    })
    int seatIndex = 1;
    int timeout = 60;
    seatGridView.takeSeat(seatIndex, timeout, new VoiceRoomDefine.RequestCallback() {
    @Override
    public void onAccepted(TUIRoomDefine.UserInfo userInfo) {
    Log.i(TAG, "申请上麦被同意");
    }
    
    @Override
    public void onRejected(TUIRoomDefine.UserInfo userInfo) {
    Log.i(TAG, "申请上麦被拒绝");
    }
    
    @Override
    public void onCancelled(TUIRoomDefine.UserInfo userInfo) {
    Log.i(TAG, "申请上麦被取消");
    }
    
    @Override
    public void onTimeout(TUIRoomDefine.UserInfo userInfo) {
    Log.i(TAG, "申请上麦超时");
    }
    
    @Override
    public void onError(TUIRoomDefine.UserInfo userInfo, TUICommonDefine.Error error, String message) {
    Log.i(TAG, "申请上麦错误");
    }
    });
    TUILiveKit 观众申请上麦功能 主要是通过 SeatGridView 实现,您可以调用如下 API 函数,实现观众申请上麦功能。以观众 B 申请上麦为例实现如下。
    注意:
    只有当房间模式是 APPLY_TO_TAKE (申请上麦),房主才会收到上麦请求,FREE_TO_TAKE (自由上麦) 模式下,takeSeat会直接上麦成功。

    主播端收到申请上麦请求

    主播 A 会在 onSeatRequestReceived 回调方法中收到 观众B 的上麦请求。
    Kotlin
    Java
    override fun onSeatRequestReceived(type: VoiceRoomDefine.RequestType, userInfo: TUIRoomDefine.UserInfo) {
    if (type == VoiceRoomDefine.RequestType.APPLY_TO_TAKE_SEAT) {
    Log.i(TAG, "收到观众申请上麦请求:${userInfo.userId}")
    }
    }
    @Override
    public void onSeatRequestReceived(VoiceRoomDefine.RequestType type, TUIRoomDefine.UserInfo userInfo) {
    if (type == VoiceRoomDefine.RequestType.APPLY_TO_TAKE_SEAT) {
    Log.i(TAG, "收到观众上麦请求:" + userInfo.userId);
    }
    }
    注意:
    只有当房间模式是 APPLY_TO_TAKE (申请上麦),房主才会收到上麦请求,FREE_TO_TAKE (自由上麦) 模式下,takeSeat会直接上麦成功。

    主播响应上麦请求

    主播 A 收到观众的上麦请求后,可以调用 responseRemoteRequest 响应观众 B 是否同意上麦, 观众B会收到主播A同意和拒绝(onAccepted/onRejected)的回调。
    Kotlin
    Java
    // 主播同意观众上麦
    seatGridView.responseRemoteRequest(userId, true, null);
    
    // 主播拒绝观众上麦
    seatGridView.responseRemoteRequest(userId, false, null);
    // 主播同意观众上麦
    seatGridView.responseRemoteRequest(userId, true, null);
    
    // 主播拒绝观众上麦
    seatGridView.responseRemoteRequest(userId, false, null);

    麦位信息发生变化的回调

    如果您已经设置过 自定义麦位视图, 可以监听updateSeatView回调来刷新自己的自定义UI。
    Kotlin
    Java
    override fun updateSeatView(seatGridView: SeatGridView, seatInfo: TUIRoomDefine.SeatInfo, seatView: View) {
    Log.i(TAG, "麦位信息发生变化");
    }
    @Override
    public void void updateSeatView(SeatGridView seatGridView, TUIRoomDefine.SeatInfo seatInfo, View seatView) {
    Log.i(TAG, "麦位信息发生变化");
    }

    主播邀请观众上麦流程

    主播发送邀请上麦请求

    主播 A 给观众 C 发送邀请上麦请求,观众 C 会在 onSeatRequestReceived 回调中收到主播 A 的邀请上麦请求。
    Kotlin
    Java
    val seatIndex = 1;
    val userId = "userIdC";
    val timeout = 60;
    seatGridView.takeUserOnSeatByAdmin(seatIndex, timeout, userId, object : VoiceRoomDefine.RequestCallback {
    override fun onAccepted(userInfo: TUIRoomDefine.UserInfo) {
    Log.i(TAG, "邀请上麦被同意")
    }
    
    override fun onRejected(userInfo: TUIRoomDefine.UserInfo) {
    Log.i(TAG, "邀请上麦被拒绝")
    }
    
    override fun onCancelled(userInfo: TUIRoomDefine.UserInfo) {
    Log.i(TAG, "邀请上麦被取消")
    }
    
    override fun onTimeout(userInfo: TUIRoomDefine.UserInfo) {
    Log.i(TAG, "邀请上麦超时")
    }
    
    override fun onError(userInfo: TUIRoomDefine.UserInfo, error: TUICommonDefine.Error, message: String) {
    Log.i(TAG, "邀请上麦错误")
    }
    })
    val seatIndex = 1;
    val userId = "userIdC";
    val timeout = 60;
    seatGridView.takeUserOnSeatByAdmin(seatIndex, userId, timeout, new VoiceRoomDefine.RequestCallback() {
    @Override
    public void onAccepted(TUIRoomDefine.UserInfo userInfo) {
    Log.i(TAG, "邀请上麦被同意");
    }
    
    @Override
    public void onRejected(TUIRoomDefine.UserInfo userInfo) {
    Log.i(TAG, "邀请上麦被拒绝");
    }
    
    @Override
    public void onCancelled(TUIRoomDefine.UserInfo userInfo) {
    Log.i(TAG, "邀请上麦被取消");
    }
    
    @Override
    public void onTimeout(TUIRoomDefine.UserInfo userInfo) {
    Log.i(TAG, "邀请上麦超时");
    }
    
    @Override
    public void onError(TUIRoomDefine.UserInfo userInfo, TUICommonDefine.Error error, String message) {
    Log.i(TAG, "邀请上麦错误");
    }
    });

    观众端收到邀请上麦请求

    观众 C 会在 onSeatRequestReceived 回调方法中收到 主播A 的邀请上麦请求。
    Kotlin
    Java
    override fun onSeatRequestReceived(type: VoiceRoomDefine.RequestType, userInfo: TUIRoomDefine.UserInfo) {
    if (type == VoiceRoomDefine.RequestType.INVITE_TO_TAKE_SEAT) {
    Log.i(TAG, "收到主播邀请上麦请求:${userInfo.userId}")
    }
    }
    @Override
    public void onSeatRequestReceived(VoiceRoomDefine.RequestType type, TUIRoomDefine.UserInfo userInfo) {
    if (type == VoiceRoomDefine.RequestType.INVITE_TO_TAKE_SEAT) {
    Log.i(TAG, "收到主播邀请上麦请求:" + userInfo.userId);
    }
    }

    观众响应邀请上麦请求

    观众 C 收到观众的上麦请求后,可以调用 responseRemoteRequest 响应主播 A 是否同意上麦, 主播 A 会收到观众 C 同意和拒绝(onAccepted/onRejected)的回调。
    Kotlin
    Java
    // 观众同意主播邀请
    seatGridView.responseRemoteRequest("", true, null);
    
    // 观众拒绝主播邀请
    seatGridView.responseRemoteRequest("", false, null);
    // 观众同意主播邀请
    seatGridView.responseRemoteRequest("", true, null);
    
    // 观众拒绝主播邀请
    seatGridView.responseRemoteRequest("", false, null);
    说明:
    如果自定义麦位视图,主播和观众都可以通过监听 麦位信息发生变化的回调 刷新麦位UI。

    下麦流程

    观众上麦成功后,主动下麦

    观众 B 上麦成功后,观众 B 主动下麦可以调用 leaveSeat。
    Kotlin
    Java
    seatGridView.leaveSeat()
    seatGridView.leaveSeat();

    观众上麦成功后,主播踢观众下麦

    观众 B 上麦成功后,主播 A 踢观众 B 下麦。
    Kotlin
    Java
    val userId = "userIdB"
    seatGridView.kickUserOffSeatByAdmin(userId, null)
    String userId = "userIdB";
    seatGridView.kickUserOffSeatByAdmin(userId, null);

    观众收到被主播踢下麦的回调

    主播 A 踢观众 B 下麦后,观众 B 会收到 onKickedOffSeat 回调。
    Kotlin
    Java
    override fun onKickedOffSeat(inviterUser: UserInfo) {
    Log.i(TAG, "主播踢下麦")
    }
    @Override
    public void onKickedOffSeat(TUIRoomDefine.UserInfo userInfo) {
    Log.i(TAG, "主播踢下麦");
    }
    说明:
    如果自定义麦位视图,主播和观众都可以通过监听 麦位信息发生变化的回调 刷新麦位UI。

    锁麦流程

    位置锁定

    主播可将某个麦位进行锁定,此麦位就会被封禁,此麦位就无法进行上下麦操作。
    Kotlin
    Java
    val index = 1;
    val isLockSeat = true
    val params = TUIRoomDefine.SeatLockParams().apply {
    lockSeat = isLockSeat
    }
    seatGridView.lockSeat(index, params, null)
    int index = 1;
    bool isLockSeat = true;
    TUIRoomDefine.SeatLockParams params = new TUIRoomDefine.SeatLockParams();
    params.lockSeat = isLockSeat;
    seatGridView.lockSeat(index, params, null);

    音频锁定

    主播可将某个麦位进行音频锁定,此麦位上的用户就会被静音。
    Kotlin
    Java
    val index = 1;
    bool isAudioLocked = true;
    val params = TUIRoomDefine.SeatLockParams().apply {
    isAudioLocked = isLockSeat
    }
    seatGridView.lockSeat(index, params, null)
    int index = 1;
    bool isAudioLocked = true;
    TUIRoomDefine.SeatLockParams params = new TUIRoomDefine.SeatLockParams();
    params.lockAudio = seatInfo.isAudioLocked;
    seatGridView.lockSeat(index, params, null);
    说明:
    如果自定义麦位视图,主播和观众都可以通过监听 麦位信息发生变化的回调 刷新麦位UI。

    其它麦位管理功能扩展

    麦位管理功能是基于 SeatGridView 实现,若您需要扩展麦位管理功能,可参见 SeatGridView 文档。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持