@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,576 @@
|
|
|
1
|
+
This document guides you 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
|
+
|
|
5
|
+
Before starting integration, please go through the following table to understand several core concepts related to `LiveSeatStore`:
|
|
6
|
+
| **Core Concepts** | **Type** | **Core Responsibilities and Description** |
|
|
7
|
+
| --- | --- | --- |
|
|
8
|
+
| [LiveSeatStore](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_live_seat_store/LiveSeatStore-class.html) | `class` | The core of seat management is responsible for managing ALL seat information and related operations in the room.<br>Expose the real-time microphone position list data stream through `liveSeatState.seatList`. |
|
|
9
|
+
| [LiveSeatState](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_live_seat_store/LiveSeatState-class.html) | `class` | Represent the current status of the microphone position.<br>- `seatList` is a `ValueListenable<List<SeatInfo>>` type that stores the real-time status of the seat position list;<br>- `speakingUsers` signifies the person currently speaking and the corresponding volume. |
|
|
10
|
+
| [SeatInfo](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_live_seat_store/SeatInfo-class.html) | `class` | The data model of one microphone position. The seat position list (`seatList`) pushed by `LiveSeatStore` consists of multiple `SeatInfo` objects. Key field:<br>- `index` (the index of the seat position).<br>- `isLocked` (whether the seat position is locked).<br>- `userInfo` (user information on the seat position. If the seat position is empty, this field is also an empty object). |
|
|
11
|
+
| [SeatUserInfo](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_live_seat_store/SeatUserInfo-class.html) | `class` | The detailed data model of the on-mic user. When a user successfully gets on mic, the `userInfo` field in `SeatInfo` will be filled with this user. Key field:<br>- `userID` (user's unique ID)<br>- `userName` (user's nickname)<br>- `avatarURL` (user's profile photo URL)<br>- `microphoneStatus` (Mic status)<br>- `cameraStatus` (Camera status). |
|
|
12
|
+
|
|
13
|
+
## Preparations
|
|
14
|
+
|
|
15
|
+
### Step 1: Activate the Services
|
|
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
|
+
1. **Install component**: Please add `atomic_x_core` dependency in your `pubspec.yaml` file, then execute `flutter pub get`.
|
|
24
|
+
|
|
25
|
+
``` yaml
|
|
26
|
+
dependencies:
|
|
27
|
+
atomic_x_core: ^3.6.0
|
|
28
|
+
```
|
|
29
|
+
2. **Configure project permissions:** Android and iOS projects all are needed to configure permissions.
|
|
30
|
+
|
|
31
|
+
【Android】
|
|
32
|
+
|
|
33
|
+
Add permission to use microphone in file `android/app/src/main/AndroidManifest.xml`.
|
|
34
|
+
``` xml
|
|
35
|
+
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
【iOS】
|
|
39
|
+
|
|
40
|
+
Add permission to use microphone in file `ios` directory **Podfile** and `ios/Runner` directory `Info.plist`.
|
|
41
|
+
|
|
42
|
+
**Podfile**
|
|
43
|
+
``` ruby
|
|
44
|
+
post_install do |installer|
|
|
45
|
+
installer.pods_project.targets.each do |target|
|
|
46
|
+
flutter_additional_ios_build_settings(target)
|
|
47
|
+
target.build_configurations.each do |config|
|
|
48
|
+
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
|
|
49
|
+
'$(inherited)',
|
|
50
|
+
'PERMISSION_MICROPHONE=1',
|
|
51
|
+
]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Info.plist**
|
|
58
|
+
``` xml
|
|
59
|
+
<key>NSMicrophoneUsageDescription</key>
|
|
60
|
+
<string>TUILiveKit needs to access your microphone permission. Recorded video will have sound when enabled</string>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Step 3: Implement Login Logic
|
|
64
|
+
|
|
65
|
+
Call `LoginStore.shared.login` in the project to complete login. **This is the key premise for using **`AtomicXCore`** all functions**.
|
|
66
|
+
|
|
67
|
+
> **Important:**
|
|
68
|
+
>
|
|
69
|
+
|
|
70
|
+
> We recommend calling LoginStore.shared.login after successful log-in to your App's user account to ensure clear and consistent login service logic.
|
|
71
|
+
>
|
|
72
|
+
|
|
73
|
+
``` java
|
|
74
|
+
import 'package:flutter/material.dart';
|
|
75
|
+
import 'package:atomic_x_core/atomicxcore.dart';
|
|
76
|
+
|
|
77
|
+
// main.dart
|
|
78
|
+
void main() async {
|
|
79
|
+
WidgetsFlutterBinding.ensureInitialized();
|
|
80
|
+
|
|
81
|
+
// Log in.
|
|
82
|
+
final result = await LoginStore.shared.login(
|
|
83
|
+
sdkAppID: 1400000001, // Replace with your sdkAppID
|
|
84
|
+
userID: "test_001", // Replace with your user ID
|
|
85
|
+
userSig: "xxxxxxxxxxx", // Replace with your userSig
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
if (result.isSuccess) {
|
|
89
|
+
debugPrint("login success");
|
|
90
|
+
} else {
|
|
91
|
+
debugPrint("login failed code: ${result.code}, message: ${result.message}");
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
runApp(const MyApp());
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Login API parameter description:**
|
|
99
|
+
| **Parameter** | **Type** | **Description** |
|
|
100
|
+
| --- | --- | --- |
|
|
101
|
+
| `sdkAppID` | `Int` | Get this from [TRTC console > Application management](https://console.trtc.io/app). |
|
|
102
|
+
| `userID` | `String` | The unique ID for the current user. Must contain only English letters, numbers, hyphens, and underscores. |
|
|
103
|
+
| `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. |
|
|
104
|
+
|
|
105
|
+
## Building a Basic Voice Chat Room
|
|
106
|
+
|
|
107
|
+
### Step 1: Host Room Creation
|
|
108
|
+
|
|
109
|
+
Follow these steps to quickly set up a voice chat room as the host.
|
|
110
|
+
|
|
111
|
+
#### 1. **Initialize the Seat Store**
|
|
112
|
+
|
|
113
|
+
On your anchor page, create a `LiveSeatStore` instance. You need to listen to changes in `liveSeatStore.liveSeatState` for real-time seat updates and UI rendering.
|
|
114
|
+
``` java
|
|
115
|
+
import 'package:flutter/material.dart';
|
|
116
|
+
import 'package:atomic_x_core/atomicxcore.dart';
|
|
117
|
+
|
|
118
|
+
// YourAnchorPage represents your host homepage
|
|
119
|
+
class YourAnchorPage extends StatefulWidget {
|
|
120
|
+
const YourAnchorPage({super.key});
|
|
121
|
+
|
|
122
|
+
@override
|
|
123
|
+
State<YourAnchorPage> createState() => _YourAnchorPageState();
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
class _YourAnchorPageState extends State<YourAnchorPage> {
|
|
127
|
+
final _liveListStore = LiveListStore.shared;
|
|
128
|
+
final _deviceStore = DeviceStore.shared;
|
|
129
|
+
|
|
130
|
+
// Initialize LiveSeatStore with liveID
|
|
131
|
+
final String _liveID = "test_voice_room_001";
|
|
132
|
+
late final LiveSeatStore _liveSeatStore;
|
|
133
|
+
late final VoidCallback _seatListListener = _onSeatListChanged;
|
|
134
|
+
|
|
135
|
+
@override
|
|
136
|
+
void initState() {
|
|
137
|
+
super.initState();
|
|
138
|
+
_liveSeatStore = LiveSeatStore.create(_liveID);
|
|
139
|
+
|
|
140
|
+
// Listen to microphone position list adjustment
|
|
141
|
+
_observeSeatList();
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
void _observeSeatList() {
|
|
145
|
+
// Listen to changes in liveSeatState.seatList and refresh your mic seat UI
|
|
146
|
+
_liveSeatStore.liveSeatState.seatList.addListener(_seatListListener);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
void _onSeatListChanged() {
|
|
150
|
+
// Render your mic seat UI here based on seatInfoList
|
|
151
|
+
final seatInfoList = _liveSeatStore.liveSeatState.seatList.value;
|
|
152
|
+
debugPrint("Seat list updated: ${seatInfoList.length} seats");
|
|
153
|
+
setState(() {});
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
@override
|
|
157
|
+
void dispose() {
|
|
158
|
+
_liveSeatStore.liveSeatState.seatList.removeListener(_seatListListener);
|
|
159
|
+
super.dispose();
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
@override
|
|
163
|
+
Widget build(BuildContext context) {
|
|
164
|
+
// Assume that you have your own layout
|
|
165
|
+
return Container();
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
#### Turn on Microphone
|
|
171
|
+
|
|
172
|
+
Turn on the microphone by calling the `DeviceStore``openLocalMicrophone` API. Sample code:
|
|
173
|
+
``` java
|
|
174
|
+
class _YourAnchorPageState extends State<YourAnchorPage> {
|
|
175
|
+
// ... Other code ...
|
|
176
|
+
|
|
177
|
+
void _openDevices() {
|
|
178
|
+
// Turn the mic on
|
|
179
|
+
DeviceStore.shared.openLocalMicrophone();
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
#### 3. Start Voice Chat
|
|
185
|
+
|
|
186
|
+
By calling the `LiveListStore``createLive` API to start a voice chat room live stream, sample code:
|
|
187
|
+
``` java
|
|
188
|
+
class _YourAnchorPageState extends State<YourAnchorPage> {
|
|
189
|
+
// ... Other code ...
|
|
190
|
+
final String _liveID = "test_voice_room_001";
|
|
191
|
+
|
|
192
|
+
@override
|
|
193
|
+
void initState() {
|
|
194
|
+
super.initState();
|
|
195
|
+
// ... Other code ...
|
|
196
|
+
|
|
197
|
+
// Start Voice Chat
|
|
198
|
+
_startLive();
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
Future<void> _startLive() async {
|
|
202
|
+
// 1. Prepare the LiveInfo object
|
|
203
|
+
final liveInfo = LiveInfo(
|
|
204
|
+
// 2. Set the room id
|
|
205
|
+
liveID: _liveID,
|
|
206
|
+
// 3. Set the room name
|
|
207
|
+
liveName: "test voice chat room",
|
|
208
|
+
// 4. Configured as a voice chat room (enable seat)
|
|
209
|
+
isSeatEnabled: true,
|
|
210
|
+
// 5. Room owner on seat by default
|
|
211
|
+
keepOwnerOnSeat: true,
|
|
212
|
+
// 6. Set the seat layout template (for example, 70 is the 10-seat template)
|
|
213
|
+
// Important: According to the product specification, input the correct ID
|
|
214
|
+
seatLayoutTemplateID: 70,
|
|
215
|
+
// 7. Set the microphone mode, such as apply for microphone mode
|
|
216
|
+
seatMode: TakeSeatMode.apply,
|
|
217
|
+
// 8. Set the maximum number of microphone slots
|
|
218
|
+
maxSeatCount: 10,
|
|
219
|
+
);
|
|
220
|
+
|
|
221
|
+
// 9. Call createLive to start live streaming
|
|
222
|
+
final result = await _liveListStore.createLive(liveInfo);
|
|
223
|
+
|
|
224
|
+
if (result.isSuccess) {
|
|
225
|
+
debugPrint("Response startLive onSuccess");
|
|
226
|
+
// Once created successfully, the room owner will join the stage by default. At this point, you can call unmuteMicrophone
|
|
227
|
+
_liveSeatStore.unmuteMicrophone();
|
|
228
|
+
} else {
|
|
229
|
+
debugPrint("Response startLive onError: ${result.message}");
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
**LiveInfo parameter description:**
|
|
236
|
+
| **Parameter Name** | **Type** | **Attribute** | **Description** |
|
|
237
|
+
| --- | --- | --- | --- |
|
|
238
|
+
| `liveID` | `String` | Required | Unique identifier of the live streaming room. |
|
|
239
|
+
| `liveName` | `String` | Optional. | Title of the live streaming room. |
|
|
240
|
+
| `notice` | `String` | Optional. | Announcement information of the live streaming room. |
|
|
241
|
+
| `isMessageDisable` | `bool` | Optional. | Whether to mute (`true`: yes, `false`: no). |
|
|
242
|
+
| `isPublicVisible` | `bool` | Optional. | Whether publicly visible (`true`: yes, `false`: no). |
|
|
243
|
+
| `isSeatEnabled` | `bool` | Optional. | Whether to enable the seat feature (`true`: yes, `false`: no). |
|
|
244
|
+
| `keepOwnerOnSeat` | `bool` | Optional. | Whether to keep the room owner on the seat. |
|
|
245
|
+
| `maxSeatCount` | `int` | Optional. | Maximum number of microphones. |
|
|
246
|
+
| `seatMode` | `TakeSeatMode` | Optional. | Microphone mode (`free`: Free to Join the Podium, `apply`: request to speak). |
|
|
247
|
+
| `seatLayoutTemplateID` | `int` | Required | Mic position layout template `ID.` |
|
|
248
|
+
| `coverURL` | `String` | Optional. | thumbnail URL of the live streaming room. |
|
|
249
|
+
| `backgroundURL` | `String` | Optional. | background image URL of the live streaming room. |
|
|
250
|
+
| `categoryList` | `List<int>` | Optional. | Category tag list of the live streaming room. |
|
|
251
|
+
| `activityStatus` | `int` | Optional. | Live stream status. |
|
|
252
|
+
| `isGiftEnabled` | `bool` | Optional. | Whether to enable the gift function (`true`: yes, `false`: no). |
|
|
253
|
+
|
|
254
|
+
#### 4. Build a Mic Seat UI
|
|
255
|
+
|
|
256
|
+
> **Note:**
|
|
257
|
+
>
|
|
258
|
+
|
|
259
|
+
> For the business code of the Mic Seat `UI` effect, see the [seat_grid_widget.dart](https://github.com/Tencent-RTC/TUIKit_Flutter/blob/main/live/livekit/lib/seat_grid_widget/seat_grid_widget.dart) file in the `TUILiveKit` open-source project to learn about the complete implementation logic.
|
|
260
|
+
>
|
|
261
|
+
|
|
262
|
+
Through the `LiveSeatStore` instance, listen to changes in `liveSeatState.seatList` to get seat data in real time for rendering your UI. You can listen to the data on the page (such as `YourAnchorPage` or `YourAudiencePage`) in the following ways:
|
|
263
|
+
``` java
|
|
264
|
+
class _YourAnchorPageState extends State<YourAnchorPage> {
|
|
265
|
+
// ... Other code ...
|
|
266
|
+
late final LiveSeatStore _liveSeatStore;
|
|
267
|
+
late final VoidCallback _seatListListener = _onSeatListChanged;
|
|
268
|
+
|
|
269
|
+
@override
|
|
270
|
+
void initState() {
|
|
271
|
+
super.initState();
|
|
272
|
+
_liveSeatStore = LiveSeatStore.create("your_live_id");
|
|
273
|
+
// ... Other code ...
|
|
274
|
+
|
|
275
|
+
// Listen to seatList transition
|
|
276
|
+
_observeSeatList();
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
void _observeSeatList() {
|
|
280
|
+
// Listen to changes in liveSeatState.seatList and refresh your mic seat UI
|
|
281
|
+
_liveSeatStore.liveSeatState.seatList.addListener(_seatListListener);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
void _onSeatListChanged() {
|
|
285
|
+
// seatInfoList is the latest microphone position list (List<SeatInfo>)
|
|
286
|
+
final seatInfoList = _liveSeatStore.liveSeatState.seatList.value;
|
|
287
|
+
// Render your mic seat UI here based on seatInfoList
|
|
288
|
+
debugPrint("Seat list updated: ${seatInfoList.length} seats");
|
|
289
|
+
setState(() {});
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
@override
|
|
293
|
+
void dispose() {
|
|
294
|
+
_liveSeatStore.liveSeatState.seatList.removeListener(_seatListListener);
|
|
295
|
+
super.dispose();
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
@override
|
|
299
|
+
Widget build(BuildContext context) {
|
|
300
|
+
return ValueListenableBuilder<List<SeatInfo>>(
|
|
301
|
+
valueListenable: _liveSeatStore.liveSeatState.seatList,
|
|
302
|
+
builder: (context, seatList, child) {
|
|
303
|
+
return GridView.builder(
|
|
304
|
+
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
|
|
305
|
+
crossAxisCount: 4,
|
|
306
|
+
),
|
|
307
|
+
itemCount: seatList.length,
|
|
308
|
+
itemBuilder: (context, index) {
|
|
309
|
+
final seat = seatList[index];
|
|
310
|
+
return _buildSeatItem(seat);
|
|
311
|
+
},
|
|
312
|
+
);
|
|
313
|
+
},
|
|
314
|
+
);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
Widget _buildSeatItem(SeatInfo seat) {
|
|
318
|
+
// Build one mic seat UI
|
|
319
|
+
return Container();
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
#### 5. End Voice Chat
|
|
325
|
+
|
|
326
|
+
After the voice chat, the room owner can call the `LiveListStore`'s `endLive` API to end the chat. The `SDK` will handle the logic of stopping streaming and terminating the room.
|
|
327
|
+
``` java
|
|
328
|
+
class _YourAnchorPageState extends State<YourAnchorPage> {
|
|
329
|
+
// ... Other code ...
|
|
330
|
+
|
|
331
|
+
// End Voice Chat
|
|
332
|
+
Future<void> _stopLive() async {
|
|
333
|
+
final result = await _liveListStore.endLive();
|
|
334
|
+
|
|
335
|
+
if (result.isSuccess) {
|
|
336
|
+
debugPrint("endLive success");
|
|
337
|
+
} else {
|
|
338
|
+
debugPrint("endLive error: ${result.message}");
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Step 2: Audience Joins the Voice Chat Room
|
|
345
|
+
|
|
346
|
+
Enable audience members to join the voice chat room with the following steps.
|
|
347
|
+
|
|
348
|
+
#### 1. **Initialize the Seat Store**
|
|
349
|
+
|
|
350
|
+
On your audience page, create a `LiveSeatStore` instance and listen to changes in `liveSeatState.seatList` to render the mic seat UI.
|
|
351
|
+
``` java
|
|
352
|
+
import 'package:flutter/material.dart';
|
|
353
|
+
import 'package:atomic_x_core/atomicxcore.dart';
|
|
354
|
+
|
|
355
|
+
// YourAudiencePage represents your audience page
|
|
356
|
+
class YourAudiencePage extends StatefulWidget {
|
|
357
|
+
const YourAudiencePage({super.key});
|
|
358
|
+
|
|
359
|
+
@override
|
|
360
|
+
State<YourAudiencePage> createState() => _YourAudiencePageState();
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
class _YourAudiencePageState extends State<YourAudiencePage> {
|
|
364
|
+
final _liveListStore = LiveListStore.shared;
|
|
365
|
+
|
|
366
|
+
// Ensure the liveID matches the room owner
|
|
367
|
+
final String _liveID = "test_voice_room_001";
|
|
368
|
+
late final LiveSeatStore _liveSeatStore;
|
|
369
|
+
late final VoidCallback _seatListListener = _onSeatListChanged;
|
|
370
|
+
|
|
371
|
+
@override
|
|
372
|
+
void initState() {
|
|
373
|
+
super.initState();
|
|
374
|
+
_liveSeatStore = LiveSeatStore.create(_liveID);
|
|
375
|
+
|
|
376
|
+
// Listen to microphone position list adjustment
|
|
377
|
+
_observeSeatList();
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
void _observeSeatList() {
|
|
381
|
+
// Listen to changes in liveSeatState.seatList and refresh your mic seat UI
|
|
382
|
+
_liveSeatStore.liveSeatState.seatList.addListener(_seatListListener);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
void _onSeatListChanged() {
|
|
386
|
+
// Render your mic seat UI here based on seatInfoList
|
|
387
|
+
final seatInfoList = _liveSeatStore.liveSeatState.seatList.value;
|
|
388
|
+
debugPrint("AudiencePage Seat list updated: ${seatInfoList.length} seats");
|
|
389
|
+
setState(() {});
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
@override
|
|
393
|
+
void dispose() {
|
|
394
|
+
_liveSeatStore.liveSeatState.seatList.removeListener(_seatListListener);
|
|
395
|
+
super.dispose();
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
@override
|
|
399
|
+
Widget build(BuildContext context) {
|
|
400
|
+
// Assume that you have your own layout
|
|
401
|
+
return Container();
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
#### 2. **Join the Voice Chat Room**
|
|
407
|
+
|
|
408
|
+
By calling the `LiveListStore``joinLive` API to join a voice chat room, sample code:
|
|
409
|
+
``` java
|
|
410
|
+
class _YourAudiencePageState extends State<YourAudiencePage> {
|
|
411
|
+
// ... Other code ...
|
|
412
|
+
|
|
413
|
+
@override
|
|
414
|
+
void initState() {
|
|
415
|
+
super.initState();
|
|
416
|
+
// ... Other code ...
|
|
417
|
+
|
|
418
|
+
// Enter a voice chat room
|
|
419
|
+
_joinLive();
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
Future<void> _joinLive() async {
|
|
423
|
+
// Call joinLive to enter a voice chat room
|
|
424
|
+
final result = await _liveListStore.joinLive(_liveID);
|
|
425
|
+
|
|
426
|
+
if (result.isSuccess) {
|
|
427
|
+
debugPrint("joinLive success");
|
|
428
|
+
} else {
|
|
429
|
+
debugPrint("joinLive error: ${result.message}");
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
#### 3. Build a Mic Seat UI
|
|
436
|
+
|
|
437
|
+
The process for the audience to build a Mic Seat UI is the same as that for the Anchor. Refer to Build a Mic Seat UI.
|
|
438
|
+
|
|
439
|
+
#### 4. **Leave the Voice Chat Room**
|
|
440
|
+
|
|
441
|
+
When the audience logs out of the voice chat room, they need to call the `LiveListStore`'s `leaveLive` API to exit.
|
|
442
|
+
``` java
|
|
443
|
+
class _YourAudiencePageState extends State<YourAudiencePage> {
|
|
444
|
+
// ... Other code ...
|
|
445
|
+
|
|
446
|
+
Future<void> _leaveLive() async {
|
|
447
|
+
final result = await _liveListStore.leaveLive();
|
|
448
|
+
|
|
449
|
+
if (result.isSuccess) {
|
|
450
|
+
debugPrint("leaveLive success");
|
|
451
|
+
} else {
|
|
452
|
+
debugPrint("leaveLive error: ${result.message}");
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
### Run and Test
|
|
459
|
+
|
|
460
|
+
After completing the above steps, you can complete a most basic voice chat live streaming scenario. You can refer to various voice chat room scenarios to refine the voice chat scenario.
|
|
461
|
+
|
|
462
|
+
## Advanced Features
|
|
463
|
+
|
|
464
|
+
### Implementing On-Mic User Voice Waves
|
|
465
|
+
|
|
466
|
+
In a voice chat room scenario, a common need is to display a wave animation on the avatar of an on-mic user when they speak, notifying all room users "who is speaking". `LiveSeatStore` provides the `speakingUsers` data stream, specialized for implementing this feature.
|
|
467
|
+
|
|
468
|
+
#### Implementation
|
|
469
|
+
|
|
470
|
+
> **Note:**
|
|
471
|
+
>
|
|
472
|
+
|
|
473
|
+
> When an Anchor speaks, a wave animation effect is shown. See the [seat_grid_widget.dart](https://github.com/Tencent-RTC/TUIKit_Flutter/blob/main/live/livekit/lib/seat_grid_widget/seat_grid_widget.dart) file in the `TUILiveKit` open-source project to learn about the complete implementation logic.
|
|
474
|
+
>
|
|
475
|
+
|
|
476
|
+
On `YourAnchorPage` or `YourAudiencePage`, listen for `speakingUsers` transition and refresh the "speaking" status. Sample code:
|
|
477
|
+
``` java
|
|
478
|
+
class _YourAnchorPageState extends State<YourAnchorPage> {
|
|
479
|
+
late final VoidCallback _speakingUsersListener = _onSpeakingUsersChanged;
|
|
480
|
+
// ... Other code ...
|
|
481
|
+
|
|
482
|
+
@override
|
|
483
|
+
void initState() {
|
|
484
|
+
super.initState();
|
|
485
|
+
// ... Other code ...
|
|
486
|
+
|
|
487
|
+
// Listen to speakingUsers transition
|
|
488
|
+
_observeSpeakingUsersState();
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
void _observeSpeakingUsersState() {
|
|
492
|
+
// Listen for liveSeatState.speakingUsers transition and refresh the "speaking" status
|
|
493
|
+
_liveSeatStore.liveSeatState.speakingUsers.addListener(_speakingUsersListener);
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
void _onSpeakingUsersChanged() {
|
|
497
|
+
// Pass the user ID collection of "speaking" users to the UI and update the UI state
|
|
498
|
+
final speakingUserMap = _liveSeatStore.liveSeatState.speakingUsers.value;
|
|
499
|
+
debugPrint("Speaking users updated: ${speakingUserMap.length} users");
|
|
500
|
+
setState(() {});
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
@override
|
|
504
|
+
void dispose() {
|
|
505
|
+
_liveSeatStore.liveSeatState.speakingUsers.removeListener(_speakingUsersListener);
|
|
506
|
+
super.dispose();
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
@override
|
|
510
|
+
Widget build(BuildContext context) {
|
|
511
|
+
return ValueListenableBuilder<Map<String, int>>(
|
|
512
|
+
valueListenable: _liveSeatStore.liveSeatState.speakingUsers,
|
|
513
|
+
builder: (context, speakingUsers, child) {
|
|
514
|
+
// speakingUsers is a Map where the key is userID and the value is volume
|
|
515
|
+
return YourSpeakingIndicatorWidget(speakingUsers: speakingUsers);
|
|
516
|
+
},
|
|
517
|
+
);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
// Example: Speaking indicator component
|
|
522
|
+
class YourSpeakingIndicatorWidget extends StatelessWidget {
|
|
523
|
+
final Map<String, int> speakingUsers;
|
|
524
|
+
|
|
525
|
+
const YourSpeakingIndicatorWidget({
|
|
526
|
+
super.key,
|
|
527
|
+
required this.speakingUsers,
|
|
528
|
+
});
|
|
529
|
+
|
|
530
|
+
@override
|
|
531
|
+
Widget build(BuildContext context) {
|
|
532
|
+
return Container();
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
## Enriching Voice Chat Room Scenario
|
|
538
|
+
|
|
539
|
+
After completing the basic voice chat room features, you can refer to the following feature guide to add various interactive gameplay features to the voice chat room.
|
|
540
|
+
| **Feature** | **Feature Description** | **Feature Stores** | **Implementation Guide** |
|
|
541
|
+
| --- | --- | --- | --- |
|
|
542
|
+
| **Audience Take Seat** | Audience members can apply to take a seat and interact with the host in real time. | [CoGuestStore](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_co_guest_store/CoGuestStore-class.html) | Implementation |
|
|
543
|
+
| **Add Barrage Chat** | Room members can send and receive real-time text messages. | [BarrageStore](https://tencent-rtc.github.io/TUIKit_Flutter/api_barrage_barrage_store/BarrageStore-class.html) | Implementation |
|
|
544
|
+
| **Gift System** | Audience can send virtual gifts to hosts to increase interaction and engagement. | [GiftStore](https://tencent-rtc.github.io/TUIKit_Flutter/api_gift_gift_store/GiftStore-class.html) | Implementation |
|
|
545
|
+
|
|
546
|
+
## API documentation
|
|
547
|
+
| **Store/Component** | **Feature Description** | **API Reference** |
|
|
548
|
+
| --- | --- | --- |
|
|
549
|
+
| **LiveListStore** | Full lifecycle management of live streaming room: create/join/leave/terminate room, query room list, modify live information (name, notice), listen to live streaming status (for example, being kicked out, ended). | [API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_live_list_store/LiveListStore-class.html) |
|
|
550
|
+
| **LiveSeatStore** | Core of seat management: manage seat list, Anchor status, and related operations (taking a seat, leaving a seat, removing user, locking seat, switching microphone on or off/camera), listen to seat events. | [API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_live_seat_store/LiveSeatStore-class.html) |
|
|
551
|
+
| **DeviceStore** | Audio/Video device control: microphone (on/off, volume), camera (on/off, switchover, video quality), screen sharing, monitor device status in real time. | [API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_device_device_store/DeviceStore-class.html) |
|
|
552
|
+
| **CoGuestStore** | Audience co-broadcasting management: join microphone application/invite/grant/deny, member permission control (microphone/camera), state synchronization. | [API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_co_guest_store/CoGuestStore-class.html) |
|
|
553
|
+
| **CoHostStore** | Anchor cross-room connection: support for multiple layout templates (dynamic grid, etc.), initiate/accept/reject connection, and interactive management of co-broadcasting Anchors. | [API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_co_host_store/CoHostStore-class.html) |
|
|
554
|
+
| **BattleStore** | Anchor PK battle: initiate PK (duration configuration/competitor), manage PK status (start/end), synchronize score, listen to battle results. | [API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_battle_store/BattleStore-class.html) |
|
|
555
|
+
| **GiftStore** | Gift interaction: get gift list, send/receive gifts, listen to gift events (including sender, gift details). | [API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_gift_gift_store/GiftStore-class.html) |
|
|
556
|
+
| **BarrageStore** | Danmaku function: send text/custom barrage item, maintain bullet screen list, monitor danmaku status in real time. | [API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_barrage_barrage_store/BarrageStore-class.html) |
|
|
557
|
+
| **LikeStore** | Like interaction: send likes, listen to like events, sync total likes. | [API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_like_store/LikeStore-class.html) |
|
|
558
|
+
| **LiveAudienceStore** | Audience management: get real-time audience list (ID/name/avatar), check audience size, listen to Enter/Exit Event. | [API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_live_audience_store/LiveAudienceStore-class.html) |
|
|
559
|
+
| **AudioEffectStore** | Audio effects: voice-changing (child voice/male voice), reverberation (KTV), ear monitoring adjustment, switch special effects in real time. | [API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_device_audio_effect_store/AudioEffectStore-class.html) |
|
|
560
|
+
| **BaseBeautyStore** | Basic beauty filter: adjust skin smoothing/whitening/rosy (0-100 levels), reset beauty status, sync effect parameters. | [API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_device_base_beauty_store/BaseBeautyStore-class.html) |
|
|
561
|
+
|
|
562
|
+
## FAQs
|
|
563
|
+
|
|
564
|
+
### Audience Enters the Room with No Sound
|
|
565
|
+
- **Check device permissions**: Please ensure `App` has declared and obtained system authorization for microphone in `Info.plist` (iOS) or `AndroidManifest.xml` (Android).
|
|
566
|
+
|
|
567
|
+
- **Check the homeowner side**: Whether the room owner has normally called `DeviceStore.shared.openLocalMicrophone()` to open the microphone.
|
|
568
|
+
|
|
569
|
+
- **Check the network**: Please check whether the device network connection is normal.
|
|
570
|
+
|
|
571
|
+
### Microphone Position List Not Displayed or Refreshed
|
|
572
|
+
- **Check Store initialization**: Please ensure you have already used the same `liveID` to correctly create the `LiveSeatStore` instance (`LiveSeatStore.create(liveID)`) before `createLive` or `joinLive`.
|
|
573
|
+
|
|
574
|
+
- **Check data listening**: Please check whether you have used `addListener` correctly to listen to `liveSeatStore.liveSeatState.seatList`, and ensure to call `removeListener` in `dispose` to remove listener.
|
|
575
|
+
|
|
576
|
+
- **Check API call**: Please ensure the `createLive` (room owner) or `joinLive` (listener) API has been successfully called (confirm when `isSuccess` in the callback result is `true`).
|