tencent cloud

Feedback

Last updated: 2024-09-27 10:15:49

    Component Introduction

    Battle feature is an intense and entertaining real-time interactive feature designed for anchors and the audience. It allows anchors from different rooms to engage in real-time confrontations, enhancing the competitiveness and entertainment value of live streaming.TUILiveKit's battle feature supports up to 9 anchors participating simultaneously, providing a platform for anchors to showcase their talents and charisma, while offering an exciting viewing experience for the audience. Whether it's a talent competition, knowledge Q&A, or gaming sports, the battle feature creates more interactive opportunities for anchors and the audience, stimulating audience enthusiasm, enhancing the entertainment value and attraction of live streaming, thus bringing more surprises and value to both sides and promoting the diversified development of live streaming content.
    In Dual Battle
    Dual Battle results
    In Multi-player Battle
    Multi-player Battle results
    
    
    
    
    
    
    
    
    
    
    
    

    Instructions for Use

    Anchor initiates battle

    Click the Battle button
    Stop waintting for battle
    Exit Battle
    
    
    
    
    
    
    
    
    

    Anchor receives battle

    Anchor receives Battle invitation
    Anchor accepts Battle
    
    
    
    
    
    

    Custom Functionality

    Custom Battle waiting countdown style

    If you need the custom battle waiting countdown style, please refer to the following path for changes:
    // File location: tuilivekit/src/main/java/com/trtc/uikit/livekit/view/liveroom/view/anchor/component/livestreaming/battle/
    
    ├── BattleCountdownBackView.java // Battle waiting countdown background style
    └── BattleCountdownView.java // Battle waiting countdown foreground style

    Custom Definition Dual Battle Score Style

    If you need the custom Definition Dual battle score style, please refer to the following path for changes:
    // File location: tuilivekit/src/main/java/com/trtc/uikit/livekit/view/liveroom/view/common/battle/SingleBattleScoreView.java
    
    public class SingleBattleScoreView extends FrameLayout {
    ...
    }

    Custom Definition Multi Battle Score Style

    If you need the custom Definition Multi Battle score style, please refer to the following path for changes:
    // File location:tuilivekit/src/main/java/com/trtc/uikit/livekit/view/liveroom/view/common/battle/BattleMemberInfoView.java
    
    public class BattleMemberInfoView extends FrameLayout {
    ...
    }

    Custom Definition Battle Score Result Style

    If you need a Custom Definition Battle result style, please refer to the following path for changes:
    // File location:tuilivekit/src/main/java/com/trtc/uikit/livekit/view/liveroom/view/common/battle/BattleInfoView.java
    
    public class BattleInfoView extends BasicView {
    ...
    private void showBattleResult(int type) {
    // Battle Result Display
    }
    }

    Key code

    Anchor Battle

    The TUILiveKit anchor battle function is mainly implemented based on LiveService. In LiveService, you can get the battle management class object through mTUIRoomEngine.getLiveBattleManager(), and call the relevant battle API functions to implement the battle feature. For example, in the interaction between Anchor A and B, refer to the diagram below for the specific interaction sequence.
    
    
    
    Note:
    When inviting multiple participants to the battle, if any invitee accepts the battle, only the battle initiator, the battle invitee who accepted, and the audience in the corresponding rooms will receive the onBattleStarted callback.

    Anchor A initiates Battle

    Anchor A initiates a battle by calling requestBattle, passing the maximum Battle duration in parameter config, whether the inviter needs to reply with accept/reject, and passing anchor B's userId in parameter userIdList, and passing the battle invitation wait duration in parameter timeout.
    // File location: tuilivekit/src/main/java/com/trtc/uikit/livekit/manager/controller/BattleController.java
    public void requestBattle(List<String> roomIdList, int timeout) {
    TUILiveBattleManager.BattleConfig config = new TUILiveBattleManager.BattleConfig();
    config.duration = BattleState.BATTLE_DURATION;
    config.needResponse = mBattleState.mNeedResponse;
    config.extensionInfo = "";
    mLiveService.requestBattle(config, roomIdList, timeout, new TUILiveBattleManager.BattleRequestCallback() {
    @Override
    public void onSuccess(TUILiveBattleManager.BattleInfo battleInfo,
    Map<String, TUILiveBattleManager.BattleCode> map) {
    mBattleState.mBattleId = battleInfo.battleId;
    mBattleState.mBattleConfig.copy(config);
    List<BattleState.BattleUser> sendRequests = mBattleState.mSentBattleRequests.get();
    for (Map.Entry<String, TUILiveBattleManager.BattleCode> entry : map.entrySet()) {
    String key = entry.getKey();
    TUILiveBattleManager.BattleCode code = entry.getValue();
    if (code == TUILiveBattleManager.BattleCode.SUCCESS) {
    for (ConnectionState.ConnectionUser user : mConnectionState.connectedUsers.get()) {
    if (TextUtils.equals(user.userId, key)) {
    sendRequests.add(new BattleState.BattleUser(user));
    break;
    }
    }
    } else {
    notifyToast(convertCodeToString(entry.getValue()));
    }
    }
    mBattleState.mSentBattleRequests.set(sendRequests);
    }
    
    @Override
    public void onError(TUICommonDefine.Error error, String s) {
    ErrorHandler.onError(error);
    mBattleState.mSentBattleRequests.clear();
    }
    });
    }
    Anchor A can receive the request acceptance callback via onBattleRequestAccept.

    Anchor receives a battle request

    Anchor B receives the battle request callback via onBattleRequestReceived.
    // File location:tuilivekit/src/main/java/com/trtc/uikit/livekit/manager/observer/LiveBattleManagerObserver.java
    @Override
    public void onBattleRequestReceived(BattleInfo battleInfo, BattleUser inviter, BattleUser invitee) {
    LiveKitLog.info(mTag + " onBattleRequestReceived:[battleInfo:" + new Gson().toJson(battleInfo)
    + ", inviter:" + new Gson().toJson(inviter) + ", invitee:" + new Gson().toJson(invitee) + "]");
    mBattleController.onBattleRequestReceived(battleInfo, inviter);
    }
    Anchor B accepts the battle request by calling accept.
    // File Location: tuilivekit/src/main/java/com/trtc/uikit/livekit/manager/controller/BattleController.java
    public void accept() {
    mLiveService.acceptBattle(mBattleState.mBattleId, new TUIRoomDefine.ActionCallback() {
    @Override
    public void onSuccess() {
    
    }
    
    @Override
    public void onError(TUICommonDefine.Error error, String s) {
    
    }
    });
    }
    Anchors A, B, and the audience in the room can receive the battle start callback through onBattleStarted.
    // File Location: tuilivekit/src/main/java/com/trtc/uikit/livekit/manager/observer/LiveBattleManagerObserver.java
    @Override
    public void onBattleStarted(BattleInfo battleInfo) {
    LiveKitLog.info(mTag + " onBattleStarted:[battleInfo:" + new Gson().toJson(battleInfo) + "]");
    mBattleController.onBattleStarted(battleInfo);
    }

    The anhor exits the battle

    For example, when anchor B exits the battle, the interaction sequence can be referenced from the diagram below.
    
    
    
    Note:
    During multi-anchor Battle:
    When a anchor exits the battle, the remaining anchors and corresponding room audience will receive the onUserExitBattle callback.
    When the battle reaches the preset battle time, the anchors and corresponding room audience will receive the onBattleEnded callback.
    When there are two anchors in the battle and one exits, the anchors and corresponding room audience will receive the onBattleEnded callback.
    Anchor B calls exitBattle to exit the battle.
    // File Location: tuilivekit/src/main/java/com/trtc/uikit/livekit/manager/controller/BattleController.java
    public void exitBattle() {
    mLiveService.exitBattle(mBattleState.mBattleId, new TUIRoomDefine.ActionCallback() {
    @Override
    public void onSuccess() {
    mBattleState.mSentBattleRequests.clear();
    mBattleState.mBattledUsers.clear();
    removeBattleRequestReceived();
    }
    
    @Override
    public void onError(TUICommonDefine.Error error, String s) {
    
    }
    });
    }
    Anchors A, B, and the room audience receive the onBattleEnded callback and the battle end notification.
    // File Location: tuilivekit/src/main/java/com/trtc/uikit/livekit/manager/observer/LiveBattleManagerObserver.java
    @Override
    public void onBattleEnded(BattleInfo battleInfo, BattleStoppedReason reason) {
    LiveKitLog.info(mTag + " onBattleEnded:[battleInfo:"
    + new Gson().toJson(battleInfo) + ", reason:" + reason + "]");
    mBattleController.onBattleEnded(battleInfo);
    }
    Contact Us

    Contact our sales team or business advisors to help your business.

    Technical Support

    Open a ticket if you're looking for further assistance. Our Ticket is 7x24 avaliable.

    7x24 Phone Support