
Integration option | Prebuilt UI | Headless (AtomicXCore-SDK) |
Description | Prebuilt UI and logic for live streaming and voice chat rooms. Pick the components you need and plug them in. | Build your own UI and wire it to the same live streaming and chat room APIs. |
When to use | Your layout is close to our demo; you only need to swap assets, tweak copy, or turn features on/off and add business logic. | You want full control over the UI and will implement the interface yourself. |
Integration Guide | ||
Supported Platforms | Android, iOS, Flutter, Web, Electron | Android, iOS, Flutter, Web, Electron |
Platforms | Prebuit UI | Headless (AtomicXCore-SDK) |
App-Side | ||
Web application | After completing the integration of the Host Live Broadcasting feature on Web, you can start or watch a live stream. | After completing AtomicXCore-SDK integration on Web, you can use the corresponding live streaming and viewing features directly. |
PC live streaming | Not supported. |
Integration options | Implementation |
Prebuit UI | Works out of the box. To integrate only the barrage component or customize the UI, see chat barrage component. |
Headless (AtomicXCore-SDK) | For user joining or exit messages: listen to onAudienceJoined and onAudienceLeft and use Insert Local Tip Messages to notify user entry and exit. |
Barrage Message Sending Component | Barrage Message Displaying Component |
![]() | ![]() |
Integration options | Implementation |
Prebuit UI | |
Headless (AtomicXCore-SDK) |
Gift Sending Panel | Gift Notification (Side Slide Effect) | Gift Notification (Barrage Message) | Full-Screen Gift Animation |
![]() | ![]() | ![]() | ![]() |
Integration options | Implementation |
Prebuit UI | Works out of the box. Integrate video live streaming or voice chat room component: Live streaming scenario: Refer to Video Component > Single-person Co-streaming for accessing. Voice chat room scenario: See Voice Chat Component for managing seats. |
Headless (AtomicXCore-SDK) |
Integration options | Implementation |
Prebuit UI | Includes UI, can be used directly after integration with no additional configuration required. Refer to Video Component > Host Connection for implementation steps. |
Headless (AtomicXCore-SDK) |
message.data to the level/identity information obtained from your business backend for display. When receiving messages using onRecvNewMessage, parse the data as user's level/identity information, then render it on the barrage. The sample code for sending and receiving messages is as follows:// Send messages.V2TIMMessage v2TIMMessage = V2TIMManager.getMessageManager().createTextMessage("text");String jsonString = "{\\"level\\":\\"25\\",\\"identity\\":\\"normal\\"}"; // write here the level/identity informat obtained from your serverv2TIMMessage.setCloudCustomData(jsonString);V2TIMManager.getMessageManager().sendMessage(v2TIMMessage, null, roomId, V2TIMMessage.V2TIM_PRIORITY_LOW,true, null, new V2TIMSendCallback<V2TIMMessage>() {// ...});// Receive a message.AdvancedMsgListener listener = new AdvancedMsgListener();V2TIMManager.getMessageManager().addAdvancedMsgListener(listener);private class AdvancedMsgListener extends V2TIMAdvancedMsgListener {@Overridepublic void onRecvNewMessage(V2TIMMessage msg) {Gson gson = new Gson();Type type = new TypeToken<HashMap<String, Object>>() {}.getType();// Parse custom data here and render to barrageHashMap<String, Object> customData = gson.fromJson(msg.getCloudCustomData(), type);}}
import ImSDK_Plus// Send messages.let v2TimMessage = imManager.createTextMessage(text: "text")let jsonString = "{\\"level\\":\\"25\\",\\"identity\\":\\"normal\\"}" // write here the level/identity informat obtained from your serverlet data = jsonString.data(using: .utf8)v2TimMessage?.cloudCustomData = dataV2TIMManager.sharedInstance().sendMessage(message: v2TimMessage, receiver: nil,groupID: roomId, priority: .PRIORITY_LOW,onlineUserOnly: true, offlinePushInfo: nil, progress: nil) {} fail: { code, message in}// Receive a message.V2TIMManager.sharedInstance().addAdvancedMsgListener(listener: self)extension YourClass: V2TIMAdvancedMsgListener {func onRecvNewMessage(msg: V2TIMMessage) {if let jsonObject = try? JSONSerialization.jsonObject(with: msg.cloudCustomData ?? Data(), options: []),let dict = jsonObject as? [String: Any] {// Parse custom data here and render to barrage}}}
Integration options | Implementation |
Prebuit UI | Includes UI; can be used directly after integration with no additional configuration required. Users can be blocked or removed from the audience list or barrage component accordingly. If you use only the Audience List component, implement your own AtomicXCore-SDK API logic within the onUserItemClick callback in audience management of the audience list.Mute API: disableSendMessage Kick API: kickUserOutOfRoom |
Headless (AtomicXCore-SDK) | Manage User Speaking Permissions (mute). Kick a Viewer Out of the Live Room (remove). |
Integration options | Implementation |
Prebuit UI | Includes UI, can be used directly after integration with no additional configuration required. Refer to Audience List. |
Headless (AtomicXCore-SDK) | |
server-side REST API |
Integration options | Implementation |
Prebuit UI | Includes UI, can be used directly after integration with no additional configuration required. |
Headless (AtomicXCore-SDK) | You can listen to audienceCount in LiveAudienceState to get the current number of viewers in the live streaming room in real time. You can also listen to onAudienceJoined/onAudienceLeft for self-maintenance of the number of online users. |
server-side REST API | The backend can obtain the room member list via REST API, but only returns 1000 users when the number of viewers in the live streaming room is more than 1000. |
two-column waterfall layout | single-column waterfall layout |
![]() |
![]() |

Notice field on the room; when you set or update it, all users in the room are notified.Integration options | Implementation |
Prebuit UI | Host Side: When adding the anchor streaming view, set liveInfo.notice to your desired room announcement. Audience Side: Please refer to the Headless section below for implementation details. |
Headless (AtomicXCore-SDK) | Host Side: Set notice when starting a live stream: When calling the createLive interface in LiveListStore, set the notice field within the LiveInfo parameter to your room announcement.Update notice during a live stream: After the stream has started, call the updateLiveInfo interface in LiveListStore to modify the room announcement.Audience Side: Upon joining: The notice field within the LiveInfo object returned by the joinLive interface contains the room announcement. You can display this notice in the chat area by Insert Local Tip Messages into the barrage component.Upon update: Monitor the currentLive field in LiveListState to receive real-time updates to the room announcement. |
server-side REST API | Refer to the Notice field in the Create Room or Update Room documentation for configuration and update instructions. |
Integration options | Implementation |
Prebuit UI | Stats will be automatically displayed after the host ends the live stream, no additional configuration required. If only integrating the video live streaming core component, call the LiveCoreView API with the TUIStopLiveBlock callback when ending the live stream. This callback contains the live stream's statistical information TUILiveStatisticsData. |
Headless (AtomicXCore-SDK) | When calling the endLive API to end the live stream, the callback contains the statistical information TUILiveStatisticsData of this live stream. |

Integration options | Implementation |
Prebuit UI | Host It is advisable to add a product pop-up UI on the host page. The code location for the host page is as follows: Audience It is advisable to add a product pop-up UI on the audience viewing page. The code location for the audience viewing page is as follows: |
Headless (AtomicXCore-SDK) | After receiving a custom message and parsing it into product-related information, just add the product popup View on top of your anchor page/audience viewing page UI. |

Feedback