tencent cloud

文档反馈

主播 PK

最后更新时间:2025-01-09 16:30:31
    本文档主要介绍如何使用 RTC Room Engine SDK 实现 主播 PK 功能。

    前提条件

    在使用 RTC RoomEngine SDK前,您需要先调用 登录 SDK,以便后续功能正常使用。

    使用指引

    说明:
    使用 PK 功能时,请确保您已开播。

    发起 PK 请求

    您首先需要通过 getLiveBattleManager 接口获取 TUILiveBattleManager插件。
    然后再使用 TUILiveBattleManager 插件的 requestBattle 接口实现该功能,传入三个参数:PK 配置信息、邀请 PK 的主播的用户Id和超时时长。
    PK 配置信息是一个 TUIBattleConfig 的结构体,在配置时,您一般只需设置其中的 PK 持续时间 duration 即可。
    以邀请用户Id为 100001 的主播 PK 为例:
    iOS
    Android
    import RTCRoomEngine
    
    let battleManager = TUIRoomEngine.sharedInstance().getLiveBattleManager()
    let config = TUIBattleConfig()
    config.duration = 30 // 请将其替换为您的PK持续时间,单位为秒
    let userIds = ["100001"] // 请将其替换为您想与之PK的主播的用户Id
    let timeout = 30 // 请将这里替换成您申请上麦的超时时间,单位秒,如果设置为 0,SDK 不会做超时检测,也不会触发超时回调
    
    battleManager.requestBattle(config: config,
    userIdList: userIds,
    timeout: TimeInterval(timeout)) { battleInfo, battleResults in
    // 发起 PK 请求成功, battleId:battleInfo.battleId
    } onError: { code, message in
    // 发起 PK 请求失败
    }
    TUILiveBattleManager battleManager = TUIRoomEngine.sharedInstance().getLiveBattleManager();
    TUILiveBattleManager.BattleConfig config = new TUILiveBattleManager.BattleConfig();
    config.duration = 30; // 请将其替换为您的PK持续时间,单位为秒
    List<String> userIds = Collections.singletonList("100001"); // 请将其替换为您想与之PK的主播的用户Id
    int timeout = 30; // 请将这里替换成您申请上麦的超时时间,单位秒,如果设置为 0,SDK 不会做超时检测,也不会触发超时回调
    
    
    battleManager.requestBattle(config, userIds, timeout, new TUILiveBattleManager.BattleRequestCallback() {
    @Override
    public void onSuccess(TUILiveBattleManager.BattleInfo battleInfo, Map<String, TUILiveBattleManager.BattleCode> resultMap) {
    // 发起 PK 请求成功, battleId:battleInfo.battleId
    }
    @Override
    public void onError(TUICommonDefine.Error error, String message) {
    // 发起 PK 请求失败
    }
    });
    若您通过 addObserver 接口成为了 TUILiveBattleManager 插件的观察者,则当有人申请和您连线时,您会收到 onBattleRequestReceived 回调,您可通过 acceptBattle / rejectBattle 接口接受或拒绝该请求。
    iOS
    Android
    func onBattleRequestReceived(battleInfo: TUIBattleInfo,
    inviter: TUIBattleUser,
    invitee: TUIBattleUser) {
    // 接受 PK 请求
    let battleManager = TUIRoomEngine.sharedInstance().getLiveBattleManager()
    battleManager.acceptBattle(battleId: battleInfo.battleId) {
    // 接受 PK 请求成功
    } onError: { code, message in
    // 接受 PK 请求失败
    }
    
    // 拒绝 PK 请求
    battleManager.rejectBattle(battleId: battleInfo.battleId) {
    // 拒绝 PK 请求成功
    } onError: { code, message in
    // 拒绝 PK 请求失败
    }
    }
    public void onBattleRequestReceived(TUILiveBattleManager.BattleInfo battleInfo, TUILiveBattleManager.BattleUser inviter, TUILiveBattleManager.BattleUser invitee) {
    // 接受 PK 请求
    TUILiveBattleManager battleManager = TUIRoomEngine.sharedInstance().getLiveBattleManager();
    battleManager.acceptBattle(battleInfo.battleId, new TUIRoomDefine.ActionCallback() {
    @Override
    public void onSuccess() {
    // 接受 PK 请求成功
    }
    @Override
    public void onError(TUICommonDefine.Error error, String message) {
    // 接受 PK 请求失败
    }
    });
    
    // 拒绝 PK 请求
    battleManager.rejectBattle(battleInfo.battleId, new TUIRoomDefine.ActionCallback() {
    @Override
    public void onSuccess() {
    // 拒绝 PK 请求成功
    }
    
    @Override
    public void onError(TUICommonDefine.Error error, String message) {
    // 拒绝 PK 请求失败
    }
    });
    }

    放弃 PK 请求

    您首先需要通过 getLiveBattleManager 接口获取 TUILiveBattleManager插件。
    然后再使用 TUILiveBattleManager 插件的 cancelBattleRequest 接口实现该功能,传入两个参数:发起 PK 请求成功后battleInfo的battleId 和 放弃 PK 邀请的主播用户 Id。
    以放弃和用户Id为 100001 的主播 PK 请求为例:
    iOS
    Android
    let battleManager = TUIRoomEngine.sharedInstance().getLiveBattleManager()
    let battleId = "" // 请将其替换为您调用requestBattle请求PK成功后battleInfo中的battleId值
    let userIds = ["100001"] // 请将其替换为您邀请PK的主播的用户Id
    battleManager.cancelBattleRequest(battleId: battleId, userIdList: userIds) {
    // 放弃 PK 请求成功
    } onError: { code, message in
    // 放弃 PK 请求失败
    }
    TUILiveBattleManager battleManager = TUIRoomEngine.sharedInstance().getLiveBattleManager();
    String battleId = ""; // 请将其替换为您调用requestBattle请求PK成功后battleInfo中的battleId值
    List<String> userIds = Collections.singletonList("100001"); // 请将其替换为您邀请PK的主播的用户Id
    battleManager.cancelBattleRequest(battleId, userIds, new TUIRoomDefine.ActionCallback() {
    @Override
    public void onSuccess() {
    // 放弃 PK 请求成功
    }
    @Override
    public void onError(TUICommonDefine.Error error, String message) {
    // 放弃 PK 请求失败
    }
    });

    退出 PK

    您首先需要通过 getLiveBattleManager 接口获取 TUILiveBattleManager插件。
    然后再使用 TUILiveBattleManager 插件的 exitBattle 接口,传入参数:发起 PK 请求成功后battleInfo的battleId ,实现退出当前正在进行的 PK。
    iOS
    Android
    import RTCRoomEngine
    
    let battleManager = TUIRoomEngine.sharedInstance().getLiveBattleManager()
    let battleId = "" // 请将其替换为您调用requestBattle请求PK成功后battleInfo中的battleId值
    battleManager.exitBattle(battleId: battleId) {
    // 退出 PK 成功
    } onError: { code, message in
    // 退出 PK 失败
    }
    TUILiveBattleManager battleManager = TUIRoomEngine.sharedInstance().getLiveBattleManager();
    String battleId = ""; // 请将其替换为您调用requestBattle请求PK成功后battleInfo中的battleId值
    battleManager.exitBattle(battleId, new TUIRoomDefine.ActionCallback() {
    @Override
    public void onSuccess() {
    // 退出 PK 成功
    }
    @Override
    public void onError(TUICommonDefine.Error error, String message) {
    // 退出 PK 失败
    }
    });

    监听回调

    iOS
    Android
    您可通过调用 addObserver 成为 TUILiveBattleManager 的观察者,监听 PK 相关的回调。
    AnchorBattleController 成为观察者为例:
    import RTCRoomEngine
    
    class AnchorBattleController: NSObject, TUILiveBattleObserver {
    override init() {
    super.init()
    TUIRoomEngine.sharedInstance().getLiveBattleManager().addObserver(self)
    }
    deinit {
    TUIRoomEngine.sharedInstance().getLiveBattleManager().removeObserver(self)
    }
    // PK 开始时触发
    func onBattleStarted(battleInfo: TUIBattleInfo) {
    // PK 开始了, battleId:battleInfo.battleId
    }
    // PK 结束时触发
    func onBattleEnded(battleInfo: TUIBattleInfo, reason: TUIBattleStoppedReason) {
    // PK 结束了, battleId:battleInfo.battleId
    }
    // 有新主播加入 PK 时触发
    func onUserJoinBattle(battleId: String, battleUser: TUIBattleUser) {
    // battleUser.userName加入了 PK
    }
    // 正在 PK 的主播离开了 PK 时触发
    func onUserExitBattle(battleId: String, battleUser: TUIBattleUser) {
    // battleUser.userName离开了 PK
    }
    // PK 得分变化时触发
    func onBattleScoreChanged(battleId: String, battleUserList: [TUIBattleUser]) {
    // PK 得分改变了,第一个用户的比分为: battleUserList.first?.score
    }
    // 收到 PK 邀请时触发
    func onBattleRequestReceived(battleInfo: TUIBattleInfo, inviter: TUIBattleUser, invitee: TUIBattleUser) {
    // 收到了来自inviter.userName的 PK 邀请
    }
    // 收到 PK 邀请被取消时触发
    func onBattleRequestCancelled(battleInfo: TUIBattleInfo, inviter: TUIBattleUser, invitee: TUIBattleUser) {
    // 来自inviter.userName的 PK 邀请被取消了
    }
    // 收到 PK 邀请超时触发
    func onBattleRequestTimeout(battleInfo: TUIBattleInfo, inviter: TUIBattleUser, invitee: TUIBattleUser) {
    // 来自inviter.userName的 PK 邀请超时了
    }
    // 发出的 PK 邀请被接受时触发
    func onBattleRequestAccept(battleInfo: TUIBattleInfo, inviter: TUIBattleUser, invitee: TUIBattleUser) {
    // 对invitee.userName的 PK 邀请被接受了
    }
    // 发出的 PK 邀请被拒绝时触发
    func onBattleRequestReject(battleInfo: TUIBattleInfo, inviter: TUIBattleUser, invitee: TUIBattleUser) {
    // 对invitee.userName的 PK 邀请被拒绝了
    }
    }
    您可通过调用 addObserver 成为 TUILiveBattleManager 的观察者,监听 PK 相关的回调。
    AnchorBattleObserver 成为观察者为例:
    class AnchorBattleObserver extends TUILiveBattleManager.Observer {
    AnchorBattleObserver() {
    
    TUIRoomEngine.sharedInstance().getLiveBattleManager().addObserver(this);
    }
    
    // PK 开始时触发
    @Override
    public void onBattleStarted(TUILiveBattleManager.BattleInfo battleInfo) {
    // PK 开始了, battleId:battleInfo.battleId
    }
    // PK 结束时触发
    @Override
    public void onBattleEnded(TUILiveBattleManager.BattleInfo battleInfo, TUILiveBattleManager.BattleStoppedReason reason) {
    // PK 结束了, battleId:battleInfo.battleId
    }
    // 有新主播加入 PK 时触发
    @Override
    public void onUserJoinBattle(String battleId, TUILiveBattleManager.BattleUser battleUser) {
    // battleUser.userName加入了 PK
    }
    // 正在 PK 的主播离开了 PK 时触发
    @Override
    public void onUserExitBattle(String battleId, TUILiveBattleManager.BattleUser battleUser) {
    // battleUser.userName离开了 PK
    }
    // PK 得分变化时触发
    @Override
    public void onBattleScoreChanged(String battleId, List<TUILiveBattleManager.BattleUser> battleUserList) {
    // PK 得分改变了,第一个用户的比分为: battleUserList.first?.score
    }
    // 收到 PK 邀请时触发
    @Override
    public void onBattleRequestReceived(TUILiveBattleManager.BattleInfo battleInfo, TUILiveBattleManager.BattleUser inviter, TUILiveBattleManager.BattleUser invitee) {
    // 收到了来自inviter.userName的 PK 邀请
    }
    // 收到 PK 邀请被取消时触发
    @Override
    public void onBattleRequestCancelled(TUILiveBattleManager.BattleInfo battleInfo, TUILiveBattleManager.BattleUser inviter, TUILiveBattleManager.BattleUser invitee) {
    // 来自inviter.userName的 PK 邀请被取消了
    }
    // 收到 PK 邀请超时触发
    @Override
    public void onBattleRequestTimeout(TUILiveBattleManager.BattleInfo battleInfo, TUILiveBattleManager.BattleUser inviter, TUILiveBattleManager.BattleUser invitee) {
    // 来自inviter.userName的 PK 邀请超时了
    }
    // 发出的 PK 邀请被接受时触发
    @Override
    public void onBattleRequestAccept(TUILiveBattleManager.BattleInfo battleInfo, TUILiveBattleManager.BattleUser inviter, TUILiveBattleManager.BattleUser invitee) {
    // 对invitee.userName的 PK 邀请被接受了
    }
    // 发出的 PK 邀请被拒绝时触发
    @Override
    public void onBattleRequestReject(TUILiveBattleManager.BattleInfo battleInfo, TUILiveBattleManager.BattleUser inviter, TUILiveBattleManager.BattleUser invitee) {
    // 对invitee.userName的 PK 邀请被拒绝了
    }
    }
    联系我们

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

    技术支持

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

    7x24 电话支持