@tencentcloud/sdk-mcp 1.4.7 → 1.6.0-beta.1

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 (556) hide show
  1. package/index.js +0 -1
  2. package/knowledge/bm25-cache.js +73 -0
  3. package/knowledge/bm25.js +147 -0
  4. package/knowledge/build-index.js +65 -0
  5. package/knowledge/chunker.js +167 -0
  6. package/knowledge/content-loader.js +44 -0
  7. package/knowledge/extractors.js +25 -0
  8. package/knowledge/path-meta.js +175 -0
  9. package/knowledge/search/exact-lookup.js +330 -0
  10. package/knowledge/search/filter-pool.js +86 -0
  11. package/knowledge/search/requires-framework.js +72 -0
  12. package/knowledge/search/search-knowledge.js +226 -0
  13. package/package.json +9 -9
  14. package/resource/_schema/feature-aliases.yaml +10 -0
  15. package/resource/_schema/goal-tags.yaml +72 -0
  16. package/resource/_schema/products.yaml +16 -0
  17. package/resource/_schema/trtc-intents.yaml +27 -0
  18. package/resource/_schema/types.yaml +44 -0
  19. package/resource/index/component-slugs.json +1 -0
  20. package/resource/index/manifest.json +1 -0
  21. package/resource/{doc → integration}/callkit/preset/android/integration.md +32 -28
  22. package/resource/{doc → integration}/callkit/preset/flutter/integration.md +109 -54
  23. package/resource/integration/callkit/preset/ios/integration.md +411 -0
  24. package/resource/integration/callkit/preset/react/integration.md +499 -0
  25. package/resource/integration/callkit/preset/vue/integration.md +768 -0
  26. package/resource/{doc/chatkit → integration/chat/preset}/android/integration.md +11 -11
  27. package/resource/{doc/chatkit → integration/chat/preset}/flutter/integration.md +59 -37
  28. package/resource/integration/chat/preset/ios/integration.md +568 -0
  29. package/resource/{doc/chatkit → integration/chat/preset}/react/integration.md +127 -95
  30. package/resource/integration/chat/preset/uni-app/integration.md +494 -0
  31. package/resource/{doc/chatkit → integration/chat/preset}/vue/integration.md +163 -143
  32. package/resource/{doc → integration}/livekit/preset/live/vue/live-list-integration.md +15 -15
  33. package/resource/{doc → integration}/livekit/preset/live/vue/live-player-desk-integration.md +25 -13
  34. package/resource/{doc → integration}/livekit/preset/live/vue/live-player-h5-integration.md +15 -9
  35. package/resource/{doc → integration}/livekit/preset/live/vue/live-pusher-integration.md +31 -26
  36. package/resource/integration/roomkit/preset/vue/integration.md +571 -0
  37. package/resource/knowledge/callkit/core-sdk/android/answer-call.md +852 -0
  38. package/resource/knowledge/callkit/core-sdk/android/make-call.md +929 -0
  39. package/resource/knowledge/callkit/core-sdk/android/offline-push.md +364 -0
  40. package/resource/knowledge/callkit/core-sdk/flutter/answer-call.md +1150 -0
  41. package/resource/knowledge/callkit/core-sdk/flutter/make-call.md +1216 -0
  42. package/resource/knowledge/callkit/core-sdk/flutter/offline-push.md +412 -0
  43. package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +1191 -0
  44. package/resource/knowledge/callkit/core-sdk/ios/make-call.md +1292 -0
  45. package/resource/knowledge/callkit/core-sdk/ios/offline-push.md +537 -0
  46. package/resource/knowledge/callkit/core-sdk/uni-app/answer-call.md +953 -0
  47. package/resource/knowledge/callkit/core-sdk/uni-app/make-call.md +1061 -0
  48. package/resource/knowledge/callkit/faq/android.md +168 -0
  49. package/resource/knowledge/callkit/faq/common.md +180 -0
  50. package/resource/knowledge/callkit/faq/flutter.md +52 -0
  51. package/resource/knowledge/callkit/faq/ios.md +116 -0
  52. package/resource/knowledge/callkit/faq/uniapp-app.md +89 -0
  53. package/resource/knowledge/callkit/faq/uniapp-miniprogram.md +217 -0
  54. package/resource/knowledge/callkit/faq/web.md +363 -0
  55. package/resource/knowledge/callkit/preset/android/api.md +413 -0
  56. package/resource/knowledge/callkit/preset/flutter/api.md +22 -0
  57. package/resource/knowledge/callkit/preset/ios/api.md +256 -0
  58. package/resource/knowledge/callkit/preset/web/api.md +79 -0
  59. package/resource/knowledge/chat/preset/android/features/chat-setting.md +72 -0
  60. package/resource/knowledge/chat/preset/android/features/contact-list.md +41 -0
  61. package/resource/knowledge/chat/preset/android/features/conversation-list.md +123 -0
  62. package/resource/knowledge/chat/preset/android/features/language.md +142 -0
  63. package/resource/knowledge/chat/preset/android/features/message-input.md +57 -0
  64. package/resource/knowledge/chat/preset/android/features/message-list.md +142 -0
  65. package/resource/knowledge/chat/preset/android/features/search.md +64 -0
  66. package/resource/{doc/chatkit → knowledge/chat/preset}/android/features/theme.md +21 -18
  67. package/resource/knowledge/chat/preset/android-view/integration.md +448 -0
  68. package/resource/knowledge/chat/preset/flutter/features/chat-setting.md +62 -0
  69. package/resource/knowledge/chat/preset/flutter/features/contact-list.md +40 -0
  70. package/resource/knowledge/chat/preset/flutter/features/conversation-list.md +129 -0
  71. package/resource/knowledge/chat/preset/flutter/features/language.md +104 -0
  72. package/resource/knowledge/chat/preset/flutter/features/message-input.md +54 -0
  73. package/resource/knowledge/chat/preset/flutter/features/message-list.md +163 -0
  74. package/resource/knowledge/chat/preset/flutter/features/search.md +59 -0
  75. package/resource/{doc/chatkit → knowledge/chat/preset}/flutter/features/theme.md +47 -19
  76. package/resource/knowledge/chat/preset/ios/features/chat-setting.md +92 -0
  77. package/resource/knowledge/chat/preset/ios/features/contact-list.md +119 -0
  78. package/resource/knowledge/chat/preset/ios/features/conversation-list.md +134 -0
  79. package/resource/knowledge/chat/preset/ios/features/language.md +105 -0
  80. package/resource/knowledge/chat/preset/ios/features/message-input.md +69 -0
  81. package/resource/knowledge/chat/preset/ios/features/message-list.md +164 -0
  82. package/resource/knowledge/chat/preset/ios/features/search.md +94 -0
  83. package/resource/{doc/chatkit → knowledge/chat/preset}/ios/features/theme.md +54 -51
  84. package/resource/{doc/chatkit/ios → knowledge/chat/preset/ios-uikit}/integration.md +157 -94
  85. package/resource/knowledge/chat/preset/react/features/chat-setting.md +123 -0
  86. package/resource/{doc/chatkit/react/components → knowledge/chat/preset/react/features}/contact-list.md +256 -104
  87. package/resource/knowledge/chat/preset/react/features/conversation-actions.md +217 -0
  88. package/resource/{doc/chatkit/react/components → knowledge/chat/preset/react/features}/conversation-list.md +86 -79
  89. package/resource/knowledge/chat/preset/react/features/conversation-preview.md +99 -0
  90. package/resource/knowledge/chat/preset/react/features/conversation-search.md +58 -0
  91. package/resource/{doc/chatkit/react/components → knowledge/chat/preset/react/features}/message-input.md +30 -83
  92. package/resource/{doc/chatkit/react/components → knowledge/chat/preset/react/features}/message-list.md +22 -25
  93. package/resource/knowledge/chat/preset/react/features/search.md +531 -0
  94. package/resource/knowledge/chat/preset/react/features/theme.md +16 -0
  95. package/resource/knowledge/chat/preset/vue/features/chat-header.md +331 -0
  96. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/chat-setting.md +0 -4
  97. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/contact-list.md +59 -53
  98. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/conversation-actions.md +49 -43
  99. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/conversation-list.md +61 -49
  100. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/conversation-preview.md +43 -40
  101. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/conversation-search.md +1 -1
  102. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/message-input.md +128 -105
  103. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/message-list.md +108 -195
  104. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/search.md +74 -68
  105. package/resource/knowledge/chat/preset/vue/features/theme.md +136 -0
  106. package/resource/knowledge/chat/urls/error-code.md +16 -0
  107. package/resource/knowledge/chat/urls/product.md +61 -0
  108. package/resource/knowledge/chat/urls/restapi.md +226 -0
  109. package/resource/knowledge/chat/urls/sdk/android.md +84 -0
  110. package/resource/knowledge/chat/urls/sdk/flutter.md +73 -0
  111. package/resource/knowledge/chat/urls/sdk/ios.md +84 -0
  112. package/resource/knowledge/chat/urls/sdk/web.md +88 -0
  113. package/resource/knowledge/chat/urls/webhook.md +73 -0
  114. package/resource/{doc/livekit/core-sdk/live/android/api-reference → knowledge/livekit/core-sdk/api-reference/android}/AudioEffectStore.md +79 -76
  115. package/resource/knowledge/livekit/core-sdk/api-reference/android/BarrageStore.md +174 -0
  116. package/resource/knowledge/livekit/core-sdk/api-reference/android/BattleStore.md +329 -0
  117. package/resource/{doc/livekit/core-sdk/live/android/api-reference → knowledge/livekit/core-sdk/api-reference/android}/CameraView.md +7 -6
  118. package/resource/knowledge/livekit/core-sdk/api-reference/android/CoGuestStore.md +434 -0
  119. package/resource/knowledge/livekit/core-sdk/api-reference/android/CoHostStore.md +362 -0
  120. package/resource/knowledge/livekit/core-sdk/api-reference/android/DeviceStore.md +466 -0
  121. package/resource/knowledge/livekit/core-sdk/api-reference/android/GiftStore.md +173 -0
  122. package/resource/{doc/livekit/core-sdk/live/android/api-reference → knowledge/livekit/core-sdk/api-reference/android}/LikeStore.md +12 -10
  123. package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveAudienceStore.md +291 -0
  124. package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveCoreView.md +78 -0
  125. package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveSeatStore.md +439 -0
  126. package/resource/knowledge/livekit/core-sdk/api-reference/android/LoginStore.md +221 -0
  127. package/resource/{doc/livekit/core-sdk/live/flutter/api-reference → knowledge/livekit/core-sdk/api-reference/flutter}/AudioEffectStore.md +79 -76
  128. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BarrageStore.md +212 -0
  129. package/resource/{doc/livekit/core-sdk/live/flutter/api-reference → knowledge/livekit/core-sdk/api-reference/flutter}/BaseBeautyStore.md +43 -45
  130. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BattleStore.md +312 -0
  131. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoGuestStore.md +404 -0
  132. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoHostStore.md +334 -0
  133. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/DeviceStore.md +420 -0
  134. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/GiftStore.md +166 -0
  135. package/resource/{doc/livekit/core-sdk/live/flutter/api-reference → knowledge/livekit/core-sdk/api-reference/flutter}/LikeStore.md +12 -11
  136. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveAudienceStore.md +281 -0
  137. package/resource/{doc/livekit/core-sdk/live/flutter/api-reference → knowledge/livekit/core-sdk/api-reference/flutter}/LiveCoreView.md +49 -42
  138. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveSeatStore.md +397 -0
  139. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LoginStore.md +183 -0
  140. package/resource/{doc/livekit/core-sdk/live/ios/api-reference → knowledge/livekit/core-sdk/api-reference/ios}/AudioEffectStore.md +79 -75
  141. package/resource/knowledge/livekit/core-sdk/api-reference/ios/BarrageStore.md +192 -0
  142. package/resource/knowledge/livekit/core-sdk/api-reference/ios/BaseBeautyStore.md +146 -0
  143. package/resource/knowledge/livekit/core-sdk/api-reference/ios/BattleStore.md +309 -0
  144. package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoGuestStore.md +370 -0
  145. package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoHostStore.md +339 -0
  146. package/resource/knowledge/livekit/core-sdk/api-reference/ios/DeviceStore.md +503 -0
  147. package/resource/knowledge/livekit/core-sdk/api-reference/ios/GiftStore.md +188 -0
  148. package/resource/{doc/livekit/core-sdk/live/ios/api-reference → knowledge/livekit/core-sdk/api-reference/ios}/LikeStore.md +12 -10
  149. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveAudienceStore.md +289 -0
  150. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveCoreView.md +78 -0
  151. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveSeatStore.md +434 -0
  152. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LoginStore.md +187 -0
  153. package/resource/knowledge/livekit/core-sdk/api-reference/web/index.md +780 -0
  154. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-audience-list.md +59 -51
  155. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-audio-effect.md +37 -34
  156. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-barrage.md +68 -38
  157. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-base-beauty.md +18 -15
  158. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-co-guest-interaction.md +17 -17
  159. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-gift.md +86 -80
  160. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-host-interaction.md +53 -49
  161. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-integration.md +47 -45
  162. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-live-list.md +26 -22
  163. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-audience-list.md +16 -13
  164. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-audio-effect.md +28 -24
  165. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-barrage.md +33 -21
  166. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-base-beauty.md +29 -25
  167. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-co-guest-interaction.md +21 -20
  168. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-gift.md +78 -69
  169. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-host-interaction.md +47 -43
  170. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-integration.md +48 -45
  171. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-live-list.md +27 -23
  172. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-audience-list.md +15 -12
  173. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-audio-effect.md +39 -36
  174. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-barrage.md +42 -29
  175. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-base-beauty.md +19 -16
  176. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-co-guest-interaction.md +20 -19
  177. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-gift.md +55 -49
  178. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-host-interaction.md +50 -46
  179. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-integration.md +48 -46
  180. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-live-list.md +26 -22
  181. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-audience-list.md +59 -51
  182. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-audio-effect.md +41 -38
  183. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-barrage.md +67 -37
  184. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-co-guest-interaction.md +53 -46
  185. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-gift.md +86 -80
  186. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-host-interaction.md +45 -40
  187. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-integration.md +43 -42
  188. package/resource/knowledge/livekit/core-sdk/voice/android/voice-room-list.md +523 -0
  189. package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-audience-list.md +16 -13
  190. package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-audio-effect.md +54 -50
  191. package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-barrage.md +33 -21
  192. package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-co-guest-interaction.md +34 -28
  193. package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-gift.md +73 -64
  194. package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-integration.md +46 -43
  195. package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-room-list.md +165 -148
  196. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-audience-list.md +19 -16
  197. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-audio-effect.md +40 -37
  198. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-barrage.md +41 -28
  199. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-co-guest-interaction.md +54 -47
  200. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-gift.md +52 -46
  201. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-host-interaction.md +55 -50
  202. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-integration.md +47 -45
  203. package/resource/knowledge/livekit/core-sdk/voice/ios/voice-room-list.md +404 -0
  204. package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-audience-list.md +40 -57
  205. package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-audio-effect.md +38 -49
  206. package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-barrage.md +53 -53
  207. package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-co-guest-interaction.md +106 -116
  208. package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-gift.md +49 -59
  209. package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-integration.md +52 -45
  210. package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-room-list.md +38 -46
  211. package/resource/knowledge/livekit/preset/live/vue/features/barrage.md +915 -0
  212. package/resource/knowledge/livekit/preset/live/vue/features/live-audience-list.md +179 -0
  213. package/resource/knowledge/livekit/preset/live/vue/features/live-view.md +419 -0
  214. package/resource/knowledge/push/config/android/fcm.md +133 -0
  215. package/resource/knowledge/push/config/android/honor.md +111 -0
  216. package/resource/knowledge/push/config/android/huawei.md +106 -0
  217. package/resource/knowledge/push/config/android/meizu.md +121 -0
  218. package/resource/knowledge/push/config/android/oppo.md +108 -0
  219. package/resource/knowledge/push/config/android/vivo.md +101 -0
  220. package/resource/knowledge/push/config/android/xiaomi.md +99 -0
  221. package/resource/knowledge/push/integration/android.md +1028 -0
  222. package/resource/knowledge/push/integration/donut.md +271 -0
  223. package/resource/knowledge/push/integration/flutter.md +363 -0
  224. package/resource/knowledge/push/integration/harmonyos.md +72 -0
  225. package/resource/knowledge/push/integration/ios.md +705 -0
  226. package/resource/knowledge/push/integration/react-native.md +337 -0
  227. package/resource/knowledge/push/integration/uni-app.md +461 -0
  228. package/resource/knowledge/push/integration/unity.md +357 -0
  229. package/resource/knowledge/push/integration/unreal-engine.md +353 -0
  230. package/resource/knowledge/push/overview/prepare.md +30 -0
  231. package/resource/{doc/roomkit/android/features → knowledge/roomkit/core-sdk/android}/call-user-to-room.md +22 -20
  232. package/resource/{doc/roomkit/android/features → knowledge/roomkit/core-sdk/android}/room-participant-state.md +22 -193
  233. package/resource/{doc/roomkit/android/features → knowledge/roomkit/core-sdk/android}/room-state.md +33 -32
  234. package/resource/{doc/roomkit/android/features → knowledge/roomkit/core-sdk/android}/schedule-room.md +30 -29
  235. package/resource/knowledge/roomkit/core-sdk/flutter/call-user-to-room.md +230 -0
  236. package/resource/{doc/roomkit/flutter/features → knowledge/roomkit/core-sdk/flutter}/room-participant-state.md +22 -21
  237. package/resource/{doc/roomkit/flutter/features → knowledge/roomkit/core-sdk/flutter}/room-state.md +29 -28
  238. package/resource/{doc/roomkit/flutter/features → knowledge/roomkit/core-sdk/flutter}/schedule-room.md +17 -16
  239. package/resource/{doc/roomkit/ios/features → knowledge/roomkit/core-sdk/ios}/call-user-to-room.md +22 -20
  240. package/resource/{doc/roomkit/ios/features → knowledge/roomkit/core-sdk/ios}/room-participant-state.md +49 -218
  241. package/resource/{doc/roomkit/ios/features → knowledge/roomkit/core-sdk/ios}/room-state.md +37 -37
  242. package/resource/{doc/roomkit/ios/features → knowledge/roomkit/core-sdk/ios}/schedule-room.md +28 -28
  243. package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/call-user-to-room.md +122 -7
  244. package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/device-detection.md +318 -3
  245. package/resource/knowledge/roomkit/core-sdk/vue/device-state.md +1504 -0
  246. package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/free-beauty-panel.md +4 -3
  247. package/resource/knowledge/roomkit/core-sdk/vue/room-chat.md +709 -0
  248. package/resource/knowledge/roomkit/core-sdk/vue/room-participant-state.md +1105 -0
  249. package/resource/knowledge/roomkit/core-sdk/vue/room-state.md +635 -0
  250. package/resource/knowledge/roomkit/core-sdk/vue/room-view.md +529 -0
  251. package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/schedule-room.md +256 -13
  252. package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/screen-share.md +218 -25
  253. package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/virtual-background.md +4 -3
  254. package/resource/{doc/roomkit → knowledge/roomkit/preset}/android/integration.md +50 -64
  255. package/resource/{doc/roomkit → knowledge/roomkit/preset}/flutter/integration.md +34 -31
  256. package/resource/{doc/roomkit → knowledge/roomkit/preset}/ios/integration.md +45 -53
  257. package/resource/knowledge/roomkit/preset/react/integration.md +571 -0
  258. package/resource/{doc → knowledge}/rtcengine/web/how_to_run_web_sdk_demo.md +31 -15
  259. package/resource/{doc → knowledge}/rtcengine/web/plugin/21-advanced-auto-play-policy.md +9 -3
  260. package/resource/{doc → knowledge}/rtcengine/web/plugin/22-advanced-audio-mixer.md +1 -1
  261. package/resource/{doc → knowledge}/rtcengine/web/plugin/23-advanced-support-detection.md +1 -1
  262. package/resource/{doc → knowledge}/rtcengine/web/plugin/24-advanced-network-quality.md +6 -6
  263. package/resource/{doc → knowledge}/rtcengine/web/plugin/25-advanced-device-change.md +1 -1
  264. package/resource/{doc → knowledge}/rtcengine/web/plugin/26-advanced-publish-cdn-stream.md +4 -4
  265. package/resource/{doc → knowledge}/rtcengine/web/plugin/27-advanced-small-stream.md +4 -4
  266. package/resource/{doc → knowledge}/rtcengine/web/plugin/31-advanced-plugins-overview.md +1 -1
  267. package/resource/{doc → knowledge}/trtc/android/TRTCCloud.md +547 -495
  268. package/resource/{doc → knowledge}/trtc/android/TRTCCloudDef.md +434 -403
  269. package/resource/{doc → knowledge}/trtc/android/TRTCCloudListener.md +394 -348
  270. package/resource/{doc → knowledge}/trtc/android/TRTCStatistics.md +17 -15
  271. package/resource/{doc → knowledge}/trtc/android/TXAudioEffectManager.md +227 -197
  272. package/resource/knowledge/trtc/android/TXBeautyManager.md +415 -0
  273. package/resource/{doc → knowledge}/trtc/android/TXDeviceManager.md +70 -63
  274. package/resource/{doc → knowledge}/trtc/android/TXLiteAVCode.md +19 -17
  275. package/resource/{doc/trtc/C++ → knowledge/trtc/c++}/ITRTCCloud.md +599 -544
  276. package/resource/{doc/trtc/C++ → knowledge/trtc/c++}/ITRTCStatistics.md +17 -15
  277. package/resource/knowledge/trtc/c++/ITXAudioEffectManager.md +502 -0
  278. package/resource/knowledge/trtc/c++/ITXDeviceManager.md +403 -0
  279. package/resource/{doc/trtc/C++ → knowledge/trtc/c++}/TRTCCloudCallback.md +439 -387
  280. package/resource/{doc/trtc/C++ → knowledge/trtc/c++}/TRTCTypeDef.md +417 -387
  281. package/resource/{doc/trtc/C++ → knowledge/trtc/c++}/TXLiteAVCode.md +19 -17
  282. package/resource/{doc/trtc/iOS → knowledge/trtc/ios}/TRTCCloud.md +619 -559
  283. package/resource/{doc/trtc/iOS → knowledge/trtc/ios}/TRTCCloudDelegate.md +409 -360
  284. package/resource/{doc/trtc/iOS → knowledge/trtc/ios}/TRTCStatistics.md +17 -15
  285. package/resource/{doc/trtc/iOS → knowledge/trtc/ios}/TXAudioEffectManager.md +187 -164
  286. package/resource/knowledge/trtc/ios/TXBeautyManager.md +416 -0
  287. package/resource/knowledge/trtc/ios/TXDeviceManager.md +399 -0
  288. package/resource/{doc/trtc/iOS → knowledge/trtc/ios}/TXLiteAVCode.md +19 -17
  289. package/resource/{doc/trtc/iOS → knowledge/trtc/ios}/TXLiveSDKTypeDef.md +422 -396
  290. package/server-config.js +0 -1
  291. package/server.js +22 -12
  292. package/streamable-http.js +0 -1
  293. package/tools/call/get_native_call_uikit_integration.js +2 -4
  294. package/tools/call/get_native_callkit_core_integration.js +2 -6
  295. package/tools/call/get_web_call_uikit_integration.js +2 -4
  296. package/tools/chat/get_native_chat_uikit_integration.js +2 -4
  297. package/tools/chat/get_web_chat_uikit_integration.js +2 -4
  298. package/tools/common/get_usersig.js +0 -1
  299. package/tools/common/present_framework_choice.js +9 -4
  300. package/tools/common/record_answer.js +19 -26
  301. package/tools/common/record_feedback.js +17 -31
  302. package/tools/common/search_trtc_knowledge.js +44 -0
  303. package/tools/definitions/get_native_call_uikit_integration_def.js +2 -1
  304. package/tools/definitions/get_native_callkit_core_integration_def.js +2 -1
  305. package/tools/definitions/get_native_chat_uikit_integration_def.js +3 -2
  306. package/tools/definitions/get_native_livekit_core_integration_def.js +2 -1
  307. package/tools/definitions/get_usersig_def.js +0 -1
  308. package/tools/definitions/get_web_call_uikit_integration_def.js +2 -1
  309. package/tools/definitions/get_web_chat_uikit_integration_def.js +2 -1
  310. package/tools/definitions/get_web_live_uikit_integration_def.js +4 -3
  311. package/tools/definitions/get_web_room_core_integration_def.js +46 -0
  312. package/tools/definitions/get_web_room_uikit_integration_def.js +3 -1
  313. package/tools/definitions/integration-boundary.js +5 -0
  314. package/tools/definitions/present_framework_choice_def.js +11 -10
  315. package/tools/definitions/record_answer_def.js +6 -5
  316. package/tools/definitions/record_feedback_def.js +4 -3
  317. package/tools/definitions/search_trtc_knowledge_def.js +69 -0
  318. package/tools/index.js +5 -37
  319. package/tools/live/get_native_livekit_core_integration.js +1 -4
  320. package/tools/live/get_web_live_uikit_integration.js +2 -5
  321. package/tools/room/get_web_room_core_integration.js +47 -0
  322. package/tools/room/get_web_room_uikit_integration.js +2 -4
  323. package/utils/generate-structured-result.js +4 -11
  324. package/utils/generate-usersig.js +0 -1
  325. package/utils/get-device-identifier.js +0 -1
  326. package/utils/get-doc-content.js +14 -9
  327. package/utils/http-get.js +0 -1
  328. package/utils/http-post.js +0 -1
  329. package/utils/report-cls-client.js +22 -21
  330. package/utils/report-es-client.js +1 -2
  331. package/utils/report-runtime-error-cls-client.js +0 -1
  332. package/index.js.map +0 -1
  333. package/resource/doc/callkit/core-sdk/.gitkeep +0 -0
  334. package/resource/doc/callkit/core-sdk/android/answer-call.md +0 -942
  335. package/resource/doc/callkit/core-sdk/android/make-call.md +0 -876
  336. package/resource/doc/callkit/core-sdk/android/offline-push.md +0 -368
  337. package/resource/doc/callkit/core-sdk/flutter/answer-call.md +0 -1132
  338. package/resource/doc/callkit/core-sdk/flutter/make-call.md +0 -1206
  339. package/resource/doc/callkit/core-sdk/flutter/offline-push.md +0 -357
  340. package/resource/doc/callkit/core-sdk/ios/answer-call.md +0 -1009
  341. package/resource/doc/callkit/core-sdk/ios/make-call.md +0 -1154
  342. package/resource/doc/callkit/core-sdk/ios/offline-push.md +0 -470
  343. package/resource/doc/callkit/core-sdk/uni-app/answer-call.md +0 -1146
  344. package/resource/doc/callkit/core-sdk/uni-app/make-call.md +0 -1267
  345. package/resource/doc/callkit/faq/android-faq.md +0 -767
  346. package/resource/doc/callkit/faq/flutter-faq.md +0 -749
  347. package/resource/doc/callkit/faq/ios-faq.md +0 -759
  348. package/resource/doc/callkit/faq/web-faq.md +0 -753
  349. package/resource/doc/callkit/preset/android/api.md +0 -330
  350. package/resource/doc/callkit/preset/flutter/api.md +0 -401
  351. package/resource/doc/callkit/preset/ios/api.md +0 -282
  352. package/resource/doc/callkit/preset/ios/integration.md +0 -188
  353. package/resource/doc/callkit/preset/react/api.md +0 -600
  354. package/resource/doc/callkit/preset/react/integration.md +0 -86
  355. package/resource/doc/callkit/preset/vue/api.md +0 -600
  356. package/resource/doc/callkit/preset/vue/integration.md +0 -83
  357. package/resource/doc/chatkit/android/faq.md +0 -109
  358. package/resource/doc/chatkit/faq/android_sdk/client-api.md +0 -280
  359. package/resource/doc/chatkit/faq/common/product.md +0 -82
  360. package/resource/doc/chatkit/faq/common/server.md +0 -53
  361. package/resource/doc/chatkit/faq/common/server_error_code.md +0 -74
  362. package/resource/doc/chatkit/faq/flutter_sdk/client-api.md +0 -183
  363. package/resource/doc/chatkit/faq/flutter_sdk/faq.md +0 -54
  364. package/resource/doc/chatkit/faq/ios_sdk/client-api.md +0 -279
  365. package/resource/doc/chatkit/faq/web_sdk/error_code.md +0 -47
  366. package/resource/doc/chatkit/faq/web_sdk/faq.md +0 -292
  367. package/resource/doc/chatkit/flutter/faq.md +0 -22
  368. package/resource/doc/chatkit/ios/faq.md +0 -109
  369. package/resource/doc/chatkit/react/components/avatar.md +0 -104
  370. package/resource/doc/chatkit/react/components/chat-header.md +0 -148
  371. package/resource/doc/chatkit/react/components/chat-setting.md +0 -117
  372. package/resource/doc/chatkit/react/components/chat.md +0 -38
  373. package/resource/doc/chatkit/react/components/component-list.md +0 -35
  374. package/resource/doc/chatkit/react/components/conversation-actions.md +0 -174
  375. package/resource/doc/chatkit/react/components/conversation-preview.md +0 -116
  376. package/resource/doc/chatkit/react/components/conversation-search.md +0 -57
  377. package/resource/doc/chatkit/react/components/search.md +0 -282
  378. package/resource/doc/chatkit/react/components/tuikit.md +0 -43
  379. package/resource/doc/chatkit/react/faq.md +0 -26
  380. package/resource/doc/chatkit/vue/components/avatar.md +0 -104
  381. package/resource/doc/chatkit/vue/components/chat-header.md +0 -149
  382. package/resource/doc/chatkit/vue/components/chat.md +0 -42
  383. package/resource/doc/chatkit/vue/components/component-list.md +0 -89
  384. package/resource/doc/chatkit/vue/components/tuikit.md +0 -45
  385. package/resource/doc/chatkit/vue/components/userpicker.md +0 -256
  386. package/resource/doc/chatkit/vue/faq.md +0 -35
  387. package/resource/doc/livekit/core-sdk/live/android/api-reference/BarrageStore.md +0 -148
  388. package/resource/doc/livekit/core-sdk/live/android/api-reference/BattleStore.md +0 -316
  389. package/resource/doc/livekit/core-sdk/live/android/api-reference/CoGuestStore.md +0 -419
  390. package/resource/doc/livekit/core-sdk/live/android/api-reference/CoHostStore.md +0 -325
  391. package/resource/doc/livekit/core-sdk/live/android/api-reference/DeviceStore.md +0 -436
  392. package/resource/doc/livekit/core-sdk/live/android/api-reference/GiftStore.md +0 -165
  393. package/resource/doc/livekit/core-sdk/live/android/api-reference/LiveAudienceStore.md +0 -239
  394. package/resource/doc/livekit/core-sdk/live/android/api-reference/LiveCoreView.md +0 -74
  395. package/resource/doc/livekit/core-sdk/live/android/api-reference/LiveSeatStore.md +0 -417
  396. package/resource/doc/livekit/core-sdk/live/android/api-reference/LoginStore.md +0 -207
  397. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/BarrageStore.md +0 -158
  398. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/BattleStore.md +0 -304
  399. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/CoGuestStore.md +0 -394
  400. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/CoHostStore.md +0 -303
  401. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/DeviceStore.md +0 -410
  402. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/GiftStore.md +0 -160
  403. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LiveAudienceStore.md +0 -231
  404. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LiveSeatStore.md +0 -375
  405. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LoginStore.md +0 -170
  406. package/resource/doc/livekit/core-sdk/live/ios/api-reference/BarrageStore.md +0 -165
  407. package/resource/doc/livekit/core-sdk/live/ios/api-reference/BaseBeautyStore.md +0 -143
  408. package/resource/doc/livekit/core-sdk/live/ios/api-reference/BattleStore.md +0 -298
  409. package/resource/doc/livekit/core-sdk/live/ios/api-reference/CoGuestStore.md +0 -349
  410. package/resource/doc/livekit/core-sdk/live/ios/api-reference/CoHostStore.md +0 -297
  411. package/resource/doc/livekit/core-sdk/live/ios/api-reference/DeviceStore.md +0 -471
  412. package/resource/doc/livekit/core-sdk/live/ios/api-reference/GiftStore.md +0 -179
  413. package/resource/doc/livekit/core-sdk/live/ios/api-reference/LiveAudienceStore.md +0 -238
  414. package/resource/doc/livekit/core-sdk/live/ios/api-reference/LiveCoreView.md +0 -74
  415. package/resource/doc/livekit/core-sdk/live/ios/api-reference/LiveSeatStore.md +0 -412
  416. package/resource/doc/livekit/core-sdk/live/ios/api-reference/LoginStore.md +0 -173
  417. package/resource/doc/livekit/core-sdk/voice/android/voice-room-list.md +0 -365
  418. package/resource/doc/livekit/core-sdk/voice/ios/voice-room-list.md +0 -336
  419. package/resource/doc/livekit/preset/live/vue/api-reference/index.md +0 -780
  420. package/resource/doc/livekit/preset/live/vue/components/barrage.md +0 -291
  421. package/resource/doc/livekit/preset/live/vue/components/co-guest-panel.md +0 -88
  422. package/resource/doc/livekit/preset/live/vue/components/live-audience-list.md +0 -164
  423. package/resource/doc/livekit/preset/live/vue/components/live-scene-panel.md +0 -130
  424. package/resource/doc/livekit/preset/live/vue/components/live-view.md +0 -203
  425. package/resource/doc/livekit/preset/live/vue/components/stream-mixer.md +0 -211
  426. package/resource/doc/livekit/preset/live/vue/faq.md +0 -1
  427. package/resource/doc/roomkit/faq/common/error-code.md +0 -67
  428. package/resource/doc/roomkit/flutter/features/call-user-to-room.md +0 -228
  429. package/resource/doc/roomkit/vue/faq.md +0 -1
  430. package/resource/doc/roomkit/vue/features/device-state.md +0 -460
  431. package/resource/doc/roomkit/vue/features/room-chat.md +0 -369
  432. package/resource/doc/roomkit/vue/features/room-participant-state.md +0 -385
  433. package/resource/doc/roomkit/vue/features/room-state.md +0 -280
  434. package/resource/doc/roomkit/vue/features/room-view.md +0 -241
  435. package/resource/doc/roomkit/vue/integration.md +0 -315
  436. package/resource/doc/rtcengine/faq/web_sdk/.gitkeep +0 -0
  437. package/resource/doc/trtc/C++/ITXAudioEffectManager.md +0 -472
  438. package/resource/doc/trtc/C++/ITXDeviceManager.md +0 -388
  439. package/resource/doc/trtc/android/TXBeautyManager.md +0 -403
  440. package/resource/doc/trtc/iOS/TXBeautyManager.md +0 -404
  441. package/resource/doc/trtc/iOS/TXDeviceManager.md +0 -382
  442. package/server-config.js.map +0 -1
  443. package/server.js.map +0 -1
  444. package/streamable-http.js.map +0 -1
  445. package/tools/call/get_callkit_api.js +0 -33
  446. package/tools/call/get_callkit_api.js.map +0 -1
  447. package/tools/call/get_native_call_uikit_integration.js.map +0 -1
  448. package/tools/call/get_native_callkit_core_integration.js.map +0 -1
  449. package/tools/call/get_web_call_uikit_integration.js.map +0 -1
  450. package/tools/chat/get_native_chat_uikit_feature_detail.js +0 -35
  451. package/tools/chat/get_native_chat_uikit_feature_detail.js.map +0 -1
  452. package/tools/chat/get_native_chat_uikit_integration.js.map +0 -1
  453. package/tools/chat/get_web_chat_uikit_component_detail.js +0 -35
  454. package/tools/chat/get_web_chat_uikit_component_detail.js.map +0 -1
  455. package/tools/chat/get_web_chat_uikit_integration.js.map +0 -1
  456. package/tools/common/get_faq.js +0 -266
  457. package/tools/common/get_faq.js.map +0 -1
  458. package/tools/common/get_usersig.js.map +0 -1
  459. package/tools/common/present_framework_choice.js.map +0 -1
  460. package/tools/common/record_answer.js.map +0 -1
  461. package/tools/common/record_feedback.js.map +0 -1
  462. package/tools/common/record_skill_session.js +0 -69
  463. package/tools/common/record_skill_session.js.map +0 -1
  464. package/tools/definitions/get_callkit_api_def.js +0 -28
  465. package/tools/definitions/get_callkit_api_def.js.map +0 -1
  466. package/tools/definitions/get_faq_def.js +0 -40
  467. package/tools/definitions/get_faq_def.js.map +0 -1
  468. package/tools/definitions/get_native_call_uikit_integration_def.js.map +0 -1
  469. package/tools/definitions/get_native_callkit_core_integration_def.js.map +0 -1
  470. package/tools/definitions/get_native_chat_uikit_feature_detail_def.js +0 -31
  471. package/tools/definitions/get_native_chat_uikit_feature_detail_def.js.map +0 -1
  472. package/tools/definitions/get_native_chat_uikit_integration_def.js.map +0 -1
  473. package/tools/definitions/get_native_livekit_core_features_def.js +0 -33
  474. package/tools/definitions/get_native_livekit_core_features_def.js.map +0 -1
  475. package/tools/definitions/get_native_livekit_core_integration_def.js.map +0 -1
  476. package/tools/definitions/get_native_trtc_sdk_docs_def.js +0 -32
  477. package/tools/definitions/get_native_trtc_sdk_docs_def.js.map +0 -1
  478. package/tools/definitions/get_usersig_def.js.map +0 -1
  479. package/tools/definitions/get_web_call_uikit_integration_def.js.map +0 -1
  480. package/tools/definitions/get_web_chat_uikit_component_detail_def.js +0 -31
  481. package/tools/definitions/get_web_chat_uikit_component_detail_def.js.map +0 -1
  482. package/tools/definitions/get_web_chat_uikit_integration_def.js.map +0 -1
  483. package/tools/definitions/get_web_live_uikit_integration_def.js.map +0 -1
  484. package/tools/definitions/get_web_livekit_api_def.js +0 -27
  485. package/tools/definitions/get_web_livekit_api_def.js.map +0 -1
  486. package/tools/definitions/get_web_livekit_component_detail_def.js +0 -29
  487. package/tools/definitions/get_web_livekit_component_detail_def.js.map +0 -1
  488. package/tools/definitions/get_web_room_uikit_integration_def.js.map +0 -1
  489. package/tools/definitions/get_web_roomkit_feature_detail_def.js +0 -30
  490. package/tools/definitions/get_web_roomkit_feature_detail_def.js.map +0 -1
  491. package/tools/definitions/get_web_trtc_sdk_api_def.js +0 -25
  492. package/tools/definitions/get_web_trtc_sdk_api_def.js.map +0 -1
  493. package/tools/definitions/get_web_trtc_sdk_integration_def.js +0 -25
  494. package/tools/definitions/get_web_trtc_sdk_integration_def.js.map +0 -1
  495. package/tools/definitions/get_web_trtc_sdk_plugin_def.js +0 -25
  496. package/tools/definitions/get_web_trtc_sdk_plugin_def.js.map +0 -1
  497. package/tools/definitions/present_framework_choice_def.js.map +0 -1
  498. package/tools/definitions/record_answer_def.js.map +0 -1
  499. package/tools/definitions/record_feedback_def.js.map +0 -1
  500. package/tools/definitions/record_skill_session_def.js +0 -31
  501. package/tools/definitions/record_skill_session_def.js.map +0 -1
  502. package/tools/index.js.map +0 -1
  503. package/tools/live/get_native_livekit_core_features.js +0 -68
  504. package/tools/live/get_native_livekit_core_features.js.map +0 -1
  505. package/tools/live/get_native_livekit_core_integration.js.map +0 -1
  506. package/tools/live/get_web_live_uikit_integration.js.map +0 -1
  507. package/tools/live/get_web_livekit_api.js +0 -33
  508. package/tools/live/get_web_livekit_api.js.map +0 -1
  509. package/tools/live/get_web_livekit_component_detail.js +0 -35
  510. package/tools/live/get_web_livekit_component_detail.js.map +0 -1
  511. package/tools/room/get_web_room_uikit_integration.js.map +0 -1
  512. package/tools/room/get_web_roomkit_feature_detail.js +0 -69
  513. package/tools/room/get_web_roomkit_feature_detail.js.map +0 -1
  514. package/tools/rtcengine/get_web_trtc_sdk_api.js +0 -32
  515. package/tools/rtcengine/get_web_trtc_sdk_api.js.map +0 -1
  516. package/tools/rtcengine/get_web_trtc_sdk_integration.js +0 -32
  517. package/tools/rtcengine/get_web_trtc_sdk_integration.js.map +0 -1
  518. package/tools/rtcengine/get_web_trtc_sdk_plugin.js +0 -32
  519. package/tools/rtcengine/get_web_trtc_sdk_plugin.js.map +0 -1
  520. package/tools/trtc/get_native_trtc_sdk_docs.js +0 -74
  521. package/tools/trtc/get_native_trtc_sdk_docs.js.map +0 -1
  522. package/utils/build-session-directives.js +0 -122
  523. package/utils/build-session-directives.js.map +0 -1
  524. package/utils/generate-structured-result.js.map +0 -1
  525. package/utils/generate-usersig.js.map +0 -1
  526. package/utils/get-device-identifier.js.map +0 -1
  527. package/utils/get-doc-content.js.map +0 -1
  528. package/utils/handle-framework.js +0 -9
  529. package/utils/handle-framework.js.map +0 -1
  530. package/utils/handle-state-name.js +0 -29
  531. package/utils/handle-state-name.js.map +0 -1
  532. package/utils/http-get.js.map +0 -1
  533. package/utils/http-post.js.map +0 -1
  534. package/utils/report-cls-client.js.map +0 -1
  535. package/utils/report-es-client.js.map +0 -1
  536. package/utils/report-runtime-error-cls-client.js.map +0 -1
  537. /package/resource/{doc/callkit/faq/common → knowledge/callkit/faq}/error-code.md +0 -0
  538. /package/resource/{doc/livekit/faq/common → knowledge/livekit/faq}/error-code.md +0 -0
  539. /package/resource/{doc → knowledge}/rtcengine/web/api.md +0 -0
  540. /package/resource/{doc/rtcengine/faq/web/web.md → knowledge/rtcengine/web/faq.md} +0 -0
  541. /package/resource/{doc → knowledge}/rtcengine/web/how_to_integrated_web_sdk.md +0 -0
  542. /package/resource/{doc → knowledge}/rtcengine/web/plugin/20-advanced-customized-capture-rendering.md +0 -0
  543. /package/resource/{doc → knowledge}/rtcengine/web/plugin/28-advanced-beauty.md +0 -0
  544. /package/resource/{doc → knowledge}/rtcengine/web/plugin/29-advanced-water-mark.md +0 -0
  545. /package/resource/{doc → knowledge}/rtcengine/web/plugin/30-advanced-cross-room-link.md +0 -0
  546. /package/resource/{doc → knowledge}/rtcengine/web/plugin/34-advanced-proxy.md +0 -0
  547. /package/resource/{doc → knowledge}/rtcengine/web/plugin/35-advanced-ai-denoiser.md +0 -0
  548. /package/resource/{doc → knowledge}/rtcengine/web/plugin/36-advanced-virtual-background.md +0 -0
  549. /package/resource/{doc → knowledge}/rtcengine/web/plugin/37-advanced-voice-changer.md +0 -0
  550. /package/resource/{doc → knowledge}/rtcengine/web/plugin/38-advanced-basic-beauty.md +0 -0
  551. /package/resource/{doc → knowledge}/rtcengine/web/plugin/39-advanced-video-decoder.md +0 -0
  552. /package/resource/{doc → knowledge}/rtcengine/web/plugin/40-advanced-video-mixer.md +0 -0
  553. /package/resource/{doc → knowledge}/rtcengine/web/plugin/41-advanced-small-stream-auto-switcher.md +0 -0
  554. /package/resource/{doc → knowledge}/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +0 -0
  555. /package/resource/{doc → knowledge}/rtcengine/web/plugin/43-advanced-face-detection.md +0 -0
  556. /package/resource/{doc/rtcengine/faq/common → knowledge/share}/userSig.md +0 -0
@@ -0,0 +1,1504 @@
1
+ 本文档指导您使用无 UI 集成方案中的 `useDeviceState` 管理 Web 端会议的摄像头、麦克风、扬声器和本地网络状态。阅读本文后,您可以完成会前设备检测、会中设备控制、PC 与 H5 设备设置面板、设备权限会控以及网络质量展示等功能。
2
+
3
+ ## 前提条件
4
+ - 用户已经通过 [useLoginState](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-LoginState) 完成登录鉴权,请参考 接入概览 文档。
5
+
6
+ - 用户已经通过 [useRoomState](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-RoomState) 进入标准会议房间,请参考 房间管理 文档。
7
+
8
+ - 浏览器需要运行在安全环境中,例如 `https://`、`localhost` 或 `file://`。如果页面部署在 HTTP 协议下,浏览器会禁止访问摄像头和麦克风。
9
+
10
+ - 若在 `iframe` 中集成,需要在标签中声明麦克风、摄像头、屏幕分享等权限。
11
+
12
+ ``` typescript
13
+ <iframe allow="microphone; camera; display-capture; fullscreen;"></iframe>
14
+ ```
15
+
16
+ ## 设备管理能力说明
17
+
18
+ 不同终端和浏览器对媒体设备的支持能力存在差异,设计设备设置 UI 前建议先明确能力边界。
19
+
20
+ |**能力**|**PC Web**|**移动端 H5**|**推荐处理方式**|
21
+ |---------|---------|---------|---------|
22
+ |打开/关闭摄像头|支持|支持|使用 `openLocalCamera`、`closeLocalCamera`。|
23
+ |切换摄像头设备|支持切换设备列表中的摄像头|支持切换前后置摄像头|PC 使用 `setCurrentCamera`,H5 使用 `switchCamera` 切换前后置摄像头。|
24
+ |打开/关闭麦克风|支持|支持|会中推荐入会后先 `muteMicrophone` 再 `openLocalMicrophone` 预采集,避免漏音;开麦时调用 `unmuteMicrophone`,闭麦时调用 `muteMicrophone`。|
25
+ |切换麦克风设备|支持|不建议展示|H5 建议隐藏麦克风设备选择入口。|
26
+ |切换扬声器设备|支持|不建议展示|H5 建议隐藏扬声器设备选择入口。|
27
+ |设置采集音量|支持|不建议展示|使用 `setCaptureVolume`。|
28
+ |设置播放音量|支持|不建议展示|使用 `setOutputVolume`。|
29
+ |麦克风音量检测|支持|支持|使用 `startMicrophoneTest` 及 `currentMicVolume`。|
30
+ |切换视频分辨率|支持|支持|使用 `updateVideoQuality`。|
31
+ |本地镜像设置|支持|支持|使用 `switchMirror`。|
32
+ |网络质量监控|支持|支持|进房后读取 `networkInfo`。|
33
+
34
+ ## 场景一:会前设备检测与预览
35
+
36
+ ### 适用场景
37
+
38
+ 会前检测用于在用户入会前确认摄像头、麦克风和扬声器是否可用,常见于会议预览页、入会设置页和设备检测页。
39
+
40
+ > **注意:**
41
+ >
42
+
43
+ > 会前设备检测用于确认设备是否可用,不代表用户已经在房间中发布音视频。用户入会后,仍需调用对应的设备控制接口,摄像头或麦克风才会被打开并在房间中发布音视频。
44
+ >
45
+
46
+ ### 检查麦克风
47
+
48
+ 麦克风检测主要用于确认用户是否具备音频采集能力,以及在预览页展示麦克风输入音量。
49
+
50
+ |**目标**|**使用接口/状态**|**处理建议**|
51
+ |---------|---------|---------|
52
+ |获取麦克风列表|`getMicrophoneList`、`microphoneList`、`currentMicrophone`|PC 端可展示设备列表供用户选择;H5 不建议展示设备列表。|
53
+ |切换麦克风|`setCurrentMicrophone`|仅建议在 PC 端提供。切换失败时保留原设备并提示用户重试。|
54
+ |检测输入音量|`startMicrophoneTest`、`testingMicVolume`、`stopMicrophoneTest`|预览页进入时开启检测,离开预览页时停止检测。|
55
+ |处理采集异常|`microphoneLastError`|根据 `DeviceError` 提示无权限、无设备、设备占用或浏览器不支持。|
56
+
57
+ 【Vue3】
58
+ ``` typescript
59
+ <script setup lang="ts">
60
+ import { onBeforeUnmount, onMounted } from 'vue';
61
+ import { useDeviceState } from 'tuikit-atomicx-vue3/room';
62
+
63
+ const {
64
+ microphoneList,
65
+ currentMicrophone,
66
+ testingMicVolume,
67
+ getMicrophoneList,
68
+ setCurrentMicrophone,
69
+ startMicrophoneTest,
70
+ stopMicrophoneTest,
71
+ } = useDeviceState();
72
+
73
+ onMounted(async () => {
74
+ await getMicrophoneList();
75
+ await startMicrophoneTest({ interval: 200 });
76
+ });
77
+
78
+ async function switchMicrophone(deviceId: string) {
79
+ await setCurrentMicrophone({ deviceId });
80
+ }
81
+
82
+ onBeforeUnmount(async () => {
83
+ await stopMicrophoneTest();
84
+ });
85
+ </script
86
+ ```
87
+
88
+ 【React】
89
+ ``` typescript
90
+ import { useEffect } from 'react';
91
+ import { useDeviceState } from 'tuikit-atomicx-react/room';
92
+
93
+ function MicrophoneCheck() {
94
+ const {
95
+ microphoneList,
96
+ currentMicrophone,
97
+ testingMicVolume,
98
+ getMicrophoneList,
99
+ setCurrentMicrophone,
100
+ startMicrophoneTest,
101
+ stopMicrophoneTest,
102
+ } = useDeviceState();
103
+
104
+ useEffect(() => {
105
+ const init = async () => {
106
+ await getMicrophoneList();
107
+ await startMicrophoneTest({ interval: 200 });
108
+ };
109
+ init();
110
+ return () => {
111
+ stopMicrophoneTest();
112
+ };
113
+ }, []);
114
+
115
+ async function switchMicrophone(deviceId: string) {
116
+ await setCurrentMicrophone({ deviceId });
117
+ }
118
+ }
119
+ ```
120
+
121
+ ### 检查摄像头
122
+
123
+ 摄像头检测主要用于确认用户是否具备视频采集能力,并在预览页展示本地画面。
124
+
125
+ |**目标**|**使用接口/状态**|**处理建议**|
126
+ |---------|---------|---------|
127
+ |获取摄像头列表|`getCameraList`、`cameraList`、`currentCamera`|PC 端可展示设备列表;H5 建议只提供前后置切换。|
128
+ |切换摄像头|`setCurrentCamera`、`switchCamera`|PC 端用于切换具体摄像头设备。切换失败时保留原设备并提示用户重试。|
129
+ |预览摄像头|`startCameraTest`、`stopCameraTest`|进入预览页时传入预览容器,离开预览页时停止测试。|
130
+ |处理采集异常|`cameraLastError`|根据 `DeviceError` 提示无权限、无设备、设备占用或浏览器不支持。|
131
+
132
+ 【Vue3】
133
+ ``` typescript
134
+ <template>
135
+ <div id="camera-preview" class="camera-preview"></div>
136
+ </template>
137
+
138
+ <script setup lang="ts">
139
+ import { onBeforeUnmount, onMounted } from 'vue';
140
+ import { useDeviceState } from 'tuikit-atomicx-vue3/room';
141
+
142
+ const {
143
+ cameraList,
144
+ currentCamera,
145
+ getCameraList,
146
+ setCurrentCamera,
147
+ startCameraTest,
148
+ stopCameraTest,
149
+ } = useDeviceState();
150
+
151
+ onMounted(async () => {
152
+ await getCameraList();
153
+ await startCameraTest({ view: 'camera-preview' });
154
+ });
155
+
156
+ async function switchCamera(deviceId: string) {
157
+ await setCurrentCamera({ deviceId });
158
+ }
159
+
160
+ onBeforeUnmount(async () => {
161
+ await stopCameraTest();
162
+ });
163
+ </script>
164
+ ```
165
+
166
+ 【React】
167
+ ``` typescript
168
+ import { useEffect } from 'react';
169
+ import { useDeviceState } from 'tuikit-atomicx-react/room';
170
+
171
+ function CameraCheck() {
172
+ const {
173
+ cameraList,
174
+ currentCamera,
175
+ getCameraList,
176
+ setCurrentCamera,
177
+ startCameraTest,
178
+ stopCameraTest,
179
+ } = useDeviceState();
180
+
181
+ useEffect(() => {
182
+ const init = async () => {
183
+ await getCameraList();
184
+ await startCameraTest({ view: 'camera-preview' });
185
+ };
186
+ init();
187
+ return () => {
188
+ stopCameraTest();
189
+ };
190
+ }, []);
191
+
192
+ async function switchCamera(deviceId: string) {
193
+ await setCurrentCamera({ deviceId });
194
+ }
195
+
196
+ return <div id="camera-preview" className="camera-preview"></div>;
197
+ }
198
+ ```
199
+
200
+ ### 检查扬声器
201
+
202
+ 扬声器检测主要用于确认用户是否可以听到房间内其他成员的声音。
203
+
204
+ |**目标**|**使用接口/状态**|**处理建议**|
205
+ |---------|---------|---------|
206
+ |获取扬声器列表|`getSpeakerList`、`speakerList`、`currentSpeaker`|仅建议在 PC 端展示。部分浏览器可能无法返回扬声器列表。|
207
+ |切换扬声器|`setCurrentSpeaker`|切换能力依赖浏览器,失败时提示用户使用系统声音设置。|
208
+ |播放测试音频|`startSpeakerTest`、`stopSpeakerTest`|用户点击“测试扬声器”时播放测试音频,离开页面时停止播放。|
209
+
210
+ 【Vue3】
211
+ ``` typescript
212
+ <script setup lang="ts">
213
+ import { onBeforeUnmount, onMounted } from 'vue';
214
+ import { useDeviceState } from 'tuikit-atomicx-vue3/room';
215
+
216
+ const {
217
+ speakerList,
218
+ currentSpeaker,
219
+ getSpeakerList,
220
+ setCurrentSpeaker,
221
+ startSpeakerTest,
222
+ stopSpeakerTest,
223
+ } = useDeviceState();
224
+
225
+ onMounted(async () => {
226
+ await getSpeakerList();
227
+ });
228
+
229
+ async function switchSpeaker(deviceId: string) {
230
+ await setCurrentSpeaker({ deviceId });
231
+ }
232
+
233
+ async function testSpeaker() {
234
+ await startSpeakerTest({ filePath: '/audio/test.mp3' });
235
+ }
236
+
237
+ onBeforeUnmount(async () => {
238
+ await stopSpeakerTest();
239
+ });
240
+ </script>
241
+ ```
242
+
243
+ 【React】
244
+ ``` typescript
245
+ import { useEffect } from 'react';
246
+ import { useDeviceState } from 'tuikit-atomicx-react/room';
247
+
248
+ function SpeakerCheck() {
249
+ const {
250
+ speakerList,
251
+ currentSpeaker,
252
+ getSpeakerList,
253
+ setCurrentSpeaker,
254
+ startSpeakerTest,
255
+ stopSpeakerTest,
256
+ } = useDeviceState();
257
+
258
+ useEffect(() => {
259
+ getSpeakerList();
260
+ return () => {
261
+ stopSpeakerTest();
262
+ };
263
+ }, []);
264
+
265
+ async function switchSpeaker(deviceId: string) {
266
+ await setCurrentSpeaker({ deviceId });
267
+ }
268
+
269
+ async function testSpeaker() {
270
+ await startSpeakerTest({ filePath: '/audio/test.mp3' });
271
+ }
272
+ }
273
+ ```
274
+
275
+ ## 场景二:会中控制摄像头和麦克风
276
+
277
+ 用户进入房间后,需要通过自定义按钮控制本地摄像头和麦克风的开启或关闭。典型场景包括会议底部工具栏、悬浮控制条、移动端底部操作栏。
278
+
279
+ ### 开启/关闭摄像头
280
+
281
+ 通过调用 `openLocalCamera` 和 `closeLocalCamera` 控制本地摄像头。
282
+
283
+ 【Vue3】
284
+ ``` typescript
285
+ <script setup lang="ts">
286
+ import { DeviceError, DeviceStatus, useDeviceState, useRoomState } from 'tuikit-atomicx-vue3/room';
287
+
288
+ const { currentRoom } = useRoomState();
289
+ const {
290
+ cameraStatus,
291
+ cameraLastError,
292
+ openLocalCamera,
293
+ closeLocalCamera,
294
+ } = useDeviceState();
295
+
296
+ async function toggleCamera() {
297
+ try {
298
+ if (cameraStatus.value === DeviceStatus.On) {
299
+ await closeLocalCamera();
300
+ } else {
301
+ await openLocalCamera();
302
+ }
303
+ } catch (error) {
304
+ console.error('摄像头操作失败:', error);
305
+ handleCameraError(cameraLastError.value);
306
+ }
307
+ }
308
+
309
+ function handleCameraError(error: DeviceError) {
310
+ switch (error) {
311
+ case DeviceError.NoSystemPermission:
312
+ console.error('摄像头权限被拒绝,请在浏览器或系统设置中开启摄像头权限');
313
+ break;
314
+ case DeviceError.NoDeviceDetected:
315
+ console.error('未检测到摄像头设备');
316
+ break;
317
+ case DeviceError.OccupiedError:
318
+ console.error('摄像头被其他应用占用');
319
+ break;
320
+ case DeviceError.NotSupportCapture:
321
+ console.error('当前浏览器不支持摄像头采集');
322
+ break;
323
+ default:
324
+ console.error('摄像头操作失败,请检查设备状态');
325
+ break;
326
+ }
327
+ }
328
+ </script>
329
+ ```
330
+
331
+ 【React】
332
+ ``` typescript
333
+ import { DeviceError, DeviceStatus, useDeviceState, useRoomState } from 'tuikit-atomicx-react/room';
334
+
335
+ function CameraControl() {
336
+ const { currentRoom } = useRoomState();
337
+ const {
338
+ cameraStatus,
339
+ cameraLastError,
340
+ openLocalCamera,
341
+ closeLocalCamera,
342
+ } = useDeviceState();
343
+
344
+ async function toggleCamera() {
345
+ try {
346
+ if (cameraStatus === DeviceStatus.On) {
347
+ await closeLocalCamera();
348
+ } else {
349
+ await openLocalCamera();
350
+ }
351
+ } catch (error) {
352
+ console.error('摄像头操作失败:', error);
353
+ handleCameraError(cameraLastError);
354
+ }
355
+ }
356
+
357
+ function handleCameraError(error: DeviceError) {
358
+ switch (error) {
359
+ case DeviceError.NoSystemPermission:
360
+ console.error('摄像头权限被拒绝,请在浏览器或系统设置中开启摄像头权限');
361
+ break;
362
+ case DeviceError.NoDeviceDetected:
363
+ console.error('未检测到摄像头设备');
364
+ break;
365
+ case DeviceError.OccupiedError:
366
+ console.error('摄像头被其他应用占用');
367
+ break;
368
+ case DeviceError.NotSupportCapture:
369
+ console.error('当前浏览器不支持摄像头采集');
370
+ break;
371
+ default:
372
+ console.error('摄像头操作失败,请检查设备状态');
373
+ break;
374
+ }
375
+ }
376
+ }
377
+ ```
378
+
379
+ ### 开启/关闭麦克风
380
+
381
+ 会议中推荐使用“进房后预采集 + 默认静音”:先调用 `muteMicrophone`,再调用 `openLocalMicrophone` 打开采集,避免采集开启但尚未静音导致漏音。用户开麦时调用 `unmuteMicrophone`,闭麦时调用 `muteMicrophone`。
382
+
383
+ > **说明:**
384
+ >
385
+ > 1. 麦克风控制推荐采用“进房后预采集 + 默认静音”的方式有两个好处:
386
+ > - 用户点击打开麦克风时,不需要重新处理物理设备采集,响应速度更快。
387
+ > - 业务层可以持续检测本地麦克风音量。当用户正在说话但音频未上行时,可以提示“您正在说话,是否打开麦克风?”。
388
+ > 2. `closeLocalMicrophone` 会关闭麦克风设备采集,适合用户退出房间、结束会议或业务明确需要释放麦克风设备的场景。
389
+
390
+ 【Vue3】
391
+ ``` typescript
392
+ <script setup lang="ts">
393
+ import { ref } from 'vue';
394
+ import {
395
+ DeviceError,
396
+ useDeviceState,
397
+ useRoomParticipantState,
398
+ useRoomState,
399
+ } from 'tuikit-atomicx-vue3/room';
400
+
401
+ const { currentRoom } = useRoomState();
402
+ const {
403
+ currentMicVolume,
404
+ microphoneLastError,
405
+ openLocalMicrophone,
406
+ } = useDeviceState();
407
+ const { muteMicrophone, unmuteMicrophone } = useRoomParticipantState();
408
+
409
+ const isMicrophoneMuted = ref(true);
410
+
411
+ async function prepareMicrophoneAfterJoinRoom() {
412
+ try {
413
+ await muteMicrophone();
414
+ await openLocalMicrophone();
415
+ isMicrophoneMuted.value = true;
416
+ } catch (error) {
417
+ console.error('麦克风预采集失败:', error);
418
+ handleMicrophoneError(microphoneLastError.value);
419
+ }
420
+ }
421
+
422
+ async function openMicrophoneForSpeaking() {
423
+ await unmuteMicrophone();
424
+ isMicrophoneMuted.value = false;
425
+ }
426
+
427
+ async function closeMicrophoneForSpeaking() {
428
+ await muteMicrophone();
429
+ isMicrophoneMuted.value = true;
430
+ }
431
+
432
+ function checkSpeakingWhileMuted() {
433
+ if (isMicrophoneMuted.value && currentMicVolume.value > 30) {
434
+ console.warn('检测到您正在说话,是否打开麦克风?');
435
+ }
436
+ }
437
+
438
+ function handleMicrophoneError(error: DeviceError) {
439
+ switch (error) {
440
+ case DeviceError.NoSystemPermission:
441
+ console.error('麦克风权限被拒绝,请在浏览器或系统设置中开启麦克风权限');
442
+ break;
443
+ case DeviceError.NoDeviceDetected:
444
+ console.error('未检测到麦克风设备');
445
+ break;
446
+ case DeviceError.OccupiedError:
447
+ console.error('麦克风被其他应用占用');
448
+ break;
449
+ case DeviceError.NotSupportCapture:
450
+ console.error('当前浏览器不支持麦克风采集');
451
+ break;
452
+ default:
453
+ console.error('麦克风操作失败,请检查设备状态');
454
+ break;
455
+ }
456
+ }
457
+ </script>
458
+ ```
459
+
460
+ 【React】
461
+ ``` typescript
462
+ import { useState } from 'react';
463
+ import {
464
+ DeviceError,
465
+ useDeviceState,
466
+ useRoomParticipantState,
467
+ useRoomState,
468
+ } from 'tuikit-atomicx-react/room';
469
+
470
+ function MicrophoneControl() {
471
+ const { currentRoom } = useRoomState();
472
+ const {
473
+ currentMicVolume,
474
+ microphoneLastError,
475
+ openLocalMicrophone,
476
+ } = useDeviceState();
477
+ const { muteMicrophone, unmuteMicrophone } = useRoomParticipantState();
478
+
479
+ const [isMicrophoneMuted, setIsMicrophoneMuted] = useState(true);
480
+
481
+ async function prepareMicrophoneAfterJoinRoom() {
482
+ try {
483
+ await muteMicrophone();
484
+ await openLocalMicrophone();
485
+ setIsMicrophoneMuted(true);
486
+ } catch (error) {
487
+ console.error('麦克风预采集失败:', error);
488
+ handleMicrophoneError(microphoneLastError);
489
+ }
490
+ }
491
+
492
+ async function openMicrophoneForSpeaking() {
493
+ await unmuteMicrophone();
494
+ setIsMicrophoneMuted(false);
495
+ }
496
+
497
+ async function closeMicrophoneForSpeaking() {
498
+ await muteMicrophone();
499
+ setIsMicrophoneMuted(true);
500
+ }
501
+
502
+ function checkSpeakingWhileMuted() {
503
+ if (isMicrophoneMuted && currentMicVolume > 30) {
504
+ console.warn('检测到您正在说话,是否打开麦克风?');
505
+ }
506
+ }
507
+
508
+ function handleMicrophoneError(error: DeviceError) {
509
+ switch (error) {
510
+ case DeviceError.NoSystemPermission:
511
+ console.error('麦克风权限被拒绝,请在浏览器或系统设置中开启麦克风权限');
512
+ break;
513
+ case DeviceError.NoDeviceDetected:
514
+ console.error('未检测到麦克风设备');
515
+ break;
516
+ case DeviceError.OccupiedError:
517
+ console.error('麦克风被其他应用占用');
518
+ break;
519
+ case DeviceError.NotSupportCapture:
520
+ console.error('当前浏览器不支持麦克风采集');
521
+ break;
522
+ default:
523
+ console.error('麦克风操作失败,请检查设备状态');
524
+ break;
525
+ }
526
+ }
527
+ }
528
+ ```
529
+
530
+ ## 场景三:构建设备设置面板
531
+
532
+ 用户需要在会议前或会议中切换设备、调整音量、设置视频分辨率。PC 端和移动端 H5 的设备能力差异较大,建议按终端分别设计设置面板。
533
+
534
+ ### PC 端设备设置面板
535
+
536
+ PC 端通常可以提供完整的音频设置和视频设置,包括设备列表、设备切换、音量调节、分辨率切换和摄像头预览。
537
+
538
+ #### 音频设置
539
+
540
+ |**设置项**|**使用接口/状态**|**处理建议**|
541
+ |---------|---------|---------|
542
+ |麦克风列表|`getMicrophoneList`、`microphoneList`、`currentMicrophone`|进入设置面板时获取,设备热插拔后响应式更新 UI。|
543
+ |切换麦克风|`setCurrentMicrophone`|用户选择设备后调用。若麦克风已经开启,无 UI SDK 会使用新设备重新采集。|
544
+ |扬声器列表|`getSpeakerList`、`speakerList`、`currentSpeaker`|浏览器不支持时可能为空,需要给出兼容性提示。|
545
+ |切换扬声器|`setCurrentSpeaker`|切换失败时提示用户到系统声音设置中切换。|
546
+ |采集音量|`captureVolume`、`setCaptureVolume`|范围 0-100,可对应音量滑块。|
547
+ |播放音量|`outputVolume`、`setOutputVolume`|范围 0-100,可对应音量滑块。|
548
+ |实时麦克风音量|`currentMicVolume`|会中可用于音量条,也可用于闭麦说话提醒。|
549
+
550
+ 【Vue3】
551
+ ``` typescript
552
+ <script setup lang="ts">
553
+ import { onMounted } from 'vue';
554
+ import { useDeviceState } from 'tuikit-atomicx-vue3/room';
555
+
556
+ const {
557
+ getMicrophoneList,
558
+ getSpeakerList,
559
+ setCurrentMicrophone,
560
+ setCurrentSpeaker,
561
+ setCaptureVolume,
562
+ setOutputVolume,
563
+ } = useDeviceState();
564
+
565
+ onMounted(async () => {
566
+ await getMicrophoneList();
567
+ await getSpeakerList();
568
+ });
569
+
570
+ async function switchMicrophone(deviceId: string) {
571
+ await setCurrentMicrophone({ deviceId });
572
+ }
573
+
574
+ async function switchSpeaker(deviceId: string) {
575
+ await setCurrentSpeaker({ deviceId });
576
+ }
577
+
578
+ async function updateCaptureVolume(volume: number) {
579
+ await setCaptureVolume(volume);
580
+ }
581
+
582
+ async function updateOutputVolume(volume: number) {
583
+ await setOutputVolume(volume);
584
+ }
585
+ </script>
586
+ ```
587
+
588
+ 【React】
589
+ ``` typescript
590
+ import { useEffect } from 'react';
591
+ import { useDeviceState } from 'tuikit-atomicx-react/room';
592
+
593
+ function AudioSettings() {
594
+ const {
595
+ getMicrophoneList,
596
+ getSpeakerList,
597
+ setCurrentMicrophone,
598
+ setCurrentSpeaker,
599
+ setCaptureVolume,
600
+ setOutputVolume,
601
+ } = useDeviceState();
602
+
603
+ useEffect(() => {
604
+ const init = async () => {
605
+ await getMicrophoneList();
606
+ await getSpeakerList();
607
+ };
608
+ init();
609
+ }, []);
610
+
611
+ async function switchMicrophone(deviceId: string) {
612
+ await setCurrentMicrophone({ deviceId });
613
+ }
614
+
615
+ async function switchSpeaker(deviceId: string) {
616
+ await setCurrentSpeaker({ deviceId });
617
+ }
618
+
619
+ async function updateCaptureVolume(volume: number) {
620
+ await setCaptureVolume(volume);
621
+ }
622
+
623
+ async function updateOutputVolume(volume: number) {
624
+ await setOutputVolume(volume);
625
+ }
626
+ }
627
+ ```
628
+
629
+ > **说明:**
630
+ >
631
+
632
+ > 扬声器设备切换依赖浏览器能力。部分浏览器可能无法获取扬声器列表或无法切换播放设备,建议在列表为空或切换失败时提示用户使用系统声音设置切换输出设备。
633
+ >
634
+
635
+ #### 视频设置
636
+
637
+ |**设置项**|**使用接口/状态**|**处理建议**|
638
+ |---------|---------|---------|
639
+ |摄像头列表|`getCameraList`、`cameraList`、`currentCamera`|进入设置面板时获取,PC 端可展示完整设备列表。|
640
+ |切换摄像头|`setCurrentCamera`|用户选择设备后调用。若摄像头已经开启,会切换到新设备采集。|
641
+ |视频分辨率|`localVideoQuality`、`updateVideoQuality`、`VideoQuality`|建议设置默认值为 `VideoQuality.Quality720P`。|
642
+ |本地镜像|`localMirrorType`、`switchMirror`、`MirrorType`|可提供自动、开启、关闭三个选项。|
643
+ |摄像头预览|`startCameraTest`、`stopCameraTest`|仅在会前或设置面板预览场景使用,离开面板时停止测试。|
644
+
645
+ 【Vue3】
646
+ ``` typescript
647
+ <script setup lang="ts">
648
+ import { onMounted } from 'vue';
649
+ import {
650
+ MirrorType,
651
+ VideoQuality,
652
+ useDeviceState,
653
+ } from 'tuikit-atomicx-vue3/room';
654
+
655
+ const {
656
+ getCameraList,
657
+ setCurrentCamera,
658
+ updateVideoQuality,
659
+ switchMirror,
660
+ } = useDeviceState();
661
+
662
+ onMounted(async () => {
663
+ await getCameraList();
664
+ });
665
+
666
+ async function switchCamera(deviceId: string) {
667
+ await setCurrentCamera({ deviceId });
668
+ }
669
+
670
+ async function setVideoQuality(quality: VideoQuality) {
671
+ await updateVideoQuality({ quality });
672
+ }
673
+
674
+ async function setMirror(mirror: MirrorType) {
675
+ await switchMirror({ mirror });
676
+ }
677
+ </script>
678
+ ```
679
+
680
+ 【React】
681
+ ``` typescript
682
+ import { useEffect } from 'react';
683
+ import {
684
+ MirrorType,
685
+ VideoQuality,
686
+ useDeviceState,
687
+ } from 'tuikit-atomicx-react/room';
688
+
689
+ function VideoSettings() {
690
+ const {
691
+ getCameraList,
692
+ setCurrentCamera,
693
+ updateVideoQuality,
694
+ switchMirror,
695
+ } = useDeviceState();
696
+
697
+ useEffect(() => {
698
+ getCameraList();
699
+ }, []);
700
+
701
+ async function switchCamera(deviceId: string) {
702
+ await setCurrentCamera({ deviceId });
703
+ }
704
+
705
+ async function setVideoQuality(quality: VideoQuality) {
706
+ await updateVideoQuality({ quality });
707
+ }
708
+
709
+ async function setMirror(mirror: MirrorType) {
710
+ await switchMirror({ mirror });
711
+ }
712
+ }
713
+ ```
714
+
715
+ ### H5 设备设置面板
716
+
717
+ 移动端 H5 设备能力受系统和浏览器限制较多,建议设计更轻量的设置入口。
718
+
719
+ #### H5 音频设置
720
+
721
+ H5 建议只保留麦克风开关和必要的错误提示,不展示麦克风设备列表、扬声器设备列表或扬声器切换入口。会中开麦/闭麦仍建议沿用“预采集 + 静音”的方式。
722
+
723
+ 【Vue3】
724
+ ``` typescript
725
+ <script setup lang="ts">
726
+ import { ref } from 'vue';
727
+ import { useDeviceState, useRoomParticipantState } from 'tuikit-atomicx-vue3/room';
728
+
729
+ const { openLocalMicrophone } = useDeviceState();
730
+ const { muteMicrophone, unmuteMicrophone } = useRoomParticipantState();
731
+
732
+ const isMicrophoneMuted = ref(true);
733
+
734
+ async function prepareH5Microphone() {
735
+ await muteMicrophone();
736
+ await openLocalMicrophone();
737
+ isMicrophoneMuted.value = true;
738
+ }
739
+
740
+ async function toggleH5MicrophoneForSpeaking() {
741
+ if (isMicrophoneMuted.value) {
742
+ await unmuteMicrophone();
743
+ isMicrophoneMuted.value = false;
744
+ } else {
745
+ await muteMicrophone();
746
+ isMicrophoneMuted.value = true;
747
+ }
748
+ }
749
+ </script
750
+ ```
751
+
752
+ 【React】
753
+ ``` typescript
754
+ import { useState } from 'react';
755
+ import { useDeviceState, useRoomParticipantState } from 'tuikit-atomicx-react/room';
756
+
757
+ function H5AudioSettings() {
758
+ const { openLocalMicrophone } = useDeviceState();
759
+ const { muteMicrophone, unmuteMicrophone } = useRoomParticipantState();
760
+
761
+ const [isMicrophoneMuted, setIsMicrophoneMuted] = useState(true);
762
+
763
+ async function prepareH5Microphone() {
764
+ await muteMicrophone();
765
+ await openLocalMicrophone();
766
+ setIsMicrophoneMuted(true);
767
+ }
768
+
769
+ async function toggleH5MicrophoneForSpeaking() {
770
+ if (isMicrophoneMuted) {
771
+ await unmuteMicrophone();
772
+ setIsMicrophoneMuted(false);
773
+ } else {
774
+ await muteMicrophone();
775
+ setIsMicrophoneMuted(true);
776
+ }
777
+ }
778
+ }
779
+ ```
780
+
781
+ #### H5 视频设置
782
+
783
+ H5 视频设置建议保留摄像头开关、前后置摄像头切换和少量分辨率选项。
784
+
785
+ 【Vue3】
786
+ ``` typescript
787
+ <script setup lang="ts">
788
+ import {
789
+ DeviceStatus,
790
+ VideoQuality,
791
+ useDeviceState,
792
+ } from 'tuikit-atomicx-vue3/room';
793
+
794
+ const {
795
+ cameraStatus,
796
+ isFrontCamera,
797
+ openLocalCamera,
798
+ closeLocalCamera,
799
+ switchCamera,
800
+ updateVideoQuality,
801
+ } = useDeviceState();
802
+
803
+ async function toggleH5Camera() {
804
+ if (cameraStatus.value === DeviceStatus.On) {
805
+ await closeLocalCamera();
806
+ } else {
807
+ await openLocalCamera();
808
+ }
809
+ }
810
+
811
+ async function switchH5Camera() {
812
+ await switchCamera({ isFrontCamera: !isFrontCamera.value });
813
+ }
814
+
815
+ async function setSmoothQuality() {
816
+ await updateVideoQuality({ quality: VideoQuality.Quality360P });
817
+ }
818
+
819
+ async function setHighQuality() {
820
+ await updateVideoQuality({ quality: VideoQuality.Quality720P });
821
+ }
822
+ </script>
823
+ ```
824
+
825
+ 【React】
826
+ ``` typescript
827
+ import {
828
+ DeviceStatus,
829
+ VideoQuality,
830
+ useDeviceState,
831
+ } from 'tuikit-atomicx-react/room';
832
+
833
+ function H5VideoSettings() {
834
+ const {
835
+ cameraStatus,
836
+ isFrontCamera,
837
+ openLocalCamera,
838
+ closeLocalCamera,
839
+ switchCamera,
840
+ updateVideoQuality,
841
+ } = useDeviceState();
842
+
843
+ async function toggleH5Camera() {
844
+ if (cameraStatus === DeviceStatus.On) {
845
+ await closeLocalCamera();
846
+ } else {
847
+ await openLocalCamera();
848
+ }
849
+ }
850
+
851
+ async function switchH5Camera() {
852
+ await switchCamera({ isFrontCamera: !isFrontCamera });
853
+ }
854
+
855
+ async function setSmoothQuality() {
856
+ await updateVideoQuality({ quality: VideoQuality.Quality360P });
857
+ }
858
+
859
+ async function setHighQuality() {
860
+ await updateVideoQuality({ quality: VideoQuality.Quality720P });
861
+ }
862
+ }
863
+ ```
864
+
865
+ ## 场景四:结合会控实现设备权限管理
866
+
867
+ 在会议、在线课堂、医疗会诊等场景中,房主或管理员可能需要禁用全员设备、处理开麦/开摄像头申请,或邀请成员开启设备。该能力需要结合 `useRoomParticipantState` 和 `useDeviceState` 使用,前者负责权限控制、申请、邀请和事件监听,后者负责真正打开或关闭本地设备。
868
+
869
+ ### 房主/管理员禁用全体设备
870
+
871
+ 房主或管理员可以通过 `disableAllDevices` 禁用或启用全体成员的麦克风、摄像头或屏幕分享。禁用全体设备后,普通成员不能自行开启对应设备,房主和管理员不受该限制。
872
+
873
+ 【Vue3】
874
+ ``` typescript
875
+ import {
876
+ DeviceType,
877
+ useRoomParticipantState,
878
+ } from 'tuikit-atomicx-vue3/room';
879
+
880
+ const { disableAllDevices } = useRoomParticipantState();
881
+
882
+ async function disableAllMicrophones() {
883
+ await disableAllDevices({
884
+ deviceType: DeviceType.Microphone,
885
+ disable: true,
886
+ });
887
+ }
888
+
889
+ async function enableAllMicrophones() {
890
+ await disableAllDevices({
891
+ deviceType: DeviceType.Microphone,
892
+ disable: false,
893
+ });
894
+ }
895
+
896
+ async function disableAllCameras() {
897
+ await disableAllDevices({
898
+ deviceType: DeviceType.Camera,
899
+ disable: true,
900
+ });
901
+ }
902
+ ```
903
+
904
+ 【React】
905
+ ``` typescript
906
+ import {
907
+ DeviceType,
908
+ useRoomParticipantState,
909
+ } from 'tuikit-atomicx-react/room';
910
+
911
+ function AdminDeviceControl() {
912
+ const { disableAllDevices } = useRoomParticipantState();
913
+
914
+ async function disableAllMicrophones() {
915
+ await disableAllDevices({
916
+ deviceType: DeviceType.Microphone,
917
+ disable: true,
918
+ });
919
+ }
920
+
921
+ async function enableAllMicrophones() {
922
+ await disableAllDevices({
923
+ deviceType: DeviceType.Microphone,
924
+ disable: false,
925
+ });
926
+ }
927
+
928
+ async function disableAllCameras() {
929
+ await disableAllDevices({
930
+ deviceType: DeviceType.Camera,
931
+ disable: true,
932
+ });
933
+ }
934
+ }
935
+ ```
936
+
937
+ ### 普通成员申请开启设备
938
+
939
+ 当房间处于全员禁麦或禁摄像头状态时,普通成员点击开麦或开摄像头,应先向房主和管理员申请。
940
+
941
+ 【Vue3】
942
+ ``` typescript
943
+ <script setup lang="ts">
944
+ import { onBeforeUnmount, onMounted } from 'vue';
945
+ import {
946
+ DeviceType,
947
+ RoomParticipantRole,
948
+ RoomParticipantEvent,
949
+ useDeviceState,
950
+ useRoomParticipantState,
951
+ useRoomState,
952
+ } from 'tuikit-atomicx-vue3/room';
953
+
954
+ const { currentRoom } = useRoomState();
955
+ const { openLocalMicrophone } = useDeviceState();
956
+ const {
957
+ localParticipant,
958
+ unmuteMicrophone,
959
+ requestToOpenDevice,
960
+ subscribeEvent,
961
+ unsubscribeEvent,
962
+ } = useRoomParticipantState();
963
+
964
+ async function handleOpenMicrophone() {
965
+ if (currentRoom.value?.isAllMicrophoneDisabled && localParticipant.value.role === RoomParticipantRole.GeneralUser) {
966
+ await requestToOpenDevice({
967
+ device: DeviceType.Microphone,
968
+ timeout: 60,
969
+ });
970
+ console.log('已向管理员发送开启麦克风申请');
971
+ return;
972
+ }
973
+ }
974
+
975
+ async function onDeviceRequestApproved({ request }: { request: { deviceType: DeviceType } }) {
976
+ if (request.deviceType === DeviceType.Microphone) {
977
+ await openLocalMicrophone();
978
+ await unmuteMicrophone();
979
+ } else if (request.deviceType === DeviceType.Camera) {
980
+ await openLocalCamera();
981
+ }
982
+ }
983
+
984
+ onMounted(() => {
985
+ subscribeEvent(RoomParticipantEvent.onDeviceRequestApproved, onDeviceRequestApproved);
986
+ });
987
+
988
+ onBeforeUnmount(() => {
989
+ unsubscribeEvent(RoomParticipantEvent.onDeviceRequestApproved, onDeviceRequestApproved);
990
+ });
991
+ </script>
992
+ ```
993
+
994
+ 【React】
995
+ ``` typescript
996
+ import { useEffect } from 'react';
997
+ import {
998
+ DeviceType,
999
+ RoomParticipantRole,
1000
+ RoomParticipantEvent,
1001
+ useDeviceState,
1002
+ useRoomParticipantState,
1003
+ useRoomState,
1004
+ } from 'tuikit-atomicx-react/room';
1005
+
1006
+ function MemberDeviceRequest() {
1007
+ const { currentRoom } = useRoomState();
1008
+ const { openLocalMicrophone } = useDeviceState();
1009
+ const {
1010
+ localParticipant,
1011
+ unmuteMicrophone,
1012
+ requestToOpenDevice,
1013
+ subscribeEvent,
1014
+ unsubscribeEvent,
1015
+ } = useRoomParticipantState();
1016
+
1017
+ async function handleOpenMicrophone() {
1018
+ if (currentRoom?.isAllMicrophoneDisabled && localParticipant.role === RoomParticipantRole.GeneralUser) {
1019
+ await requestToOpenDevice({
1020
+ device: DeviceType.Microphone,
1021
+ timeout: 60,
1022
+ });
1023
+ console.log('已向管理员发送开启麦克风申请');
1024
+ return;
1025
+ }
1026
+ }
1027
+
1028
+ async function onDeviceRequestApproved({ request }: { request: { deviceType: DeviceType } }) {
1029
+ if (request.deviceType === DeviceType.Microphone) {
1030
+ await openLocalMicrophone();
1031
+ await unmuteMicrophone();
1032
+ } else if (request.deviceType === DeviceType.Camera) {
1033
+ await openLocalCamera();
1034
+ }
1035
+ }
1036
+
1037
+ useEffect(() => {
1038
+ subscribeEvent(RoomParticipantEvent.onDeviceRequestApproved, onDeviceRequestApproved);
1039
+ return () => {
1040
+ unsubscribeEvent(RoomParticipantEvent.onDeviceRequestApproved, onDeviceRequestApproved);
1041
+ };
1042
+ }, []);
1043
+ }
1044
+ ```
1045
+
1046
+ ### 管理员处理设备开启申请
1047
+
1048
+ 管理员可以监听 `RoomParticipantEvent.onDeviceRequestReceived`,收到普通成员的设备开启申请后,调用 `approveOpenDeviceRequest` 或 `rejectOpenDeviceRequest` 处理。
1049
+
1050
+ 【Vue3】
1051
+ ``` typescript
1052
+ <script setup lang="ts">
1053
+ import { onMounted, onUnmounted } from 'vue';
1054
+ import {
1055
+ DeviceType,
1056
+ RoomParticipantEvent,
1057
+ useRoomParticipantState,
1058
+ } from 'tuikit-atomicx-vue3/room';
1059
+ import { TUIMessageBox } from '@tencentcloud/uikit-base-component-vue3';
1060
+
1061
+ type DeviceRequest = {
1062
+ deviceType: DeviceType;
1063
+ sender: {
1064
+ userId: string;
1065
+ userName?: string;
1066
+ };
1067
+ };
1068
+
1069
+ const {
1070
+ subscribeEvent,
1071
+ unsubscribeEvent,
1072
+ approveOpenDeviceRequest,
1073
+ rejectOpenDeviceRequest,
1074
+ } = useRoomParticipantState();
1075
+
1076
+ function getDeviceName(device: DeviceType) {
1077
+ if (device === DeviceType.Microphone) return '麦克风';
1078
+ if (device === DeviceType.Camera) return '摄像头';
1079
+ return '屏幕分享';
1080
+ }
1081
+
1082
+ function onDeviceRequestReceived({ request }: { request: DeviceRequest }) {
1083
+ TUIMessageBox.confirm({
1084
+ title: '设备开启申请',
1085
+ content: `${request.sender.userName || request.sender.userId} 申请开启${getDeviceName(request.deviceType)}`,
1086
+ callback: async (action) => {
1087
+ if (action === 'confirm') {
1088
+ await approveOpenDeviceRequest({
1089
+ userId: request.sender.userId,
1090
+ device: request.deviceType,
1091
+ });
1092
+ } else {
1093
+ await rejectOpenDeviceRequest({
1094
+ userId: request.sender.userId,
1095
+ device: request.deviceType,
1096
+ });
1097
+ }
1098
+ },
1099
+ });
1100
+ }
1101
+
1102
+ onMounted(() => {
1103
+ subscribeEvent(RoomParticipantEvent.onDeviceRequestReceived, onDeviceRequestReceived);
1104
+ });
1105
+
1106
+ onUnmounted(() => {
1107
+ unsubscribeEvent(RoomParticipantEvent.onDeviceRequestReceived, onDeviceRequestReceived);
1108
+ });
1109
+ </script>
1110
+ ```
1111
+
1112
+ 【React】
1113
+ ``` typescript
1114
+ import { useEffect } from 'react';
1115
+ import {
1116
+ DeviceType,
1117
+ RoomParticipantEvent,
1118
+ useRoomParticipantState,
1119
+ } from 'tuikit-atomicx-react/room';
1120
+ import { TUIMessageBox } from '@tencentcloud/uikit-base-component-react';
1121
+
1122
+ type DeviceRequest = {
1123
+ deviceType: DeviceType;
1124
+ sender: {
1125
+ userId: string;
1126
+ userName?: string;
1127
+ };
1128
+ };
1129
+
1130
+ function AdminDeviceRequestHandler() {
1131
+ const {
1132
+ subscribeEvent,
1133
+ unsubscribeEvent,
1134
+ approveOpenDeviceRequest,
1135
+ rejectOpenDeviceRequest,
1136
+ } = useRoomParticipantState();
1137
+
1138
+ function getDeviceName(device: DeviceType) {
1139
+ if (device === DeviceType.Microphone) return '麦克风';
1140
+ if (device === DeviceType.Camera) return '摄像头';
1141
+ return '屏幕分享';
1142
+ }
1143
+
1144
+ function onDeviceRequestReceived({ request }: { request: DeviceRequest }) {
1145
+ TUIMessageBox.confirm({
1146
+ title: '设备开启申请',
1147
+ content: `${request.sender.userName || request.sender.userId} 申请开启${getDeviceName(request.deviceType)}`,
1148
+ callback: async (action) => {
1149
+ if (action === 'confirm') {
1150
+ await approveOpenDeviceRequest({
1151
+ userId: request.sender.userId,
1152
+ device: request.deviceType,
1153
+ });
1154
+ } else {
1155
+ await rejectOpenDeviceRequest({
1156
+ userId: request.sender.userId,
1157
+ device: request.deviceType,
1158
+ });
1159
+ }
1160
+ },
1161
+ });
1162
+ }
1163
+
1164
+ useEffect(() => {
1165
+ subscribeEvent(RoomParticipantEvent.onDeviceRequestReceived, onDeviceRequestReceived);
1166
+ return () => {
1167
+ unsubscribeEvent(RoomParticipantEvent.onDeviceRequestReceived, onDeviceRequestReceived);
1168
+ };
1169
+ }, []);
1170
+ }
1171
+ ```
1172
+
1173
+ ### 管理员邀请成员开启设备
1174
+
1175
+ 管理员也可以邀请指定成员开启麦克风、摄像头或屏幕分享。邀请不是强制开启,成员接受后才会打开本地设备。
1176
+
1177
+ > **说明:**
1178
+ >
1179
+
1180
+ > 邀请开启设备需要尊重用户授权。即使用户接受邀请,浏览器仍可能弹出系统权限确认;如果用户拒绝授权,设备仍无法打开。
1181
+ >
1182
+
1183
+ 【Vue3】
1184
+ ``` typescript
1185
+ import { onMounted, onUnmounted } from 'vue';
1186
+ import {
1187
+ DeviceType,
1188
+ RoomParticipantEvent,
1189
+ useDeviceState,
1190
+ useRoomParticipantState,
1191
+ } from 'tuikit-atomicx-vue3/room';
1192
+
1193
+ const { openLocalMicrophone, openLocalCamera } = useDeviceState();
1194
+ const {
1195
+ inviteToOpenDevice,
1196
+ acceptOpenDeviceInvitation,
1197
+ declineOpenDeviceInvitation,
1198
+ subscribeEvent,
1199
+ unsubscribeEvent,
1200
+ } = useRoomParticipantState();
1201
+
1202
+ async function inviteUserToOpenMicrophone(userId: string) {
1203
+ await inviteToOpenDevice({
1204
+ userId,
1205
+ device: DeviceType.Microphone,
1206
+ timeout: 60,
1207
+ });
1208
+ }
1209
+
1210
+ async function onDeviceInvitationReceived({
1211
+ invitation,
1212
+ }: {
1213
+ invitation: {
1214
+ sender: { userId: string };
1215
+ deviceType: DeviceType;
1216
+ };
1217
+ }) {
1218
+ const shouldAccept = window.confirm('管理员邀请您开启设备,是否同意?');
1219
+ if (!shouldAccept) {
1220
+ await declineOpenDeviceInvitation({
1221
+ userId: invitation.sender.userId,
1222
+ device: invitation.deviceType,
1223
+ });
1224
+ return;
1225
+ }
1226
+
1227
+ await acceptOpenDeviceInvitation({
1228
+ userId: invitation.sender.userId,
1229
+ device: invitation.deviceType,
1230
+ });
1231
+
1232
+ if (invitation.deviceType === DeviceType.Microphone) {
1233
+ await openLocalMicrophone();
1234
+ }
1235
+ if (invitation.deviceType === DeviceType.Camera) {
1236
+ await openLocalCamera();
1237
+ }
1238
+ }
1239
+
1240
+ onMounted(() => {
1241
+ subscribeEvent(RoomParticipantEvent.onDeviceInvitationReceived, onDeviceInvitationReceived);
1242
+ });
1243
+
1244
+ onUnmounted(() => {
1245
+ unsubscribeEvent(RoomParticipantEvent.onDeviceInvitationReceived, onDeviceInvitationReceived);
1246
+ });
1247
+ ```
1248
+
1249
+ 【React】
1250
+ ``` typescript
1251
+ import { useEffect } from 'react';
1252
+ import {
1253
+ DeviceType,
1254
+ RoomParticipantEvent,
1255
+ useDeviceState,
1256
+ useRoomParticipantState,
1257
+ } from 'tuikit-atomicx-react/room';
1258
+
1259
+ function DeviceInvitationHandler() {
1260
+ const { openLocalMicrophone, openLocalCamera } = useDeviceState();
1261
+ const {
1262
+ inviteToOpenDevice,
1263
+ acceptOpenDeviceInvitation,
1264
+ declineOpenDeviceInvitation,
1265
+ subscribeEvent,
1266
+ unsubscribeEvent,
1267
+ } = useRoomParticipantState();
1268
+
1269
+ async function inviteUserToOpenMicrophone(userId: string) {
1270
+ await inviteToOpenDevice({
1271
+ userId,
1272
+ device: DeviceType.Microphone,
1273
+ timeout: 60,
1274
+ });
1275
+ }
1276
+
1277
+ async function onDeviceInvitationReceived({
1278
+ invitation,
1279
+ }: {
1280
+ invitation: {
1281
+ sender: { userId: string };
1282
+ deviceType: DeviceType;
1283
+ };
1284
+ }) {
1285
+ const shouldAccept = window.confirm('管理员邀请您开启设备,是否同意?');
1286
+ if (!shouldAccept) {
1287
+ await declineOpenDeviceInvitation({
1288
+ userId: invitation.sender.userId,
1289
+ device: invitation.deviceType,
1290
+ });
1291
+ return;
1292
+ }
1293
+
1294
+ await acceptOpenDeviceInvitation({
1295
+ userId: invitation.sender.userId,
1296
+ device: invitation.deviceType,
1297
+ });
1298
+
1299
+ if (invitation.deviceType === DeviceType.Microphone) {
1300
+ await openLocalMicrophone();
1301
+ }
1302
+ if (invitation.deviceType === DeviceType.Camera) {
1303
+ await openLocalCamera();
1304
+ }
1305
+ }
1306
+
1307
+ useEffect(() => {
1308
+ subscribeEvent(RoomParticipantEvent.onDeviceInvitationReceived, onDeviceInvitationReceived);
1309
+ return () => {
1310
+ unsubscribeEvent(RoomParticipantEvent.onDeviceInvitationReceived, onDeviceInvitationReceived);
1311
+ };
1312
+ }, []);
1313
+ }
1314
+ ```
1315
+
1316
+ ## 场景五:网络质量监控
1317
+
1318
+ 会议中需要向用户展示本地网络质量,例如“网络良好”“网络较差”“连接异常”,并在需要时展示延迟和丢包率等详细信息。
1319
+
1320
+ ### 实现思路
1321
+
1322
+ 使用 `useDeviceState` 中的 [networkInfo](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#networkInfo) 获取本地用户网络状态。
1323
+
1324
+ > **说明:**
1325
+ >
1326
+
1327
+ > 仅当本地用户通过 `joinRoom` 或 `createAndJoinRoom` 加入房间,并且打开麦克风或摄像头后,`networkInfo` 中才可以拿到有效数据。未入会或未开启音视频采集时,建议展示“未知”或不展示网络状态。
1328
+ >
1329
+
1330
+ |**字段**|**含义**|**展示建议**|
1331
+ |---------|---------|---------|
1332
+ |`quality`|网络质量等级。|可映射为“优秀、良好、一般、差、很差、断开”。|
1333
+ |`delay`|网络延迟,单位 ms。|可在详情面板中展示。|
1334
+ |`upLoss`|上行丢包率。|可在详情面板中展示。|
1335
+ |`downLoss`|下行丢包率。|可在详情面板中展示。|
1336
+
1337
+ 【Vue3】
1338
+ ``` typescript
1339
+ <script setup lang="ts">
1340
+ import { computed } from 'vue';
1341
+ import { NetworkQuality, useDeviceState } from 'tuikit-atomicx-vue3/room';
1342
+
1343
+ const { networkInfo } = useDeviceState();
1344
+
1345
+ const networkText = computed(() => {
1346
+ switch (networkInfo.value?.quality) {
1347
+ case NetworkQuality.Excellent:
1348
+ return '优秀';
1349
+ case NetworkQuality.Good:
1350
+ return '良好';
1351
+ case NetworkQuality.Poor:
1352
+ return '一般';
1353
+ case NetworkQuality.Bad:
1354
+ return '差';
1355
+ case NetworkQuality.VeryBad:
1356
+ return '很差';
1357
+ case NetworkQuality.Down:
1358
+ return '断开';
1359
+ default:
1360
+ return '未知';
1361
+ }
1362
+ });
1363
+ </script>
1364
+ ```
1365
+
1366
+ 【React】
1367
+ ``` typescript
1368
+ import { useMemo } from 'react';
1369
+ import { NetworkQuality, useDeviceState } from 'tuikit-atomicx-react/room';
1370
+
1371
+ function NetworkStatus() {
1372
+ const { networkInfo } = useDeviceState();
1373
+
1374
+ const networkText = useMemo(() => {
1375
+ switch (networkInfo?.quality) {
1376
+ case NetworkQuality.Excellent:
1377
+ return '优秀';
1378
+ case NetworkQuality.Good:
1379
+ return '良好';
1380
+ case NetworkQuality.Poor:
1381
+ return '一般';
1382
+ case NetworkQuality.Bad:
1383
+ return '差';
1384
+ case NetworkQuality.VeryBad:
1385
+ return '很差';
1386
+ case NetworkQuality.Down:
1387
+ return '断开';
1388
+ default:
1389
+ return '未知';
1390
+ }
1391
+ }, [networkInfo]);
1392
+ }
1393
+ ```
1394
+
1395
+ ## 错误码与异常处理
1396
+
1397
+ 设备操作失败时,您可以通过 `cameraLastError` 和 `microphoneLastError` 获取最近一次摄像头或麦克风错误。
1398
+
1399
+ ### 错误码枚举
1400
+
1401
+ |**错误枚举**|**含义**|**常见触发场景**|**建议处理方式**|
1402
+ |---------|---------|---------|---------|
1403
+ |`DeviceError.NoError`|无错误。|设备操作成功。|无需处理。|
1404
+ |`DeviceError.NoSystemPermission`|系统或浏览器权限未开启。|用户拒绝摄像头/麦克风权限,或系统权限关闭。|提示用户在浏览器或系统设置中开启权限。|
1405
+ |`DeviceError.NoDeviceDetected`|未检测到设备。|电脑未连接摄像头或麦克风,设备被系统禁用。|提示用户检查设备连接或系统设备设置。|
1406
+ |`DeviceError.OccupiedError`|设备被占用。|摄像头或麦克风正在被其他应用使用。|提示用户关闭其他占用设备的应用后重试。|
1407
+ |`DeviceError.NotSupportCapture`|当前环境不支持采集。|浏览器不支持 WebRTC 采集能力,或当前环境受限。|提示用户更换浏览器或设备环境。|
1408
+ |`DeviceError.UnknownError`|未知错误。|非预期设备错误。|提示用户重试,并收集日志排查。|
1409
+
1410
+ ### 统一错误处理示例
1411
+
1412
+ 【Vue3】
1413
+ ``` typescript
1414
+ import { DeviceError } from 'tuikit-atomicx-vue3/room';
1415
+
1416
+ function getDeviceErrorMessage(error: DeviceError, deviceName: '摄像头' | '麦克风') {
1417
+ switch (error) {
1418
+ case DeviceError.NoSystemPermission:
1419
+ return `${deviceName}权限被拒绝,请在浏览器或系统设置中开启权限`;
1420
+ case DeviceError.NoDeviceDetected:
1421
+ return `未检测到${deviceName}设备,请检查设备连接`;
1422
+ case DeviceError.OccupiedError:
1423
+ return `${deviceName}被其他应用占用,请关闭相关应用后重试`;
1424
+ case DeviceError.NotSupportCapture:
1425
+ return `当前浏览器不支持${deviceName}采集,请更换浏览器`;
1426
+ case DeviceError.UnknownError:
1427
+ return `${deviceName}操作失败,请稍后重试`;
1428
+ default:
1429
+ return '';
1430
+ }
1431
+ }
1432
+ ```
1433
+
1434
+ 【React】
1435
+ ``` typescript
1436
+ import { DeviceError } from 'tuikit-atomicx-react/room';
1437
+
1438
+ function getDeviceErrorMessage(error: DeviceError, deviceName: '摄像头' | '麦克风') {
1439
+ switch (error) {
1440
+ case DeviceError.NoSystemPermission:
1441
+ return `${deviceName}权限被拒绝,请在浏览器或系统设置中开启权限`;
1442
+ case DeviceError.NoDeviceDetected:
1443
+ return `未检测到${deviceName}设备,请检查设备连接`;
1444
+ case DeviceError.OccupiedError:
1445
+ return `${deviceName}被其他应用占用,请关闭相关应用后重试`;
1446
+ case DeviceError.NotSupportCapture:
1447
+ return `当前浏览器不支持${deviceName}采集,请更换浏览器`;
1448
+ case DeviceError.UnknownError:
1449
+ return `${deviceName}操作失败,请稍后重试`;
1450
+ default:
1451
+ return '';
1452
+ }
1453
+ }
1454
+ ```
1455
+
1456
+ ## API 文档
1457
+
1458
+ |**State/Component**|**功能描述**|**API 文档**|
1459
+ |---------|---------|---------|
1460
+ |**useDeviceState**|包含音视频设备状态、设备列表、设备操作接口和本地网络质量数据。|[API 文档](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-DeviceState)|
1461
+ |**useRoomParticipantState**|包含成员角色、成员状态、会控能力、设备申请和设备邀请能力。|[API 文档](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-RoomParticipantState)|
1462
+ |**useRoomState**|包含当前房间状态,可用于判断用户是否已经入会以及房间会控状态。|[API 文档](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-RoomState)|
1463
+
1464
+ ## 常见问题
1465
+
1466
+ ### 本地开发时音视频功能正常,但部署到线上环境后无法采集摄像头或麦克风?
1467
+
1468
+ 浏览器出于安全和隐私保护的考虑,对音视频设备采集有严格限制。只有在安全环境下,采集操作才会被允许。安全环境协议包括 `https://`、`localhost`、`file://` 等。HTTP 协议被视为不安全,浏览器会默认禁止其访问媒体设备。
1469
+
1470
+ 如果本地测试正常,但部署后出现采集失败,请检查页面是否部署在 HTTP 协议上。必须使用 HTTPS 协议部署页面,并确保具备有效的安全证书。更多关于 URL 域名及协议的限制详情,请参见 [URL 域名及协议限制说明](https://cloud.tencent.com/document/product/647/17249#URL-.E5.9F.9F.E5.90.8D.E5.8D.8F.E8.AE.AE.E9.99.90.E5.88.B6)。
1471
+
1472
+ ### 为什么移动端 H5 不能切换麦克风或扬声器?
1473
+
1474
+ 移动端浏览器通常不开放完整的音频输入和输出设备选择能力,因此 H5 不建议提供麦克风设备列表和扬声器设备列表。建议移动端只保留麦克风开关、摄像头开关、前后置摄像头切换等核心入口。
1475
+
1476
+ ### 为什么扬声器列表为空或切换失败?
1477
+
1478
+ 扬声器设备枚举和切换依赖浏览器能力。部分浏览器可能不支持播放设备选择,或者需要用户授权后才能返回完整设备信息。当扬声器列表为空或切换失败时,建议提示用户通过系统声音设置切换输出设备。
1479
+
1480
+ ### 为什么 `networkInfo` 没有网络质量数据?
1481
+
1482
+ `networkInfo` 仅在用户已经加入房间,并且打开摄像头或麦克风后才会返回有效数据。未入会、未开启音视频采集或网络质量尚未上报时,建议展示“未知”或不展示网络状态。
1483
+
1484
+ ### 如果用户的电脑无麦克风、扬声器或摄像头,是否可以进入音视频房间?
1485
+
1486
+ 可以。用户即使缺少麦克风、扬声器或摄像头,也可以调用 `joinRoom` 进入房间,但会受到以下限制:
1487
+ - **无法开启媒体采集:**调用 `openLocalMicrophone` 或 `openLocalCamera` 会触发异步错误,`microphoneLastError` 或 `cameraLastError` 返回 `DeviceError.NoDeviceDetected`。
1488
+
1489
+ - **采集端受限:**无法通过本端设备采集并传输声音或画面。
1490
+
1491
+ - **播放端受限:**如果缺少扬声器设备,用户将无法听到房间内其他成员的音频。
1492
+
1493
+ 如果业务支持仅观看模式,用户仍可以观看远端视频流或屏幕共享画面。
1494
+
1495
+ ### 如何实现设备热插拔检测?
1496
+
1497
+ 无 UI SDK 已经内置设备热插拔检测能力。当媒体设备插拔时,设备列表和当前设备数据会自动更新。业务层只需要基于 `cameraList`、`microphoneList`、`speakerList`、`currentCamera`、`currentMicrophone`、`currentSpeaker` 等响应式数据更新 UI。
1498
+
1499
+ ### 是否支持使用 iframe 集成?
1500
+
1501
+ 支持。使用 `iframe` 集成无 UI SDK 时,需要在 iframe 标签中配置 `allow` 属性以授予必要的浏览器权限。
1502
+ ``` typescript
1503
+ <iframe allow="microphone; camera; display-capture; fullscreen;"></iframe>
1504
+ ```