.js / .d.ts / .css).pnpm run start:server
baseURL must match this port (e.g., http://localhost:9000/api).pnpm add tuikit-live-manager-sdk-react
initHttpClient to inject an axios instance.The SDK has two types of initialization with different responsibilities: initHttpClient handles the HTTP communication layer (API requests), while useLiveMonitorState().init() handles business capability initialization such as the player. Both must be called.initHttpClient will automatically:// src/main.tsx or app entry fileimport { initHttpClient } from 'tuikit-live-manager-sdk-react';import axios from 'axios';const axiosInstance = axios.create({baseURL: '/api',timeout: 10000,});initHttpClient(axiosInstance);
useLiveMonitorState(): Live room management (list, create, edit, end streams, push/pull);useGiftState(): Gift management (CRUD, categories, multi-language);useRiskControlState(options): Risk control management (content moderation, member management, chat management).import { useLiveMonitorState } from 'tuikit-live-manager-sdk-react';const {init, // Init player/business capabilities (idempotent)liveList, // Live room list MonitorLiveInfo[]hasMore, // Whether more data is availablecurrentLive, // Currently selected live roomsetCurrentLive, // Set current room (pass liveId)fetchLiveList, // Fetch room list (supports pagination)createLive, // Create room → Promise<MonitorLiveInfo>updateLive, // Update current room infoendLive, // End live (supports liveId or currentLive)fetchLiveDetail, // Fetch room details (with streaming info)fetchLiveStats, // Fetch room statisticsstartPlay, // Start playback (liveId + containerId)stopPlay, // Stop playback} = useLiveMonitorState();
init(config) Used to initialize business capabilities. Requires ServerConfig (including server address baseURL, timeout, player factory playerFactory, etc.). The playerFactory is used for playback-related capabilities such as startPlay/stopPlay. If not provided, the SDK internally creates a default implementation. The HTTP communication layer is handled by initHttpClient, with independent baseURL values.This is a singleton Hook, shared across multiple components.import { useLiveMonitorState } from 'tuikit-live-manager-sdk-react';import { useEffect, useState } from 'react';function CustomLiveList() {const { init, liveList, fetchLiveList, createLive, setCurrentLive, fetchLiveDetail } = useLiveMonitorState();const [name, setName] = useState('');useEffect(() => {init({ baseURL: 'http://localhost:9000/api' });fetchLiveList();}, []);return (<div><input value={name} onChange={e => setName(e.target.value)} /><button onClick={async () => {const live = await createLive({ anchorId: 'anchor_001', liveName: name, coverUrl: '' });setCurrentLive(live.liveId);await fetchLiveDetail();}}>Create Room</button><ul>{liveList.map(live => (<li key={live.liveId} onClick={() => setCurrentLive(live.liveId)}>{live.liveName} — {live.onlineCount} online</li>))}</ul></div>);}
import { useLiveMonitorState } from 'tuikit-live-manager-sdk-react';import { useEffect } from 'react';function LiveListPage() {const { init, liveList, hasMore, fetchLiveList } = useLiveMonitorState();useEffect(() => {init({ baseURL: 'http://localhost:9000/api' });fetchLiveList();}, []);return (<div><ul>{liveList.map(live => (<li key={live.liveId}>{live.liveName} — {live.onlineCount} online</li>))}</ul>{hasMore && <button onClick={() => fetchLiveList()}>Load More</button>}</div>);}
import { useGiftState } from 'tuikit-live-manager-sdk-react';const {giftList, // Gift list GiftItem[]giftCategoryList, // Category list GiftCategoryItem[]fetchGiftList, // Fetch gift list (also returns categories)createGift, // Create Gift → Promise<string>updateGift, // Update giftdeleteGift, // Delete gift (pass giftId)createGiftCategory, // Create gift categoryupdateGiftCategory, // Update gift categorydeleteGiftCategory, // Delete gift categoryaddGiftCategoryRelations, // Add gift-category relationdeleteGiftCategoryRelations, // Remove gift-category relation// Multi-language ManagementgetGiftLanguage, // Get gift multi-language infosetGiftLanguage, // Set gift multi-language infodeleteGiftLanguage, // Deletegift multi-languagegetGiftCategoryLanguage, // Get category multi-language infosetGiftCategoryLanguage, // Set category multi-language infodeleteGiftCategoryLanguage, // Deletecategory multi-language info} = useGiftState();
import { useGiftState } from 'tuikit-live-manager-sdk-react';import { useEffect, useState } from 'react';function GiftManager() {const {giftList, giftCategoryList, fetchGiftList,createGift, updateGift, deleteGift,createGiftCategory,} = useGiftState();const [newGiftName, setNewGiftName] = useState('');useEffect(() => { fetchGiftList(); }, []);const handleCreateGift = async () => {await createGift({ id: `gift_${Date.now()}`, name: newGiftName, iconUrl: '', price: 100 });setNewGiftName('');await fetchGiftList();};const handleDelete = async (giftId: string) => {await deleteGift(giftId);await fetchGiftList();};return (<div><input value={newGiftName} onChange={e => setNewGiftName(e.target.value)} placeholder="Gift Name" /><button onClick={handleCreateGift}>Create Gift</button><button onClick={() => createGiftCategory({ name: 'Popular Gifts' }).then(fetchGiftList)}>Create Category</button>{giftCategoryList.map(cat => (<div key={cat.id}><h3>{cat.name}</h3><ul>{giftList.filter(g => g.categoryIds?.includes(cat.id)).map(gift => (<li key={gift.id}>{gift.name} — {gift.price} coins<button onClick={() => handleDelete(gift.id)}>Delete</button></li>))}</ul></div>))}</div>);}
liveId.import { useRiskControlState } from 'tuikit-live-manager-sdk-react';const {// Moderation ManagementtextModerationAvailable, // Whether moderation is availablemoderationMode, // Moderation mode: cloud | customcustomModerationToggleEnabled, // Full moderation toggle (custom mode)updateCustomModerationToggleEnabled, // Set full moderation toggle (custom mode)textModerationList, // Text moderation record listtextModerationTotal, // Total moderation recordstextModerationPageNum, // Current moderation pagetextModerationLoading, // Moderation list loading statefetchTextModerationList, // Fetch moderation list (supports pagination)approveTextModerationItems, // Batch approve moderation recordsbypassCorrectionKeyword, // Bypass correction keyword params: { content: string; liveId?: string }deleteModerationItems, // Delete moderation items ids: string[]// Member ManagementmuteMember, // Mute memberunmuteMember, // Unmute memberbanMember, // Ban memberunbanMember, // Unban membermutedList, // Muted listbannedList, // Banned listfetchMutedList, // Fetch muted listfetchBannedList, // Fetch banned list// Chat ManagementsendViolationWarning, // Send violation warningsendAdminMessage, // Send admin message content: string} = useRiskControlState({ liveId: 'xxx', pageSize: 20 });
import { useRiskControlState } from 'tuikit-live-manager-sdk-react';import { useEffect } from 'react';function CustomRiskPanel({ liveId }: { liveId: string }) {const { textModerationList, fetchTextModerationList, approveTextModerationItems, muteMember } =useRiskControlState({ liveId, pageSize: 20 });useEffect(() => { fetchTextModerationList(); }, []);return (<div>{textModerationList.map(item => (<div key={item.id}><span>{item.content}</span><button onClick={() => approveTextModerationItems({ ids: [item.id] })}>Approve</button><button onClick={() => muteMember({ memberAccounts: [item.userId], muteTime: 300 })}>Mute 5 min</button></div>))}</div>);}
tuikit-atomicx-react for audio/video and IM rendering capabilities:Category | Import | Description |
Video Playback | LiveView | Live video rendering component. |
Bullet Messages | BarrageList, BarrageInput | Bullet chat list display and input box. |
Audience List | LiveAudienceList, useLiveAudienceState | Audience list component and state. |
Live Operations | useLiveListState, LiveListEvent | Join/leave live streams, event subscriptions. |
Login Authentication | useLoginState | Login and user info retrieval. |
Player Controls | useLivePlayerState | Control bar visibility, player settings. |
フィードバック