@tencentcloud/sdk-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.
Files changed (503) hide show
  1. package/index.js +1 -1
  2. package/index.js.map +1 -1
  3. package/package.json +2 -2
  4. package/resource/doc/{tuicallkit/android/faq.md → callkit/faq/android-faq.md} +75 -308
  5. package/resource/doc/{tuicallkit/faq/common/error_code.md → callkit/faq/common/error-code.md} +2 -2
  6. package/resource/doc/{tuicallkit/flutter/faq.md → callkit/faq/flutter-faq.md} +83 -315
  7. package/resource/doc/{tuicallkit/iOS/faq.md → callkit/faq/ios-faq.md} +76 -313
  8. package/resource/doc/{tuicallkit/react/faq.md → callkit/faq/web-faq.md} +78 -311
  9. package/resource/doc/callkit/preset/android/api.md +330 -0
  10. package/resource/doc/callkit/preset/android/integration.md +530 -0
  11. package/resource/doc/callkit/preset/flutter/api.md +401 -0
  12. package/resource/doc/{tuicallkit → callkit/preset}/flutter/integration.md +53 -273
  13. package/resource/doc/callkit/preset/ios/api.md +282 -0
  14. package/resource/doc/{tuicallkit/iOS → callkit/preset/ios}/integration.md +39 -120
  15. package/resource/doc/callkit/preset/react/api.md +600 -0
  16. package/resource/doc/{tuicallkit → callkit/preset}/react/integration.md +6 -6
  17. package/resource/doc/callkit/preset/vue/api.md +600 -0
  18. package/resource/doc/{tuicallkit → callkit/preset}/vue/integration.md +5 -5
  19. package/resource/doc/{chatuikit → chatkit}/android/faq.md +29 -37
  20. package/resource/doc/{chatuikit → chatkit}/android/features/theme.md +22 -166
  21. package/resource/doc/chatkit/android/integration.md +498 -0
  22. package/resource/doc/chatkit/faq/android_sdk/client-api.md +280 -0
  23. package/resource/doc/{chatuikit → chatkit}/faq/common/product.md +4 -17
  24. package/resource/doc/{chatuikit → chatkit}/faq/common/server.md +1 -2
  25. package/resource/doc/chatkit/faq/flutter_sdk/client-api.md +183 -0
  26. package/resource/doc/{chatuikit → chatkit}/faq/flutter_sdk/faq.md +3 -3
  27. package/resource/doc/chatkit/faq/ios_sdk/client-api.md +279 -0
  28. package/resource/doc/{chatuikit → chatkit}/faq/web_sdk/error_code.md +1 -1
  29. package/resource/doc/{chatuikit → chatkit}/faq/web_sdk/faq.md +4 -4
  30. package/resource/doc/{chatuikit → chatkit}/flutter/features/theme.md +22 -166
  31. package/resource/doc/{chatuikit → chatkit}/flutter/integration.md +20 -95
  32. package/resource/doc/{chatuikit/iOS → chatkit/ios}/faq.md +29 -37
  33. package/resource/doc/{chatuikit/iOS → chatkit/ios}/features/theme.md +27 -176
  34. package/resource/doc/{chatuikit/iOS → chatkit/ios}/integration.md +78 -280
  35. package/resource/doc/{chatuikit/vue → chatkit/react}/components/avatar.md +0 -1
  36. package/resource/doc/{chatuikit → chatkit}/react/components/chat-header.md +7 -12
  37. package/resource/doc/{chatuikit → chatkit}/react/components/chat-setting.md +10 -17
  38. package/resource/doc/{chatuikit → chatkit}/react/components/chat.md +1 -1
  39. package/resource/doc/{chatuikit → chatkit}/react/components/component-list.md +0 -1
  40. package/resource/doc/{chatuikit → chatkit}/react/components/contact-list.md +122 -703
  41. package/resource/doc/chatkit/react/components/conversation-actions.md +174 -0
  42. package/resource/doc/chatkit/react/components/conversation-list.md +333 -0
  43. package/resource/doc/chatkit/react/components/conversation-preview.md +116 -0
  44. package/resource/doc/chatkit/react/components/conversation-search.md +57 -0
  45. package/resource/doc/{chatuikit → chatkit}/react/components/message-input.md +36 -186
  46. package/resource/doc/{chatuikit → chatkit}/react/components/message-list.md +21 -113
  47. package/resource/doc/chatkit/react/components/search.md +282 -0
  48. package/resource/doc/{chatuikit → chatkit}/react/components/tuikit.md +5 -26
  49. package/resource/doc/{chatuikit → chatkit}/react/integration.md +37 -104
  50. package/resource/doc/{chatuikit/react → chatkit/vue}/components/avatar.md +0 -1
  51. package/resource/doc/{chatuikit → chatkit}/vue/components/chat-header.md +7 -13
  52. package/resource/doc/{chatuikit → chatkit}/vue/components/chat-setting.md +13 -18
  53. package/resource/doc/{chatuikit → chatkit}/vue/components/chat.md +1 -2
  54. package/resource/doc/{chatuikit → chatkit}/vue/components/component-list.md +0 -1
  55. package/resource/doc/chatkit/vue/components/contact-list.md +271 -0
  56. package/resource/doc/chatkit/vue/components/conversation-actions.md +228 -0
  57. package/resource/doc/{chatuikit → chatkit}/vue/components/conversation-list.md +42 -316
  58. package/resource/doc/chatkit/vue/components/conversation-preview.md +213 -0
  59. package/resource/doc/chatkit/vue/components/conversation-search.md +50 -0
  60. package/resource/doc/{chatuikit → chatkit}/vue/components/message-input.md +1 -23
  61. package/resource/doc/{chatuikit → chatkit}/vue/components/message-list.md +23 -134
  62. package/resource/doc/{chatuikit → chatkit}/vue/components/search.md +73 -640
  63. package/resource/doc/chatkit/vue/components/tuikit.md +45 -0
  64. package/resource/doc/{chatuikit → chatkit}/vue/components/userpicker.md +4 -4
  65. package/resource/doc/{chatuikit → chatkit}/vue/faq.md +1 -1
  66. package/resource/doc/{chatuikit → chatkit}/vue/integration.md +53 -121
  67. package/resource/doc/livekit/core-sdk/live/android/api-reference/AudioEffectStore.md +283 -0
  68. package/resource/doc/livekit/core-sdk/live/android/api-reference/BarrageStore.md +148 -0
  69. package/resource/doc/livekit/core-sdk/live/android/api-reference/BattleStore.md +316 -0
  70. package/resource/doc/livekit/core-sdk/live/android/api-reference/CameraView.md +57 -0
  71. package/resource/doc/livekit/core-sdk/live/android/api-reference/CoGuestStore.md +419 -0
  72. package/resource/doc/livekit/core-sdk/live/android/api-reference/CoHostStore.md +325 -0
  73. package/resource/doc/livekit/core-sdk/live/android/api-reference/DeviceStore.md +436 -0
  74. package/resource/doc/livekit/core-sdk/live/android/api-reference/GiftStore.md +165 -0
  75. package/resource/doc/livekit/core-sdk/live/android/api-reference/LikeStore.md +49 -0
  76. package/resource/doc/livekit/core-sdk/live/android/api-reference/LiveAudienceStore.md +239 -0
  77. package/resource/doc/livekit/core-sdk/live/android/api-reference/LiveCoreView.md +74 -0
  78. package/resource/doc/livekit/core-sdk/live/android/api-reference/LiveSeatStore.md +417 -0
  79. package/resource/doc/livekit/core-sdk/live/android/api-reference/LoginStore.md +207 -0
  80. package/resource/doc/livekit/{live → core-sdk/live}/android/live-audience-list.md +17 -88
  81. package/resource/doc/livekit/{live → core-sdk/live}/android/live-audio-effect.md +34 -192
  82. package/resource/doc/livekit/{live → core-sdk/live}/android/live-barrage.md +26 -139
  83. package/resource/doc/livekit/{live → core-sdk/live}/android/live-base-beauty.md +16 -99
  84. package/resource/doc/livekit/{live → core-sdk/live}/android/live-co-guest-interaction.md +54 -161
  85. package/resource/doc/livekit/{live → core-sdk/live}/android/live-gift.md +75 -455
  86. package/resource/doc/livekit/{live → core-sdk/live}/android/live-host-interaction.md +91 -338
  87. package/resource/doc/livekit/{live → core-sdk/live}/android/live-integration.md +108 -492
  88. package/resource/doc/livekit/{live → core-sdk/live}/android/live-live-list.md +27 -165
  89. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/AudioEffectStore.md +279 -0
  90. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/BarrageStore.md +158 -0
  91. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/BaseBeautyStore.md +155 -0
  92. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/BattleStore.md +304 -0
  93. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/CoGuestStore.md +394 -0
  94. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/CoHostStore.md +303 -0
  95. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/DeviceStore.md +410 -0
  96. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/GiftStore.md +160 -0
  97. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LikeStore.md +51 -0
  98. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LiveAudienceStore.md +231 -0
  99. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LiveCoreView.md +143 -0
  100. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LiveSeatStore.md +375 -0
  101. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LoginStore.md +170 -0
  102. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-audience-list.md +13 -91
  103. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-audio-effect.md +34 -177
  104. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-barrage.md +18 -102
  105. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-base-beauty.md +24 -164
  106. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-co-guest-interaction.md +56 -161
  107. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-gift.md +66 -460
  108. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-host-interaction.md +117 -364
  109. package/resource/doc/livekit/core-sdk/live/flutter/live-integration.md +687 -0
  110. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-live-list.md +22 -161
  111. package/resource/doc/livekit/core-sdk/live/ios/api-reference/AudioEffectStore.md +287 -0
  112. package/resource/doc/livekit/core-sdk/live/ios/api-reference/BarrageStore.md +165 -0
  113. package/resource/doc/livekit/core-sdk/live/ios/api-reference/BaseBeautyStore.md +143 -0
  114. package/resource/doc/livekit/core-sdk/live/ios/api-reference/BattleStore.md +298 -0
  115. package/resource/doc/livekit/core-sdk/live/ios/api-reference/CoGuestStore.md +349 -0
  116. package/resource/doc/livekit/core-sdk/live/ios/api-reference/CoHostStore.md +297 -0
  117. package/resource/doc/livekit/core-sdk/live/ios/api-reference/DeviceStore.md +471 -0
  118. package/resource/doc/livekit/core-sdk/live/ios/api-reference/GiftStore.md +179 -0
  119. package/resource/doc/livekit/core-sdk/live/ios/api-reference/LikeStore.md +49 -0
  120. package/resource/doc/livekit/core-sdk/live/ios/api-reference/LiveAudienceStore.md +238 -0
  121. package/resource/doc/livekit/core-sdk/live/ios/api-reference/LiveCoreView.md +74 -0
  122. package/resource/doc/livekit/core-sdk/live/ios/api-reference/LiveSeatStore.md +412 -0
  123. package/resource/doc/livekit/core-sdk/live/ios/api-reference/LoginStore.md +173 -0
  124. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-audience-list.md +23 -96
  125. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-audio-effect.md +33 -195
  126. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-barrage.md +35 -150
  127. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-base-beauty.md +20 -105
  128. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-co-guest-interaction.md +35 -140
  129. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-gift.md +77 -457
  130. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-host-interaction.md +70 -317
  131. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-integration.md +90 -473
  132. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-live-list.md +28 -163
  133. package/resource/doc/livekit/core-sdk/voice/android/voice-audience-list.md +264 -0
  134. package/resource/doc/livekit/core-sdk/voice/android/voice-audio-effect.md +226 -0
  135. package/resource/doc/livekit/core-sdk/voice/android/voice-barrage.md +456 -0
  136. package/resource/doc/livekit/core-sdk/voice/android/voice-co-guest-interaction.md +539 -0
  137. package/resource/doc/livekit/core-sdk/voice/android/voice-gift.md +453 -0
  138. package/resource/doc/livekit/core-sdk/voice/android/voice-host-interaction.md +516 -0
  139. package/resource/doc/livekit/core-sdk/voice/android/voice-integration.md +509 -0
  140. package/resource/doc/livekit/core-sdk/voice/android/voice-room-list.md +365 -0
  141. package/resource/doc/livekit/core-sdk/voice/flutter/voice-audience-list.md +259 -0
  142. package/resource/doc/livekit/core-sdk/voice/flutter/voice-audio-effect.md +596 -0
  143. package/resource/doc/livekit/core-sdk/voice/flutter/voice-barrage.md +494 -0
  144. package/resource/doc/livekit/core-sdk/voice/flutter/voice-co-guest-interaction.md +516 -0
  145. package/resource/doc/livekit/core-sdk/voice/flutter/voice-gift.md +418 -0
  146. package/resource/doc/livekit/core-sdk/voice/flutter/voice-integration.md +563 -0
  147. package/resource/doc/livekit/core-sdk/voice/flutter/voice-room-list.md +709 -0
  148. package/resource/doc/livekit/core-sdk/voice/ios/voice-audience-list.md +262 -0
  149. package/resource/doc/livekit/core-sdk/voice/ios/voice-audio-effect.md +211 -0
  150. package/resource/doc/livekit/core-sdk/voice/ios/voice-barrage.md +414 -0
  151. package/resource/doc/livekit/core-sdk/voice/ios/voice-co-guest-interaction.md +492 -0
  152. package/resource/doc/livekit/core-sdk/voice/ios/voice-gift.md +405 -0
  153. package/resource/doc/livekit/core-sdk/voice/ios/voice-host-interaction.md +611 -0
  154. package/resource/doc/livekit/core-sdk/voice/ios/voice-integration.md +478 -0
  155. package/resource/doc/livekit/core-sdk/voice/ios/voice-room-list.md +336 -0
  156. package/resource/doc/livekit/core-sdk/voice/uni-app/voice-audience-list.md +234 -0
  157. package/resource/doc/livekit/core-sdk/voice/uni-app/voice-audio-effect.md +218 -0
  158. package/resource/doc/livekit/core-sdk/voice/uni-app/voice-barrage.md +376 -0
  159. package/resource/doc/livekit/core-sdk/voice/uni-app/voice-co-guest-interaction.md +648 -0
  160. package/resource/doc/livekit/core-sdk/voice/uni-app/voice-gift.md +362 -0
  161. package/resource/doc/livekit/core-sdk/voice/uni-app/voice-integration.md +323 -0
  162. package/resource/doc/livekit/core-sdk/voice/uni-app/voice-room-list.md +470 -0
  163. package/resource/doc/livekit/faq/common/{error_code.md → error-code.md} +2 -3
  164. package/resource/doc/livekit/preset/live/vue/api-reference/index.md +780 -0
  165. package/resource/doc/livekit/preset/live/vue/components/barrage.md +291 -0
  166. package/resource/doc/livekit/{live → preset/live}/vue/components/co-guest-panel.md +9 -48
  167. package/resource/doc/livekit/{live → preset/live}/vue/components/live-audience-list.md +27 -145
  168. package/resource/doc/livekit/{live → preset/live}/vue/components/live-scene-panel.md +13 -76
  169. package/resource/doc/livekit/{live → preset/live}/vue/components/live-view.md +33 -224
  170. package/resource/doc/livekit/preset/live/vue/components/stream-mixer.md +211 -0
  171. package/resource/doc/livekit/preset/live/vue/faq.md +1 -0
  172. package/resource/doc/livekit/preset/live/vue/live-list-integration.md +244 -0
  173. package/resource/doc/livekit/preset/live/vue/live-player-desk-integration.md +301 -0
  174. package/resource/doc/livekit/preset/live/vue/live-player-h5-integration.md +307 -0
  175. package/resource/doc/livekit/preset/live/vue/live-pusher-integration.md +754 -0
  176. package/resource/doc/roomkit/android/features/call-user-to-room.md +234 -0
  177. package/resource/doc/roomkit/android/features/room-participant-state.md +850 -0
  178. package/resource/doc/roomkit/android/features/room-state.md +358 -0
  179. package/resource/doc/roomkit/android/features/schedule-room.md +336 -0
  180. package/resource/doc/roomkit/android/integration.md +433 -0
  181. package/resource/doc/roomkit/{common/error_code.md → faq/common/error-code.md} +1 -1
  182. package/resource/doc/roomkit/flutter/features/call-user-to-room.md +228 -0
  183. package/resource/doc/roomkit/flutter/features/room-participant-state.md +796 -0
  184. package/resource/doc/roomkit/flutter/features/room-state.md +324 -0
  185. package/resource/doc/roomkit/flutter/features/schedule-room.md +324 -0
  186. package/resource/doc/roomkit/flutter/integration.md +405 -0
  187. package/resource/doc/roomkit/ios/features/call-user-to-room.md +226 -0
  188. package/resource/doc/roomkit/ios/features/room-participant-state.md +821 -0
  189. package/resource/doc/roomkit/ios/features/room-state.md +320 -0
  190. package/resource/doc/roomkit/ios/features/schedule-room.md +318 -0
  191. package/resource/doc/roomkit/ios/integration.md +384 -0
  192. package/resource/doc/roomkit/vue/faq.md +1 -0
  193. package/resource/doc/roomkit/vue/features/call-user-to-room.md +17 -53
  194. package/resource/doc/roomkit/vue/features/device-detection.md +30 -48
  195. package/resource/doc/roomkit/vue/features/device-state.md +24 -44
  196. package/resource/doc/roomkit/vue/features/free-beauty-panel.md +13 -36
  197. package/resource/doc/roomkit/vue/features/room-chat.md +31 -89
  198. package/resource/doc/roomkit/vue/features/room-participant-state.md +28 -50
  199. package/resource/doc/roomkit/vue/features/room-state.md +25 -36
  200. package/resource/doc/roomkit/vue/features/room-view.md +30 -127
  201. package/resource/doc/roomkit/vue/features/schedule-room.md +9 -40
  202. package/resource/doc/roomkit/vue/features/screen-share.md +22 -90
  203. package/resource/doc/roomkit/vue/features/virtual-background.md +13 -34
  204. package/resource/doc/roomkit/vue/integration.md +118 -282
  205. package/resource/doc/rtcengine/faq/common/userSig.md +17 -141
  206. package/resource/doc/rtcengine/faq/web/web.md +15 -22
  207. package/resource/doc/rtcengine/web/api.md +17 -21
  208. package/resource/doc/rtcengine/web/how_to_integrated_web_sdk.md +4 -10
  209. package/resource/doc/rtcengine/web/how_to_run_web_sdk_demo.md +4 -8
  210. package/resource/doc/rtcengine/web/plugin/20-advanced-customized-capture-rendering.md +3 -3
  211. package/resource/doc/rtcengine/web/plugin/21-advanced-auto-play-policy.md +2 -3
  212. package/resource/doc/rtcengine/web/plugin/22-advanced-audio-mixer.md +6 -6
  213. package/resource/doc/rtcengine/web/plugin/23-advanced-support-detection.md +2 -2
  214. package/resource/doc/rtcengine/web/plugin/24-advanced-network-quality.md +2 -4
  215. package/resource/doc/rtcengine/web/plugin/25-advanced-device-change.md +1 -2
  216. package/resource/doc/rtcengine/web/plugin/26-advanced-publish-cdn-stream.md +2 -6
  217. package/resource/doc/rtcengine/web/plugin/27-advanced-small-stream.md +13 -14
  218. package/resource/doc/rtcengine/web/plugin/28-advanced-beauty.md +10 -90
  219. package/resource/doc/rtcengine/web/plugin/31-advanced-plugins-overview.md +5 -8
  220. package/resource/doc/rtcengine/web/plugin/34-advanced-proxy.md +31 -35
  221. package/resource/doc/rtcengine/web/plugin/35-advanced-ai-denoiser.md +0 -2
  222. package/resource/doc/rtcengine/web/plugin/36-advanced-virtual-background.md +7 -49
  223. package/resource/doc/rtcengine/web/plugin/37-advanced-voice-changer.md +1 -1
  224. package/resource/doc/rtcengine/web/plugin/39-advanced-video-decoder.md +0 -3
  225. package/resource/doc/rtcengine/web/plugin/40-advanced-video-mixer.md +20 -20
  226. package/resource/doc/rtcengine/web/plugin/41-advanced-small-stream-auto-switcher.md +1 -1
  227. package/resource/doc/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +4 -4
  228. package/resource/doc/rtcengine/web/plugin/43-advanced-face-detection.md +3 -3
  229. package/resource/doc/trtc/C++/ITRTCCloud.md +718 -2847
  230. package/resource/doc/trtc/C++/ITRTCStatistics.md +53 -308
  231. package/resource/doc/trtc/C++/ITXAudioEffectManager.md +207 -1041
  232. package/resource/doc/trtc/C++/ITXDeviceManager.md +127 -768
  233. package/resource/doc/trtc/C++/TRTCCloudCallback.md +634 -2259
  234. package/resource/doc/trtc/C++/TRTCTypeDef.md +726 -3465
  235. package/resource/doc/trtc/C++/TXLiteAVCode.md +117 -916
  236. package/resource/doc/trtc/android/TRTCCloud.md +638 -2612
  237. package/resource/doc/trtc/android/TRTCCloudDef.md +769 -3697
  238. package/resource/doc/trtc/android/TRTCCloudListener.md +609 -2070
  239. package/resource/doc/trtc/android/TRTCStatistics.md +48 -278
  240. package/resource/doc/trtc/android/TXAudioEffectManager.md +207 -1049
  241. package/resource/doc/trtc/android/TXBeautyManager.md +127 -704
  242. package/resource/doc/trtc/android/TXDeviceManager.md +51 -318
  243. package/resource/doc/trtc/android/TXLiteAVCode.md +115 -900
  244. package/resource/doc/trtc/iOS/TRTCCloud.md +726 -2930
  245. package/resource/doc/trtc/iOS/TRTCCloudDelegate.md +580 -2099
  246. package/resource/doc/trtc/iOS/TRTCStatistics.md +48 -278
  247. package/resource/doc/trtc/iOS/TXAudioEffectManager.md +179 -896
  248. package/resource/doc/trtc/iOS/TXBeautyManager.md +128 -710
  249. package/resource/doc/trtc/iOS/TXDeviceManager.md +129 -772
  250. package/resource/doc/trtc/iOS/TXLiteAVCode.md +117 -915
  251. package/resource/doc/trtc/iOS/TXLiveSDKTypeDef.md +747 -3559
  252. package/server.js +1 -5
  253. package/server.js.map +1 -1
  254. package/tools/call/get_callkit_api.js +32 -0
  255. package/tools/call/get_callkit_api.js.map +1 -0
  256. package/tools/call/get_native_call_uikit_integration.js +34 -0
  257. package/tools/call/get_native_call_uikit_integration.js.map +1 -0
  258. package/tools/call/{get-web-call-integration.js → get_web_call_uikit_integration.js} +13 -8
  259. package/tools/call/get_web_call_uikit_integration.js.map +1 -0
  260. package/tools/chat/get_native_chat_uikit_feature_detail.js +34 -0
  261. package/tools/chat/get_native_chat_uikit_feature_detail.js.map +1 -0
  262. package/tools/chat/get_native_chat_uikit_integration.js +45 -0
  263. package/tools/chat/get_native_chat_uikit_integration.js.map +1 -0
  264. package/tools/chat/get_web_chat_uikit_component_detail.js +34 -0
  265. package/tools/chat/get_web_chat_uikit_component_detail.js.map +1 -0
  266. package/tools/chat/get_web_chat_uikit_integration.js +45 -0
  267. package/tools/chat/get_web_chat_uikit_integration.js.map +1 -0
  268. package/tools/common/get_faq.js +265 -0
  269. package/tools/common/get_faq.js.map +1 -0
  270. package/tools/common/{get-usersig.js → get_usersig.js} +6 -3
  271. package/tools/common/get_usersig.js.map +1 -0
  272. package/tools/common/present_framework_choice.js +63 -0
  273. package/tools/common/present_framework_choice.js.map +1 -0
  274. package/tools/definitions/get_callkit_api_def.js +28 -0
  275. package/tools/definitions/get_callkit_api_def.js.map +1 -0
  276. package/tools/definitions/get_faq_def.js +18 -19
  277. package/tools/definitions/get_faq_def.js.map +1 -1
  278. package/tools/definitions/get_native_call_uikit_integration_def.js +15 -18
  279. package/tools/definitions/get_native_call_uikit_integration_def.js.map +1 -1
  280. package/tools/definitions/get_native_chat_uikit_feature_detail_def.js +31 -0
  281. package/tools/definitions/get_native_chat_uikit_feature_detail_def.js.map +1 -0
  282. package/tools/definitions/get_native_chat_uikit_integration_def.js +16 -19
  283. package/tools/definitions/get_native_chat_uikit_integration_def.js.map +1 -1
  284. package/tools/definitions/get_native_livekit_core_features_def.js +33 -0
  285. package/tools/definitions/get_native_livekit_core_features_def.js.map +1 -0
  286. package/tools/definitions/get_native_livekit_core_integration_def.js +33 -0
  287. package/tools/definitions/get_native_livekit_core_integration_def.js.map +1 -0
  288. package/tools/definitions/get_native_trtc_sdk_docs_def.js +32 -0
  289. package/tools/definitions/get_native_trtc_sdk_docs_def.js.map +1 -0
  290. package/tools/definitions/get_usersig_def.js +17 -24
  291. package/tools/definitions/get_usersig_def.js.map +1 -1
  292. package/tools/definitions/get_web_call_uikit_integration_def.js +15 -7
  293. package/tools/definitions/get_web_call_uikit_integration_def.js.map +1 -1
  294. package/tools/definitions/get_web_chat_uikit_component_detail_def.js +17 -49
  295. package/tools/definitions/get_web_chat_uikit_component_detail_def.js.map +1 -1
  296. package/tools/definitions/get_web_chat_uikit_integration_def.js +16 -19
  297. package/tools/definitions/get_web_chat_uikit_integration_def.js.map +1 -1
  298. package/tools/definitions/get_web_live_uikit_integration_def.js +13 -18
  299. package/tools/definitions/get_web_live_uikit_integration_def.js.map +1 -1
  300. package/tools/definitions/get_web_livekit_api_def.js +27 -0
  301. package/tools/definitions/get_web_livekit_api_def.js.map +1 -0
  302. package/tools/definitions/get_web_livekit_component_detail_def.js +29 -0
  303. package/tools/definitions/get_web_livekit_component_detail_def.js.map +1 -0
  304. package/tools/definitions/get_web_room_uikit_integration_def.js +13 -30
  305. package/tools/definitions/get_web_room_uikit_integration_def.js.map +1 -1
  306. package/tools/definitions/get_web_roomkit_feature_detail_def.js +30 -0
  307. package/tools/definitions/get_web_roomkit_feature_detail_def.js.map +1 -0
  308. package/tools/definitions/get_web_trtc_sdk_api_def.js +25 -0
  309. package/tools/definitions/get_web_trtc_sdk_api_def.js.map +1 -0
  310. package/tools/definitions/get_web_trtc_sdk_integration_def.js +25 -0
  311. package/tools/definitions/get_web_trtc_sdk_integration_def.js.map +1 -0
  312. package/tools/definitions/get_web_trtc_sdk_plugin_def.js +25 -0
  313. package/tools/definitions/get_web_trtc_sdk_plugin_def.js.map +1 -0
  314. package/tools/definitions/present_framework_choice_def.js +23 -12
  315. package/tools/definitions/present_framework_choice_def.js.map +1 -1
  316. package/tools/index.js +47 -59
  317. package/tools/index.js.map +1 -1
  318. package/tools/live/get_native_livekit_core_features.js +65 -0
  319. package/tools/live/get_native_livekit_core_features.js.map +1 -0
  320. package/tools/live/get_native_livekit_core_integration.js +59 -0
  321. package/tools/live/get_native_livekit_core_integration.js.map +1 -0
  322. package/tools/live/get_web_live_uikit_integration.js +48 -0
  323. package/tools/live/get_web_live_uikit_integration.js.map +1 -0
  324. package/tools/live/get_web_livekit_api.js +32 -0
  325. package/tools/live/get_web_livekit_api.js.map +1 -0
  326. package/tools/live/get_web_livekit_component_detail.js +34 -0
  327. package/tools/live/get_web_livekit_component_detail.js.map +1 -0
  328. package/tools/room/{get-web-room-integration.js → get_web_room_uikit_integration.js} +13 -14
  329. package/tools/room/get_web_room_uikit_integration.js.map +1 -0
  330. package/tools/room/{get-web-room-feature-detail.js → get_web_roomkit_feature_detail.js} +30 -31
  331. package/tools/room/get_web_roomkit_feature_detail.js.map +1 -0
  332. package/tools/rtcengine/get_web_trtc_sdk_api.js +31 -0
  333. package/tools/rtcengine/get_web_trtc_sdk_api.js.map +1 -0
  334. package/tools/rtcengine/get_web_trtc_sdk_integration.js +31 -0
  335. package/tools/rtcengine/get_web_trtc_sdk_integration.js.map +1 -0
  336. package/tools/rtcengine/get_web_trtc_sdk_plugin.js +31 -0
  337. package/tools/rtcengine/get_web_trtc_sdk_plugin.js.map +1 -0
  338. package/tools/trtc/get_native_trtc_sdk_docs.js +73 -0
  339. package/tools/trtc/get_native_trtc_sdk_docs.js.map +1 -0
  340. package/utils/generate-structured-result.js +61 -17
  341. package/utils/generate-structured-result.js.map +1 -1
  342. package/utils/report-cls-client.js +12 -1
  343. package/utils/report-cls-client.js.map +1 -1
  344. package/utils/report-es-client.js +1 -1
  345. package/resource/doc/chatuikit/android/integration.md +0 -612
  346. package/resource/doc/chatuikit/android/workflow.md +0 -0
  347. package/resource/doc/chatuikit/faq/android_sdk/client-api.md +0 -1376
  348. package/resource/doc/chatuikit/faq/flutter_sdk/client-api.md +0 -860
  349. package/resource/doc/chatuikit/faq/ios_sdk/client-api.md +0 -1371
  350. package/resource/doc/chatuikit/flutter/workflow.md +0 -816
  351. package/resource/doc/chatuikit/iOS/workflow.md +0 -0
  352. package/resource/doc/chatuikit/react/components/conversation-list.md +0 -765
  353. package/resource/doc/chatuikit/react/components/search.md +0 -885
  354. package/resource/doc/chatuikit/react/create-group.md +0 -22
  355. package/resource/doc/chatuikit/react/init.md +0 -25
  356. package/resource/doc/chatuikit/react/workflow.md +0 -254
  357. package/resource/doc/chatuikit/uniapp-app/faq.md +0 -0
  358. package/resource/doc/chatuikit/uniapp-app/integration.md +0 -619
  359. package/resource/doc/chatuikit/uniapp-app/workflow.md +0 -576
  360. package/resource/doc/chatuikit/vue/components/contact-list.md +0 -679
  361. package/resource/doc/chatuikit/vue/components/tuikit.md +0 -110
  362. package/resource/doc/chatuikit/vue/create-group.md +0 -26
  363. package/resource/doc/chatuikit/vue/init.md +0 -35
  364. package/resource/doc/chatuikit/vue/workflow.md +0 -395
  365. package/resource/doc/livekit/live/android/workflow.md +0 -322
  366. package/resource/doc/livekit/live/flutter/live-integration.md +0 -1029
  367. package/resource/doc/livekit/live/flutter/workflow.md +0 -353
  368. package/resource/doc/livekit/live/ios/workflow.md +0 -352
  369. package/resource/doc/livekit/live/vue/components/barrage.md +0 -615
  370. package/resource/doc/livekit/live/vue/components/stream-mixer.md +0 -442
  371. package/resource/doc/livekit/live/vue/faq.md +0 -0
  372. package/resource/doc/livekit/live/vue/live-list-integration.md +0 -195
  373. package/resource/doc/livekit/live/vue/live-player-desk-integration.md +0 -293
  374. package/resource/doc/livekit/live/vue/live-player-h5-integration.md +0 -381
  375. package/resource/doc/livekit/live/vue/live-pusher-integration.md +0 -598
  376. package/resource/doc/livekit/live/vue/states/live-state.md +0 -2656
  377. package/resource/doc/livekit/live/vue/workflow.md +0 -219
  378. package/resource/doc/native_live/android/V2TXLiveCode_api_android.md +0 -334
  379. package/resource/doc/native_live/android/V2TXLiveDef_api_android.md +0 -434
  380. package/resource/doc/native_live/android/V2TXLivePlayerObserver_api_android.md +0 -685
  381. package/resource/doc/native_live/android/V2TXLivePlayer_api_android.md +0 -712
  382. package/resource/doc/native_live/android/V2TXLivePremier_api_android.md +0 -284
  383. package/resource/doc/native_live/android/V2TXLivePusherObserver_api_android.md +0 -849
  384. package/resource/doc/native_live/android/V2TXLivePusher_api_android.md +0 -1046
  385. package/resource/doc/native_live/flutter/V2TXLiveCode_api_flutter.md +0 -460
  386. package/resource/doc/native_live/flutter/V2TXLiveDef_api_flutter.md +0 -558
  387. package/resource/doc/native_live/flutter/V2TXLivePlayerObserver_api_flutter.md +0 -879
  388. package/resource/doc/native_live/flutter/V2TXLivePlayer_api_flutter.md +0 -668
  389. package/resource/doc/native_live/flutter/V2TXLivePremier_api_flutter.md +0 -456
  390. package/resource/doc/native_live/flutter/V2TXLivePusherObserver_api_flutter.md +0 -332
  391. package/resource/doc/native_live/flutter/V2TXLivePusher_api_flutter.md +0 -748
  392. package/resource/doc/native_live/iOS/V2TXLiveCode_api_iOS.md +0 -328
  393. package/resource/doc/native_live/iOS/V2TXLiveDef_api_iOS.md +0 -505
  394. package/resource/doc/native_live/iOS/V2TXLivePlayerObserver_api_iOS.md +0 -507
  395. package/resource/doc/native_live/iOS/V2TXLivePlayer_api_iOS.md +0 -676
  396. package/resource/doc/native_live/iOS/V2TXLivePremier_api_iOS.md +0 -284
  397. package/resource/doc/native_live/iOS/V2TXLivePusherObserver_api_iOS.md +0 -820
  398. package/resource/doc/native_live/iOS/V2TXLivePusher_api_iOS.md +0 -1065
  399. package/resource/doc/roomkit/vue/features/workflow.md +0 -553
  400. package/resource/doc/roomkit/vue/workflow.md +0 -487
  401. package/resource/doc/tuicallkit/android/integration.md +0 -302
  402. package/resource/doc/tuicallkit/android/workflow.md +0 -0
  403. package/resource/doc/tuicallkit/faq/android_sdk/call-observer-api.md +0 -786
  404. package/resource/doc/tuicallkit/faq/android_sdk/callkit-api.md +0 -663
  405. package/resource/doc/tuicallkit/faq/flutter_sdk/call-define-api.md +0 -932
  406. package/resource/doc/tuicallkit/faq/flutter_sdk/call-observer-api.md +0 -926
  407. package/resource/doc/tuicallkit/faq/flutter_sdk/callkit-api.md +0 -452
  408. package/resource/doc/tuicallkit/faq/ios_sdk/call-observer-api.md +0 -779
  409. package/resource/doc/tuicallkit/faq/ios_sdk/callkit-api.md +0 -635
  410. package/resource/doc/tuicallkit/flutter/workflow.md +0 -331
  411. package/resource/doc/tuicallkit/react/api.md +0 -1512
  412. package/resource/doc/tuicallkit/vue/api.md +0 -1512
  413. package/resource/doc/tuicallkit/vue/faq.md +0 -986
  414. package/tools/call/get-native-call-integration.js +0 -43
  415. package/tools/call/get-native-call-integration.js.map +0 -1
  416. package/tools/call/get-web-call-api.js +0 -27
  417. package/tools/call/get-web-call-api.js.map +0 -1
  418. package/tools/call/get-web-call-integration.js.map +0 -1
  419. package/tools/chat/get-native-chat-feature-detail.js +0 -30
  420. package/tools/chat/get-native-chat-feature-detail.js.map +0 -1
  421. package/tools/chat/get-native-chat-integration.js +0 -45
  422. package/tools/chat/get-native-chat-integration.js.map +0 -1
  423. package/tools/chat/get-web-chat-component-detail.js +0 -31
  424. package/tools/chat/get-web-chat-component-detail.js.map +0 -1
  425. package/tools/chat/get-web-chat-integration.js +0 -45
  426. package/tools/chat/get-web-chat-integration.js.map +0 -1
  427. package/tools/chat/get-web-chat-uikit-init.js +0 -28
  428. package/tools/chat/get-web-chat-uikit-init.js.map +0 -1
  429. package/tools/chat/get-web-create-group-doc.js +0 -28
  430. package/tools/chat/get-web-create-group-doc.js.map +0 -1
  431. package/tools/common/get-faq.js +0 -91
  432. package/tools/common/get-faq.js.map +0 -1
  433. package/tools/common/get-usersig.js.map +0 -1
  434. package/tools/common/present-framework-choice.js +0 -16
  435. package/tools/common/present-framework-choice.js.map +0 -1
  436. package/tools/common/record-prompt.js +0 -55
  437. package/tools/common/record-prompt.js.map +0 -1
  438. package/tools/common/record-result.js +0 -60
  439. package/tools/common/record-result.js.map +0 -1
  440. package/tools/definitions/get_native_chat_feature_detail_def.js +0 -32
  441. package/tools/definitions/get_native_chat_feature_detail_def.js.map +0 -1
  442. package/tools/definitions/get_native_live_api_def.js +0 -22
  443. package/tools/definitions/get_native_live_api_def.js.map +0 -1
  444. package/tools/definitions/get_native_live_uikit_extra_features_def.js +0 -109
  445. package/tools/definitions/get_native_live_uikit_extra_features_def.js.map +0 -1
  446. package/tools/definitions/get_native_live_uikit_integration_def.js +0 -50
  447. package/tools/definitions/get_native_live_uikit_integration_def.js.map +0 -1
  448. package/tools/definitions/get_native_live_uikit_interaction_def.js +0 -115
  449. package/tools/definitions/get_native_live_uikit_interaction_def.js.map +0 -1
  450. package/tools/definitions/get_trtc_native_api_def.js +0 -17
  451. package/tools/definitions/get_trtc_native_api_def.js.map +0 -1
  452. package/tools/definitions/get_web_call_uikit_api_def.js +0 -23
  453. package/tools/definitions/get_web_call_uikit_api_def.js.map +0 -1
  454. package/tools/definitions/get_web_chat_uikit_init_def.js +0 -23
  455. package/tools/definitions/get_web_chat_uikit_init_def.js.map +0 -1
  456. package/tools/definitions/get_web_create_group_doc_def.js +0 -18
  457. package/tools/definitions/get_web_create_group_doc_def.js.map +0 -1
  458. package/tools/definitions/get_web_live_state_detail_def.js +0 -19
  459. package/tools/definitions/get_web_live_state_detail_def.js.map +0 -1
  460. package/tools/definitions/get_web_live_uikit_component_detail_def.js +0 -27
  461. package/tools/definitions/get_web_live_uikit_component_detail_def.js.map +0 -1
  462. package/tools/definitions/get_web_room_feature_detail_def.js +0 -95
  463. package/tools/definitions/get_web_room_feature_detail_def.js.map +0 -1
  464. package/tools/definitions/record_prompt_def.js +0 -53
  465. package/tools/definitions/record_prompt_def.js.map +0 -1
  466. package/tools/definitions/record_result_def.js +0 -30
  467. package/tools/definitions/record_result_def.js.map +0 -1
  468. package/tools/live/get-native-live-uikit-integration.js +0 -101
  469. package/tools/live/get-native-live-uikit-integration.js.map +0 -1
  470. package/tools/live/get-web-live-component-detail.js +0 -31
  471. package/tools/live/get-web-live-component-detail.js.map +0 -1
  472. package/tools/live/get-web-live-state-detail.js +0 -31
  473. package/tools/live/get-web-live-state-detail.js.map +0 -1
  474. package/tools/live/get-web-live-uikit-integration.js +0 -52
  475. package/tools/live/get-web-live-uikit-integration.js.map +0 -1
  476. package/tools/live/get_native_live_uikit_extra_features.js +0 -105
  477. package/tools/live/get_native_live_uikit_extra_features.js.map +0 -1
  478. package/tools/live/get_native_live_uikit_interaction.js +0 -101
  479. package/tools/live/get_native_live_uikit_interaction.js.map +0 -1
  480. package/tools/native_live/get-native-live-api.js +0 -31
  481. package/tools/native_live/get-native-live-api.js.map +0 -1
  482. package/tools/room/get-web-room-feature-detail.js.map +0 -1
  483. package/tools/room/get-web-room-integration.js.map +0 -1
  484. package/tools/rtcengine/get-rtcengine-web-sdk-integration.js +0 -28
  485. package/tools/rtcengine/get-rtcengine-web-sdk-integration.js.map +0 -1
  486. package/tools/rtcengine/get-trtc-sdk-faq.js +0 -32
  487. package/tools/rtcengine/get-trtc-sdk-faq.js.map +0 -1
  488. package/tools/rtcengine/get-trtc-web-sdk-api.js +0 -28
  489. package/tools/rtcengine/get-trtc-web-sdk-api.js.map +0 -1
  490. package/tools/rtcengine/get-trtc-web-sdk-faq.js +0 -30
  491. package/tools/rtcengine/get-trtc-web-sdk-faq.js.map +0 -1
  492. package/tools/rtcengine/get-trtc-web-sdk-integration.js +0 -29
  493. package/tools/rtcengine/get-trtc-web-sdk-integration.js.map +0 -1
  494. package/tools/rtcengine/get-trtc-web-sdk-plugin.js +0 -45
  495. package/tools/rtcengine/get-trtc-web-sdk-plugin.js.map +0 -1
  496. package/tools/trtc/get-trtc-native-api.js +0 -31
  497. package/tools/trtc/get-trtc-native-api.js.map +0 -1
  498. package/utils/handle-component-name.js +0 -33
  499. package/utils/handle-component-name.js.map +0 -1
  500. /package/resource/doc/{rtcengine/web → callkit/core-sdk}/.gitkeep +0 -0
  501. /package/resource/doc/{chatuikit → chatkit}/faq/common/server_error_code.md +0 -0
  502. /package/resource/doc/{chatuikit → chatkit}/flutter/faq.md +0 -0
  503. /package/resource/doc/{chatuikit → chatkit}/react/faq.md +0 -0
@@ -0,0 +1,365 @@
1
+ `LiveListStore` 是 `AtomicXCore` 中负责管理直播房间列表、创建、加入以及维护房间状态的核心模块。通过`LiveListStore`,您可以为您的应用构建完整的直播生命周期管理。
2
+
3
+ ## 核心功能
4
+ - **直播列表拉取**:获取当前所有公开的直播间列表,支持分页加载。
5
+
6
+ - **直播生命周期管理**:提供从创建、开播、加入、离开到结束直播的全套流程接口。
7
+
8
+ - **直播信息更新**:主播可以随时更新直播间的公开信息,例如封面、公告等。
9
+
10
+ - **实时事件监听**:监听直播结束、用户被踢出等关键事件。
11
+
12
+ - **自定义业务数据**:强大的自定义元数据(`MetaData`)能力,允许您在房间内存储和同步任何业务相关的信息,例如直播状态、音乐信息、自定义角色等 。
13
+
14
+ ## 核心概念
15
+
16
+ 在开始集成之前,我们先通过下表了解一下 `LiveListStore` 相关的几个核心概念:
17
+ | **核心概念** | **类型** | **核心职责与描述** |
18
+ | --- | --- | --- |
19
+ | `LiveInfo` | `data class` | 代表一个直播间的所有信息模型。包含了直播ID (`liveID`)、名称 (`liveName`)、房主信息 (`liveOwner`) 以及自定义元数据 (`metaData`) 等。 |
20
+ | `LiveListState` | `data class` | 代表直播列表模块的当前状态。其核心属性 liveList 是一个 `StateFlow`,存储了拉取到的直播列表;`currentLive` 则代表用户当前所在的直播间信息。 |
21
+ | `LiveListListener` | `abstract class` | 代表直播房间的全局事件。分为 `onLiveEnded` (直播结束) 和 `onKickedOutOfLive` (被踢出直播) 两种,用于处理关键的房间状态变更。 |
22
+ | `LiveListStore` | `abstract class` | 代表直播房间的全局事件。分为 `.onLiveEnded` (直播结束) 和 `.onKickedOutOfLive` (被踢出直播) 两种,用于处理关键的房间状态变更。 |
23
+
24
+ ## 实现步骤
25
+
26
+ ### 步骤1:组件集成
27
+
28
+ 请参考 开始直播 集成 **AtomicXCore**,并完成 主播开播 和 观众观看 的功能实现。
29
+
30
+ ### 步骤2:实现观众从直播列表进入直播间
31
+
32
+ 创建一个展示直播列表的页面,该页面使用 `RecyclerView` 来布局直播间卡片。当用户点击某个卡片时,获取该直播间的 `liveId`,并跳转到观众观看页面。
33
+ ``` kotlin
34
+ import android.content.Intent
35
+ import android.os.Bundle
36
+ import android.view.LayoutInflater
37
+ import android.view.View
38
+ import android.view.ViewGroup
39
+ import androidx.appcompat.app.AppCompatActivity
40
+ import androidx.recyclerview.widget.GridLayoutManager
41
+ import androidx.recyclerview.widget.RecyclerView
42
+ import io.trtc.tuikit.atomicxcore.api.*
43
+ import io.trtc.tuikit.atomicxcore.api.CompletionHandler
44
+ import kotlinx.coroutines.*
45
+ import kotlinx.coroutines.flow.*
46
+
47
+ class LiveListActivity : AppCompatActivity() {
48
+ private val liveListStore = LiveListStore.shared()
49
+ private var liveList: List<LiveInfo> = emptyList()
50
+ private val coroutineScope = CoroutineScope(Dispatchers.Main)
51
+
52
+ private lateinit var recyclerView: RecyclerView
53
+ private lateinit var adapter: LiveListAdapter
54
+
55
+ override fun onCreate(savedInstanceState: Bundle?) {
56
+ super.onCreate(savedInstanceState)
57
+ setContentView(R.layout.activity_live_list)
58
+ setupUI()
59
+ bindStore()
60
+ fetchLiveList()
61
+ }
62
+
63
+ private fun bindStore() {
64
+ // 订阅 state,自动接收列表更新
65
+ coroutineScope.launch {
66
+ liveListStore.liveState.liveList.collect { fetchedList ->
67
+ liveList = fetchedList
68
+ adapter.notifyDataSetChanged()
69
+ }
70
+ }
71
+ }
72
+
73
+ private fun fetchLiveList() {
74
+ liveListStore.fetchLiveList(
75
+ cursor = "",
76
+ count = 20,
77
+ completion = object : CompletionHandler {
78
+ override fun onSuccess() {
79
+ println("直播列表拉取成功")
80
+ }
81
+
82
+ override fun onFailure(code: Int, desc: String) {
83
+ println("直播列表拉取失败: $desc")
84
+ }
85
+ }
86
+ )
87
+ }
88
+
89
+ // 当用户点击列表中的某个Item时
90
+ private fun onLiveItemClick(liveInfo: LiveInfo) {
91
+ // 创建观众观看页面,并将 liveId 传入
92
+ val intent = Intent(this, YourAudienceActivity::class.java)
93
+ intent.putExtra("liveId", liveInfo.liveID)
94
+ startActivity(intent)
95
+ }
96
+
97
+ // --- RecyclerView 相关方法 ---
98
+ private fun setupUI() {
99
+ recyclerView = findViewById(R.id.recyclerView)
100
+ adapter = LiveListAdapter(liveList) { liveInfo ->
101
+ onLiveItemClick(liveInfo)
102
+ }
103
+ recyclerView.layoutManager = GridLayoutManager(this, 2)
104
+ recyclerView.adapter = adapter
105
+ }
106
+
107
+ override fun onDestroy() {
108
+ super.onDestroy()
109
+ coroutineScope.cancel()
110
+ }
111
+ }
112
+
113
+ // RecyclerView Adapter
114
+ class LiveListAdapter(
115
+ private var liveList: List<LiveInfo>,
116
+ private val onItemClick: (LiveInfo) -> Unit
117
+ ) : RecyclerView.Adapter<LiveListAdapter.LiveViewHolder>() {
118
+
119
+ class LiveViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
120
+ // 定义您的ViewHolder视图组件
121
+ // val titleTextView: TextView = itemView.findViewById(R.id.titleTextView)
122
+ // val coverImageView: ImageView = itemView.findViewById(R.id.coverImageView)
123
+ }
124
+
125
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): LiveViewHolder {
126
+ val view = LayoutInflater.from(parent.context)
127
+ .inflate(R.layout.item_live_card, parent, false)
128
+ return LiveViewHolder(view)
129
+ }
130
+
131
+ override fun onBindViewHolder(holder: LiveViewHolder, position: Int) {
132
+ val liveInfo = liveList[position]
133
+ // 设置数据到ViewHolder
134
+ // holder.titleTextView.text = liveInfo.liveName
135
+ // 加载封面图片等
136
+
137
+ holder.itemView.setOnClickListener {
138
+ onItemClick(liveInfo)
139
+ }
140
+ }
141
+
142
+ override fun getItemCount(): Int = liveList.size
143
+ }
144
+
145
+ ```
146
+
147
+ **LiveInfo 参数说明**
148
+ | **参数名** | **类型** | **描述** |
149
+ | --- | --- | --- |
150
+ | `liveID` | `String` | 直播间的唯一标识符 |
151
+ | `liveName` | `String` | 直播间的标题 |
152
+ | `coverURL` | `String` | 直播间的封面图片地址 |
153
+ | `liveOwner` | [LiveUserInfo](https://tencent-rtc.github.io/TUIKit_Android/-atomic-x%20-core%20-a-p-i/io.trtc.tuikit.atomicxcore.api.live/-live-user-info/index.html) | 房主的个人信息 |
154
+ | `totalViewerCount` | `Int` | 直播间的总观看人数 |
155
+ | `categoryList` | `List<Int>` | 直播间的分类标签列表 |
156
+ | `notice` | `String` | 直播间的公告信息 |
157
+ | `metaData` | `Map<String: String>` | 开发者自定义的元数据,用于实现复杂的业务场景 |
158
+
159
+ ## 功能进阶
160
+
161
+ ### 场景一:实现直播列表的分类展示
162
+
163
+ 在 App 的直播广场页,顶部设有"热门"、"音乐"、"游戏"等分类标签。用户点击不同的标签后,下方的直播列表会动态筛选,只展示对应分类的直播间,从而帮助用户快速发现感兴趣的内容。
164
+
165
+ #### 实现方式
166
+
167
+ 核心是利用 `LiveInfo` 模型中的 `categoryList` 属性。当主播开播设置分类后,`fetchLiveList` 返回的 `LiveInfo` 对象中就会包含这些分类信息。您的 App 在获取到完整的直播列表后,只需在客户端根据用户选择的分类,对这个列表进行一次简单的筛选,然后刷新 UI 即可。
168
+
169
+ #### 代码示例
170
+
171
+ 以下示例展示了如何在 `LiveListActivity` 中扩展一个 `LiveListManager` 来处理数据和筛选逻辑。
172
+ ``` kotlin
173
+ import android.os.Bundle
174
+ import androidx.appcompat.app.AppCompatActivity
175
+ import androidx.recyclerview.widget.RecyclerView
176
+ import io.trtc.tuikit.atomicxcore.api.*
177
+ import kotlinx.coroutines.*
178
+ import kotlinx.coroutines.flow.*
179
+
180
+ // 1. 创建一个数据管理器来封装数据获取和筛选逻辑
181
+ class LiveListManager {
182
+ private val liveListStore = LiveListStore.shared()
183
+ private var fullLiveList: List<LiveInfo> = emptyList()
184
+
185
+ // 对外暴露最终的直播列表
186
+ private val _filteredLiveList = MutableStateFlow<List<LiveInfo>>(emptyList())
187
+ val filteredLiveList: StateFlow<List<LiveInfo>> = _filteredLiveList
188
+
189
+ init {
190
+ // 监听完整列表变化
191
+ CoroutineScope(Dispatchers.Main).launch {
192
+ liveListStore.liveState.liveList.collect { fetchedList ->
193
+ fullLiveList = fetchedList
194
+ // 默认将完整列表发布出去
195
+ _filteredLiveList.value = fetchedList
196
+ }
197
+ }
198
+ }
199
+
200
+ fun fetchFirstPage() {
201
+ liveListStore.fetchLiveList(cursor = "", count = 20, completion = null)
202
+ }
203
+
204
+ /// 根据分类筛选直播列表
205
+ fun filterLiveList(categoryId: Int?) {
206
+ if (categoryId == null) {
207
+ // 如果 categoryId 为 null,则显示完整列表
208
+ _filteredLiveList.value = fullLiveList
209
+ return
210
+ }
211
+
212
+ val filteredList = fullLiveList.filter { liveInfo ->
213
+ liveInfo.categoryList.contains(categoryId)
214
+ }
215
+ _filteredLiveList.value = filteredList
216
+ }
217
+ }
218
+
219
+ // 2. 在您的 LiveListActivity 中使用 Manager
220
+ class LiveListActivity : AppCompatActivity() {
221
+ private val manager = LiveListManager()
222
+ private lateinit var recyclerView: RecyclerView
223
+ private lateinit var adapter: LiveListAdapter
224
+
225
+ override fun onCreate(savedInstanceState: Bundle?) {
226
+ super.onCreate(savedInstanceState)
227
+ setContentView(R.layout.activity_live_list)
228
+ // setupUI()
229
+
230
+ // 绑定数据
231
+ CoroutineScope(Dispatchers.Main).launch {
232
+ manager.filteredLiveList.collect { filteredList ->
233
+ // 刷新UI
234
+ // adapter.updateList(filteredList)
235
+ }
236
+ }
237
+
238
+ // 首次拉取
239
+ manager.fetchFirstPage()
240
+ }
241
+
242
+ // 当用户点击顶部分类标签时
243
+ fun onCategorySelected(categoryId: Int) {
244
+ manager.filterLiveList(categoryId)
245
+ }
246
+
247
+ // ... (RecyclerView 相关代码)
248
+ }
249
+ ```
250
+
251
+ ### 场景二:实现语聊房内的自定义状态同步
252
+
253
+ 在语聊房中,主播可能需要向所有观众同步一些自定义信息,例如“当前房间话题”、“背景音乐信息”等。`LiveListStore` 的 `MetaData` 功能可以实现这一点。
254
+
255
+ #### 实现方式:
256
+
257
+ 主播端将自定义信息通过 `updateLiveMetaData` 接口设置到一个或多个 `key` 中。`AtomicXCore` 会将这个变更实时同步给所有观众。观众端只需订阅` LiveListState.currentLive`,监听 `metaData` 的变化,一旦发现关心的 `key` 更新,就解析其 `value` 并刷新业务状态。
258
+
259
+ #### 示例代码:
260
+ ``` java
261
+ import io.trtc.tuikit.atomicxcore.api.LiveListStore
262
+ import io.trtc.tuikit.atomicxcore.api.CompletionHandler
263
+ import com.google.gson.Gson
264
+ import io.trtc.tuikit.atomicxcore.api.MetaDataCompletionHandler
265
+
266
+ // 1. 定义一个背景音乐模型 (使用 data class)
267
+ data class MusicModel(
268
+ val musicId: String,
269
+ val musicName: String
270
+ )
271
+
272
+ // 2. 主播端:在您的主播业务逻辑中,添加推送背景音乐的方法
273
+ fun updateBackgroundMusic(music: MusicModel) {
274
+ val gson = Gson()
275
+ val jsonString = gson.toJson(music) ?: ""
276
+
277
+ // 将要更新的 metaData
278
+ val metaData = hashMapOf("music_info" to jsonString)
279
+
280
+ // 更新 metaData
281
+ LiveListStore.shared()
282
+ .updateLiveMetaData(
283
+ metaData,
284
+ object : CompletionHandler {
285
+ override fun onSuccess() {
286
+ print("背景音乐 ${music.musicName} 推送成功")
287
+ }
288
+
289
+ override fun onFailure(code: Int, desc: String) {
290
+ print("背景音乐推送失败: $desc")
291
+ }
292
+ }
293
+ )
294
+ }
295
+
296
+ // 3. 观众端:在您的观众业务逻辑中 ,添加监听背景音乐变化的方法
297
+ private fun subscribeToDataUpdates() {
298
+ CoroutineScope(Dispatchers.Main).launch {
299
+ LiveListStore.shared()
300
+ .liveState
301
+ .currentLive
302
+ .map { it.metaData }
303
+ .collect {
304
+ val musicInfo = it["music_info"]
305
+ // 刷新业务状态,例如播放新的背景音乐
306
+ }
307
+ }
308
+ }
309
+
310
+ ```
311
+
312
+ ## API 文档
313
+
314
+ 关于 [LiveListStore](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) 及其相关类的所有公开接口、属性和方法的详细信息,请参阅随 [AtomicXCore](https://tencent-rtc.github.io/TUIKit_Android/index.html) 框架的官方 API 文档。本文档使用到的相关 `Store` 如下:
315
+ | **Store/Component** | **功能描述** | **API 文档** |
316
+ | --- | --- | --- |
317
+ | **LiveListStore** | 直播间全生命周期管理:创建 / 加入 / 离开 / 销毁房间,查询房间列表,修改直播信息(名称、公告等),监听直播状态(例如被踢出、结束)。 | [API 文档](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) |
318
+
319
+ ## 常见问题
320
+
321
+ ### 语聊房的列表和视频直播的列表数据是同一份吗?
322
+
323
+ 它们的数据是同一份,您不需要分开拉取。`LiveListStore` 是一个全局单例,它负责统一管理应用中所有“直播”房间的生命周期,无论是视频直播还是语聊房。
324
+
325
+ ### **直播列表中如何区分语聊房和视频直播**
326
+
327
+ `LiveListStore` 本身不区分房间的业务类型。您需要在获取列表后,在客户端的应用层(业务逻辑或 `UI` 层)进行筛选和分类。
328
+
329
+ 我们推荐采用以下两种方式进行区分:
330
+
331
+ **方式一(推荐)**:**使用 seatLayoutTemplateID 区分**。这是一个用于定义房间布局的模板 `ID`,关于目前已支持的模板 `ID` 和效果,请参阅文档 开始直播 > 运行效果。您要在创建房间时指定 `ID`,然后在获取列表时根据 `ID` 范围来识别业务场景。
332
+ - **步骤1**:**创建房间时指定 ID **调用 `LiveListStore.shared.createLive` 时,您需要根据业务场景为 `LiveInfo` 的 `seatLayoutTemplateID` 属性传入指定范围的 `ID`:
333
+
334
+ - 语聊房场景:传入 1 - 199 范围内的模板 `ID`。
335
+
336
+ - 视频直播场景:传入 200 - 999 范围内的模板 `ID`。
337
+
338
+ - **步骤2**:**获取列表时筛选 **客户端在 `LiveListStore.state.liveList` 中收到列表数据后,通过判断这个 `ID` 值所属的范围判断,从而在进入直播间的时候区分两种业务场景。
339
+
340
+ > **重要提示:**
341
+ >
342
+
343
+ > 创建房间时,如果传入的 `seatLayoutTemplateID` 范围与您的业务场景(语聊房、视频直播)不匹配,可能会导致麦位布局出现功能异常。
344
+ >
345
+
346
+ **方式二**:**为 **`liveID`** 添加业务前缀。**这是一种可选的、纯粹的应用层约定,用于辅助您在客户端快速筛选。
347
+
348
+ - 步**骤1:创建房间时添加前缀 **在您生成 `liveID` 并调用 `createLive` 时,为不同业务类型的 `liveID` 赋予不同的前缀。例如:视频直播的 `ID` 以 “`Live_`” 开头 (例如:`Live_12345`),语聊房的 `ID` 以 “`voice_`” 开头 (例如:`voice_67890`)。
349
+
350
+ - **步骤2:获取列表时检查前缀 **客户端在拉取到列表后,通过检查 `liveID` 字符串的前缀来进行区分。
351
+
352
+ ### 使用 `updateLiveMetaData` 时有哪些需要注意的限制和规则?
353
+
354
+ 为了保证系统的稳定和高效,`metaData` 的使用遵循以下规则:
355
+ - **权限**: 只有房主和管理员可以调用 `updateLiveMetaData`。普通观众没有权限。
356
+
357
+ - **数量与大小限制**:
358
+
359
+ - 单个房间最多支持 **10** 个 `key`。
360
+
361
+ - 每个 `key` 的长度不超过 **50 字节**,每个 `value` 的长度不超过 **2KB**。
362
+
363
+ - 单个房间所有 `value` 的总大小不超过 **16KB**。
364
+
365
+ - **冲突解决**: `metaData` 的更新机制是“后来者覆盖”。如果多个管理员在短时间内修改同一个 `key`,最后一次的修改会生效。建议在业务设计上避免多人同时修改同一个关键信息。
@@ -0,0 +1,259 @@
1
+ `LiveAudienceStore` 是 `AtomicXCore` 中专门负责管理直播间观众信息的模块。通过 `LiveAudienceStore`,您可以为您的直播应用构建一套完整的观众列表及管理系统。
2
+
3
+ ## 核心功能
4
+ - **实时观众列表**:获取并展示当前在直播间内的所有观众信息。
5
+
6
+ - **观众人数统计**:实时获取当前直播间的准确观众总数。
7
+
8
+ - **观众动态监听**:通过事件订阅,实时感知观众的加入和离开。
9
+
10
+ - **管理员权限**:主播可以将普通观众设为管理员,或撤销其管理员身份。
11
+
12
+ - **房间管理**:主播或管理员可以将任意普通观众请出(踢出)直播间。
13
+
14
+ ## 核心概念
15
+
16
+ 下表介绍了 `LiveAudienceStore` 的核心概念:
17
+ | **核心概念** | **类型** | **核心职责与描述** |
18
+ | --- | --- | --- |
19
+ | [LiveUserInfo](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_live_audience_store/LiveUserInfo-class.html) | `class` | 代表一个观众(用户)的基础信息模型。它包含了用户的唯一标识 (`userID`)、昵称 (`userName`) 和头像地址 (`avatarURL`)。 |
20
+ | [LiveAudienceState](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_live_audience_store/LiveAudienceState-class.html) | `class` | 代表观众模块的当前状态。其核心属性 `audienceList` 是一个 `ValueListenable<List<LiveUserInfo>>`,存储了观众列表的快照;`audienceCount` 则代表当前观众总数。 |
21
+ | [LiveAudienceListener](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_live_audience_store/LiveAudienceListener-class.html) | `class` | 代表观众动态的实时事件监听器。包含 `onAudienceJoined`(观众加入)和 `onAudienceLeft`(观众离开)两个回调,用于实现对观众列表的增量更新。 |
22
+ | [LiveAudienceStore](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_live_audience_store/LiveAudienceStore-class.html) | `class` | 这是与观众列表功能交互的核心管理类。通过它,您可以获取观众列表快照、执行管理操作,并通过 `addLiveAudienceListener` 来接收实时动态。 |
23
+
24
+ ## 实现步骤
25
+
26
+ ### 步骤1:组件集成
27
+
28
+ 请参考 快速接入 集成 **AtomicXCore**,完成接入。
29
+
30
+ ### 步骤2:初始化并获取观众列表
31
+
32
+ 获取一个与当前直播间 liveId 绑定的 `LiveAudienceStore` 实例,并主动拉取一次当前的观众列表,用于首次展示。
33
+
34
+ 在退出直播间时可通过调用 `AudienceManager` 的 `dispose` 方法回收资源。
35
+ ``` java
36
+ import 'package:atomic_x_core/atomicxcore.dart';
37
+
38
+ class AudienceManager {
39
+ final String liveId;
40
+ late final LiveAudienceStore audienceStore;
41
+ late LiveAudienceListener _audienceListener;
42
+ late final VoidCallback _audienceListChangedListener = _onAudienceListChanged;
43
+ late final VoidCallback _audienceCountChangedListener = _onAudienceCountChanged;
44
+
45
+ // 对外暴露【全量】观众列表
46
+ List<LiveUserInfo> audienceList = [];
47
+ // 对外暴露观众总数
48
+ int audienceCount = 0;
49
+
50
+ // 状态变更回调
51
+ Function()? onStateChanged;
52
+
53
+ AudienceManager({required this.liveId}) {
54
+ // 1. 通过 liveId 获取 LiveAudienceStore 的实例
55
+ audienceStore = LiveAudienceStore.create(liveId);
56
+
57
+ // 2. 订阅状态和事件
58
+ _subscribeToAudienceState();
59
+ _subscribeToAudienceEvents();
60
+
61
+ // 3. 主动拉取首屏数据
62
+ fetchInitialAudienceList();
63
+ }
64
+
65
+ /// 主动获取一次观众列表快照
66
+ Future<void> fetchInitialAudienceList() async {
67
+ final result = await audienceStore.fetchAudienceList();
68
+ if (result.isSuccess) {
69
+ print("首次拉取观众列表成功");
70
+ // 成功后,数据会通过下面的 state 订阅通道自动更新
71
+ } else {
72
+ print("首次拉取观众列表失败: ${result.errorMessage}");
73
+ }
74
+ }
75
+
76
+ void dispose() {
77
+ audienceStore.liveAudienceState.audienceList.removeListener(_audienceListChangedListener);
78
+ audienceStore.liveAudienceState.audienceCount.removeListener(_audienceCountChangedListener);
79
+ audienceStore.removeLiveAudienceListener(_audienceListener);
80
+ }
81
+ }
82
+ ```
83
+
84
+ 观众列表等 `state` 订阅将在下一步骤详细讲解。
85
+
86
+ ### 步骤3:监听观众列表状态与实时动态
87
+
88
+ 订阅 `audienceStore` 的 `liveAudienceState` 和 `LiveAudienceListener`,以接收全量列表快照和实时的观众进出事件,从而驱动 UI 更新。
89
+ ``` java
90
+ extension AudienceManagerSubscription on AudienceManager {
91
+ /// 订阅 state,用于获取观众总数和列表快照
92
+ void _subscribeToAudienceState() {
93
+ // 监听观众列表变化
94
+ audienceStore.liveAudienceState.audienceList.addListener(_audienceListChangedListener);
95
+ // 监听观众人数变化
96
+ audienceStore.liveAudienceState.audienceCount.addListener(_audienceCountChangedListener);
97
+ }
98
+
99
+ void _onAudienceListChanged() {
100
+ // audienceList 是一个全量快照
101
+ audienceList = audienceStore.liveAudienceState.audienceList.value;
102
+ onStateChanged?.call();
103
+ }
104
+
105
+ void _onAudienceCountChanged() {
106
+ // audienceCount 是实时总数
107
+ audienceCount = audienceStore.liveAudienceState.audienceCount.value;
108
+ onStateChanged?.call();
109
+ }
110
+
111
+ /// 订阅 event,用于处理观众的实时进出
112
+ void _subscribeToAudienceEvents() {
113
+ _audienceListener = LiveAudienceListener(
114
+ onAudienceJoined: (audience) {
115
+ print("观众 ${audience.userName} 加入了直播间");
116
+ // 增量更新:在当前列表末尾添加新观众
117
+ if (!audienceList.any((a) => a.userID == audience.userID)) {
118
+ audienceList.add(audience);
119
+ onStateChanged?.call();
120
+ }
121
+ },
122
+ onAudienceLeft: (audience) {
123
+ print("观众 ${audience.userName} 离开了直播间");
124
+ // 增量更新:从当前列表中移除离开的观众
125
+ audienceList.removeWhere((a) => a.userID == audience.userID);
126
+ onStateChanged?.call();
127
+ },
128
+ );
129
+ audienceStore.addLiveAudienceListener(_audienceListener);
130
+ }
131
+ }
132
+ ```
133
+
134
+ ### 步骤4:管理观众(踢人与设置管理员)
135
+
136
+ 作为主播或管理员,对直播间内的观众进行管理操作。
137
+
138
+ #### 4.1 将观众踢出直播间
139
+
140
+ 调用 `kickUserOutOfRoom` 接口可以将指定用户请出直播间。
141
+ ``` java
142
+ extension AudienceManagerActions on AudienceManager {
143
+ Future<void> kick(String userId) async {
144
+ final result = await audienceStore.kickUserOutOfRoom(userId);
145
+ if (result.isSuccess) {
146
+ print("成功将用户 $userId 踢出房间");
147
+ // 踢出成功后,您会收到 onAudienceLeft 事件
148
+ } else {
149
+ print("踢出用户 $userId 失败: ${result.errorMessage}");
150
+ }
151
+ }
152
+ }
153
+ ```
154
+
155
+ #### 4.2 设置/撤销管理员
156
+
157
+ 通过 `setAdministrator` 和 `revokeAdministrator` 接口可以管理用户的管理员身份。
158
+ ``` java
159
+ extension AudienceManagerAdmin on AudienceManager {
160
+ /// 将用户设为管理员
161
+ Future<void> promoteToAdmin(String userId) async {
162
+ final result = await audienceStore.setAdministrator(userId);
163
+ if (result.isSuccess) {
164
+ print("成功将用户 $userId 设为管理员");
165
+ }
166
+ }
167
+
168
+ /// 撤销用户的管理员身份
169
+ Future<void> revokeAdmin(String userId) async {
170
+ final result = await audienceStore.revokeAdministrator(userId);
171
+ if (result.isSuccess) {
172
+ print("成功撤销用户 $userId 的管理员身份");
173
+ }
174
+ }
175
+ }
176
+ ```
177
+
178
+ ## 功能进阶
179
+
180
+ ### 在弹幕区展示观众入场欢迎语
181
+
182
+ 当有新观众进入直播间时,弹幕/聊天区域会在本地自动显示一条欢迎消息,例如:"欢迎 [用户昵称] 进入直播间"。
183
+
184
+ #### 实现方式
185
+
186
+ 我们通过订阅 `LiveAudienceStore` 的观众加入事件(`onAudienceJoined`)来获取新观众加入的实时通知。一旦事件触发,我们便提取出新观众的昵称信息,然后立即调用 `BarrageStore` 的本地插入接口 `appendLocalTip`。
187
+
188
+ 在退出直播间时可通过调用 `LiveRoomManager` 的 `dispose` 方法回收资源。
189
+ ``` java
190
+ import 'package:atomic_x_core/atomicxcore.dart';
191
+
192
+ class LiveRoomManager {
193
+ final String liveId;
194
+ late LiveAudienceListener _welcomeListener;
195
+
196
+ LiveRoomManager({required this.liveId}) {
197
+ _setupWelcomeMessageFlow();
198
+ }
199
+
200
+ void _setupWelcomeMessageFlow() {
201
+ // 1. 获取 LiveAudienceStore 的实例
202
+ final audienceStore = LiveAudienceStore.create(liveId);
203
+
204
+ // 2. 获取 BarrageStore 的实例 (得益于内部机制,这会是同一个实例)
205
+ final barrageStore = BarrageStore.create(liveId);
206
+
207
+ // 3. 订阅观众事件
208
+ _welcomeListener = LiveAudienceListener(
209
+ onAudienceJoined: (audience) {
210
+ // 4. 创建一条本地提示消息
211
+ final welcomeTip = Barrage(
212
+ messageType: BarrageType.text,
213
+ textContent: "欢迎 ${audience.userName} 进入直播间!",
214
+ );
215
+
216
+ // 5. 调用 BarrageStore 的接口将其插入弹幕列表
217
+ barrageStore.appendLocalTip(welcomeTip);
218
+ },
219
+ );
220
+ audienceStore.addLiveAudienceListener(_welcomeListener);
221
+ }
222
+
223
+ void dispose() {
224
+ final audienceStore = LiveAudienceStore.create(liveId);
225
+ audienceStore.removeLiveAudienceListener(_welcomeListener);
226
+ }
227
+ }
228
+ ```
229
+
230
+ ## API 文档
231
+
232
+ 关于 [LiveAudienceStore](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_live_audience_store/LiveAudienceStore-class.html) 及其相关类的所有公开接口、属性和方法的详细信息,请参考 [AtomicXCore](https://tencent-rtc.github.io/TUIKit_Flutter/index.html) 框架的官方 API 文档。本文档使用到的相关 Store 如下:
233
+ | **Store/Component** | **功能描述** | **API 文档** |
234
+ | --- | --- | --- |
235
+ | **LiveCoreWidget** | 直播视频流展示与交互的核心视图组件:负责视频流渲染和视图挂件处理,支持主播直播、观众连麦、主播连线等场景。 | [API 文档](https://tencent-rtc.github.io/TUIKit_Flutter/api_view_live_live_core_widget/LiveCoreWidget-class.html) |
236
+ | **LiveCoreController** | LiveCoreWidget 的控制器:用于设置直播 ID、控制预览等操作。 | [API 文档](https://tencent-rtc.github.io/TUIKit_Flutter/api_view_live_live_core_widget/LiveCoreController-class.html) |
237
+ | **LiveAudienceStore** | 观众管理:获取实时观众列表(ID / 名称 / 头像),统计观众数量,监听观众进出事件。 | [API 文档](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_live_audience_store/LiveAudienceStore-class.html) |
238
+ | **BarrageStore** | 弹幕功能:发送文本 / 自定义弹幕,维护弹幕列表,实时监听弹幕状态。 | [API 文档](https://tencent-rtc.github.io/TUIKit_Flutter/api_barrage_barrage_store/api_barrage_barrage_store-library.html) |
239
+
240
+ ## 常见问题
241
+
242
+ ### `LiveAudienceState` 中的在线人数(`audienceCount`)是如何更新的?时机和频率是怎样的?
243
+
244
+ `audienceCount` 的更新并非总是实时的,其机制如下:
245
+ - **主动进出房间**:当用户主动加入或正常退出直播间时,在线人数的变更通知会即时触发。您会很快在 `LiveAudienceState` 中观察到 `audienceCount` 的变化。
246
+
247
+ - **异常掉线**:当用户因网络问题、应用崩溃等原因异常掉线时,系统需要通过心跳机制来判断其真实状态。只有当该用户连续 90 秒没有心跳后,系统才会判定其为离线,并触发人数变更通知。
248
+
249
+ - **更新机制与频率控制:**
250
+
251
+ - 无论是即时触发还是延迟触发,所有的人数变更通知都是以消息的形式在房间内广播的。
252
+
253
+ - 房间内每秒的消息总量有上限,单房间消息频控是**每秒 40 条消息**。
254
+
255
+ - **关键点:**在"弹幕风暴"或礼物刷屏等消息流量极高的场景下,如果房间内的消息速率超过了 40条/秒 的阈值,为了保证核心消息(例如弹幕)的送达,**人数变更的消息可能会被频控策略丢弃**。
256
+
257
+ **这对开发者意味着什么?**
258
+
259
+ `audienceCount` 是一个非常接近实时的**高精度估算值**,但在极端高并发场景下,它可能存在短暂的延迟或数据丢失。因此,我们建议您将其用于 **UI 展示**,而不应作为计费、统计等需要绝对精准场景的唯一依据。