@tencent-rtc/mcp 1.3.8 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/resource/doc/{tuicallkit/iOS/faq.md → callkit/faq/android-faq.md} +10 -22
- package/resource/doc/{tuicallkit/android/faq.md → callkit/faq/flutter-faq.md} +10 -22
- package/resource/doc/{tuicallkit/flutter/faq.md → callkit/faq/ios-faq.md} +10 -22
- package/resource/doc/callkit/preset/android/api.md +296 -0
- package/resource/doc/callkit/preset/android/integration.md +430 -0
- package/resource/doc/callkit/preset/flutter/api.md +410 -0
- package/resource/doc/{tuicallkit → callkit/preset}/flutter/integration.md +35 -97
- package/resource/doc/callkit/preset/ios/api.md +80 -0
- package/resource/doc/{tuicallkit/iOS → callkit/preset/ios}/integration.md +37 -118
- package/resource/doc/callkit/preset/react/api.md +501 -0
- package/resource/doc/{tuicallkit → callkit/preset}/react/integration.md +5 -20
- package/resource/doc/callkit/preset/vue/api.md +501 -0
- package/resource/doc/{tuicallkit → callkit/preset}/vue/integration.md +4 -19
- package/resource/doc/{chatuikit → chatkit}/android/faq.md +29 -38
- package/resource/doc/{chatuikit → chatkit}/android/features/theme.md +22 -166
- package/resource/doc/chatkit/android/integration.md +490 -0
- package/resource/doc/chatkit/faq/android_sdk/client-api.md +281 -0
- package/resource/doc/{chatuikit → chatkit}/faq/common/product.md +0 -1
- package/resource/doc/{chatuikit → chatkit}/faq/common/server.md +1 -1
- package/resource/doc/chatkit/faq/flutter_sdk/client-api.md +199 -0
- package/resource/doc/{chatuikit → chatkit}/faq/flutter_sdk/faq.md +3 -3
- package/resource/doc/chatkit/faq/ios_sdk/client-api.md +235 -0
- package/resource/doc/{chatuikit → chatkit}/faq/web_sdk/faq.md +3 -3
- package/resource/doc/{chatuikit → chatkit}/flutter/features/theme.md +22 -166
- package/resource/doc/{chatuikit → chatkit}/flutter/integration.md +19 -88
- package/resource/doc/{chatuikit/iOS → chatkit/ios}/faq.md +29 -38
- package/resource/doc/{chatuikit/iOS → chatkit/ios}/features/theme.md +27 -176
- package/resource/doc/{chatuikit/iOS → chatkit/ios}/integration.md +47 -165
- package/resource/doc/{chatuikit → chatkit}/react/components/avatar.md +0 -33
- package/resource/doc/{chatuikit → chatkit}/react/components/chat-header.md +8 -49
- package/resource/doc/{chatuikit → chatkit}/react/components/chat-setting.md +6 -35
- package/resource/doc/{chatuikit → chatkit}/react/components/chat.md +0 -6
- package/resource/doc/{chatuikit → chatkit}/react/components/component-list.md +0 -11
- package/resource/doc/{chatuikit → chatkit}/react/components/contact-list.md +96 -502
- package/resource/doc/chatkit/react/components/conversation-actions.md +174 -0
- package/resource/doc/chatkit/react/components/conversation-list.md +333 -0
- package/resource/doc/chatkit/react/components/conversation-preview.md +118 -0
- package/resource/doc/chatkit/react/components/conversation-search.md +60 -0
- package/resource/doc/{chatuikit → chatkit}/react/components/message-input.md +36 -337
- package/resource/doc/{chatuikit → chatkit}/react/components/message-list.md +20 -212
- package/resource/doc/chatkit/react/components/search.md +243 -0
- package/resource/doc/{chatuikit → chatkit}/react/components/tuikit.md +1 -47
- package/resource/doc/{chatuikit → chatkit}/react/integration.md +21 -81
- package/resource/doc/{chatuikit → chatkit}/vue/components/avatar.md +0 -33
- package/resource/doc/{chatuikit → chatkit}/vue/components/chat-header.md +7 -48
- package/resource/doc/{chatuikit → chatkit}/vue/components/chat-setting.md +3 -5
- package/resource/doc/{chatuikit → chatkit}/vue/components/chat.md +0 -5
- package/resource/doc/{chatuikit → chatkit}/vue/components/component-list.md +0 -15
- package/resource/doc/chatkit/vue/components/contact-list.md +271 -0
- package/resource/doc/chatkit/vue/components/conversation-actions.md +228 -0
- package/resource/doc/{chatuikit → chatkit}/vue/components/conversation-list.md +42 -492
- package/resource/doc/chatkit/vue/components/conversation-preview.md +213 -0
- package/resource/doc/chatkit/vue/components/conversation-search.md +50 -0
- package/resource/doc/{chatuikit → chatkit}/vue/components/message-input.md +2 -223
- package/resource/doc/{chatuikit → chatkit}/vue/components/message-list.md +23 -252
- package/resource/doc/{chatuikit → chatkit}/vue/components/search.md +73 -640
- package/resource/doc/{chatuikit → chatkit}/vue/components/tuikit.md +7 -21
- package/resource/doc/{chatuikit → chatkit}/vue/components/userpicker.md +3 -62
- package/resource/doc/{chatuikit → chatkit}/vue/faq.md +1 -1
- package/resource/doc/{chatuikit → chatkit}/vue/integration.md +22 -23
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-audience-list.md +18 -89
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-audio-effect.md +34 -192
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-barrage.md +28 -141
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-base-beauty.md +20 -112
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-co-guest-interaction.md +59 -193
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-gift.md +75 -455
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-host-interaction.md +94 -344
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-integration.md +107 -515
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-live-list.md +33 -173
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-audience-list.md +14 -93
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-audio-effect.md +34 -179
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-barrage.md +19 -107
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-base-beauty.md +24 -166
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-co-guest-interaction.md +56 -163
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-gift.md +69 -443
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-host-interaction.md +117 -364
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-integration.md +107 -492
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-live-list.md +23 -165
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-audience-list.md +35 -111
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-audio-effect.md +35 -193
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-barrage.md +31 -144
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-base-beauty.md +24 -116
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-co-guest-interaction.md +37 -171
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-gift.md +79 -459
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-host-interaction.md +69 -320
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-integration.md +85 -502
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-live-list.md +32 -169
- package/resource/doc/livekit/core-sdk/voice/android/voice-audience-list.md +263 -0
- package/resource/doc/livekit/core-sdk/voice/android/voice-audio-effect.md +222 -0
- package/resource/doc/livekit/core-sdk/voice/android/voice-barrage.md +452 -0
- package/resource/doc/livekit/core-sdk/voice/android/voice-co-guest-interaction.md +536 -0
- package/resource/doc/livekit/core-sdk/voice/android/voice-gift.md +442 -0
- package/resource/doc/livekit/core-sdk/voice/android/voice-host-interaction.md +489 -0
- package/resource/doc/livekit/core-sdk/voice/android/voice-integration.md +574 -0
- package/resource/doc/livekit/core-sdk/voice/android/voice-room-list.md +435 -0
- package/resource/doc/livekit/core-sdk/voice/flutter/voice-co-guest-interaction.md +516 -0
- package/resource/doc/livekit/core-sdk/voice/flutter/voice-integration.md +576 -0
- package/resource/doc/livekit/core-sdk/voice/ios/voice-audience-list.md +263 -0
- package/resource/doc/livekit/core-sdk/voice/ios/voice-audio-effect.md +212 -0
- package/resource/doc/livekit/core-sdk/voice/ios/voice-barrage.md +404 -0
- package/resource/doc/livekit/core-sdk/voice/ios/voice-co-guest-interaction.md +499 -0
- package/resource/doc/livekit/core-sdk/voice/ios/voice-gift.md +403 -0
- package/resource/doc/livekit/core-sdk/voice/ios/voice-host-interaction.md +552 -0
- package/resource/doc/livekit/core-sdk/voice/ios/voice-integration.md +514 -0
- package/resource/doc/livekit/core-sdk/voice/ios/voice-room-list.md +348 -0
- package/resource/doc/livekit/faq/common/{error_code.md → error-code.md} +2 -2
- package/resource/doc/livekit/preset/live/vue/api-reference/index.md +780 -0
- package/resource/doc/livekit/preset/live/vue/components/barrage.md +291 -0
- package/resource/doc/livekit/{live → preset/live}/vue/components/co-guest-panel.md +10 -49
- package/resource/doc/livekit/{live → preset/live}/vue/components/live-audience-list.md +26 -144
- package/resource/doc/livekit/{live → preset/live}/vue/components/live-scene-panel.md +12 -75
- package/resource/doc/livekit/{live → preset/live}/vue/components/live-view.md +36 -227
- package/resource/doc/livekit/preset/live/vue/components/stream-mixer.md +215 -0
- package/resource/doc/livekit/preset/live/vue/faq.md +1 -0
- package/resource/doc/livekit/preset/live/vue/live-list-integration.md +241 -0
- package/resource/doc/livekit/preset/live/vue/live-player-desk-integration.md +299 -0
- package/resource/doc/livekit/preset/live/vue/live-player-h5-integration.md +300 -0
- package/resource/doc/livekit/preset/live/vue/live-pusher-integration.md +743 -0
- package/resource/doc/roomkit/vue/faq.md +1 -0
- package/resource/doc/roomkit/vue/features/call-user-to-room.md +17 -53
- package/resource/doc/roomkit/vue/features/device-detection.md +30 -48
- package/resource/doc/roomkit/vue/features/device-state.md +24 -44
- package/resource/doc/roomkit/vue/features/free-beauty-panel.md +13 -36
- package/resource/doc/roomkit/vue/features/room-chat.md +31 -89
- package/resource/doc/roomkit/vue/features/room-participant-state.md +28 -50
- package/resource/doc/roomkit/vue/features/room-state.md +25 -34
- package/resource/doc/roomkit/vue/features/room-view.md +30 -125
- package/resource/doc/roomkit/vue/features/schedule-room.md +9 -40
- package/resource/doc/roomkit/vue/features/screen-share.md +22 -90
- package/resource/doc/roomkit/vue/features/virtual-background.md +13 -29
- package/resource/doc/roomkit/vue/integration.md +173 -337
- package/resource/doc/rtcengine/faq/common/error_code.md +1 -0
- package/resource/doc/rtcengine/faq/web/web.md +14 -24
- package/resource/doc/rtcengine/web/api.md +1 -3
- package/resource/doc/rtcengine/web/how_to_integrated_web_sdk.md +3 -10
- package/resource/doc/rtcengine/web/how_to_run_web_sdk_demo.md +1 -5
- package/resource/doc/rtcengine/web/plugin/20-advanced-customized-capture-rendering.md +1 -2
- package/resource/doc/rtcengine/web/plugin/21-advanced-auto-play-policy.md +2 -4
- package/resource/doc/rtcengine/web/plugin/23-advanced-support-detection.md +3 -5
- package/resource/doc/rtcengine/web/plugin/24-advanced-network-quality.md +1 -7
- package/resource/doc/rtcengine/web/plugin/25-advanced-device-change.md +0 -2
- package/resource/doc/rtcengine/web/plugin/26-advanced-publish-cdn-stream.md +4 -8
- package/resource/doc/rtcengine/web/plugin/27-advanced-small-stream.md +11 -11
- package/resource/doc/rtcengine/web/plugin/28-advanced-beauty.md +12 -88
- package/resource/doc/rtcengine/web/plugin/31-advanced-plugins-overview.md +5 -5
- package/resource/doc/rtcengine/web/plugin/34-advanced-proxy.md +30 -37
- package/resource/doc/rtcengine/web/plugin/36-advanced-virtual-background.md +13 -90
- package/resource/doc/rtcengine/web/plugin/37-advanced-voice-changer.md +1 -2
- package/resource/doc/rtcengine/web/plugin/39-advanced-video-decoder.md +1 -2
- package/resource/doc/rtcengine/web/plugin/40-advanced-video-mixer.md +19 -19
- package/resource/doc/rtcengine/web/plugin/41-advanced-small-stream-auto-switcher.md +1 -1
- package/resource/doc/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +4 -5
- package/resource/doc/rtcengine/web/plugin/43-advanced-face-detection.md +3 -3
- package/resource/doc/trtc/C++/ITRTCCloud.md +686 -2835
- package/resource/doc/trtc/C++/ITRTCStatistics.md +53 -308
- package/resource/doc/trtc/C++/ITXAudioEffectManager.md +202 -1022
- package/resource/doc/trtc/C++/ITXDeviceManager.md +126 -767
- package/resource/doc/trtc/C++/TRTCCloudCallback.md +579 -2147
- package/resource/doc/trtc/C++/TRTCTypeDef.md +703 -3378
- package/resource/doc/trtc/C++/TXLiteAVCode.md +116 -908
- package/resource/doc/trtc/android/TRTCCloud.md +606 -2573
- package/resource/doc/trtc/android/TRTCCloudDef.md +752 -3640
- package/resource/doc/trtc/android/TRTCCloudListener.md +581 -2008
- package/resource/doc/trtc/android/TRTCStatistics.md +48 -278
- package/resource/doc/trtc/android/TXAudioEffectManager.md +202 -1022
- package/resource/doc/trtc/android/TXBeautyManager.md +127 -704
- package/resource/doc/trtc/android/TXDeviceManager.md +51 -318
- package/resource/doc/trtc/android/TXLiteAVCode.md +114 -892
- package/resource/doc/trtc/iOS/TRTCCloud.md +694 -2904
- package/resource/doc/trtc/iOS/TRTCCloudDef.md +726 -3498
- package/resource/doc/trtc/iOS/TRTCCloudDelegate.md +543 -2028
- package/resource/doc/trtc/iOS/TRTCStatistics.md +48 -278
- package/resource/doc/trtc/iOS/TXAudioEffectManager.md +174 -877
- package/resource/doc/trtc/iOS/TXBeautyManager.md +128 -710
- package/resource/doc/trtc/iOS/TXDeviceManager.md +129 -772
- package/resource/doc/trtc/iOS/TXLiteAVCode.md +117 -915
- package/server.js +1 -5
- package/server.js.map +1 -1
- package/tools/call/get_callkit_api.js +32 -0
- package/tools/call/get_callkit_api.js.map +1 -0
- package/tools/call/get_native_call_uikit_integration.js +34 -0
- package/tools/call/get_native_call_uikit_integration.js.map +1 -0
- package/tools/call/{get-web-call-integration.js → get_web_call_uikit_integration.js} +13 -8
- package/tools/call/get_web_call_uikit_integration.js.map +1 -0
- package/tools/chat/get_native_chat_uikit_feature_detail.js +34 -0
- package/tools/chat/get_native_chat_uikit_feature_detail.js.map +1 -0
- package/tools/chat/get_native_chat_uikit_integration.js +45 -0
- package/tools/chat/get_native_chat_uikit_integration.js.map +1 -0
- package/tools/chat/get_web_chat_uikit_component_detail.js +34 -0
- package/tools/chat/get_web_chat_uikit_component_detail.js.map +1 -0
- package/tools/chat/get_web_chat_uikit_integration.js +45 -0
- package/tools/chat/get_web_chat_uikit_integration.js.map +1 -0
- package/tools/common/get_faq.js +265 -0
- package/tools/common/get_faq.js.map +1 -0
- package/tools/common/{get-usersig.js → get_usersig.js} +6 -3
- package/tools/common/get_usersig.js.map +1 -0
- package/tools/common/present_framework_choice.js +63 -0
- package/tools/common/present_framework_choice.js.map +1 -0
- package/tools/definitions/get_callkit_api_def.js +29 -0
- package/tools/definitions/get_callkit_api_def.js.map +1 -0
- package/tools/definitions/get_faq_def.js +17 -18
- package/tools/definitions/get_faq_def.js.map +1 -1
- package/tools/definitions/get_native_call_uikit_integration_def.js +15 -18
- package/tools/definitions/get_native_call_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_native_chat_uikit_feature_detail_def.js +31 -0
- package/tools/definitions/get_native_chat_uikit_feature_detail_def.js.map +1 -0
- package/tools/definitions/get_native_chat_uikit_integration_def.js +16 -19
- package/tools/definitions/get_native_chat_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_native_livekit_core_features_def.js +34 -0
- package/tools/definitions/get_native_livekit_core_features_def.js.map +1 -0
- package/tools/definitions/get_native_livekit_core_integration_def.js +34 -0
- package/tools/definitions/get_native_livekit_core_integration_def.js.map +1 -0
- package/tools/definitions/get_native_trtc_sdk_docs_def.js +32 -0
- package/tools/definitions/get_native_trtc_sdk_docs_def.js.map +1 -0
- package/tools/definitions/get_usersig_def.js +17 -22
- package/tools/definitions/get_usersig_def.js.map +1 -1
- package/tools/definitions/get_web_call_uikit_integration_def.js +15 -7
- package/tools/definitions/get_web_call_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_web_chat_uikit_component_detail_def.js +17 -49
- package/tools/definitions/get_web_chat_uikit_component_detail_def.js.map +1 -1
- package/tools/definitions/get_web_chat_uikit_integration_def.js +16 -19
- package/tools/definitions/get_web_chat_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_web_live_uikit_integration_def.js +15 -18
- package/tools/definitions/get_web_live_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_web_livekit_api_def.js +30 -0
- package/tools/definitions/get_web_livekit_api_def.js.map +1 -0
- package/tools/definitions/get_web_livekit_component_detail_def.js +32 -0
- package/tools/definitions/get_web_livekit_component_detail_def.js.map +1 -0
- package/tools/definitions/get_web_room_uikit_integration_def.js +15 -30
- package/tools/definitions/get_web_room_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_web_roomkit_feature_detail_def.js +31 -0
- package/tools/definitions/get_web_roomkit_feature_detail_def.js.map +1 -0
- package/tools/definitions/get_web_trtc_sdk_api_def.js +27 -0
- package/tools/definitions/get_web_trtc_sdk_api_def.js.map +1 -0
- package/tools/definitions/get_web_trtc_sdk_integration_def.js +27 -0
- package/tools/definitions/get_web_trtc_sdk_integration_def.js.map +1 -0
- package/tools/definitions/get_web_trtc_sdk_plugin_def.js +27 -0
- package/tools/definitions/get_web_trtc_sdk_plugin_def.js.map +1 -0
- package/tools/definitions/present_framework_choice_def.js +24 -12
- package/tools/definitions/present_framework_choice_def.js.map +1 -1
- package/tools/index.js +47 -59
- package/tools/index.js.map +1 -1
- package/tools/live/get_native_livekit_core_features.js +65 -0
- package/tools/live/get_native_livekit_core_features.js.map +1 -0
- package/tools/live/get_native_livekit_core_integration.js +59 -0
- package/tools/live/get_native_livekit_core_integration.js.map +1 -0
- package/tools/live/get_web_live_uikit_integration.js +48 -0
- package/tools/live/get_web_live_uikit_integration.js.map +1 -0
- package/tools/live/get_web_livekit_api.js +32 -0
- package/tools/live/get_web_livekit_api.js.map +1 -0
- package/tools/live/get_web_livekit_component_detail.js +34 -0
- package/tools/live/get_web_livekit_component_detail.js.map +1 -0
- package/tools/room/{get-web-room-integration.js → get_web_room_uikit_integration.js} +13 -14
- package/tools/room/get_web_room_uikit_integration.js.map +1 -0
- package/tools/room/{get-web-room-feature-detail.js → get_web_roomkit_feature_detail.js} +30 -31
- package/tools/room/get_web_roomkit_feature_detail.js.map +1 -0
- package/tools/rtcengine/get_web_trtc_sdk_api.js +31 -0
- package/tools/rtcengine/get_web_trtc_sdk_api.js.map +1 -0
- package/tools/rtcengine/get_web_trtc_sdk_integration.js +31 -0
- package/tools/rtcengine/get_web_trtc_sdk_integration.js.map +1 -0
- package/tools/rtcengine/get_web_trtc_sdk_plugin.js +31 -0
- package/tools/rtcengine/get_web_trtc_sdk_plugin.js.map +1 -0
- package/tools/trtc/get_native_trtc_sdk_docs.js +73 -0
- package/tools/trtc/get_native_trtc_sdk_docs.js.map +1 -0
- package/utils/generate-structured-result.js +61 -17
- package/utils/generate-structured-result.js.map +1 -1
- package/utils/report-cls-client.js +12 -1
- package/utils/report-cls-client.js.map +1 -1
- package/utils/report-es-client.js +2 -2
- package/resource/doc/chatuikit/android/integration.md +0 -287
- package/resource/doc/chatuikit/faq/android_sdk/client-api.md +0 -1371
- package/resource/doc/chatuikit/faq/flutter_sdk/client-api.md +0 -932
- package/resource/doc/chatuikit/faq/ios_sdk/client-api.md +0 -1119
- package/resource/doc/chatuikit/flutter/workflow.md +0 -941
- package/resource/doc/chatuikit/iOS/workflow.md +0 -0
- package/resource/doc/chatuikit/react/components/conversation-list.md +0 -1017
- package/resource/doc/chatuikit/react/components/search.md +0 -745
- package/resource/doc/chatuikit/react/create-group.md +0 -23
- package/resource/doc/chatuikit/react/init.md +0 -26
- package/resource/doc/chatuikit/react/workflow.md +0 -258
- package/resource/doc/chatuikit/vue/components/contact-list.md +0 -679
- package/resource/doc/chatuikit/vue/create-group.md +0 -25
- package/resource/doc/chatuikit/vue/init.md +0 -40
- package/resource/doc/chatuikit/vue/workflow.md +0 -395
- package/resource/doc/livekit/live/android/workflow.md +0 -320
- package/resource/doc/livekit/live/flutter/workflow.md +0 -353
- package/resource/doc/livekit/live/ios/workflow.md +0 -454
- package/resource/doc/livekit/live/vue/components/barrage.md +0 -616
- package/resource/doc/livekit/live/vue/components/stream-mixer.md +0 -446
- package/resource/doc/livekit/live/vue/faq.md +0 -0
- package/resource/doc/livekit/live/vue/live-list-integration.md +0 -200
- package/resource/doc/livekit/live/vue/live-player-desk-integration.md +0 -269
- package/resource/doc/livekit/live/vue/live-player-h5-integration.md +0 -269
- package/resource/doc/livekit/live/vue/live-pusher-integration.md +0 -595
- package/resource/doc/livekit/live/vue/states/live-state.md +0 -3591
- package/resource/doc/livekit/live/vue/workflow.md +0 -218
- package/resource/doc/native_live/android/V2TXLiveCode_api_android.md +0 -312
- package/resource/doc/native_live/android/V2TXLiveDef_api_android.md +0 -430
- package/resource/doc/native_live/android/V2TXLivePlayerObserver_api_android.md +0 -679
- package/resource/doc/native_live/android/V2TXLivePlayer_api_android.md +0 -671
- package/resource/doc/native_live/android/V2TXLivePremier_api_android.md +0 -271
- package/resource/doc/native_live/android/V2TXLivePusherObserver_api_android.md +0 -849
- package/resource/doc/native_live/android/V2TXLivePusher_api_android.md +0 -1046
- package/resource/doc/native_live/flutter/V2TXLiveCode_api_flutter.md +0 -460
- package/resource/doc/native_live/flutter/V2TXLiveDef_api_flutter.md +0 -558
- package/resource/doc/native_live/flutter/V2TXLivePlayerObserver_api_flutter.md +0 -865
- package/resource/doc/native_live/flutter/V2TXLivePlayer_api_flutter.md +0 -657
- package/resource/doc/native_live/flutter/V2TXLivePremier_api_flutter.md +0 -437
- package/resource/doc/native_live/flutter/V2TXLivePusherObserver_api_flutter.md +0 -335
- package/resource/doc/native_live/flutter/V2TXLivePusher_api_flutter.md +0 -748
- package/resource/doc/native_live/iOS/V2TXLiveCode_api_iOS.md +0 -327
- package/resource/doc/native_live/iOS/V2TXLiveDef_api_iOS.md +0 -507
- package/resource/doc/native_live/iOS/V2TXLivePlayerObserver_api_iOS.md +0 -507
- package/resource/doc/native_live/iOS/V2TXLivePlayer_api_iOS.md +0 -659
- package/resource/doc/native_live/iOS/V2TXLivePremier_api_iOS.md +0 -284
- package/resource/doc/native_live/iOS/V2TXLivePusherObserver_api_iOS.md +0 -814
- package/resource/doc/native_live/iOS/V2TXLivePusher_api_iOS.md +0 -1000
- package/resource/doc/roomkit/vue/features/workflow.md +0 -553
- package/resource/doc/roomkit/vue/workflow.md +0 -487
- package/resource/doc/tuicallkit/android/integration.md +0 -286
- package/resource/doc/tuicallkit/android/workflow.md +0 -0
- package/resource/doc/tuicallkit/faq/android_sdk/call-observer-api.md +0 -784
- package/resource/doc/tuicallkit/faq/android_sdk/callkit-api.md +0 -610
- package/resource/doc/tuicallkit/faq/flutter_sdk/call-define-api.md +0 -938
- package/resource/doc/tuicallkit/faq/flutter_sdk/call-observer-api.md +0 -897
- package/resource/doc/tuicallkit/faq/flutter_sdk/callkit-api.md +0 -469
- package/resource/doc/tuicallkit/faq/ios_sdk/call-observer-api.md +0 -781
- package/resource/doc/tuicallkit/faq/ios_sdk/callkit-api.md +0 -398
- package/resource/doc/tuicallkit/flutter/workflow.md +0 -331
- package/resource/doc/tuicallkit/react/api.md +0 -1404
- package/resource/doc/tuicallkit/vue/api.md +0 -1406
- package/resource/doc/tuicallkit/vue/faq.md +0 -36
- package/tools/call/get-native-call-integration.js +0 -43
- package/tools/call/get-native-call-integration.js.map +0 -1
- package/tools/call/get-web-call-api.js +0 -27
- package/tools/call/get-web-call-api.js.map +0 -1
- package/tools/call/get-web-call-integration.js.map +0 -1
- package/tools/chat/get-native-chat-feature-detail.js +0 -30
- package/tools/chat/get-native-chat-feature-detail.js.map +0 -1
- package/tools/chat/get-native-chat-integration.js +0 -45
- package/tools/chat/get-native-chat-integration.js.map +0 -1
- package/tools/chat/get-web-chat-component-detail.js +0 -31
- package/tools/chat/get-web-chat-component-detail.js.map +0 -1
- package/tools/chat/get-web-chat-integration.js +0 -45
- package/tools/chat/get-web-chat-integration.js.map +0 -1
- package/tools/chat/get-web-chat-uikit-init.js +0 -28
- package/tools/chat/get-web-chat-uikit-init.js.map +0 -1
- package/tools/chat/get-web-create-group-doc.js +0 -28
- package/tools/chat/get-web-create-group-doc.js.map +0 -1
- package/tools/common/get-faq.js +0 -91
- package/tools/common/get-faq.js.map +0 -1
- package/tools/common/get-usersig.js.map +0 -1
- package/tools/common/present-framework-choice.js +0 -16
- package/tools/common/present-framework-choice.js.map +0 -1
- package/tools/common/record-prompt.js +0 -55
- package/tools/common/record-prompt.js.map +0 -1
- package/tools/common/record-result.js +0 -60
- package/tools/common/record-result.js.map +0 -1
- package/tools/definitions/get_native_chat_feature_detail_def.js +0 -32
- package/tools/definitions/get_native_chat_feature_detail_def.js.map +0 -1
- package/tools/definitions/get_native_live_api_def.js +0 -23
- package/tools/definitions/get_native_live_api_def.js.map +0 -1
- package/tools/definitions/get_native_live_uikit_extra_features_def.js +0 -87
- package/tools/definitions/get_native_live_uikit_extra_features_def.js.map +0 -1
- package/tools/definitions/get_native_live_uikit_integration_def.js +0 -49
- package/tools/definitions/get_native_live_uikit_integration_def.js.map +0 -1
- package/tools/definitions/get_native_live_uikit_interaction_def.js +0 -74
- package/tools/definitions/get_native_live_uikit_interaction_def.js.map +0 -1
- package/tools/definitions/get_trtc_native_api_def.js +0 -16
- package/tools/definitions/get_trtc_native_api_def.js.map +0 -1
- package/tools/definitions/get_web_call_uikit_api_def.js +0 -23
- package/tools/definitions/get_web_call_uikit_api_def.js.map +0 -1
- package/tools/definitions/get_web_chat_uikit_init_def.js +0 -23
- package/tools/definitions/get_web_chat_uikit_init_def.js.map +0 -1
- package/tools/definitions/get_web_create_group_doc_def.js +0 -18
- package/tools/definitions/get_web_create_group_doc_def.js.map +0 -1
- package/tools/definitions/get_web_live_state_detail_def.js +0 -19
- package/tools/definitions/get_web_live_state_detail_def.js.map +0 -1
- package/tools/definitions/get_web_live_uikit_component_detail_def.js +0 -27
- package/tools/definitions/get_web_live_uikit_component_detail_def.js.map +0 -1
- package/tools/definitions/get_web_room_feature_detail_def.js +0 -95
- package/tools/definitions/get_web_room_feature_detail_def.js.map +0 -1
- package/tools/definitions/get_web_room_state_detail_def.js +0 -19
- package/tools/definitions/get_web_room_state_detail_def.js.map +0 -1
- package/tools/definitions/record_prompt_def.js +0 -53
- package/tools/definitions/record_prompt_def.js.map +0 -1
- package/tools/definitions/record_result_def.js +0 -30
- package/tools/definitions/record_result_def.js.map +0 -1
- package/tools/live/get-native-live-uikit-integration.js +0 -101
- package/tools/live/get-native-live-uikit-integration.js.map +0 -1
- package/tools/live/get-web-live-component-detail.js +0 -31
- package/tools/live/get-web-live-component-detail.js.map +0 -1
- package/tools/live/get-web-live-state-detail.js +0 -31
- package/tools/live/get-web-live-state-detail.js.map +0 -1
- package/tools/live/get-web-live-uikit-integration.js +0 -52
- package/tools/live/get-web-live-uikit-integration.js.map +0 -1
- package/tools/live/get_native_live_uikit_extra_features.js +0 -105
- package/tools/live/get_native_live_uikit_extra_features.js.map +0 -1
- package/tools/live/get_native_live_uikit_interaction.js +0 -101
- package/tools/live/get_native_live_uikit_interaction.js.map +0 -1
- package/tools/native_live/get-native-live-api.js +0 -31
- package/tools/native_live/get-native-live-api.js.map +0 -1
- package/tools/room/get-web-room-feature-detail.js.map +0 -1
- package/tools/room/get-web-room-integration.js.map +0 -1
- package/tools/rtcengine/get-rtcengine-web-sdk-integration.js +0 -28
- package/tools/rtcengine/get-rtcengine-web-sdk-integration.js.map +0 -1
- package/tools/rtcengine/get-trtc-sdk-faq.js +0 -32
- package/tools/rtcengine/get-trtc-sdk-faq.js.map +0 -1
- package/tools/rtcengine/get-trtc-web-sdk-api.js +0 -28
- package/tools/rtcengine/get-trtc-web-sdk-api.js.map +0 -1
- package/tools/rtcengine/get-trtc-web-sdk-faq.js +0 -30
- package/tools/rtcengine/get-trtc-web-sdk-faq.js.map +0 -1
- package/tools/rtcengine/get-trtc-web-sdk-integration.js +0 -29
- package/tools/rtcengine/get-trtc-web-sdk-integration.js.map +0 -1
- package/tools/rtcengine/get-trtc-web-sdk-plugin.js +0 -45
- package/tools/rtcengine/get-trtc-web-sdk-plugin.js.map +0 -1
- package/tools/trtc/get-trtc-native-api.js +0 -31
- package/tools/trtc/get-trtc-native-api.js.map +0 -1
- package/utils/handle-component-name.js +0 -33
- package/utils/handle-component-name.js.map +0 -1
- /package/resource/doc/{chatuikit/android/workflow.md → callkit/core-sdk/.gitkeep} +0 -0
- /package/resource/doc/{tuicallkit/faq/common/error_code.md → callkit/faq/common/error-code.md} +0 -0
- /package/resource/doc/{tuicallkit/react/faq.md → callkit/faq/web-faq.md} +0 -0
- /package/resource/doc/{chatuikit → chatkit}/faq/common/server_error_code.md +0 -0
- /package/resource/doc/{chatuikit → chatkit}/faq/web_sdk/error_code.md +0 -0
- /package/resource/doc/{chatuikit → chatkit}/flutter/faq.md +0 -0
- /package/resource/doc/{chatuikit → chatkit}/react/faq.md +0 -0
- /package/resource/doc/roomkit/faq/common/{error_code.md → error-code.md} +0 -0
|
@@ -0,0 +1,574 @@
|
|
|
1
|
+
This document guides developers through building a voice chat room application with host broadcasting and audience participation features using the **AtomicXCore** SDK's `LiveListStore` and `LiveSeatStore`.
|
|
2
|
+
|
|
3
|
+
## Core Concepts
|
|
4
|
+
| **Core Concept** | **Type** | **Core Responsibilities & Description** |
|
|
5
|
+
| --- | --- | --- |
|
|
6
|
+
| `LiveListStore` | `abstract class` | - `createLive()`: Start live stream as host.<br>- `endLive()`: End live stream as host.<br>- `joinLive()`: Audience joins live room.<br>- `leaveLive()`: Leave live room. |
|
|
7
|
+
| `LiveInfo` | `data class` | - `liveID`: Unique room identifier.<br>- `seatTemplate`: Layout template. |
|
|
8
|
+
| `LiveSeatStore` | `abstract class` | Core seat management class. Manages all seat information and seat-related operations in the room.<br>Provides a real-time seat list data stream via liveSeatState.seatList. |
|
|
9
|
+
| `LiveSeatState` | `data class` | Represents the current state of all seats.<br>- `seatList`: a StateFlow containing the real-time seat list.<br>- `speakingUsers`: users currently speaking and their volume. |
|
|
10
|
+
| `SeatInfo` | `data class` | Data model for a single seat. The seat list (seatList) emitted by LiveSeatStore is a list of SeatInfo objects.<br>Key fields:<br>- `index`: seat position.<br>- `isLocked`: whether the seat is locked.<br>- `userInfo`: user information for the seat. If the seat is empty, this field is empty. |
|
|
11
|
+
| `SeatUserInfo` | `data class` | Detailed data model for the user occupying a seat. When a user successfully takes a seat, the userInfo field in SeatInfo is populated.<br>Key fields:<br>- `userID`: unique user ID.<br>- `userName`: user nickname.<br>- `avatarURL`: user avatar URL.<br>- `microphoneStatus`: microphone status (on/off).<br>- `cameraStatus`: camera status (on/off). |
|
|
12
|
+
|
|
13
|
+
## Prerequisites
|
|
14
|
+
|
|
15
|
+
### Step 1: Activate the Service
|
|
16
|
+
|
|
17
|
+
See Activate Service to obtain either the trial or paid version of the SDK.Then, go to [the Console](https://console.trtc.io/app) for application management, and get the following:
|
|
18
|
+
- `SDKAppID`: Application identifier (required). Tencent Cloud uses `SDKAppId` for billing and details.
|
|
19
|
+
|
|
20
|
+
- `SDKSecretKey`: Application secret key, used to initialize the configuration file with secret information.
|
|
21
|
+
|
|
22
|
+
### Step 2: Import AtomicXCore into Your Project
|
|
23
|
+
|
|
24
|
+
**Install the component**: Add the dependency `implementation 'com.tencent.atomicx:atomicxcore:latest`' to your `build.gradle` file, then perform a **Gradle****Sync**.
|
|
25
|
+
``` gradle
|
|
26
|
+
dependencies {
|
|
27
|
+
implementation 'io.trtc.uikit:atomicx-core:latest.release'
|
|
28
|
+
api "io.trtc.uikit:rtc_room_engine:3.4.0.1306"
|
|
29
|
+
api "io.trtc.uikit:atomicx-core:3.4.0.1307"
|
|
30
|
+
api "com.tencent.liteav:LiteAVSDK_Professional:12.8.0.19279"
|
|
31
|
+
api "com.tencent.imsdk:imsdk-plus:8.7.7201"
|
|
32
|
+
// Other dependencies...
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Step 3: Implement Login Logic
|
|
37
|
+
|
|
38
|
+
Call `LoginStore.shared.login` in your project to complete authentication. **This is required before using any functionality of AtomicXCore**.
|
|
39
|
+
|
|
40
|
+
> **Note:**
|
|
41
|
+
>
|
|
42
|
+
|
|
43
|
+
> We recommend calling `LoginStore.shared.login` after your app's own user authentication is successful to ensure clear and consistent login logic.
|
|
44
|
+
>
|
|
45
|
+
|
|
46
|
+
``` java
|
|
47
|
+
import android.os.Bundle
|
|
48
|
+
import androidx.appcompat.app.AppCompatActivity
|
|
49
|
+
import io.trtc.tuikit.atomicxcore.api.login.LoginStore
|
|
50
|
+
import io.trtc.tuikit.atomicxcore.api.CompletionHandler
|
|
51
|
+
import android.util.Log
|
|
52
|
+
|
|
53
|
+
class MainActivity : AppCompatActivity() {
|
|
54
|
+
override fun onCreate(savedInstanceState: Bundle?) {
|
|
55
|
+
super.onCreate(savedInstanceState)
|
|
56
|
+
|
|
57
|
+
LoginStore.shared.login(
|
|
58
|
+
this, // context
|
|
59
|
+
1400000001, // Replace with your SDKAppID
|
|
60
|
+
"test_001", // Replace with your UserID
|
|
61
|
+
"xxxxxxxxxxx", // Replace with your UserSig
|
|
62
|
+
object : CompletionHandler {
|
|
63
|
+
override fun onSuccess() {
|
|
64
|
+
// Handle login success
|
|
65
|
+
Log.d("Login", "login success")
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
override fun onFailure(code: Int, desc: String) {
|
|
69
|
+
// Handle login failure
|
|
70
|
+
Log.e("Login", "login failed, code: $code, error: $desc")
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Login API Parameter Description**
|
|
79
|
+
| Parameter | Type | Description |
|
|
80
|
+
| --- | --- | --- |
|
|
81
|
+
| `sdkAppID` | `Int` | Get this from [TRTC console > Application management](https://console.trtc.io/app). |
|
|
82
|
+
| `userID` | `String` | The unique ID for the current user. Must contain only English letters, numbers, hyphens, and underscores. |
|
|
83
|
+
| `userSig` | `String` | A ticket for Tencent Cloud authentication. Please note:<br>- **Development Environment**: You can use the local `GenerateTestUserSig.genTestSig` function to generate a UserSig or generate a temporary UserSig via the [UserSig Generation Tool](https://console.trtc.io/usersig).<br>- **Production Environment**: To prevent key leakage, you must use a server-side method to generate UserSig. For details, see Generating UserSig on the Server.<br>- For more information, see How to Calculate and Use UserSig. |
|
|
84
|
+
|
|
85
|
+
## Building a Basic Voice Chat Room
|
|
86
|
+
|
|
87
|
+
### Step 1: Host Room Creation
|
|
88
|
+
|
|
89
|
+
Follow the steps below to quickly set up a voice chat room as the host.
|
|
90
|
+
|
|
91
|
+
#### **1. Initialize the Seat **`Store`
|
|
92
|
+
|
|
93
|
+
In your host `Activity`, create a `LiveSeatStore` instance. Observe changes in `liveSeatState.seatList` to get real-time mic seat data and update your UI.
|
|
94
|
+
``` java
|
|
95
|
+
import android.os.Bundle
|
|
96
|
+
import android.util.Log
|
|
97
|
+
import androidx.appcompat.app.AppCompatActivity
|
|
98
|
+
import io.trtc.tuikit.atomicxcore.api.device.DeviceStore
|
|
99
|
+
import io.trtc.tuikit.atomicxcore.api.live.LiveListStore
|
|
100
|
+
import io.trtc.tuikit.atomicxcore.api.live.LiveSeatStore
|
|
101
|
+
import kotlinx.coroutines.CoroutineScope
|
|
102
|
+
import kotlinx.coroutines.Dispatchers
|
|
103
|
+
import kotlinx.coroutines.launch
|
|
104
|
+
|
|
105
|
+
// YourHostActivity represents your Host Activity
|
|
106
|
+
class YourHostActivity : AppCompatActivity() {
|
|
107
|
+
|
|
108
|
+
private lateinit var liveListStore: LiveListStore
|
|
109
|
+
private lateinit var liveSeatStore: LiveSeatStore
|
|
110
|
+
private lateinit var deviceStore: DeviceStore
|
|
111
|
+
private val liveID = "test_voice_room_001"
|
|
112
|
+
|
|
113
|
+
override fun onCreate(savedInstanceState: Bundle?) {
|
|
114
|
+
super.onCreate(savedInstanceState)
|
|
115
|
+
setContentView(R.layout.activity_host) // Assume you have your own layout
|
|
116
|
+
|
|
117
|
+
// 1. Initialize Stores
|
|
118
|
+
liveListStore = LiveListStore.shared()
|
|
119
|
+
liveSeatStore = LiveSeatStore.create(liveID)
|
|
120
|
+
deviceStore = DeviceStore.shared()
|
|
121
|
+
|
|
122
|
+
// 2. Listen for mic seat list changes
|
|
123
|
+
observeSeatList()
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
private fun observeSeatList() {
|
|
127
|
+
// Listen for seatList changes and update your mic seat UI
|
|
128
|
+
CoroutineScope(Dispatchers.Main).launch {
|
|
129
|
+
liveSeatStore.liveSeatState.seatList.collect { seatInfoList ->
|
|
130
|
+
// Render your mic seat UI here based on seatInfoList
|
|
131
|
+
// Example: updateMicSeatView(seatInfoList)
|
|
132
|
+
Log.d("HostActivity", "Seat list updated: ${seatInfoList.size} seats")
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
#### **2. **Turn On Microphone
|
|
140
|
+
|
|
141
|
+
Turn On Microphone by calling the `openLocalMicrophone` method from `DeviceStore`:
|
|
142
|
+
``` java
|
|
143
|
+
import androidx.appcompat.app.AppCompatActivity
|
|
144
|
+
import io.trtc.tuikit.atomicxcore.api.device.DeviceStore
|
|
145
|
+
|
|
146
|
+
class YourHostActivity : AppCompatActivity() {
|
|
147
|
+
// ... Other code ...
|
|
148
|
+
|
|
149
|
+
private fun openDevices() {
|
|
150
|
+
// 1. Turn on the microphone
|
|
151
|
+
DeviceStore.shared().openLocalMicrophone(completion = null)
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
#### **3. Start Voice Chat**
|
|
157
|
+
|
|
158
|
+
Start the live voice chat by calling the `createLive` method of `LiveListStore`:
|
|
159
|
+
``` java
|
|
160
|
+
import android.os.Bundle
|
|
161
|
+
import android.util.Log
|
|
162
|
+
import androidx.appcompat.app.AppCompatActivity
|
|
163
|
+
import io.trtc.tuikit.atomicxcore.api.live.LiveInfo
|
|
164
|
+
import io.trtc.tuikit.atomicxcore.api.live.LiveInfoCompletionHandler
|
|
165
|
+
import io.trtc.tuikit.atomicxcore.api.live.TakeSeatMode
|
|
166
|
+
|
|
167
|
+
class YourHostActivity : AppCompatActivity() {
|
|
168
|
+
// ... Other code ...
|
|
169
|
+
|
|
170
|
+
override fun onCreate(savedInstanceState: Bundle?) {
|
|
171
|
+
super.onCreate(savedInstanceState)
|
|
172
|
+
// ... Other code ...
|
|
173
|
+
|
|
174
|
+
// Start voice chat
|
|
175
|
+
startLive()
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
private fun startLive() {
|
|
179
|
+
val liveInfo = LiveInfo().apply {
|
|
180
|
+
// 1. Set room id
|
|
181
|
+
liveID = this@YourHostActivity.liveID
|
|
182
|
+
// 2. Set room name
|
|
183
|
+
liveName = "test voice room"
|
|
184
|
+
// 3. Set the live streaming template to the voice chat room template, with 9 seat.
|
|
185
|
+
seatTemplate = SeatLayoutTemplate.AudioSalon(seatCount = 9)
|
|
186
|
+
// 4. Set mic-taking mode, e.g., apply to take mic
|
|
187
|
+
seatMode = TakeSeatMode.APPLY
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// 8. Call createLive to start the stream
|
|
191
|
+
liveListStore.createLive(liveInfo, object : LiveInfoCompletionHandler {
|
|
192
|
+
override fun onFailure(code: Int, desc: String) {
|
|
193
|
+
Log.e("Live", "Response startLive onError: $desc")
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
override fun onSuccess(liveInfo: LiveInfo) {
|
|
197
|
+
Log.d("Live", "Response startLive onSuccess")
|
|
198
|
+
// After successful creation, the Host is on the mic by default, now you can call unmuteMicrophone
|
|
199
|
+
liveSeatStore.unmuteMicrophone(null)
|
|
200
|
+
}
|
|
201
|
+
})
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**LiveInfo Parameter Description**
|
|
207
|
+
| **Parameter Name** | **Type** | **Required** | **Description** |
|
|
208
|
+
| --- | --- | --- | --- |
|
|
209
|
+
| `liveID` | `String` | Required | Unique identifier for the live room |
|
|
210
|
+
| `liveName` | `String` | Optional | Title of the live room |
|
|
211
|
+
| `notice` | `String` | Optional | Announcement information for the live room |
|
|
212
|
+
| `isMessageDisable` | `Boolean` | Optional | Mute status (`true`: muted, `false`: not muted) |
|
|
213
|
+
| `isPublicVisible` | `Boolean` | Optional | Public visibility (`true`: visible, `false`: hidden) |
|
|
214
|
+
| `seatMode` | [TakeSeatMode](https://tencent-rtc.github.io/TUIKit_Android/-atomic-x%20-core%20-a-p-i/io.trtc.tuikit.atomicxcore.api.live/-take-seat-mode/index.html) | Optional | Mic seat mode (`FREE`: free to take seat, `APPLY`: apply to take seat) |
|
|
215
|
+
| `seatTemplate` | `SeatLayoutTemplate` | Required | Mic seat layout template ID |
|
|
216
|
+
| `coverURL` | `String` | Optional | Cover image URL for the live room |
|
|
217
|
+
| `backgroundURL` | `String` | Optional | Background image URL for the live room |
|
|
218
|
+
| `categoryList` | `List<Int>` | Optional | Category tag list for the live room |
|
|
219
|
+
| `activityStatus` | `Int` | Optional | Live activity status |
|
|
220
|
+
|
|
221
|
+
#### **4. Build the Mic Seat UI**
|
|
222
|
+
|
|
223
|
+
> **Note:**
|
|
224
|
+
>
|
|
225
|
+
|
|
226
|
+
> For the complete business logic of mic seat UI effects, refer to the open-source [SeatGridView.kt](https://github.com/Tencent-RTC/TUILiveKit/blob/main/Android/tuilivekit/src/main/java/com/trtc/uikit/livekit/voiceroomcore/SeatGridView.kt) in the TUILiveKit project.
|
|
227
|
+
>
|
|
228
|
+
|
|
229
|
+
Use the `LiveSeatStore` instance to observe changes in `liveSeatState.seatList` and update your UI in real time. In your Activity (such as `YourAnchorActivity` or `YourAudienceActivity`), observe the data as follows:
|
|
230
|
+
``` java
|
|
231
|
+
import android.os.Bundle
|
|
232
|
+
import android.util.Log
|
|
233
|
+
import androidx.appcompat.app.AppCompatActivity
|
|
234
|
+
import kotlinx.coroutines.CoroutineScope
|
|
235
|
+
import kotlinx.coroutines.Dispatchers
|
|
236
|
+
import kotlinx.coroutines.launch
|
|
237
|
+
|
|
238
|
+
class YourHostActivity : AppCompatActivity() {
|
|
239
|
+
// ... Other code ...
|
|
240
|
+
|
|
241
|
+
override fun onCreate(savedInstanceState: Bundle?) {
|
|
242
|
+
super.onCreate(savedInstanceState)
|
|
243
|
+
// ... Other code ...
|
|
244
|
+
|
|
245
|
+
// Listen for seatList changes
|
|
246
|
+
observeSeatList()
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
private fun observeSeatList() {
|
|
250
|
+
// Listen for seatList changes and update your mic seat UI
|
|
251
|
+
CoroutineScope(Dispatchers.Main).launch {
|
|
252
|
+
liveSeatStore.liveSeatState.seatList.collect { seatInfoList ->
|
|
253
|
+
// seatInfoList is the latest mic seat list (List<SeatInfo>), render your mic seat UI here based on seatInfoList
|
|
254
|
+
Log.d("HostActivity", "Seat list updated: ${seatInfoList.size} seats")
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
#### **5. End Voice Chat**
|
|
262
|
+
|
|
263
|
+
To end the voice chat, call the `endLive` method of `LiveListStore`. The SDK will handle stopping the stream and destroying the room.
|
|
264
|
+
``` java
|
|
265
|
+
import android.util.Log
|
|
266
|
+
import androidx.appcompat.app.AppCompatActivity
|
|
267
|
+
import com.tencent.cloud.tuikit.engine.extension.TUILiveListManager
|
|
268
|
+
import io.trtc.tuikit.atomicxcore.api.live.StopLiveCompletionHandler
|
|
269
|
+
|
|
270
|
+
class YourHostActivity : AppCompatActivity() {
|
|
271
|
+
// ... Other code ...
|
|
272
|
+
|
|
273
|
+
// End voice chat
|
|
274
|
+
private fun stopLive() {
|
|
275
|
+
liveListStore.endLive(object : StopLiveCompletionHandler {
|
|
276
|
+
override fun onSuccess(statisticsData: TUILiveListManager.LiveStatisticsData) {
|
|
277
|
+
Log.d("Live", "endLive success, duration: ${statisticsData.liveDuration}")
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
override fun onFailure(code: Int, desc: String) {
|
|
281
|
+
Log.e("Live", "endLive error: $desc")
|
|
282
|
+
}
|
|
283
|
+
})
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// Ensure this is also called when the Activity is destroyed
|
|
287
|
+
override fun onDestroy() {
|
|
288
|
+
super.onDestroy()
|
|
289
|
+
stopLive()
|
|
290
|
+
Log.d("Live", "YourHostActivity onDestroy")
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### Step 2: Audience Joins the Voice Chat Room
|
|
296
|
+
|
|
297
|
+
Follow these steps to allow audience members to join the voice chat room.
|
|
298
|
+
|
|
299
|
+
#### **1. Initialize the Mic Seat Store**
|
|
300
|
+
|
|
301
|
+
In your audience `Activity`, create a `LiveSeatStore` instance and observe changes in `liveSeatState.seatList` to update the mic seat UI.
|
|
302
|
+
``` java
|
|
303
|
+
import io.trtc.tuikit.atomicxcore.api.live.LiveListStore
|
|
304
|
+
import io.trtc.tuikit.atomicxcore.api.live.LiveSeatStore
|
|
305
|
+
import android.os.Bundle
|
|
306
|
+
import androidx.appcompat.app.AppCompatActivity
|
|
307
|
+
import kotlinx.coroutines.CoroutineScope
|
|
308
|
+
import kotlinx.coroutines.Dispatchers
|
|
309
|
+
import kotlinx.coroutines.launch
|
|
310
|
+
import android.util.Log
|
|
311
|
+
|
|
312
|
+
// YourAudienceActivity represents your Audience Activity
|
|
313
|
+
class YourAudienceActivity : AppCompatActivity() {
|
|
314
|
+
|
|
315
|
+
private lateinit var liveListStore: LiveListStore
|
|
316
|
+
private lateinit var liveSeatStore: LiveSeatStore
|
|
317
|
+
private val liveID = "test_voice_room_001" // Ensure liveID matches the Host's
|
|
318
|
+
|
|
319
|
+
override fun onCreate(savedInstanceState: Bundle?) {
|
|
320
|
+
super.onCreate(savedInstanceState)
|
|
321
|
+
setContentView(R.layout.activity_audience) // Assume you have your own layout
|
|
322
|
+
|
|
323
|
+
// 1. Initialize Stores
|
|
324
|
+
liveListStore = LiveListStore.shared()
|
|
325
|
+
liveSeatStore = LiveSeatStore.create(liveID)
|
|
326
|
+
|
|
327
|
+
// 2. Listen for mic seat list changes
|
|
328
|
+
observeSeatList()
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
private fun observeSeatList() {
|
|
332
|
+
// 3. Listen for seatList changes and update your mic seat UI
|
|
333
|
+
CoroutineScope(Dispatchers.Main).launch {
|
|
334
|
+
liveSeatStore.liveSeatState.seatList.collect { seatInfoList ->
|
|
335
|
+
// Render your mic seat UI here based on seatInfoList
|
|
336
|
+
// Example: updateMicSeatView(seatInfoList)
|
|
337
|
+
Log.d("AudienceActivity", "Seat list updated: ${seatInfoList.size} seats")
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
#### **2. Join Voice Chat Room**
|
|
345
|
+
|
|
346
|
+
Join the voice chat room by calling the `joinLive` method of `LiveListStore`:
|
|
347
|
+
``` java
|
|
348
|
+
import android.os.Bundle
|
|
349
|
+
import androidx.appcompat.app.AppCompatActivity
|
|
350
|
+
import android.util.Log
|
|
351
|
+
import io.trtc.tuikit.atomicxcore.api.live.LiveInfo
|
|
352
|
+
import io.trtc.tuikit.atomicxcore.api.live.LiveInfoCompletionHandler
|
|
353
|
+
|
|
354
|
+
// YourAudienceActivity represents your Audience Activity
|
|
355
|
+
class YourAudienceActivity : AppCompatActivity() {
|
|
356
|
+
|
|
357
|
+
// ... Other code ...
|
|
358
|
+
override fun onCreate(savedInstanceState: Bundle?) {
|
|
359
|
+
super.onCreate(savedInstanceState)
|
|
360
|
+
setContentView(R.layout.activity_audience) // Assume you have your own layout
|
|
361
|
+
// ... Other code ...
|
|
362
|
+
|
|
363
|
+
// Enter voice chat room
|
|
364
|
+
joinLive()
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
private fun joinLive() {
|
|
368
|
+
// 1. Call joinLive to enter the voice chat room
|
|
369
|
+
liveListStore.joinLive(liveID, object : LiveInfoCompletionHandler {
|
|
370
|
+
override fun onSuccess(liveInfo: LiveInfo) {
|
|
371
|
+
Log.d("Live", "joinLive success")
|
|
372
|
+
}
|
|
373
|
+
override fun onFailure(code: Int, desc: String) {
|
|
374
|
+
Log.e("Live", "joinLive error: $desc")
|
|
375
|
+
}
|
|
376
|
+
})
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
#### **3. Build the Mic Seat UI**
|
|
382
|
+
|
|
383
|
+
The process for building the mic seat UI as an audience member is the same as for the host. Refer to the host Build the Mic Seat UI.
|
|
384
|
+
|
|
385
|
+
#### **4. Leave the Voice Chat Room**
|
|
386
|
+
|
|
387
|
+
When an audience member leaves the voice chat room, call the `leaveLive` method of `LiveListStore`:
|
|
388
|
+
``` java
|
|
389
|
+
import android.util.Log
|
|
390
|
+
import androidx.appcompat.app.AppCompatActivity
|
|
391
|
+
import io.trtc.tuikit.atomicxcore.api.CompletionHandler
|
|
392
|
+
|
|
393
|
+
// YourAudienceActivity represents your Audience Activity
|
|
394
|
+
class YourAudienceActivity : AppCompatActivity() {
|
|
395
|
+
// ... Other code ...
|
|
396
|
+
|
|
397
|
+
private fun leaveLive() {
|
|
398
|
+
liveListStore.leaveLive(object : CompletionHandler {
|
|
399
|
+
override fun onSuccess() {
|
|
400
|
+
Log.d("Live", "leaveLive success")
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
override fun onFailure(code: Int, desc: String) {
|
|
404
|
+
Log.e("Live", "leaveLive error: $desc")
|
|
405
|
+
}
|
|
406
|
+
})
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
// Ensure this is also called when the Activity is destroyed
|
|
410
|
+
override fun onDestroy() {
|
|
411
|
+
super.onDestroy()
|
|
412
|
+
leaveLive()
|
|
413
|
+
Log.d("Live", "YourAudienceActivity onDestroy")
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
### Run and Test
|
|
419
|
+
|
|
420
|
+
After completing the steps above, you will have a basic voice chat live streaming setup. For more advanced features, see the "Enrich Voice Chat Room Scenarios" section.
|
|
421
|
+
|
|
422
|
+
## Advanced Features
|
|
423
|
+
|
|
424
|
+
### **Implementing Speaking Wave Animation for Mic Seat Users**
|
|
425
|
+
|
|
426
|
+
In voice chat rooms, it is common to show a wave animation on the avatar of users who are speaking, so everyone can see who is currently talking. `LiveSeatStore` provides a `speakingUsers` data stream for this purpose.
|
|
427
|
+
|
|
428
|
+
#### Example
|
|
429
|
+
|
|
430
|
+
####
|
|
431
|
+
|
|
432
|
+
#### Implementation
|
|
433
|
+
|
|
434
|
+
> **Note:**
|
|
435
|
+
>
|
|
436
|
+
|
|
437
|
+
> For a complete implementation of the speaking wave animation, refer to [SeatGridView.kt](https://github.com/Tencent-RTC/TUILiveKit/blob/main/Android/tuilivekit/src/main/java/com/trtc/uikit/livekit/voiceroomcore/SeatGridView.kt) in the open-source TUILiveKit project.
|
|
438
|
+
>
|
|
439
|
+
|
|
440
|
+
In `YourAnchorActivity`, observe changes in `speakingUsers` and update the UI to reflect the speaking status:
|
|
441
|
+
``` java
|
|
442
|
+
import android.os.Bundle
|
|
443
|
+
import android.util.Log
|
|
444
|
+
import androidx.appcompat.app.AppCompatActivity
|
|
445
|
+
import kotlinx.coroutines.CoroutineScope
|
|
446
|
+
import kotlinx.coroutines.Dispatchers
|
|
447
|
+
import kotlinx.coroutines.launch
|
|
448
|
+
|
|
449
|
+
// In YourHostActivity or YourAudienceActivity
|
|
450
|
+
class YourHostActivity : AppCompatActivity() {
|
|
451
|
+
// ... (omitting other code) ...
|
|
452
|
+
|
|
453
|
+
override fun onCreate(savedInstanceState: Bundle?) {
|
|
454
|
+
super.onCreate(savedInstanceState)
|
|
455
|
+
// ... (omitting other code) ...
|
|
456
|
+
|
|
457
|
+
// Listen for speakingUsers changes
|
|
458
|
+
observeSpeakingUsersState()
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
private fun observeSpeakingUsersState() {
|
|
462
|
+
// Listen for speakingUsers changes and update the "currently speaking" status
|
|
463
|
+
CoroutineScope(Dispatchers.Main).launch {
|
|
464
|
+
liveSeatStore.liveSeatState.speakingUsers.collect { speakingUserSet ->
|
|
465
|
+
// Pass the set of "currently speaking" user IDs to the UI, update UI state
|
|
466
|
+
Log.d("HostActivity", "Speaking users updated: ${speakingUserSet.size} users")
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
### Synchronizing Custom State in Live Streaming Room
|
|
474
|
+
|
|
475
|
+
In Live Streaming Room, hosts may need to synchronize custom information with all participants, such as the current room topic or background music. The `metaData` feature of `LiveListStore` supports this use case.
|
|
476
|
+
|
|
477
|
+
#### Implementation
|
|
478
|
+
1. On the host side, set custom information using the `updateLiveMetaData` API. `AtomicXCore` synchronizes these changes in real time to all participants.
|
|
479
|
+
|
|
480
|
+
2. On the audience side, subscribe to `LiveListState.currentLive` and listen for changes in `metaData`. When a relevant key is updated, parse its value and update your business logic.
|
|
481
|
+
|
|
482
|
+
#### Code Example
|
|
483
|
+
``` kotlin
|
|
484
|
+
import io.trtc.tuikit.atomicxcore.api.LiveListStore
|
|
485
|
+
import io.trtc.tuikit.atomicxcore.api.CompletionHandler
|
|
486
|
+
import com.google.gson.Gson
|
|
487
|
+
import io.trtc.tuikit.atomicxcore.api.MetaDataCompletionHandler
|
|
488
|
+
import io.trtc.tuikit.atomicxcore.api.LiveListStore
|
|
489
|
+
|
|
490
|
+
// 1. Define a background music model (using data class)
|
|
491
|
+
data class MusicModel(
|
|
492
|
+
val musicId: String,
|
|
493
|
+
val musicName: String
|
|
494
|
+
)
|
|
495
|
+
|
|
496
|
+
// 2. Host side: Add a method to push background music in your Host business logic
|
|
497
|
+
fun updateBackgroundMusic(music: MusicModel) {
|
|
498
|
+
val gson = Gson()
|
|
499
|
+
val jsonString = gson.toJson(music) ?: ""
|
|
500
|
+
|
|
501
|
+
// The metaData to be updated
|
|
502
|
+
val metaData = hashMapOf("music_info" to jsonString)
|
|
503
|
+
|
|
504
|
+
// Update metaData
|
|
505
|
+
LiveListStore.shared()
|
|
506
|
+
.updateLiveMetaData(
|
|
507
|
+
metaData,
|
|
508
|
+
object : CompletionHandler {
|
|
509
|
+
override fun onSuccess() {
|
|
510
|
+
print("Background music ${music.musicName} pushed successfully")
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
override fun onFailure(code: Int, desc: String) {
|
|
514
|
+
print("Failed to push background music: $desc")
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
)
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
// 3. Audience side: Add a method to listen for background music changes in your Audience business logic
|
|
521
|
+
private fun subscribeToDataUpdates() {
|
|
522
|
+
CoroutineScope(Dispatchers.Main).launch {
|
|
523
|
+
LiveListStore.shared()
|
|
524
|
+
.liveState
|
|
525
|
+
.currentLive
|
|
526
|
+
.map { it.metaData }
|
|
527
|
+
.collect {
|
|
528
|
+
val musicInfo = it["music_info"]
|
|
529
|
+
// Refresh business state, e.g., play new background music
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
## Enrich Voice Chat Room Scenarios
|
|
536
|
+
|
|
537
|
+
After implementing the basic voice chat room, you can add more interactive features by referring to the following guides:
|
|
538
|
+
| **Feature** | **Feature Description** | **Feature Stores** | **Implementation Guide** |
|
|
539
|
+
| --- | --- | --- | --- |
|
|
540
|
+
| **Enable Audience to Take Mic Seat** | Audience can apply to take a mic seat and interact with the host in real time. | [CoGuestStore](https://tencent-rtc.github.io/TUIKit_Android/-atomic-x%20-core%20-a-p-i/io.trtc.tuikit.atomicxcore.api.live/-co-guest-store/index.html) | Implementation |
|
|
541
|
+
| **Host Cross-Room Connection & PK** | Hosts from different rooms can connect for interaction or PK. | [CoHostStore](https://tencent-rtc.github.io/TUIKit_Android/-atomic-x%20-core%20-a-p-i/io.trtc.tuikit.atomicxcore.api.live/-co-host-store/index.html)<br>[BattleStore](https://tencent-rtc.github.io/TUIKit_Android/-atomic-x%20-core%20-a-p-i/io.trtc.tuikit.atomicxcore.api.live/-battle-store/index.html) | Implementation |
|
|
542
|
+
| **Add Barrage Chat** | Members in the room can send and receive real-time text messages. | [BarrageStore](https://tencent-rtc.github.io/TUIKit_Android/-atomic-x%20-core%20-a-p-i/io.trtc.tuikit.atomicxcore.api.barrage/-barrage-store/index.html) | Implementation |
|
|
543
|
+
| **Build Gift System** | Audience can send virtual gifts to hosts to increase engagement and fun. | [GiftStore](https://tencent-rtc.github.io/TUIKit_Android/-atomic-x%20-core%20-a-p-i/io.trtc.tuikit.atomicxcore.api.gift/-gift-store/index.html) | Implementation |
|
|
544
|
+
|
|
545
|
+
## API Documentation
|
|
546
|
+
| **Store/Component** | **Feature Description** | **API Documentation** |
|
|
547
|
+
| --- | --- | --- |
|
|
548
|
+
| `LiveListStore` | Manages the full lifecycle of live rooms: create, join, leave, destroy rooms; query room list; modify live info (name, announcement, etc.); listen to live status (such as being kicked out, ended). | [API Documentation](https://tencent-rtc.github.io/TUIKit_Android/-atomic-x%20-core%20-a-p-i/io.trtc.tuikit.atomicxcore.api.live/-live-list-store/index.html) |
|
|
549
|
+
| `LiveSeatStore` | Core mic seat management: manage mic seat list, user status, seat operations (take seat, leave seat, kick, lock, toggle microphone/camera, etc.), listen to mic seat events. | [API Documentation](https://tencent-rtc.github.io/TUIKit_Android/-atomic-x%20-core%20-a-p-i/io.trtc.tuikit.atomicxcore.api.live/-live-seat-store/index.html) |
|
|
550
|
+
| `DeviceStore` | Audio/video device control: microphone (toggle/volume), camera (toggle/switch/quality), screen sharing, real-time device status monitoring. | [API Documentation](https://tencent-rtc.github.io/TUIKit_Android/-atomic-x%20-core%20-a-p-i/io.trtc.tuikit.atomicxcore.api.device/-device-store/index.html) |
|
|
551
|
+
| `CoGuestStore` | Audience co-host management: co-host application/invitation/approval/rejection, member permission control (microphone/camera), status synchronization. | [API Documentation](https://tencent-rtc.github.io/TUIKit_Android/-atomic-x%20-core%20-a-p-i/io.trtc.tuikit.atomicxcore.api.live/-co-guest-store/index.html) |
|
|
552
|
+
| `CoHostStore` | Host cross-room connection: supports multiple layout templates (dynamic grid, etc.), initiate/accept/reject connection, manage co-host interaction. | [API Documentation](https://tencent-rtc.github.io/TUIKit_Android/-atomic-x%20-core%20-a-p-i/io.trtc.tuikit.atomicxcore.api.live/-co-host-store/index.html) |
|
|
553
|
+
| `BattleStore` | Host PK battle: initiate PK (set duration/opponent), manage PK status (start/end), synchronize scores, listen to battle results. | [API Documentation](https://tencent-rtc.github.io/TUIKit_Android/-atomic-x%20-core%20-a-p-i/io.trtc.tuikit.atomicxcore.api.live/-battle-store/index.html) |
|
|
554
|
+
| `GiftStore` | Gift interaction: get gift list, send/receive gifts, listen to gift events (including sender and gift details). | [API Documentation](https://tencent-rtc.github.io/TUIKit_Android/-atomic-x%20-core%20-a-p-i/io.trtc.tuikit.atomicxcore.api.gift/-gift-store/index.html) |
|
|
555
|
+
| `BarrageStore` | Bullet chat feature: send text/custom barrage, maintain barrage list, real-time barrage status monitoring. | [API Documentation](https://tencent-rtc.github.io/TUIKit_Android/-atomic-x%20-core%20-a-p-i/io.trtc.tuikit.atomicxcore.api.barrage/-barrage-store/index.html) |
|
|
556
|
+
| `LikeStore` | Like interaction: send likes, listen to like events, synchronize total like count. | [API Documentation](https://tencent-rtc.github.io/TUIKit_Android/-atomic-x%20-core%20-a-p-i/io.trtc.tuikit.atomicxcore.api.live/-like-store/index.html) |
|
|
557
|
+
| `LiveAudienceStore` | Audience management: get real-time audience list (ID/name/avatar), count audience number, listen to audience join/leave events. | [API Documentation](https://tencent-rtc.github.io/TUIKit_Android/-atomic-x%20-core%20-a-p-i/io.trtc.tuikit.atomicxcore.api.live/-live-audience-store/index.html) |
|
|
558
|
+
| `AudioEffectStore` | Audio effects: voice changer (child/male), reverb (KTV, etc.), ear monitor adjustment, real-time effect switching. | [API Documentation](https://tencent-rtc.github.io/TUIKit_Android/-atomic-x%20-core%20-a-p-i/io.trtc.tuikit.atomicxcore.api.device/-audio-effect-store/index.html) |
|
|
559
|
+
|
|
560
|
+
## FAQs
|
|
561
|
+
|
|
562
|
+
### Why is there no sound after the audience calls joinLive?
|
|
563
|
+
- **Check device permissions:** Ensure the app has system permission to use the microphone.
|
|
564
|
+
|
|
565
|
+
- **Check the host:** Confirm the host has called `DeviceStore.shared().openLocalMicrophone(null)` to enable the microphone.
|
|
566
|
+
|
|
567
|
+
- **Check the network:** Ensure the device's network connection is stable.
|
|
568
|
+
|
|
569
|
+
### Why is the mic seat list not displayed or not updating?
|
|
570
|
+
- **Check store initialization:** Make sure you have created the `LiveSeatStore` instance with the same `liveID` before calling `createLive` or `joinLive` (`LiveSeatStore.create(liveID)`).
|
|
571
|
+
|
|
572
|
+
- **Check data observation:** Ensure you are observing the `liveSeatStore.liveSeatState.seatList` data stream.
|
|
573
|
+
|
|
574
|
+
- **Check API calls:** Confirm that `createLive` (host) or `joinLive` (audience) was successfully called (check the `onSuccess` callback).
|