@tencent-rtc/mcp 1.6.4 → 1.6.6

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 (251) hide show
  1. package/knowledge/chunker.js +83 -54
  2. package/knowledge/path-meta.js +179 -26
  3. package/knowledge/search/exact-lookup.js +168 -10
  4. package/knowledge/search/filter-pool.js +73 -19
  5. package/knowledge/search/product-scope-intent.js +2 -2
  6. package/knowledge/search/requires-framework.js +2 -2
  7. package/knowledge/search/search-knowledge.js +247 -61
  8. package/package.json +1 -1
  9. package/resource/index/manifest.json +1 -1
  10. package/resource/integration/callkit/preset/android/integration.md +2 -4
  11. package/resource/integration/callkit/preset/flutter/integration.md +4 -5
  12. package/resource/integration/callkit/preset/ios/integration.md +1 -4
  13. package/resource/integration/callkit/preset/react/integration.md +13 -20
  14. package/resource/integration/callkit/preset/vue/integration.md +14 -21
  15. package/resource/integration/chat/preset/android/integration.md +6 -9
  16. package/resource/integration/chat/preset/flutter/integration.md +9 -12
  17. package/resource/integration/chat/preset/ios/integration.md +2 -4
  18. package/resource/integration/chat/preset/react/integration.md +0 -10
  19. package/resource/integration/livekit/preset/live/android/live-audience-integration.md +129 -0
  20. package/resource/integration/livekit/preset/live/android/live-host-integration.md +219 -0
  21. package/resource/integration/livekit/preset/live/android/live-list-integration.md +261 -0
  22. package/resource/integration/livekit/preset/live/android/prepare-integration.md +254 -0
  23. package/resource/integration/livekit/preset/live/ios/live-audience-integration.md +202 -0
  24. package/resource/integration/livekit/preset/live/ios/live-host-integration.md +369 -0
  25. package/resource/integration/livekit/preset/live/ios/live-list-integration.md +229 -0
  26. package/resource/integration/livekit/preset/live/ios/prepare-integration.md +204 -0
  27. package/resource/integration/livekit/preset/live/vue/live-list-integration.md +0 -3
  28. package/resource/integration/livekit/preset/live/vue/live-player-desk-integration.md +0 -5
  29. package/resource/integration/livekit/preset/live/vue/live-player-h5-integration.md +0 -6
  30. package/resource/integration/livekit/preset/live/vue/live-pusher-integration.md +5 -10
  31. package/resource/integration/roomkit/preset/vue/integration.md +0 -4
  32. package/resource/knowledge/callkit/best-practice/web/callengine-invitation.md +80 -0
  33. package/resource/knowledge/callkit/best-practice/web/callengine-log-control.md +24 -0
  34. package/resource/knowledge/callkit/best-practice/web/callkit-call-vs-calls.md +116 -0
  35. package/resource/knowledge/callkit/core-sdk/android/answer-call.md +7 -8
  36. package/resource/knowledge/callkit/core-sdk/android/make-call.md +5 -7
  37. package/resource/knowledge/callkit/core-sdk/android/offline-push.md +3 -5
  38. package/resource/knowledge/callkit/core-sdk/flutter/answer-call.md +2 -6
  39. package/resource/knowledge/callkit/core-sdk/flutter/make-call.md +2 -6
  40. package/resource/knowledge/callkit/core-sdk/flutter/offline-push.md +4 -9
  41. package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +1 -4
  42. package/resource/knowledge/callkit/core-sdk/ios/make-call.md +8 -11
  43. package/resource/knowledge/callkit/core-sdk/ios/offline-push.md +17 -23
  44. package/resource/knowledge/callkit/core-sdk/web/call-engine.md +33 -0
  45. package/resource/knowledge/callkit/core-sdk/web/call-event.md +327 -0
  46. package/resource/knowledge/callkit/core-sdk/web/callengine-api-overview.md +33 -0
  47. package/resource/knowledge/callkit/faq/android.md +0 -2
  48. package/resource/knowledge/callkit/faq/error-code.md +0 -2
  49. package/resource/knowledge/callkit/faq/flutter.md +2 -2
  50. package/resource/knowledge/callkit/faq/ios.md +3 -5
  51. package/resource/knowledge/callkit/faq/web.md +2 -3
  52. package/resource/knowledge/callkit/preset/android/api.md +2 -5
  53. package/resource/knowledge/callkit/preset/ios/api.md +0 -2
  54. package/resource/knowledge/callkit/preset/react/api.md +445 -0
  55. package/resource/knowledge/callkit/preset/react/uikit-api-reference.md +445 -0
  56. package/resource/knowledge/callkit/preset/vue/api.md +465 -0
  57. package/resource/knowledge/callkit/preset/vue/uikit-api-reference.md +465 -0
  58. package/resource/knowledge/chat/best-practice/web/image-message-url-handling.md +16 -0
  59. package/resource/knowledge/chat/preset/android/features/chat-setting.md +1 -1
  60. package/resource/knowledge/chat/preset/android/features/conversation-list.md +1 -1
  61. package/resource/knowledge/chat/preset/android/features/language.md +0 -1
  62. package/resource/knowledge/chat/preset/android/features/message-input.md +1 -1
  63. package/resource/knowledge/chat/preset/android/features/message-list.md +2 -3
  64. package/resource/knowledge/chat/preset/android/features/search.md +0 -1
  65. package/resource/knowledge/chat/preset/android/features/theme.md +1 -1
  66. package/resource/knowledge/chat/preset/android-view/integration.md +3 -11
  67. package/resource/knowledge/chat/preset/flutter/features/conversation-list.md +0 -1
  68. package/resource/knowledge/chat/preset/flutter/features/message-list.md +1 -2
  69. package/resource/knowledge/chat/preset/flutter/features/search.md +5 -6
  70. package/resource/knowledge/chat/preset/flutter/features/theme.md +2 -2
  71. package/resource/knowledge/chat/preset/ios/features/chat-setting.md +1 -1
  72. package/resource/knowledge/chat/preset/ios/features/conversation-list.md +1 -2
  73. package/resource/knowledge/chat/preset/ios/features/message-list.md +1 -2
  74. package/resource/knowledge/chat/preset/ios/features/search.md +0 -1
  75. package/resource/knowledge/chat/preset/ios-uikit/integration.md +13 -15
  76. package/resource/knowledge/chat/preset/react/features/conversation-list.md +5 -5
  77. package/resource/knowledge/chat/preset/react/features/message-input.md +2 -3
  78. package/resource/knowledge/chat/preset/react/features/search.md +0 -1
  79. package/resource/knowledge/chat/preset/react/features/theme.md +0 -1
  80. package/resource/knowledge/chat/urls/sdk/android.md +3 -3
  81. package/resource/knowledge/chat/urls/sdk/flutter.md +3 -3
  82. package/resource/knowledge/chat/urls/sdk/ios.md +3 -3
  83. package/resource/knowledge/chat/urls/sdk/web.md +3 -3
  84. package/resource/knowledge/livekit/core-sdk/api-reference/android/AudioEffectStore.md +7 -14
  85. package/resource/knowledge/livekit/core-sdk/api-reference/android/BarrageStore.md +5 -8
  86. package/resource/knowledge/livekit/core-sdk/api-reference/android/BattleStore.md +15 -18
  87. package/resource/knowledge/livekit/core-sdk/api-reference/android/CameraView.md +1 -2
  88. package/resource/knowledge/livekit/core-sdk/api-reference/android/CoGuestStore.md +15 -20
  89. package/resource/knowledge/livekit/core-sdk/api-reference/android/CoHostStore.md +10 -13
  90. package/resource/knowledge/livekit/core-sdk/api-reference/android/DeviceStore.md +2 -4
  91. package/resource/knowledge/livekit/core-sdk/api-reference/android/GiftStore.md +4 -6
  92. package/resource/knowledge/livekit/core-sdk/api-reference/android/LikeStore.md +2 -4
  93. package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveAudienceStore.md +2 -4
  94. package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveCoreView.md +1 -2
  95. package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveSeatStore.md +8 -10
  96. package/resource/knowledge/livekit/core-sdk/api-reference/android/LoginStore.md +5 -7
  97. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/AudioEffectStore.md +7 -14
  98. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BarrageStore.md +6 -9
  99. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BaseBeautyStore.md +1 -2
  100. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BattleStore.md +15 -18
  101. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoGuestStore.md +15 -20
  102. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoHostStore.md +10 -13
  103. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/DeviceStore.md +2 -4
  104. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/GiftStore.md +4 -6
  105. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LikeStore.md +2 -4
  106. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveAudienceStore.md +2 -4
  107. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveCoreView.md +1 -2
  108. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveSeatStore.md +8 -10
  109. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LoginStore.md +3 -5
  110. package/resource/knowledge/livekit/core-sdk/api-reference/ios/AudioEffectStore.md +7 -14
  111. package/resource/knowledge/livekit/core-sdk/api-reference/ios/BarrageStore.md +5 -8
  112. package/resource/knowledge/livekit/core-sdk/api-reference/ios/BaseBeautyStore.md +1 -2
  113. package/resource/knowledge/livekit/core-sdk/api-reference/ios/BattleStore.md +6 -9
  114. package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoGuestStore.md +5 -10
  115. package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoHostStore.md +3 -6
  116. package/resource/knowledge/livekit/core-sdk/api-reference/ios/DeviceStore.md +2 -4
  117. package/resource/knowledge/livekit/core-sdk/api-reference/ios/GiftStore.md +4 -6
  118. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LikeStore.md +2 -4
  119. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveAudienceStore.md +2 -4
  120. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveCoreView.md +1 -2
  121. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveSeatStore.md +4 -6
  122. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LoginStore.md +3 -5
  123. package/resource/knowledge/livekit/core-sdk/api-reference/{web → vue}/index.md +24 -24
  124. package/resource/knowledge/livekit/core-sdk/{voice/android/voice-audio-effect.md → features/android/audio-effect.md} +1 -2
  125. package/resource/knowledge/livekit/core-sdk/{live/android/live-gift.md → features/android/gift.md} +2 -3
  126. package/resource/knowledge/livekit/core-sdk/{voice/android/voice-room-list.md → features/android/live-list.md} +2 -4
  127. package/resource/knowledge/livekit/core-sdk/{live/flutter/live-audio-effect.md → features/flutter/audio-effect.md} +0 -2
  128. package/resource/knowledge/livekit/core-sdk/{voice/flutter/voice-barrage.md → features/flutter/barrage.md} +2 -2
  129. package/resource/knowledge/livekit/core-sdk/{live/flutter/live-gift.md → features/flutter/gift.md} +2 -3
  130. package/resource/knowledge/livekit/core-sdk/{voice/flutter/voice-room-list.md → features/flutter/live-list.md} +1 -1
  131. package/resource/knowledge/livekit/core-sdk/{voice/ios/voice-audience-list.md → features/ios/audience-list.md} +1 -2
  132. package/resource/knowledge/livekit/core-sdk/{voice/ios/voice-audio-effect.md → features/ios/audio-effect.md} +1 -3
  133. package/resource/knowledge/livekit/core-sdk/{live/ios/live-base-beauty.md → features/ios/base-beauty.md} +2 -2
  134. package/resource/knowledge/livekit/core-sdk/{voice/ios/voice-gift.md → features/ios/gift.md} +2 -3
  135. package/resource/knowledge/livekit/core-sdk/{voice/ios/voice-room-list.md → features/ios/live-list.md} +2 -4
  136. package/resource/knowledge/livekit/core-sdk/live/android/{live-co-guest-interaction.md → co-guest-interaction.md} +0 -1
  137. package/resource/knowledge/livekit/core-sdk/live/android/{live-host-interaction.md → host-interaction.md} +5 -7
  138. package/resource/knowledge/livekit/core-sdk/live/android/{live-integration.md → integration.md} +3 -6
  139. package/resource/knowledge/livekit/core-sdk/live/flutter/{live-co-guest-interaction.md → co-guest-interaction.md} +1 -1
  140. package/resource/knowledge/livekit/core-sdk/live/flutter/{live-host-interaction.md → host-interaction.md} +0 -2
  141. package/resource/knowledge/livekit/core-sdk/live/flutter/{live-integration.md → integration.md} +1 -4
  142. package/resource/knowledge/livekit/core-sdk/live/ios/{live-co-guest-interaction.md → co-guest-interaction.md} +0 -1
  143. package/resource/knowledge/livekit/core-sdk/live/ios/{live-host-interaction.md → host-interaction.md} +2 -4
  144. package/resource/knowledge/livekit/core-sdk/live/ios/{live-integration.md → integration.md} +2 -5
  145. package/resource/knowledge/livekit/core-sdk/voice/android/{voice-host-interaction.md → host-interaction.md} +3 -5
  146. package/resource/knowledge/livekit/core-sdk/voice/android/{voice-integration.md → integration.md} +3 -6
  147. package/resource/knowledge/livekit/core-sdk/voice/flutter/{voice-co-guest-interaction.md → co-guest-interaction.md} +1 -2
  148. package/resource/knowledge/livekit/core-sdk/voice/flutter/{voice-integration.md → integration.md} +6 -9
  149. package/resource/knowledge/livekit/core-sdk/voice/ios/{voice-co-guest-interaction.md → co-guest-interaction.md} +2 -2
  150. package/resource/knowledge/livekit/core-sdk/voice/ios/{voice-host-interaction.md → host-interaction.md} +4 -6
  151. package/resource/knowledge/livekit/core-sdk/voice/ios/{voice-integration.md → integration.md} +1 -4
  152. package/resource/knowledge/livekit/preset/live/vue/features/barrage.md +0 -2
  153. package/resource/knowledge/push/api-reference/android.md +123 -0
  154. package/resource/knowledge/push/api-reference/flutter.md +176 -0
  155. package/resource/knowledge/push/api-reference/harmonyos.md +138 -0
  156. package/resource/knowledge/push/api-reference/ios.md +176 -0
  157. package/resource/knowledge/push/api-reference/react-native.md +147 -0
  158. package/resource/knowledge/push/api-reference/uni-app.md +147 -0
  159. package/resource/knowledge/push/api-reference/unity.md +119 -0
  160. package/resource/knowledge/push/api-reference/unreal-engine.md +123 -0
  161. package/resource/knowledge/push/config/android.md +4 -7
  162. package/resource/knowledge/push/config/harmonyos.md +0 -3
  163. package/resource/knowledge/push/config/ios.md +12 -20
  164. package/resource/knowledge/push/config/react-native.md +18 -26
  165. package/resource/knowledge/push/config/unity.md +20 -28
  166. package/resource/knowledge/push/config/unreal-engine.md +21 -29
  167. package/resource/knowledge/push/integration/android.md +6 -8
  168. package/resource/knowledge/push/integration/flutter.md +6 -9
  169. package/resource/knowledge/push/integration/harmonyos.md +1 -0
  170. package/resource/knowledge/push/integration/ios.md +7 -9
  171. package/resource/knowledge/push/integration/react-native.md +9 -13
  172. package/resource/knowledge/push/integration/uni-app.md +7 -7
  173. package/resource/knowledge/push/integration/unity.md +10 -13
  174. package/resource/knowledge/push/integration/unreal-engine.md +6 -9
  175. package/resource/knowledge/push/overview/prepare.md +2 -2
  176. package/resource/knowledge/roomkit/core-sdk/android/call-user-to-room.md +3 -3
  177. package/resource/knowledge/roomkit/core-sdk/android/capability-matrix.md +46 -0
  178. package/resource/knowledge/roomkit/core-sdk/android/room-participant-state.md +1 -1
  179. package/resource/knowledge/roomkit/core-sdk/android/room-state.md +2 -2
  180. package/resource/knowledge/roomkit/core-sdk/android/schedule-room.md +6 -6
  181. package/resource/knowledge/roomkit/core-sdk/android/unsupported-features.md +79 -0
  182. package/resource/knowledge/roomkit/core-sdk/flutter/capability-matrix.md +46 -0
  183. package/resource/knowledge/roomkit/core-sdk/flutter/room-participant-state.md +1 -1
  184. package/resource/knowledge/roomkit/core-sdk/flutter/unsupported-features.md +79 -0
  185. package/resource/knowledge/roomkit/core-sdk/ios/capability-matrix.md +46 -0
  186. package/resource/knowledge/roomkit/core-sdk/ios/room-participant-state.md +1 -1
  187. package/resource/knowledge/roomkit/core-sdk/ios/unsupported-features.md +79 -0
  188. package/resource/knowledge/roomkit/preset/android/integration.md +5 -7
  189. package/resource/knowledge/roomkit/preset/flutter/integration.md +2 -7
  190. package/resource/knowledge/roomkit/preset/ios/integration.md +3 -9
  191. package/resource/knowledge/roomkit/preset/react/integration.md +12 -16
  192. package/resource/knowledge/trtc/android/TRTCCloud.md +154 -238
  193. package/resource/knowledge/trtc/android/TRTCCloudDef.md +133 -134
  194. package/resource/knowledge/trtc/android/TRTCCloudListener.md +86 -120
  195. package/resource/knowledge/trtc/android/TRTCStatistics.md +10 -10
  196. package/resource/knowledge/trtc/android/TXAudioEffectManager.md +10 -30
  197. package/resource/knowledge/trtc/android/TXBeautyManager.md +25 -25
  198. package/resource/knowledge/trtc/android/TXDeviceManager.md +2 -2
  199. package/resource/knowledge/trtc/android/TXLiteAVCode.md +12 -12
  200. package/resource/knowledge/trtc/c++/ITRTCCloud.md +166 -261
  201. package/resource/knowledge/trtc/c++/ITRTCStatistics.md +12 -12
  202. package/resource/knowledge/trtc/c++/ITXAudioEffectManager.md +10 -30
  203. package/resource/knowledge/trtc/c++/ITXDeviceManager.md +9 -11
  204. package/resource/knowledge/trtc/c++/TRTCCloudCallback.md +96 -130
  205. package/resource/knowledge/trtc/c++/TRTCTypeDef.md +122 -123
  206. package/resource/knowledge/trtc/c++/TXLiteAVCode.md +12 -12
  207. package/resource/knowledge/trtc/ios/TRTCCloud.md +168 -255
  208. package/resource/knowledge/trtc/ios/TRTCCloudDef.md +124 -125
  209. package/resource/knowledge/trtc/ios/TRTCCloudDelegate.md +89 -124
  210. package/resource/knowledge/trtc/ios/TRTCStatistics.md +10 -10
  211. package/resource/knowledge/trtc/ios/TXAudioEffectManager.md +9 -28
  212. package/resource/knowledge/trtc/ios/TXBeautyManager.md +25 -25
  213. package/resource/knowledge/trtc/ios/TXDeviceManager.md +9 -11
  214. package/resource/knowledge/trtc/ios/TXLiteAVCode.md +12 -12
  215. package/server.js +21 -21
  216. package/tools/common/finalize_answer.js +1 -1
  217. package/tools/common/present_framework_choice.js +2 -2
  218. package/tools/common/search_trtc_knowledge.js +3 -3
  219. package/tools/common/submit_feedback.js +1 -1
  220. package/tools/definitions/get_native_live_uikit_integration_def.js +61 -0
  221. package/tools/definitions/get_native_livekit_core_integration_def.js +3 -3
  222. package/tools/definitions/present_framework_choice_def.js +2 -2
  223. package/tools/definitions/search_trtc_knowledge_def.js +5 -5
  224. package/tools/index.js +2 -0
  225. package/tools/live/get_native_live_uikit_integration.js +69 -0
  226. package/tools/live/get_native_livekit_core_integration.js +6 -6
  227. package/utils/report-cls-client.js +1 -1
  228. package/utils/report-es-client.js +1 -1
  229. package/resource/knowledge/callkit/preset/web/api.md +0 -83
  230. package/resource/knowledge/livekit/core-sdk/live/android/live-audio-effect.md +0 -226
  231. package/resource/knowledge/livekit/core-sdk/live/android/live-live-list.md +0 -438
  232. package/resource/knowledge/livekit/core-sdk/live/flutter/live-barrage.md +0 -490
  233. package/resource/knowledge/livekit/core-sdk/live/flutter/live-live-list.md +0 -726
  234. package/resource/knowledge/livekit/core-sdk/live/ios/live-audience-list.md +0 -264
  235. package/resource/knowledge/livekit/core-sdk/live/ios/live-audio-effect.md +0 -216
  236. package/resource/knowledge/livekit/core-sdk/live/ios/live-gift.md +0 -407
  237. package/resource/knowledge/livekit/core-sdk/live/ios/live-live-list.md +0 -349
  238. package/resource/knowledge/livekit/core-sdk/voice/android/voice-audience-list.md +0 -269
  239. package/resource/knowledge/livekit/core-sdk/voice/android/voice-barrage.md +0 -456
  240. package/resource/knowledge/livekit/core-sdk/voice/android/voice-gift.md +0 -455
  241. package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-audience-list.md +0 -260
  242. package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-audio-effect.md +0 -598
  243. package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-gift.md +0 -424
  244. package/resource/knowledge/livekit/core-sdk/voice/ios/voice-barrage.md +0 -408
  245. /package/resource/knowledge/livekit/core-sdk/{live/android/live-audience-list.md → features/android/audience-list.md} +0 -0
  246. /package/resource/knowledge/livekit/core-sdk/{live/android/live-barrage.md → features/android/barrage.md} +0 -0
  247. /package/resource/knowledge/livekit/core-sdk/{live/android/live-base-beauty.md → features/android/base-beauty.md} +0 -0
  248. /package/resource/knowledge/livekit/core-sdk/{live/flutter/live-audience-list.md → features/flutter/audience-list.md} +0 -0
  249. /package/resource/knowledge/livekit/core-sdk/{live/flutter/live-base-beauty.md → features/flutter/base-beauty.md} +0 -0
  250. /package/resource/knowledge/livekit/core-sdk/{live/ios/live-barrage.md → features/ios/barrage.md} +0 -0
  251. /package/resource/knowledge/livekit/core-sdk/voice/android/{voice-co-guest-interaction.md → co-guest-interaction.md} +0 -0
@@ -1,726 +0,0 @@
1
- `LiveListStore` is the central module in `AtomicXCore` for managing live room lists and handling all aspects of live room lifecycle, including creation, entry, and state maintenance. Use `LiveListStore` to implement robust live streaming lifecycle management in your application.
2
-
3
- ## Core Features
4
- - **Get live room list**: Obtain the current list of all public live rooms, supporting load by page.
5
-
6
- - **Live stream lifecycle management**: Provides a complete process API for creation, going live, joining, leaving, and ending live stream.
7
-
8
- - **Live stream information update**: Hosts can update publicly available information in the live streaming room at any time, such as cover and notice.
9
-
10
- - **Real-time event monitoring**: Listen to key events such as live streaming end and users being kicked out.
11
-
12
- - **Custom business data**: Powerful custom metadata (`MetaData`) capacity allows you to store and synchronize any business-relevant information in the room, such as live status, music info, and custom role.
13
-
14
- ## Core Concepts
15
-
16
- Before starting integration, let's learn about several core concepts related to `LiveListStore` in the following table:
17
-
18
- |**Core Concepts**|**Type**|**Core Responsibilities and Description**|
19
- |---------|---------|---------|
20
- |[LiveInfo](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_live_list_store/LiveInfo-class.html)|`class`|Represents the information model of a live room. It contains live ID (`liveID`), name (`liveName`), room owner information (`liveOwner`) and custom metadata (`metaData`).|
21
- |[LiveListState](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_live_list_store/LiveListState-class.html)|`class`|Represents the current status of the live list module. Its core attribute `liveList` is a `ValueListenable<List<LiveInfo>>` data type, storing the fetched live stream list. `currentLive` represents the live room information where the user currently resides.|
22
- |[LiveListListener](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_live_list_store/LiveListListener-class.html)|`class`|Represents the global event listener for a live streaming room. It includes two callbacks, `onLiveEnded` (live streaming end) and `onKickedOutOfLive` (kicked out of live), used to process key room status updates.|
23
- |[LiveListStore](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_live_list_store/LiveListStore-class.html)|`class`|This is the core management class for interaction with the live list and room lifecycle. It is a Global Singleton (`shared`), responsible for all live streaming room operations such as create, join, and information update.|
24
-
25
- ## Implementation Steps
26
-
27
- ### Step 1: Integrate the Component
28
- - **Live streaming**: Refer to Quick Integration with **AtomicXCore**, and complete the feature implementation for Go Live (Host) and audience viewing.
29
-
30
- - **Voice chat room**: Refer to Quick Integration with **AtomicXCore**, and complete the feature implementation for Go Live (Host) and audience listening.
31
-
32
- ### Step 2: Implement Audience Entry to Live Room
33
-
34
- Create a page to display a live broadcast list. This page uses `GridView` to layout live streaming room cards. When a user clicks a certain card, get the `liveID` of the room and navigate to the audience viewing page.
35
- ``` java
36
- import 'package:flutter/material.dart';
37
- import 'package:atomic_x_core/atomicxcore.dart';
38
-
39
- /// Live stream list page
40
- class LiveListPage extends StatefulWidget {
41
- const LiveListPage({super.key});
42
-
43
- @override
44
- State<LiveListPage> createState() => _LiveListPageState();
45
- }
46
-
47
- class _LiveListPageState extends State<LiveListPage> {
48
- final _liveListStore = LiveListStore.shared;
49
- final ScrollController _scrollController = ScrollController();
50
- bool _isLoading = false;
51
-
52
- @override
53
- void initState() {
54
- super.initState();
55
- _liveListStore.liveState.liveList.addListener(_onLiveListChanged);
56
- _scrollController.addListener(_onScroll);
57
- _fetchLiveList();
58
- }
59
-
60
- void _onLiveListChanged() {
61
- setState(() {});
62
- }
63
-
64
- void _onScroll() {
65
- // Load more when scrolling to the bottom
66
- if (_scrollController.position.pixels >=
67
- _scrollController.position.maxScrollExtent - 200) {
68
- _loadMore();
69
- }
70
- }
71
-
72
- Future<void> _fetchLiveList() async {
73
- if (_isLoading) return;
74
- setState(() => _isLoading = true);
75
-
76
- final result = await _liveListStore.fetchLiveList(cursor: '', count: 20);
77
- if (!result.isSuccess) {
78
- debugPrint('List live stream failed: ${result.message}');
79
- }
80
-
81
- setState(() => _isLoading = false);
82
- }
83
-
84
- Future<void> _loadMore() async {
85
- if (_isLoading) return;
86
-
87
- final cursor = _liveListStore.liveState.liveListCursor.value;
88
- if (cursor.isEmpty) return; // no more data
89
-
90
- setState(() => _isLoading = true);
91
- await _liveListStore.fetchLiveList(cursor: cursor, count: 20);
92
- setState(() => _isLoading = false);
93
- }
94
-
95
- Future<void> _refresh() async {
96
- _liveListStore.reset();
97
- await _fetchLiveList();
98
- }
99
-
100
- // When user click certain card in the list
101
- void _onLiveCardTap(LiveInfo liveInfo) {
102
- // Create an audience viewing webpage and input the liveID
103
- Navigator.push(
104
- context,
105
- MaterialPageRoute(
106
- builder: (context) => YourAudiencePage(liveID: liveInfo.liveID),
107
- ),
108
- );
109
- }
110
-
111
- @override
112
- void dispose() {
113
- _liveListStore.liveState.liveList.removeListener(_onLiveListChanged);
114
- _scrollController.dispose();
115
- super.dispose();
116
- }
117
-
118
- @override
119
- Widget build(BuildContext context) {
120
- final liveList = _liveListStore.liveState.liveList.value;
121
-
122
- return Scaffold(
123
- appBar: AppBar(title: const Text('Live Stream List')),
124
- body: RefreshIndicator(
125
- onRefresh: _refresh,
126
- child: liveList.isEmpty
127
- ? Center(
128
- child: _isLoading
129
- ? const CircularProgressIndicator()
130
- const Text('No live stream')
131
- )
132
- : GridView.builder(
133
- controller: _scrollController,
134
- padding: const EdgeInsets.all(8),
135
- gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
136
- crossAxisCount: 2,
137
- childAspectRatio: 0.75,
138
- crossAxisSpacing: 8,
139
- mainAxisSpacing: 8,
140
- ),
141
- itemCount: liveList.length + (_isLoading ? 1 : 0),
142
- itemBuilder: (context, index) {
143
- if (index >= liveList.length) {
144
- return const Center(child: CircularProgressIndicator());
145
- }
146
- return _buildLiveCard(liveList[index]);
147
- },
148
- ),
149
- ),
150
- );
151
- }
152
-
153
- Widget _buildLiveCard(LiveInfo liveInfo) {
154
- return GestureDetector(
155
- onTap: () => _onLiveCardTap(liveInfo),
156
- child: Card(
157
- clipBehavior: Clip.antiAlias,
158
- child: Column(
159
- crossAxisAlignment: CrossAxisAlignment.start,
160
- children: [
161
- Cover image
162
- Expanded(
163
- child: Stack(
164
- fit: StackFit.expand,
165
- children: [
166
- Image.network(
167
- liveInfo.coverURL,
168
- fit: BoxFit.cover,
169
- errorBuilder: (context, error, stackTrace) {
170
- return Container(color: Colors.grey[300]);
171
- },
172
- ),
173
- // Live stream tag
174
- Positioned(
175
- top: 8,
176
- left: 8,
177
- child: Container(
178
- padding: const EdgeInsets.symmetric(
179
- horizontal: 6,
180
- vertical: 2,
181
- ),
182
- decoration: BoxDecoration(
183
- color: Colors.red,
184
- borderRadius: BorderRadius.circular(4),
185
- ),
186
- child: const Text(
187
- Live streaming
188
- style: TextStyle(color: Colors.white, fontSize: 10),
189
- ),
190
- ),
191
- ),
192
- viewers
193
- Positioned(
194
- bottom: 8,
195
- right: 8,
196
- child: Container(
197
- padding: const EdgeInsets.symmetric(
198
- horizontal: 6,
199
- vertical: 2,
200
- ),
201
- decoration: BoxDecoration(
202
- color: Colors.black54,
203
- borderRadius: BorderRadius.circular(4),
204
- ),
205
- child: Row(
206
- mainAxisSize: MainAxisSize.min,
207
- children: [
208
- const Icon(
209
- Icons.visibility,
210
- color: Colors.white,
211
- size: 12,
212
- ),
213
- const SizedBox(width: 4),
214
- Text(
215
- '${liveInfo.totalViewerCount}',
216
- style: const TextStyle(
217
- color: Colors.white,
218
- fontSize: 10,
219
- ),
220
- ),
221
- ],
222
- ),
223
- ),
224
- ),
225
- ],
226
- ),
227
- ),
228
- // Live streaming information
229
- Padding(
230
- padding: const EdgeInsets.all(8),
231
- child: Column(
232
- crossAxisAlignment: CrossAxisAlignment.start,
233
- children: [
234
- Text(
235
- liveInfo.liveName,
236
- maxLines: 1,
237
- overflow: TextOverflow.ellipsis,
238
- style: const TextStyle(fontWeight: FontWeight.bold),
239
- ),
240
- const SizedBox(height: 4),
241
- Row(
242
- children: [
243
- CircleAvatar(
244
- radius: 10,
245
- backgroundImage: NetworkImage(
246
- liveInfo.liveOwner.avatarURL,
247
- ),
248
- ),
249
- const SizedBox(width: 4),
250
- Expanded(
251
- child: Text(
252
- liveInfo.liveOwner.userName,
253
- maxLines: 1,
254
- overflow: TextOverflow.ellipsis,
255
- style: TextStyle(
256
- fontSize: 12,
257
- color: Colors.grey[600],
258
- ),
259
- ),
260
- ),
261
- ],
262
- ),
263
- ],
264
- ),
265
- ),
266
- ],
267
- ),
268
- ),
269
- );
270
- }
271
- }
272
-
273
- /// Audience viewing webpage (placeholder)
274
- class YourAudiencePage extends StatelessWidget {
275
- final String liveID;
276
-
277
- const YourAudiencePage({super.key, required this.liveID});
278
-
279
- @override
280
- Widget build(BuildContext context) {
281
- return Scaffold(
282
- appBar: AppBar(title: const Text('Live Streaming Room')),
283
- body: Center(child: Text('Live Streaming Room: $liveID')),
284
- );
285
- }
286
- }
287
- ```
288
-
289
- **LiveInfo Parameters**
290
-
291
- |**Parameter Name**|**Type**|**Description**|
292
- |---------|---------|---------|
293
- |`liveID`|`String`|Unique identifier of the live streaming room.|
294
- |`liveName`|`String`|Title of the live streaming room.|
295
- |`coverURL`|`String`|Thumbnail URL of the live streaming room.|
296
- |`liveOwner`|`LiveUserInfo`|Room owner's personal info.|
297
- |`totalViewerCount`|`int`|Total viewers in the live streaming room.|
298
- |`categoryList`|`List<int>`|Category tag list of the live streaming room.|
299
- |`notice`|`String`|Announcement information in the live streaming room.|
300
- |`metaData`|`Map<String, String>`|Custom metadata for complex business scenarios.|
301
-
302
- ## Advanced Usage
303
-
304
- ### Scenario 1: Categorized Live Room List
305
-
306
- On the live square page of the App, the top section features category tags such as "Popular," "Music," and "Gaming." When users click different tags, the live stream list below dynamically filters to show only live streaming rooms of the corresponding category, thereby helping users quickly identify content of interest.
307
-
308
- #### How It Works
309
-
310
- The core is to use the `categoryList` property in the `LiveInfo` model. When the host starts live streaming and sets the category, the `LiveInfo` object returned by `fetchLiveList` will contain this classification information. After your App obtains the complete live list, just perform a simple filter on the client according to the user's selected category, then refresh the UI.
311
-
312
- #### Sample Code
313
-
314
- The following example shows how to create a `LiveListManager` to handle data and filter logic.
315
- ``` java
316
- import 'package:flutter/material.dart';
317
- import 'package:atomic_x_core/atomicxcore.dart';
318
-
319
- /// Live stream list data manager
320
- class LiveListManager extends ChangeNotifier {
321
- final _liveListStore = LiveListStore.shared;
322
- List<LiveInfo> _fullLiveList = [];
323
- List<LiveInfo> _filteredLiveList = [];
324
- int? _selectedCategoryId;
325
-
326
- List<LiveInfo> get filteredLiveList => _filteredLiveList;
327
- int? get selectedCategoryId => _selectedCategoryId;
328
- late final VoidCallback _liveListChangedListener = _onLiveListChanged;
329
-
330
- LiveListManager() {
331
- _liveListStore.liveState.liveList.addListener(_liveListChangedListener);
332
- }
333
-
334
- void _onLiveListChanged() {
335
- _fullLiveList = _liveListStore.liveState.liveList.value;
336
- _applyFilter();
337
- }
338
-
339
- Future<void> fetchFirstPage() async {
340
- _liveListStore.reset();
341
- await _liveListStore.fetchLiveList(cursor: '', count: 20);
342
- }
343
-
344
- /// Filter live stream list by category
345
- void filterLiveList({int? categoryId}) {
346
- _selectedCategoryId = categoryId;
347
- _applyFilter();
348
- }
349
-
350
- void _applyFilter() {
351
- if (_selectedCategoryId == null) {
352
- // If categoryId is null, display the complete list
353
- _filteredLiveList = List.from(_fullLiveList);
354
- } else {
355
- // Filter live streaming rooms by specified category
356
- _filteredLiveList = _fullLiveList.where((liveInfo) {
357
- return liveInfo.categoryList.contains(_selectedCategoryId);
358
- }).toList();
359
- }
360
- notifyListeners();
361
- }
362
-
363
- @override
364
- void dispose() {
365
- _liveListStore.liveState.liveList.removeListener(_liveListChangedListener);
366
- super.dispose();
367
- }
368
- }
369
- ```
370
- ``` java
371
- /// Live stream list webpage with category filtering
372
- class CategoryLiveListPage extends StatefulWidget {
373
- const CategoryLiveListPage({super.key});
374
-
375
- @override
376
- State<CategoryLiveListPage> createState() => _CategoryLiveListPageState();
377
- }
378
-
379
- class _CategoryLiveListPageState extends State<CategoryLiveListPage> {
380
- final _manager = LiveListManager();
381
- late final VoidCallback _managerChangedListener = _onManagerChanged;
382
-
383
- // Classification list (example)
384
- final List<Map<String, dynamic>> _categories = [
385
- {'id': null, 'name': 'All'},
386
- {'id': 1, 'name': 'Music'},
387
- {'id': 2, 'name': 'Game'},
388
- {'id': 3, 'name': 'Chat'},
389
- ];
390
-
391
- @override
392
- void initState() {
393
- super.initState();
394
- _manager.addListener(_managerChangedListener);
395
- _manager.fetchFirstPage();
396
- }
397
-
398
- void _onManagerChanged() {
399
- setState(() {});
400
- }
401
-
402
- // When the user clicks the top category tag
403
- void _onCategoryTap(int? categoryId) {
404
- _manager.filterLiveList(categoryId: categoryId);
405
- }
406
-
407
- @override
408
- void dispose() {
409
- _manager.removeListener(_managerChangedListener);
410
- _manager.dispose();
411
- super.dispose();
412
- }
413
-
414
- @override
415
- Widget build(BuildContext context) {
416
- return Scaffold(
417
- appBar: AppBar(title: const Text('Live Streaming Plaza')),
418
- body: Column(
419
- children: [
420
- // Category tag bar
421
- SizedBox(
422
- height: 50,
423
- child: ListView.builder(
424
- scrollDirection: Axis.horizontal,
425
- padding: const EdgeInsets.symmetric(horizontal: 8),
426
- itemCount: _categories.length,
427
- itemBuilder: (context, index) {
428
- final category = _categories[index];
429
- final isSelected = _manager.selectedCategoryId == category['id'];
430
- return Padding(
431
- padding: const EdgeInsets.symmetric(horizontal: 4),
432
- child: ChoiceChip(
433
- label: Text(category['name']),
434
- selected: isSelected,
435
- onSelected: (_) => _onCategoryTap(category['id']),
436
- ),
437
- );
438
- },
439
- ),
440
- ),
441
- // Live stream list
442
- Expanded(
443
- child: _manager.filteredLiveList.isEmpty
444
- ? const Center(child: Text('No live stream'))
445
- : GridView.builder(
446
- padding: const EdgeInsets.all(8),
447
- gridDelegate:
448
- const SliverGridDelegateWithFixedCrossAxisCount(
449
- crossAxisCount: 2,
450
- childAspectRatio: 0.75,
451
- crossAxisSpacing: 8,
452
- mainAxisSpacing: 8,
453
- ),
454
- itemCount: _manager.filteredLiveList.length,
455
- itemBuilder: (context, index) {
456
- final liveInfo = _manager.filteredLiveList[index];
457
- return _buildLiveCard(liveInfo);
458
- },
459
- ),
460
- ),
461
- ],
462
- ),
463
- );
464
- }
465
-
466
- Widget _buildLiveCard(LiveInfo liveInfo) {
467
- return Card(
468
- clipBehavior: Clip.antiAlias,
469
- child: Column(
470
- crossAxisAlignment: CrossAxisAlignment.start,
471
- children: [
472
- Expanded(
473
- child: Image.network(
474
- liveInfo.coverURL,
475
- fit: BoxFit.cover,
476
- width: double.infinity,
477
- errorBuilder: (context, error, stackTrace) {
478
- return Container(color: Colors.grey[300]);
479
- },
480
- ),
481
- ),
482
- Padding(
483
- padding: const EdgeInsets.all(8),
484
- child: Text(
485
- liveInfo.liveName,
486
- maxLines: 1,
487
- overflow: TextOverflow.ellipsis,
488
- ),
489
- ),
490
- ],
491
- ),
492
- );
493
- }
494
- }
495
- ```
496
-
497
- ### Scenario 2: Show Product Information in Live Shopping
498
-
499
- During e-commerce live streaming, when the host introduces a product, a product card appears below the live video for all viewers, showing the product image, name, and price in real time. When the host switches products, the product card is instantly synchronized across all audience clients.
500
-
501
- #### How It Works
502
-
503
- On the host side, set the current product's structured information (preferably in JSON format) to a custom key (for example, "product_info") using the `updateLiveMetaData` API. AtomicXCore will instantly sync this data to all viewers. On the audience side, subscribe to `LiveListState.currentLive` and listen for changes in metaData. When product_info updates, parse the JSON and refresh the product card UI.
504
-
505
- #### Sample Code
506
- ``` java
507
- import 'dart:convert';
508
- import 'package:flutter/material.dart';
509
- import 'package:atomic_x_core/atomicxcore.dart';
510
-
511
- /// Product Information Model
512
- class Product {
513
- final String id;
514
- final String name;
515
- final String price;
516
- final String imageUrl;
517
-
518
- Product({
519
- required this.id,
520
- required this.name,
521
- required this.price,
522
- required this.imageUrl,
523
- });
524
-
525
- factory Product.fromJson(Map<String, dynamic> json) {
526
- return Product(
527
- id: json['id'] ?? '',
528
- name: json['name'] ?? '',
529
- price: json['price'] ?? '',
530
- imageUrl: json['imageUrl'] ?? '',
531
- );
532
- }
533
-
534
- Map<String, dynamic> toJson() {
535
- return {
536
- 'id': id,
537
- 'name': name,
538
- 'price': price,
539
- 'imageUrl': imageUrl,
540
- };
541
- }
542
- }
543
-
544
- /// Host: Push product information
545
- class HostProductController {
546
- final _liveListStore = LiveListStore.shared;
547
-
548
- Future<void> pushProductInfo(Product product) async {
549
- final jsonString = jsonEncode(product.toJson());
550
- final metaData = {'product_info': jsonString};
551
-
552
- // Use Global Singleton liveListStore to update metaData
553
- final result = await _liveListStore.updateLiveMetaData(metaData);
554
- if (result.isSuccess) {
555
- debugPrint('Product ${product.name} pushed successfully');
556
- } else {
557
- debugPrint('Product information sending failed: ${result.message}');
558
- }
559
- }
560
- }
561
-
562
- /// Client: Product card component
563
- class ProductCardWidget extends StatefulWidget {
564
- const ProductCardWidget({super.key});
565
-
566
- @override
567
- State<ProductCardWidget> createState() => _ProductCardWidgetState();
568
- }
569
-
570
- class _ProductCardWidgetState extends State<ProductCardWidget> {
571
- final _liveListStore = LiveListStore.shared;
572
- Product? _currentProduct;
573
- String? _lastProductInfo;
574
- late final VoidCallback _currentLiveChangedListener = _onCurrentLiveChanged;
575
-
576
- @override
577
- void initState() {
578
- super.initState();
579
- _liveListStore.liveState.currentLive.addListener(_currentLiveChangedListener);
580
- }
581
-
582
- void _onCurrentLiveChanged() {
583
- final currentLive = _liveListStore.liveState.currentLive.value;
584
- final productInfo = currentLive.metaData['product_info'];
585
-
586
- // Check whether changed
587
- if (productInfo != _lastProductInfo) {
588
- _lastProductInfo = productInfo;
589
- _parseProductInfo(productInfo);
590
- }
591
- }
592
-
593
- void _parseProductInfo(String? jsonString) {
594
- if (jsonString == null || jsonString.isEmpty) {
595
- setState(() => _currentProduct = null);
596
- return;
597
- }
598
-
599
- try {
600
- final json = jsonDecode(jsonString) as Map<String, dynamic>;
601
- final product = Product.fromJson(json);
602
- setState(() => _currentProduct = product);
603
- } catch (e) {
604
- debugPrint('Failed to parse product information: $e');
605
- }
606
- }
607
-
608
- @override
609
- void dispose() {
610
- _liveListStore.liveState.currentLive.removeListener(_currentLiveChangedListener);
611
- super.dispose();
612
- }
613
-
614
- @override
615
- Widget build(BuildContext context) {
616
- if (_currentProduct == null) {
617
- return const SizedBox.shrink();
618
- }
619
-
620
- return Container(
621
- margin: const EdgeInsets.all(16),
622
- padding: const EdgeInsets.all(12),
623
- decoration: BoxDecoration(
624
- color: Colors.white,
625
- borderRadius: BorderRadius.circular(12),
626
- boxShadow: [
627
- BoxShadow(
628
- color: Colors.black.withOpacity(0.1),
629
- blurRadius: 8,
630
- offset: const Offset(0, 2),
631
- ),
632
- ],
633
- ),
634
- child: Row(
635
- children: [
636
- product image
637
- ClipRRect(
638
- borderRadius: BorderRadius.circular(8),
639
- child: Image.network(
640
- _currentProduct!.imageUrl,
641
- width: 80,
642
- height: 80,
643
- fit: BoxFit.cover,
644
- errorBuilder: (context, error, stackTrace) {
645
- return Container(
646
- width: 80,
647
- height: 80,
648
- color: Colors.grey[300],
649
- child: const Icon(Icons.image),
650
- );
651
- },
652
- ),
653
- ),
654
- const SizedBox(width: 12),
655
- product information
656
- Expanded(
657
- child: Column(
658
- crossAxisAlignment: CrossAxisAlignment.start,
659
- mainAxisSize: MainAxisSize.min,
660
- children: [
661
- Text(
662
- _currentProduct!.name,
663
- style: const TextStyle(
664
- fontSize: 14,
665
- fontWeight: FontWeight.bold,
666
- ),
667
- maxLines: 2,
668
- overflow: TextOverflow.ellipsis,
669
- ),
670
- const SizedBox(height: 4),
671
- Text(
672
- '¥${_currentProduct!.price}',
673
- style: const TextStyle(
674
- fontSize: 16,
675
- color: Colors.red,
676
- fontWeight: FontWeight.bold,
677
- ),
678
- ),
679
- ],
680
- ),
681
- ),
682
- purchase button
683
- ElevatedButton(
684
- onPressed: () {
685
- // Implement purchase logic
686
- debugPrint('Purchase goods: ${_currentProduct!.name}');
687
- },
688
- style: ElevatedButton.styleFrom(
689
- backgroundColor: Colors.orange,
690
- foregroundColor: Colors.white,
691
- ),
692
- child: const Text('Buy now'),
693
- ),
694
- ],
695
- ),
696
- );
697
- }
698
- }
699
- ```
700
-
701
- ## API documentation
702
-
703
- For detailed information about all public interfaces, properties and methods of [LiveListStore](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_live_list_store/LiveListStore-class.html) and its related classes, please refer to the official API documentation of the [AtomicXCore](https://tencent-rtc.github.io/TUIKit_Flutter/index.html) framework. The related Store used in this document is as follows:
704
-
705
- |**Store/Component**|**Feature Description**|**API Reference**|
706
- |---------|---------|---------|
707
- |**LiveCoreWidget**|The core view component for live video stream display and interaction: responsible for video stream rendering and view widget processing, supporting live streaming, audience mic connection, Host Connection (TUILiveKit), and other scenarios.|[API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_view_live_live_core_widget/LiveCoreWidget-class.html)|
708
- |**LiveCoreController**|Controller for LiveCoreWidget: used to set up live streaming ID, control preview, and perform other operations.|[API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_view_live_live_core_widget/LiveCoreController-class.html)|
709
- |**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)|
710
-
711
- ## FAQs
712
-
713
- ### What restrictions and rules apply to updateLiveMetaData?
714
-
715
- To ensure system stability and efficiency, the usage of `metaData` follows the following rules:
716
- - **Permission**: Only the room owner and admin can call the API `updateLiveMetaData`. General audience has no permission.
717
-
718
- - **Quantity and size limit: **
719
-
720
- - A single room supports up to **10** keys.
721
-
722
- - The length of each key does not exceed **50 bytes**, and the length of each value does not exceed **2KB**.
723
-
724
- - The total size of ALL values in a single room is no more than **16KB**.
725
-
726
- - **Conflict Handling**: The update mechanism for metaData is "last write wins." If multiple administrators modify the same key in quick succession, the latest change is applied. To avoid conflicts, design your business logic so that only one person modifies a given key at a time.