@tencentcloud/sdk-mcp 1.7.2 → 1.7.4

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 (135) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +25 -17
  3. package/knowledge/bm25.js +20 -11
  4. package/knowledge/path-meta.js +23 -1
  5. package/knowledge/search/generic-rerank.js +123 -0
  6. package/knowledge/search/search-pass.js +8 -1
  7. package/package.json +1 -1
  8. package/resource/_schema/query-normalization.yaml +6 -0
  9. package/resource/index/manifest.json +1 -1
  10. package/resource/integration/callkit/preset/android/integration.md +4 -0
  11. package/resource/integration/callkit/preset/flutter/integration.md +4 -0
  12. package/resource/integration/callkit/preset/ios/integration.md +14 -13
  13. package/resource/integration/callkit/preset/vue/integration.md +0 -3
  14. package/resource/integration/chat/preset/android/integration.md +35 -173
  15. package/resource/integration/chat/preset/flutter/integration.md +113 -220
  16. package/resource/integration/chat/preset/ios/integration.md +2 -269
  17. package/resource/integration/chat/preset/react/integration.md +27 -1
  18. package/resource/integration/chat/preset/uni-app/integration.md +5 -1
  19. package/resource/integration/chat/preset/vue/integration.md +21 -31
  20. package/resource/integration/livekit/preset/live/android/live-host-integration.md +4 -0
  21. package/resource/integration/livekit/preset/live/ios/live-host-integration.md +4 -0
  22. package/resource/integration/livekit/preset/live/vue/live-list-integration.md +3 -4
  23. package/resource/integration/livekit/preset/live/vue/live-player-desk-integration.md +0 -1
  24. package/resource/integration/livekit/preset/live/vue/live-player-h5-integration.md +0 -1
  25. package/resource/integration/livekit/preset/live/vue/live-pusher-integration.md +4 -9
  26. package/resource/integration/roomkit/preset/vue/integration.md +0 -213
  27. package/resource/knowledge/callkit/best-practice/android/video-chat-dating.md +490 -0
  28. package/resource/knowledge/callkit/best-practice/flutter/android-keep-call-alive-background.md +79 -0
  29. package/resource/knowledge/callkit/best-practice/flutter/background-incoming-call-no-notification.md +99 -0
  30. package/resource/knowledge/callkit/best-practice/flutter/ios-keep-call-alive-background.md +93 -0
  31. package/resource/knowledge/callkit/best-practice/flutter/ios-startup-crash-version-voip.md +68 -0
  32. package/resource/knowledge/callkit/core-sdk/flutter/offline-push.md +1 -1
  33. package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +9 -7
  34. package/resource/knowledge/callkit/core-sdk/ios/make-call.md +10 -7
  35. package/resource/knowledge/callkit/core-sdk/ios/offline-push.md +1 -1
  36. package/resource/knowledge/callkit/core-sdk/miniprogram/call-engine.md +19 -19
  37. package/resource/knowledge/callkit/core-sdk/miniprogram/call-event.md +16 -16
  38. package/resource/knowledge/callkit/core-sdk/uni-app/answer-call.md +0 -84
  39. package/resource/knowledge/callkit/core-sdk/uni-app/make-call.md +0 -102
  40. package/resource/knowledge/callkit/core-sdk/web/call-event.md +2 -2
  41. package/resource/knowledge/callkit/faq/error-code.md +62 -36
  42. package/resource/knowledge/callkit/faq/uniapp-miniprogram.md +1 -1
  43. package/resource/knowledge/callkit/preset/android/api.md +10 -10
  44. package/resource/knowledge/callkit/preset/harmonyos/api.md +362 -0
  45. package/resource/knowledge/callkit/preset/harmonyos/integration.md +322 -0
  46. package/resource/knowledge/callkit/preset/ios/api.md +9 -9
  47. package/resource/knowledge/callkit/preset/miniprogram/api-uniapp.md +293 -0
  48. package/resource/knowledge/callkit/preset/miniprogram/api.md +19 -19
  49. package/resource/knowledge/callkit/preset/miniprogram/integration.md +292 -0
  50. package/resource/knowledge/callkit/preset/miniprogram/uniapp-integration.md +521 -0
  51. package/resource/knowledge/callkit/preset/uni-app/api.md +49 -0
  52. package/resource/knowledge/callkit/preset/uni-app/integration.md +353 -0
  53. package/resource/knowledge/chat/best-practice/common/web-sdk-log-level.md +76 -0
  54. package/resource/knowledge/chat/best-practice/miniprogram/desktop-wechat-miniprogram-error.md +79 -0
  55. package/resource/knowledge/chat/best-practice/miniprogram/login-timeout-2801-diagnosis.md +1 -1
  56. package/resource/knowledge/chat/preset/android-view/integration.md +84 -124
  57. package/resource/knowledge/chat/preset/ios/features/language.md +5 -5
  58. package/resource/knowledge/chat/preset/ios-uikit/integration.md +184 -923
  59. package/resource/knowledge/chat/preset/react/features/search.md +9 -214
  60. package/resource/knowledge/chat/preset/react/h5/integration.md +965 -0
  61. package/resource/knowledge/chat/preset/vue/features/chat-header.md +0 -36
  62. package/resource/knowledge/chat/preset/vue/features/contact-list.md +0 -34
  63. package/resource/knowledge/chat/preset/vue/features/conversation-list.md +0 -39
  64. package/resource/knowledge/chat/preset/vue/features/conversation-preview.md +0 -74
  65. package/resource/knowledge/chat/preset/vue/features/search.md +9 -790
  66. package/resource/knowledge/chat/preset/vue/h5/integration.md +724 -0
  67. package/resource/knowledge/livekit/core-sdk/features/uni-app/live-list.md +0 -167
  68. package/resource/knowledge/livekit/core-sdk/live/android/co-guest-interaction.md +1 -1
  69. package/resource/knowledge/livekit/core-sdk/live/android/host-interaction.md +1 -1
  70. package/resource/knowledge/livekit/core-sdk/live/flutter/co-guest-interaction.md +1 -1
  71. package/resource/knowledge/livekit/core-sdk/live/flutter/host-interaction.md +1 -1
  72. package/resource/knowledge/livekit/core-sdk/live/flutter/integration.md +1 -1
  73. package/resource/knowledge/livekit/core-sdk/live/ios/co-guest-interaction.md +1 -1
  74. package/resource/knowledge/livekit/core-sdk/live/ios/host-interaction.md +1 -1
  75. package/resource/knowledge/livekit/core-sdk/live/ios/integration.md +2 -2
  76. package/resource/knowledge/livekit/core-sdk/live/uni-app/co-guest-interaction.md +1 -66
  77. package/resource/knowledge/livekit/core-sdk/live/uni-app/host-interaction.md +1 -66
  78. package/resource/knowledge/livekit/core-sdk/live/uni-app/integration.md +1 -1
  79. package/resource/knowledge/livekit/core-sdk/voice/android/co-guest-interaction.md +1 -1
  80. package/resource/knowledge/livekit/core-sdk/voice/android/host-interaction.md +2 -2
  81. package/resource/knowledge/livekit/core-sdk/voice/flutter/co-guest-interaction.md +1 -1
  82. package/resource/knowledge/livekit/core-sdk/voice/ios/co-guest-interaction.md +1 -1
  83. package/resource/knowledge/livekit/core-sdk/voice/ios/host-interaction.md +2 -2
  84. package/resource/knowledge/livekit/core-sdk/voice/uni-app/integration.md +2 -2
  85. package/resource/knowledge/livekit/preset/live/vue/features/barrage.md +1 -24
  86. package/resource/knowledge/livekit/preset/live/vue/features/live-audience-list.md +0 -3
  87. package/resource/knowledge/livekit/preset/live/vue/features/live-view.md +0 -5
  88. package/resource/knowledge/push/api-reference/harmonyos.md +9 -9
  89. package/resource/knowledge/push/api-reference/unity.md +10 -10
  90. package/resource/knowledge/push/api-reference/unreal-engine.md +11 -11
  91. package/resource/knowledge/push/config/android/fcm.md +2 -6
  92. package/resource/knowledge/push/integration/android.md +824 -428
  93. package/resource/knowledge/push/integration/donut.md +57 -74
  94. package/resource/knowledge/push/integration/flutter.md +208 -63
  95. package/resource/knowledge/push/integration/harmonyos.md +6 -11
  96. package/resource/knowledge/push/integration/ios.md +44 -99
  97. package/resource/knowledge/push/integration/react-native.md +3 -2
  98. package/resource/knowledge/push/integration/uni-app.md +29 -107
  99. package/resource/knowledge/push/integration/unity.md +3 -2
  100. package/resource/knowledge/push/integration/unreal-engine.md +4 -3
  101. package/resource/knowledge/roomkit/best-practice/vue/screen-share-auto-stop-on-leave.md +62 -0
  102. package/resource/knowledge/roomkit/core-sdk/android/room-state.md +3 -3
  103. package/resource/knowledge/roomkit/core-sdk/android/schedule-room.md +4 -4
  104. package/resource/knowledge/roomkit/core-sdk/flutter/room-state.md +2 -2
  105. package/resource/knowledge/roomkit/core-sdk/flutter/schedule-room.md +4 -4
  106. package/resource/knowledge/roomkit/core-sdk/ios/room-state.md +3 -3
  107. package/resource/knowledge/roomkit/core-sdk/ios/schedule-room.md +4 -4
  108. package/resource/knowledge/roomkit/core-sdk/react/network-proxy.md +84 -0
  109. package/resource/knowledge/roomkit/core-sdk/vue/device-detection.md +0 -9
  110. package/resource/knowledge/roomkit/core-sdk/vue/free-beauty-panel.md +0 -9
  111. package/resource/knowledge/roomkit/core-sdk/vue/network-proxy.md +84 -0
  112. package/resource/knowledge/roomkit/core-sdk/vue/recording.md +245 -0
  113. package/resource/knowledge/roomkit/core-sdk/vue/room-chat.md +0 -3
  114. package/resource/knowledge/roomkit/core-sdk/vue/room-view.md +0 -16
  115. package/resource/knowledge/roomkit/core-sdk/vue/schedule-room.md +0 -3
  116. package/resource/knowledge/roomkit/core-sdk/vue/virtual-background.md +0 -3
  117. package/resource/knowledge/roomkit/core-sdk/vue/whiteboard-annotation.md +181 -0
  118. package/resource/knowledge/roomkit/faq/error-code.md +103 -0
  119. package/resource/knowledge/roomkit/preset/android/integration.md +1 -202
  120. package/resource/knowledge/roomkit/preset/flutter/integration.md +13 -13
  121. package/resource/knowledge/roomkit/preset/harmonyos/integration.md +465 -0
  122. package/resource/knowledge/roomkit/preset/ios/integration.md +0 -201
  123. package/resource/knowledge/roomkit/preset/react/features/network-proxy.md +80 -0
  124. package/resource/knowledge/roomkit/preset/react/integration.md +0 -202
  125. package/resource/knowledge/roomkit/preset/uniapp-app/integration.md +279 -0
  126. package/resource/knowledge/roomkit/preset/vue/features/ai-caption-translation.md +69 -0
  127. package/resource/knowledge/roomkit/preset/vue/features/ai-denoiser.md +67 -0
  128. package/resource/knowledge/roomkit/preset/vue/features/network-proxy.md +80 -0
  129. package/resource/knowledge/roomkit/preset/vue/features/recording.md +85 -0
  130. package/resource/knowledge/roomkit/preset/vue/features/whiteboard-annotation.md +86 -0
  131. package/resource/knowledge/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +25 -6
  132. package/server.js +1 -1
  133. package/utils/preflight-route.js +18 -6
  134. package/utils/report-cls-client.js +1 -1
  135. package/utils/report-es-client.js +1 -1
@@ -79,7 +79,7 @@ fun createAndJoinRoom() {
79
79
  | --- | --- | --- | --- |
80
80
  | <code>roomID</code> | <code>String</code> | 是 | - 字符串类型的房间唯一标识符。<br>- 限制长度为 0-48 字节。<br>- 建议仅包含数字、英文字母(区分大小写)、下划线(_)和连字符(-)。避免使用空格和中文字符。 |
81
81
  | <code>roomType</code> | <code>RoomType</code> | 是 | 房间类型<br>- <code>STANDARD</code>:标准房间(默认值)。<br>- <code>WEBINAR</code>:大型研讨会房间。<br>多人会议场景这里填写 <code>STANDARD</code> 房间类型。 |
82
- | <code>options</code> | <code>CreateRoomOptions</code> | 是 | - 创建房间配置对象。<br>- 详细用法
82
+ | <code>options</code> | <code>CreateRoomOptions</code> | 是 | - 创建房间配置对象。<br>- 详细用法请参考:<a href="#a065626d-21a2-476e-bbaf-65bca29b44d2">CreateRoomOptions 结构体详细说明</a> |
83
83
  | <code>completion</code> | <code>CompletionHandler</code> | 否 | 操作完成回调,用于返回创建和加入房间的结果。若创建失败则会返回错误码和错误信息。 |
84
84
 
85
85
  ##### CreateRoomOptions 结构体详细说明
@@ -225,8 +225,8 @@ fun updateRoomInfo() {
225
225
  | 参数名 | 类型 | 必填 | 说明 |
226
226
  | --- | --- | --- | --- |
227
227
  | <code>roomID</code> | <code>String</code> | 是 | - 字符串类型的房间唯一标识符。<br>- 限制长度为 0-48 字节。<br>- 建议仅包含数字、英文字母(区分大小写)、下划线(_)和连字符(-)。避免使用空格和中文字符。 |
228
- | <code>options</code> | <code>UpdateRoomOptions</code> | 是 | - 更新房间属性配置对象。<br>- 详细用法
229
- | <code>modifyFlagList</code> | <code>List<UpdateRoomOptions.ModifyFlag></code> | 是 | - 更新房间属性修改标志位。目前支持更新<strong>房间名称</strong>、<strong>房间密码</strong>。<br>- 详细用法。 |
228
+ | <code>options</code> | <code>UpdateRoomOptions</code> | 是 | - 更新房间属性配置对象。<br>- 详细用法请参考:<a href="#UpdateRoomOptionsStruct">UpdateRoomOptions 结构体详细说明</a> |
229
+ | <code>modifyFlagList</code> | <code>List<UpdateRoomOptions.ModifyFlag></code> | 是 | - 更新房间属性修改标志位。目前支持更新<strong>房间名称</strong>、<strong>房间密码</strong>。<br>- 详细用法请参考:<a href="#UpdateRoomOptions.ModifyFlag">UpdateRoomOptions.ModifyFlag 详细说明</a>。 |
230
230
  | <code>completion</code> | <code>CompletionHandler</code> | 否 | 操作完成回调,用于返回更新房间信息的结果。若更新失败则会返回错误码和错误信息。 |
231
231
 
232
232
  **UpdateRoomOptions 结构体详细说明**
@@ -78,7 +78,7 @@ fun scheduleRoom() {
78
78
  | 参数名 | 类型 | 必填 | 说明 |
79
79
  | --- | --- | --- | --- |
80
80
  | <code>roomID</code> | <code>String</code> | 是 | - 字符串类型的房间唯一标识符。<br>- 限制长度为 0-48 字节。<br>- 建议仅包含数字、英文字母(区分大小写)、下划线(_)和连字符(-)。避免使用空格和中文字符。 |
81
- | <code>options</code> | <code>ScheduleRoomOptions</code> | 是 | - 创建房间配置对象。<br>- 详细用法。 |
81
+ | <code>options</code> | <code>ScheduleRoomOptions</code> | 是 | - 创建房间配置对象。<br>- 详细用法请参考:<a href="#a065626d-21a2-476e-bbaf-65bca29b44d2">ScheduleRoomOptions 结构体详细说明</a>。 |
82
82
  | <code>completion</code> | <code>CompletionHandler</code> | 否 | 操作完成回调,用于返回预定房间的结果。若预定失败则会返回错误码和错误信息。 |
83
83
 
84
84
  ##### ScheduleRoomOptions 结构体详细说明
@@ -89,7 +89,7 @@ fun scheduleRoom() {
89
89
  | <code>scheduleStartTime</code> | <code>Long</code> | 是 | - 预定的房间开始时间(Unix 时间戳,单位:秒)。<br>- 取值必须大于当前时间。<br>- 推荐设置为未来的整分时间。例如:1736164800(代表 2025-01-06 20:00:00)。 |
90
90
  | <code>scheduleEndTime</code> | <code>Long</code> | 是 | - 预定的房间结束时间(Unix 时间戳,单位:秒)。<br>- 取值必须大于 <code>scheduleStartTime</code>。<br>- 建议根据预期时长设置。例如:<code>scheduleStartTime</code> + 3600(预定 1 小时时长的房间)。 |
91
91
  | <code>reminderSecondsBeforeStart</code> | <code>Int</code> | 否 | - 房间开始前的提醒时间(单位:秒)。用于系统触发开始提醒。<br>- 推荐设置为 300(5分钟)或 900(15分钟),用于在 App 端触发本地通知。 |
92
- | <code>scheduleAttendees</code> | <code>List<String></code> | 否 | - 预定参与者的用户 ID 列表,在预定房间时设置,系统将向这些用户发送预定邀请。<br>- 获取方式。 |
92
+ | <code>scheduleAttendees</code> | <code>List<String></code> | 否 | - 预定参与者的用户 ID 列表,在预定房间时设置,系统将向这些用户发送预定邀请。<br>- 获取方式请参考 <a href="#88039583-8ee8-4662-bf73-d71c3af652fe">获取指定预定房间的参与成员列表</a>。 |
93
93
  | <code>isAllMicrophoneDisabled</code> | <code>Boolean</code> | 否 | 是否全员禁止打开麦克风。开启后,除房主/管理员外,普通参与者默认禁止打开麦克风。<br>- true : 禁止。<br>- false :取消禁止 (默认值)。 |
94
94
  | <code>isAllCameraDisabled</code> | <code>Boolean</code> | 否 | 是否全员禁止打开摄像头。开启后,除房主/管理员外,普通参与者默认禁止打开摄像头。<br>- true : 禁止。<br>- false :取消禁止(默认值)。 |
95
95
  | <code>isAllScreenShareDisabled</code> | <code>Boolean</code> | 否 | 是否全员禁止发起屏幕共享。开启后,仅房主/管理员可进行屏幕共享。<br>- true : 禁止。<br>- false :取消禁止(默认值)。 |
@@ -159,8 +159,8 @@ fun updateScheduledRoom() {
159
159
  | 参数名 | 类型 | 必填 | 说明 |
160
160
  | --- | --- | --- | --- |
161
161
  | <code>roomID</code> | <code>String</code> | 是 | 字符串类型的房间唯一标识符。<br>限制长度为 0-48 字节。<br>建议仅包含数字、英文字母(区分大小写)、下划线(_)和连字符(-)。避免使用空格和中文字符。 |
162
- | <code>options</code> | <code>ScheduleRoomOptions</code> | 是 | 预定房间配置对象。<br>详细用法。 |
163
- | <code>modifyFlagList</code> | <code>List<ScheduleRoomOptions.ModifyFlag></code> | 是 | 更新房间属性修改标志位。目前支持更新<strong>房间名称</strong>、<strong>开始时间</strong>、<strong>结束时间。</strong><br>详细用法。 |
162
+ | <code>options</code> | <code>ScheduleRoomOptions</code> | 是 | 预定房间配置对象。<br>详细用法请参考:<a href="#a065626d-21a2-476e-bbaf-65bca29b44d2">ScheduleRoomOptions 结构体详细说明</a>。 |
163
+ | <code>modifyFlagList</code> | <code>List<ScheduleRoomOptions.ModifyFlag></code> | 是 | 更新房间属性修改标志位。目前支持更新<strong>房间名称</strong>、<strong>开始时间</strong>、<strong>结束时间。</strong><br>详细用法请参考:<a href="#ScheduleRoomOptions.ModifyFlag">ScheduleRoomOptions.ModifyFlag 详细说明</a>。 |
164
164
  | <code>completion</code> | <code>CompletionHandler</code> | 否 | 操作完成回调,用于返回更新预定房间的结果。若更新失败则会返回错误码和错误信息。 |
165
165
 
166
166
  **ScheduleRoomOptions.ModifyFlag 详细说明**
@@ -205,8 +205,8 @@ Future<void> updateRoomInfo() async {
205
205
  | 参数名 | 类型 | 必填 | 说明 |
206
206
  | --- | --- | --- | --- |
207
207
  | <code>roomID</code> | <code>String</code> | 是 | - 字符串类型的房间唯一标识符。<br>- 限制长度为 0-48 字节。<br>- 建议仅包含数字、英文字母(区分大小写)、下划线(_)和连字符(-)。避免使用空格和中文字符。 |
208
- | <code>options</code> | <code>UpdateRoomOptions</code> | 是 | - 更新房间属性配置对象。<br>- 详细用法
209
- | <code>modifyFlag</code> | <code>UpdateRoomOptionsModifyFlag</code> | 是 | - 更新房间属性修改标志位。目前支持更新<strong>房间名称</strong>、<strong>房间密码</strong>。<br>- 详细用法。 |
208
+ | <code>options</code> | <code>UpdateRoomOptions</code> | 是 | - 更新房间属性配置对象。<br>- 详细用法请参考:<a href="#UpdateRoomOptionsStruct">UpdateRoomOptions 结构体详细说明</a> |
209
+ | <code>modifyFlag</code> | <code>UpdateRoomOptionsModifyFlag</code> | 是 | - 更新房间属性修改标志位。目前支持更新<strong>房间名称</strong>、<strong>房间密码</strong>。<br>- 详细用法请参考:<a href="#UpdateRoomOptions.ModifyFlag">UpdateRoomOptionsModifyFlag 详细说明</a>。 |
210
210
 
211
211
  **UpdateRoomOptions 结构体详细说明**
212
212
  | 参数名 | 类型 | 必填 | 说明 |
@@ -77,7 +77,7 @@ Future<void> scheduleRoom() async {
77
77
  | 参数名 | 类型 | 必填 | 说明 |
78
78
  | --- | --- | --- | --- |
79
79
  | <code>roomID</code> | <code>String</code> | 是 | - 字符串类型的房间唯一标识符。<br>- 限制长度为 0-48 字节。<br>- 建议仅包含数字、英文字母(区分大小写)、下划线(_)和连字符(-)。避免使用空格和中文字符。 |
80
- | <code>options</code> | <code>ScheduleRoomOptions</code> | 是 | - 创建房间配置对象。<br>- 详细用法
80
+ | <code>options</code> | <code>ScheduleRoomOptions</code> | 是 | - 创建房间配置对象。<br>- 详细用法请参考:<a href="#a065626d-21a2-476e-bbaf-65bca29b44d2">ScheduleRoomOptions 结构体详细说明</a> |
81
81
 
82
82
  ##### ScheduleRoomOptions 结构体详细说明
83
83
  | 参数名 | 类型 | 必填 | 说明 |
@@ -87,7 +87,7 @@ Future<void> scheduleRoom() async {
87
87
  | scheduleStartTime | int | 是 | - 预定的房间开始时间(Unix 时间戳,单位:秒)。<br>- 取值必须大于当前时间。<br>- 推荐设置为未来的整分时间。例如:1736164800(代表 2025-01-06 20:00:00)。 |
88
88
  | scheduleEndTime | int | 是 | - 预定的房间结束时间(Unix 时间戳,单位:秒)。<br>- 取值必须大于 scheduleStartTime。<br>- 建议根据预期时长设置。例如:scheduleStartTime + 3600(预定 1 小时时长的房间)。 |
89
89
  | reminderSecondsBeforeStart | int | 否 | - 房间开始前的提醒时间(单位:秒)。用于系统触发开始提醒。<br>- 推荐设置为 300(5分钟)或 900(15分钟),用于在 App 端触发本地通知。 |
90
- | scheduleAttendees | List<String> | 否 | - 预定参与者的用户 ID 列表,在预定房间时设置,系统将向这些用户发送预定邀请。<br>- 获取方式。 |
90
+ | scheduleAttendees | List<String> | 否 | - 预定参与者的用户 ID 列表,在预定房间时设置,系统将向这些用户发送预定邀请。<br>- 获取方式请参考 <a href="#88039583-8ee8-4662-bf73-d71c3af652fe">获取指定预定房间的参与成员列表</a>。 |
91
91
  | isAllMicrophoneDisabled | bool | 否 | - 是否全员禁止打开麦克风。开启后,除房主/管理员外,普通参与者默认禁止打开麦克风。<br>- 参数含义:<br>- true : 禁止。<br>- false :取消禁止 (默认值)。 |
92
92
  | isAllCameraDisabled | bool | 否 | - 是否全员禁止打开摄像头。开启后,除房主/管理员外,普通参与者默认禁止打开摄像头。<br>- 参数含义:<br>- true : 禁止。<br>- false :取消禁止(默认值)。 |
93
93
  | isAllScreenShareDisabled | bool | 否 | - 是否全员禁止发起屏幕共享。开启后,仅房主/管理员可进行屏幕共享。<br>- 参数含义:<br>- true : 禁止。<br>- false :取消禁止(默认值)。 |
@@ -150,8 +150,8 @@ Future<void> scheduleRoom() async {
150
150
  | 参数名 | 类型 | 必填 | 说明 |
151
151
  | --- | --- | --- | --- |
152
152
  | roomID | String | 是 | - 字符串类型的房间唯一标识符。<br>- 限制长度为 0-48 字节。<br>- 建议仅包含数字、英文字母(区分大小写)、下划线(_)和连字符(-)。避免使用空格和中文字符。 |
153
- | options | ScheduleRoomOptions | 是 | - 预定房间配置对象。<br>- 详细用法
154
- | modifyFlagList | List<ScheduleRoomOptionsModifyFlag> | 是 | - 更新房间属性修改标志位。目前支持更新<strong>房间名称</strong>、<strong>开始时间</strong>、<strong>结束时间。</strong><br>- 详细用法。 |
153
+ | options | ScheduleRoomOptions | 是 | - 预定房间配置对象。<br>- 详细用法请参考:<a href="#a065626d-21a2-476e-bbaf-65bca29b44d2">ScheduleRoomOptions 结构体详细说明</a> |
154
+ | modifyFlagList | List<ScheduleRoomOptionsModifyFlag> | 是 | - 更新房间属性修改标志位。目前支持更新<strong>房间名称</strong>、<strong>开始时间</strong>、<strong>结束时间。</strong><br>- 详细用法请参考:<a href="#ScheduleRoomOptionsModifyFlag">ScheduleRoomOptionsModifyFlag 详细说明</a>。 |
155
155
 
156
156
  **ScheduleRoomOptionsModifyFlag 详细说明**
157
157
  | 参数名 | 说明 |
@@ -72,7 +72,7 @@ func createAndJoinRoom() {
72
72
  | --- | --- | --- | --- |
73
73
  | <code>roomID</code> | <code>String</code> | 是 | - 字符串类型的房间唯一标识符。<br>- 限制长度为 0-48 字节。<br>- 建议仅包含数字、英文字母(区分大小写)、下划线(_)和连字符(-)。避免使用空格和中文字符。 |
74
74
  | <code>roomType</code> | <code>RoomType</code> | 是 | 房间类型:<br>- <code>standard</code>:标准房间,所有成员可自由音视频互动。<br>- <code>webinar</code>:大型研讨会房间,区分嘉宾和观众角色,观众默认无上麦权限。<br>多人会议场景这里填写 <code>standard</code> 房间类型。 |
75
- | <code>options</code> | <code>CreateRoomOptions</code> | 是 | - 创建房间配置对象。<br>- 详细用法。 |
75
+ | <code>options</code> | <code>CreateRoomOptions</code> | 是 | - 创建房间配置对象。<br>- 详细用法请参考:<a href="#a065626d-21a2-476e-bbaf-65bca29b44d2">CreateRoomOptions 结构体详细说明</a>。 |
76
76
  | <code>completion</code> | <code>CompletionClosure</code> | 否 | 操作完成回调,用于返回创建和加入房间的结果。若创建失败则会返回错误码和错误信息。 |
77
77
 
78
78
  ##### CreateRoomOptions 结构体详细说明
@@ -203,8 +203,8 @@ func updateRoomInfo() {
203
203
  | 参数名 | 类型 | 必填 | 说明 |
204
204
  | --- | --- | --- | --- |
205
205
  | <code>roomID</code> | <code>String</code> | 是 | - 字符串类型的房间唯一标识符。<br>- 限制长度为 0-48 字节。<br>- 建议仅包含数字、英文字母(区分大小写)、下划线(_)和连字符(-)。避免使用空格和中文字符。 |
206
- | <code>options</code> | <code>UpdateRoomOptions</code> | 是 | - 更新房间属性配置对象。<br>- 详细用法。 |
207
- | <code>modifyFlag</code> | <code>UpdateRoomOptions.ModifyFlag</code> | 是 | - 更新房间属性修改标志位。目前支持更新<strong>房间名称</strong>、<strong>房间密码</strong>。<br>- 详细用法。 |
206
+ | <code>options</code> | <code>UpdateRoomOptions</code> | 是 | - 更新房间属性配置对象。<br>- 详细用法请参考:<a href="#UpdateRoomOptionsStruct">UpdateRoomOptions 结构体详细说明</a>。 |
207
+ | <code>modifyFlag</code> | <code>UpdateRoomOptions.ModifyFlag</code> | 是 | - 更新房间属性修改标志位。目前支持更新<strong>房间名称</strong>、<strong>房间密码</strong>。<br>- 详细用法请参考:<a href="#UpdateRoomOptions.ModifyFlag">UpdateRoomOptions.ModifyFlag 详细说明</a>。 |
208
208
  | <code>completion</code> | <code>CompletionClosure</code> | 否 | 操作完成回调,用于返回更新房间信息的结果。若更新失败则会返回错误码和错误信息。 |
209
209
 
210
210
  **UpdateRoomOptions 结构体详细说明**
@@ -76,7 +76,7 @@ func scheduleRoom() {
76
76
  | 参数名 | 类型 | 必填 | 说明 |
77
77
  | --- | --- | --- | --- |
78
78
  | <code>roomID</code> | <code>String</code> | 是 | - 字符串类型的房间唯一标识符。<br>- 限制长度为 0-48 字节。<br>- 建议仅包含数字、英文字母(区分大小写)、下划线(_)和连字符(-)。避免使用空格和中文字符。 |
79
- | <code>options</code> | <code>ScheduleRoomOptions</code> | 是 | - 创建房间配置对象。<br>- 详细用法
79
+ | <code>options</code> | <code>ScheduleRoomOptions</code> | 是 | - 创建房间配置对象。<br>- 详细用法请参考:<a href="#a065626d-21a2-476e-bbaf-65bca29b44d2">ScheduleRoomOptions 结构体详细说明</a> |
80
80
  | <code>completion</code> | <code>CompletionClosure</code> | 否 | 操作完成回调,用于返回预定房间的结果。若预定失败则会返回错误码和错误信息。 |
81
81
 
82
82
  ##### ScheduleRoomOptions 结构体详细说明
@@ -87,7 +87,7 @@ func scheduleRoom() {
87
87
  | <code>scheduleStartTime</code> | <code>Int</code> | 是 | - 预定的房间开始时间(Unix 时间戳,单位:秒)。<br>- 取值必须大于当前时间。<br>- 推荐设置为未来的整分时间。例如:1736164800(代表 2025-01-06 20:00:00)。 |
88
88
  | <code>scheduleEndTime</code> | <code>Int</code> | 是 | - 预定的房间结束时间(Unix 时间戳,单位:秒)。<br>- 取值必须大于 <code>scheduleStartTime</code>。<br>- 建议根据预期时长设置。例如:<code>scheduleStartTime</code> + 3600(预定 1 小时时长的房间)。 |
89
89
  | <code>reminderSecondsBeforeStart</code> | <code>Int</code> | 否 | - 房间开始前的提醒时间(单位:秒)。用于系统触发开始提醒。<br>- 推荐设置为 300(5分钟)或 900(15分钟),用于在 App 端触发本地通知。 |
90
- | <code>scheduleAttendees</code> | <code>[String]</code> | 否 | - 预定参与者的用户 ID 列表,在预定房间时设置,系统将向这些用户发送预约邀请。<br>- 获取。 |
90
+ | <code>scheduleAttendees</code> | <code>[String]</code> | 否 | - 预定参与者的用户 ID 列表,在预定房间时设置,系统将向这些用户发送预约邀请。<br>- 获取请参考<a href="#88039583-8ee8-4662-bf73-d71c3af652fe">获取指定预定房间的参与成员列表</a>。 |
91
91
  | <code>isAllMicrophoneDisabled</code> | <code>Bool</code> | 否 | 是否全员禁止打开麦克风。开启后,除房主/管理员外,普通参与者默认禁止打开麦克风。<br>- true : 禁止<br>- false :取消禁止 (默认值) |
92
92
  | <code>isAllCameraDisabled</code> | <code>Bool</code> | 否 | 是否全员禁止打开摄像头。开启后,除房主/管理员外,普通参与者默认禁止打开摄像头。<br>- true : 禁止<br>- false :取消禁止(默认值) |
93
93
  | <code>isAllScreenShareDisabled</code> | <code>Bool</code> | 否 | 是否全员禁止发起屏幕共享。开启后,仅房主/管理员可进行屏幕共享。<br>- true : 禁止<br>- false :取消禁止(默认值) |
@@ -150,8 +150,8 @@ func updateScheduledRoom() {
150
150
  | 参数名 | 类型 | 必填 | 说明 |
151
151
  | --- | --- | --- | --- |
152
152
  | <code>roomID</code> | <code>String</code> | 是 | - 字符串类型的房间唯一标识符。<br>- 限制长度为 0-48 字节。<br>- 建议仅包含数字、英文字母(区分大小写)、下划线(_)和连字符(-)。避免使用空格和中文字符。 |
153
- | <code>options</code> | <code>ScheduleRoomOptions</code> | 是 | - 预定房间配置对象。<br>- 详细用法
154
- | <code>modifyFlag</code> | <code>ScheduleRoomOptions.ModifyFlag</code> | 是 | - 更新房间属性修改标志位。目前支持更新<strong>房间名称</strong>、<strong>开始时间</strong>、<strong>结束时间。</strong><br>- 详细用法。 |
153
+ | <code>options</code> | <code>ScheduleRoomOptions</code> | 是 | - 预定房间配置对象。<br>- 详细用法请参考:<a href="#a065626d-21a2-476e-bbaf-65bca29b44d2">ScheduleRoomOptions 结构体详细说明</a> |
154
+ | <code>modifyFlag</code> | <code>ScheduleRoomOptions.ModifyFlag</code> | 是 | - 更新房间属性修改标志位。目前支持更新<strong>房间名称</strong>、<strong>开始时间</strong>、<strong>结束时间。</strong><br>- 详细用法请参考:<a href="#ScheduleRoomOptions.ModifyFlag">ScheduleRoomOptions.ModifyFlag 详细说明</a>。 |
155
155
  | <code>completion</code> | <code>CompletionClosure</code> | 否 | 操作完成回调,用于返回更新预定房间的结果。若更新失败则会返回错误码和错误信息。 |
156
156
 
157
157
  **ScheduleRoomOptions.ModifyFlag 详细说明**
@@ -0,0 +1,84 @@
1
+ 视频会议 SDK 基于腾讯云即时通信 IM 与实时音视频 TRTC 提供服务,支持在内网 / 防火墙环境下统一配置 IM 与 TRTC 代理,适用于私有化部署、企业内网隔离等无法直连腾讯云服务的场景。
2
+
3
+ ## 代理架构
4
+
5
+ |代理服务器|代理链路|
6
+ |---------|---------|
7
+ |IM 代理|代理 IM 登录、消息收发等信令通道(WebSocket),以及聊天图片、文件等资源的上传与下载。|
8
+ |TRTC WebSocket 代理(如 Nginx)|代理 TRTC 进房、控制等信令通道(WebSocket),负责房间管理与用户状态同步。|
9
+ |TRTC TURN Server|中继转发 TRTC 音视频媒体流。|
10
+
11
+ > **说明:**
12
+ > 代理服务器(IM 代理、Nginx、TURN)需自行部署,搭建方式参见 [TRTC Web SDK 应对防火墙受限](https://web.sdk.qcloud.com/trtc/webrtc/v5/doc/zh-cn/tutorial-34-advanced-proxy.html)。
13
+ >
14
+
15
+ ## 接口与参数
16
+
17
+ 视频会议 SDK 支持用户在调用 `login()` 之前通过 `callExperimentalAPI` 接口统一配置内网代理:
18
+ ``` typescript
19
+ callExperimentalAPI({
20
+ api: 'setNetworkProxy',
21
+ params: {
22
+ im?: { /* IM 代理参数 */ },
23
+ rtc?: { /* TRTC 代理参数 */ },
24
+ },
25
+ });
26
+ ```
27
+
28
+ ### IM 代理参数
29
+
30
+ |参数|类型|说明|
31
+ |---------|---------|---------|
32
+ |`proxyServer`|String|IM 信令 WebSocket 代理地址。|
33
+ |`fileUploadProxy`|String|IM 文件上传代理地址。|
34
+ |`fileDownloadProxy`|String|IM 文件下载代理地址。|
35
+
36
+ ### TRTC 代理参数
37
+
38
+ |参数|类型|说明|
39
+ |---------|---------|---------|
40
+ |`websocketProxy`|String|TRTC 信令 WebSocket 代理地址,如 `wss://proxy.example.com/ws/`。|
41
+ |`turnServer`|Array|TURN 服务器列表,每项含 `url` / `username` / `credential`。|
42
+ |`iceTransportPolicy`|`'relay' \| 'all'`|客户端 ICE 传输策略;内网环境建议设为 `'relay'`,强制连接 TURN server。|
43
+
44
+ ## 示例代码
45
+
46
+ ``` typescript
47
+ import { callExperimentalAPI } from 'tuikit-atomicx-react';
48
+ import { useLoginState, useRoomState } from 'tuikit-atomicx-react/room';
49
+
50
+ callExperimentalAPI({
51
+ api: 'setNetworkProxy',
52
+ params: {
53
+ im: {
54
+ proxyServer: 'wss://proxy.example.com:8080',
55
+ fileUploadProxy: 'https://proxy.example.com:8080',
56
+ fileDownloadProxy: 'https://proxy.example.com:8080',
57
+ },
58
+ rtc: {
59
+ websocketProxy: 'wss://proxy.example.com/ws/',
60
+ turnServer: [
61
+ { url: '14.3.3.3:3478', username: 'turn', credential: 'turn' },
62
+ ],
63
+ iceTransportPolicy: 'relay',
64
+ },
65
+ },
66
+ });
67
+
68
+ const { login } = useLoginState();
69
+ await login({ sdkAppId, userId, userSig });
70
+
71
+ const { createAndJoinRoom } = useRoomState();
72
+ await createAndJoinRoom({ roomId });
73
+ ```
74
+
75
+ ## 常见问题
76
+
77
+ ### 用户在外网正常进会,但是内网无法进会?
78
+
79
+ 检查是否在 `login()` 前调用了 `setNetworkProxy`;若已配置仍失败,排查 TURN 端口与代理服务器出站白名单。
80
+
81
+ ### 用户能进会但看不到远端画面、听不到远端声音?
82
+
83
+ 确认 `turnServer` 可达,内网环境将 `iceTransportPolicy` 设为 `'relay'`。
84
+
@@ -112,9 +112,6 @@ const handleCameraChange = async (event: Event) => {
112
112
  };
113
113
  </script>
114
114
 
115
- <style scoped>
116
- .preview-container { position: relative; width: 100%; max-width: 640px; margin: 0 auto;}.camera-preview { width: 100%; position: relative; aspect-ratio: 16 / 9; background-color: #000; border-radius: 8px; overflow: hidden;}.loading-overlay { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; background-color: rgba(0, 0, 0, 0.7); color: white; border-radius: 8px;}.loading-spinner { width: 40px; height: 40px; border: 4px solid rgba(255, 255, 255, 0.3); border-top-color: white; border-radius: 50%; animation: spin 0.8s linear infinite;}@keyframes spin { to { transform: rotate(360deg); }}.error-message { display: flex; align-items: center; gap: 8px; padding: 12px; margin-top: 12px; background-color: #ffebee; color: #c62828; border-radius: 4px; font-size: 14px;}.camera-selector { margin-top: 16px; display: flex; align-items: center; gap: 12px;}.camera-selector label { font-weight: 500; min-width: 80px;}.camera-selector select { flex: 1; padding: 8px 12px; border: 1px solid #e0e0e0; border-radius: 4px; font-size: 14px;}.control-buttons { margin-top: 16px; display: flex; gap: 12px;}.control-buttons button { flex: 1; padding: 12px 24px; background-color: #1976d2; color: white; border: none; border-radius: 4px; font-size: 14px; font-weight: 500; cursor: pointer; transition: background-color 0.3s;}.control-buttons button:hover:not(:disabled) { background-color: #1565c0;}.control-buttons button:disabled { background-color: #bdbdbd; cursor: not-allowed;}
117
- </style>
118
115
  ```
119
116
 
120
117
  【React】
@@ -332,9 +329,6 @@ const handleMicrophoneChange = async (event: Event) => {
332
329
  };
333
330
  </script>
334
331
 
335
- <style scoped>
336
- .microphone-test { width: 100%; max-width: 640px; margin: 0 auto;}.volume-display { padding: 24px; background-color: #f5f5f5; border-radius: 8px; margin-bottom: 16px;}.volume-label { font-size: 14px; font-weight: 500; color: #666; margin-bottom: 12px;}.volume-bar-container { width: 100%; height: 24px; background-color: #e0e0e0; border-radius: 12px; overflow: hidden; margin-bottom: 8px;}.volume-bar { height: 100%; transition: width 0.1s ease; border-radius: 12px;}.volume-bar.volume-zero { background-color: #9e9e9e;}.volume-bar.volume-low { background-color: #ff9800;}.volume-bar.volume-medium { background-color: #4caf50;}.volume-bar.volume-high { background-color: #2196f3;}.volume-value { text-align: center; font-size: 18px; font-weight: 600; color: #333;}.microphone-selector { display: flex; align-items: center; gap: 12px; margin-bottom: 16px;}.microphone-selector label { font-weight: 500; min-width: 80px;}.microphone-selector select { flex: 1; padding: 8px 12px; border: 1px solid #e0e0e0; border-radius: 4px; font-size: 14px;}.error-message { display: flex; align-items: center; gap: 8px; padding: 12px; margin-bottom: 16px; background-color: #ffebee; color: #c62828; border-radius: 4px; font-size: 14px;}.control-buttons { margin-bottom: 12px; display: flex; gap: 8px; }.control-buttons button { flex: 1; width: 100%; padding: 12px 24px; background-color: #1976d2; color: white; border: none; border-radius: 4px; font-size: 14px; font-weight: 500; cursor: pointer; transition: background-color 0.3s;}.control-buttons button:hover:not(:disabled) { background-color: #1565c0;}.control-buttons button:disabled { background-color: #bdbdbd; cursor: not-allowed;}.test-tip { display: flex; align-items: center; gap: 8px; padding: 12px; background-color: #e3f2fd; color: #1565c0; border-radius: 4px; font-size: 13px;}
337
- </style>
338
332
  ```
339
333
 
340
334
  【React】
@@ -552,9 +546,6 @@ const handleSpeakerChange = async (event: Event) => {
552
546
  };
553
547
  </script>
554
548
 
555
- <style scoped>
556
- .speaker-test { width: 100%; max-width: 640px; margin: 0 auto;}.speaker-selector { display: flex; align-items: center; gap: 12px; margin-bottom: 24px;}.speaker-selector label { font-weight: 500; min-width: 80px;}.speaker-selector select { flex: 1; padding: 8px 12px; border: 1px solid #e0e0e0; border-radius: 4px; font-size: 14px;}.volume-slider-container { display: flex; align-items: center; gap: 12px;}.volume-slider { flex: 1; height: 6px; border-radius: 3px; background: #e0e0e0; outline: none; -webkit-appearance: none;}.volume-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 18px; height: 18px; border-radius: 50%; background: #1976d2; cursor: pointer;}.volume-slider::-moz-range-thumb { width: 18px; height: 18px; border-radius: 50%; background: #1976d2; cursor: pointer; border: none;}.volume-value { min-width: 50px; text-align: right; font-weight: 500; color: #333;}.control-buttons { display: flex; gap: 12px; margin-bottom: 12px;}button { flex: 1; padding: 12px 24px; background-color: #1976d2; color: white; border: none; border-radius: 4px; font-size: 14px; font-weight: 500; cursor: pointer; transition: background-color 0.3s;}.control-buttons button:hover:not(:disabled) { background-color: #1565c0;}.control-buttons button:disabled { background-color: #bdbdbd; cursor: not-allowed;}.test-tip { display: flex; align-items: center; gap: 8px; padding: 12px; background-color: #e3f2fd; color: #1565c0; border-radius: 4px; font-size: 13px;}
557
- </style>
558
549
  ```
559
550
 
560
551
  【React】
@@ -87,15 +87,6 @@ const openBeautySettings = () => {
87
87
  };
88
88
  </script>
89
89
 
90
- <style scoped>
91
- .modal-mask {
92
- position: fixed; top: 0; left: 0; width: 100%; height: 100%;
93
- background: rgba(0,0,0,0.5); display: flex; justify-content: center; align-items: center; z-index: 1000;
94
- }
95
- .modal-content { background: white; width: 600px; border-radius: 8px; overflow: hidden; }
96
- .modal-header { padding: 16px; display: flex; justify-content: space-between; border-bottom: 1px solid #eee; }
97
- .modal-body { padding: 16px; }
98
- </style>
99
90
  ```
100
91
 
101
92
  该组件内部逻辑如下:
@@ -0,0 +1,84 @@
1
+ 视频会议 SDK 基于腾讯云即时通信 IM 与实时音视频 TRTC 提供服务,支持在内网 / 防火墙环境下统一配置 IM 与 TRTC 代理,适用于私有化部署、企业内网隔离等无法直连腾讯云服务的场景。
2
+
3
+ ## 代理架构
4
+
5
+ |代理服务器|代理链路|
6
+ |---------|---------|
7
+ |IM 代理|代理 IM 登录、消息收发等信令通道(WebSocket),以及聊天图片、文件等资源的上传与下载。|
8
+ |TRTC WebSocket 代理(如 Nginx)|代理 TRTC 进房、控制等信令通道(WebSocket),负责房间管理与用户状态同步。|
9
+ |TRTC TURN Server|中继转发 TRTC 音视频媒体流。|
10
+
11
+ > **说明:**
12
+ > 代理服务器(IM 代理、Nginx、TURN)需自行部署,搭建方式参见 [TRTC Web SDK 应对防火墙受限](https://web.sdk.qcloud.com/trtc/webrtc/v5/doc/zh-cn/tutorial-34-advanced-proxy.html)。
13
+ >
14
+
15
+ ## 接口与参数
16
+
17
+ 视频会议 SDK 支持用户在调用 `login()` 之前通过 `callExperimentalAPI` 接口统一配置内网代理:
18
+ ``` typescript
19
+ callExperimentalAPI({
20
+ api: 'setNetworkProxy',
21
+ params: {
22
+ im?: { /* IM 代理参数 */ },
23
+ rtc?: { /* TRTC 代理参数 */ },
24
+ },
25
+ });
26
+ ```
27
+
28
+ ### IM 代理参数
29
+
30
+ |参数|类型|说明|
31
+ |---------|---------|---------|
32
+ |`proxyServer`|String|IM 信令 WebSocket 代理地址。|
33
+ |`fileUploadProxy`|String|IM 文件上传代理地址。|
34
+ |`fileDownloadProxy`|String|IM 文件下载代理地址。|
35
+
36
+ ### TRTC 代理参数
37
+
38
+ |参数|类型|说明|
39
+ |---------|---------|---------|
40
+ |`websocketProxy`|String|TRTC 信令 WebSocket 代理地址,如 `wss://proxy.example.com/ws/`。|
41
+ |`turnServer`|Array|TURN 服务器列表,每项含 `url` / `username` / `credential`。|
42
+ |`iceTransportPolicy`|`'relay' \| 'all'`|客户端 ICE 传输策略;内网环境建议设为 `'relay'`,强制连接 TURN server。|
43
+
44
+ ## 示例代码
45
+
46
+ ``` typescript
47
+ import { callExperimentalAPI } from 'tuikit-atomicx-vue3';
48
+ import { useLoginState, useRoomState } from 'tuikit-atomicx-vue3/room';
49
+
50
+ callExperimentalAPI({
51
+ api: 'setNetworkProxy',
52
+ params: {
53
+ im: {
54
+ proxyServer: 'wss://proxy.example.com:8080',
55
+ fileUploadProxy: 'https://proxy.example.com:8080',
56
+ fileDownloadProxy: 'https://proxy.example.com:8080',
57
+ },
58
+ rtc: {
59
+ websocketProxy: 'wss://proxy.example.com/ws/',
60
+ turnServer: [
61
+ { url: '14.3.3.3:3478', username: 'turn', credential: 'turn' },
62
+ ],
63
+ iceTransportPolicy: 'relay',
64
+ },
65
+ },
66
+ });
67
+
68
+ const { login } = useLoginState();
69
+ await login({ sdkAppId, userId, userSig });
70
+
71
+ const { createAndJoinRoom } = useRoomState();
72
+ await createAndJoinRoom({ roomId });
73
+ ```
74
+
75
+ ## 常见问题
76
+
77
+ ### 用户在外网正常进会,但是内网无法进会?
78
+
79
+ 检查是否在 `login()` 前调用了 `setNetworkProxy`;若已配置仍失败,排查 TURN 端口与代理服务器出站白名单。
80
+
81
+ ### 用户能进会但看不到远端画面、听不到远端声音?
82
+
83
+ 确认 `turnServer` 可达,内网环境将 `iceTransportPolicy` 设为 `'relay'`。
84
+
@@ -0,0 +1,245 @@
1
+ 本篇文档旨在指导开发者在标准会议无 UI 集成方案中实现云端录制能力。您可以通过 `useRoomState()` 提供的 `startRecording()` / `stopRecording()` 控制录制的发起与停止,并通过 `currentRoom.recordingInfo` 与 `RoomEvent` 实时监听录制状态变化。
2
+
3
+ > **版本说明:**
4
+ >
5
+ > 云端录制接口(`startRecording` / `stopRecording`)自 **tuikit-atomicx-vue3 6.4.0** 和 **tuikit-atomicx-react 6.2.0** 起支持,请确认您使用的版本满足要求。
6
+ >
7
+
8
+ ## 前提条件
9
+ - 用户已通过 `useLoginState` 完成登录鉴权。
10
+
11
+ - 用户已通过 `useRoomState` 进入标准会议房间。
12
+
13
+ - 已完成云端录制套餐开通及存储配置:
14
+
15
+ - 购买含云录制能力的视频会议 SDK 套餐。
16
+
17
+ - 开通录制文件存储服务:录制文件支持存储至 [云点播(VOD)](https://console.cloud.tencent.com/vod) 或 [对象存储(COS)](https://console.cloud.tencent.com/cos),请在对应控制台完成开通并记录存储信息。
18
+
19
+ - [提交工单](https://console.cloud.tencent.com/workorder/category),选择**实时音视频**产品,申请为您的 SDKAppID 配置云端录制存储信息。
20
+
21
+ ## 录制效果
22
+
23
+ 视频会议 SDK 默认采用**合流录制**模式,将房间内发布的音视频流混合为一份完整的录制文件。录制布局会随会中状态**自动切换**,切换过程中不重启录制任务:
24
+
25
+ |**会中状态**|**混流布局**|**画面数量上限**|
26
+ |---------|---------|---------|
27
+ |无屏幕分享 / 白板|九宫格布局|最多 **25** 路视频画面|
28
+ |有屏幕分享 / 白板|屏幕分享布局(共享为主画面)|最多 **1** 路屏幕分享 + **16** 路视频画面|
29
+ |仅音频|-|—|
30
+
31
+ ## 接口说明
32
+
33
+ 视频会议 SDK 无 UI 集成通过 `useRoomState()` 提供录制控制与状态订阅能力,录制任务由服务端全程托管,客户端仅负责发起与停止。
34
+
35
+ |**类型**|**名称**|**说明**|
36
+ |---------|---------|---------|
37
+ |方法|`startRecording(): Promise<void>`|发起云端录制。仅**房主或管理员**可调用,须在进房成功后调用。|
38
+ |方法|`stopRecording(): Promise<void>`|停止云端录制。仅**房主或管理员**可调用。|
39
+ |状态|`currentRoom.recordingInfo`|当前房间的录制信息,含 `status` 字段(`RecordingStatus.Recording` 表示录制中)。|
40
+ |事件|`RoomEvent.onRecordingStarted`|录制任务启动成功时触发,回调参数为 `{ roomInfo, operator }`。|
41
+ |事件|`RoomEvent.onRecordingStopped`|录制任务停止时触发,回调参数为 `{ roomInfo, operator, reason }`。`reason` 可区分主动停止与异常中断。|
42
+
43
+ ## 步骤1:发起云端录制
44
+
45
+ ### 权限要求
46
+
47
+ 仅**房主或管理员**可调用 `startRecording()`,其他角色调用将抛出权限错误。同一房间内同时只能存在一个录制任务,重复调用也会返回错误。
48
+
49
+ ### 示例代码
50
+
51
+ 【Vue3】
52
+ ``` typescript
53
+ import { useRoomState } from 'tuikit-atomicx-vue3/room';
54
+
55
+ const { startRecording } = useRoomState();
56
+
57
+ await startRecording();
58
+ ```
59
+
60
+ 【React】
61
+ ``` typescript
62
+ import { useRoomState } from 'tuikit-atomicx-react/room';
63
+
64
+ const { startRecording } = useRoomState();
65
+
66
+ await startRecording();
67
+ ```
68
+
69
+ ### 错误处理
70
+
71
+ `startRecording()` 调用失败时会抛出错误,常见错误情况如下:
72
+
73
+ |**错误码**|**含义**|**处理建议**|
74
+ |---------|---------|---------|
75
+ |`100001`|后端系统错误。|稍后重试;若持续出现,请提交工单排查。|
76
+ |`100004`|房间不存在。|确认已通过 `createAndJoinRoom()` 或 `joinRoom()` 进房成功后再调用录制接口。|
77
+ |`100006`|没有权限,必须是房主或管理员。|检查当前用户角色,仅房主或管理员可发起录制。|
78
+ |`101072`|录制配置不存在或未启用。|确认已完成控制台套餐开通、工单配置及增值功能开关,参考本文「前提条件」。|
79
+
80
+ 【Vue3】
81
+ ``` typescript
82
+ import { useRoomState } from 'tuikit-atomicx-vue3/room';
83
+
84
+ const { startRecording } = useRoomState();
85
+
86
+ try {
87
+ await startRecording();
88
+ } catch (error: any) {
89
+ switch (error?.code) {
90
+ case 100001:
91
+ console.error('后端系统错误,请稍后重试。');
92
+ break;
93
+ case 100004:
94
+ console.error('房间不存在,请确认已进房后再发起录制。');
95
+ break;
96
+ case 100006:
97
+ console.error('权限不足,仅房主或管理员可发起录制。');
98
+ break;
99
+ case 101072:
100
+ console.error('录制配置不存在或未启用,请检查控制台开通配置。');
101
+ break;
102
+ default:
103
+ console.error('发起录制失败:', error);
104
+ }
105
+ }
106
+ ```
107
+
108
+ 【React】
109
+ ``` typescript
110
+ import { useRoomState } from 'tuikit-atomicx-react/room';
111
+
112
+ const { startRecording } = useRoomState();
113
+
114
+ try {
115
+ await startRecording();
116
+ } catch (error: any) {
117
+ switch (error?.code) {
118
+ case 100001:
119
+ console.error('后端系统错误,请稍后重试。');
120
+ break;
121
+ case 100002:
122
+ console.error('参数错误,请检查传入参数。');
123
+ break;
124
+ case 100004:
125
+ console.error('房间不存在,请确认已进房后再发起录制。');
126
+ break;
127
+ case 100006:
128
+ console.error('权限不足,仅房主或管理员可发起录制。');
129
+ break;
130
+ case 101072:
131
+ console.error('录制配置不存在或未启用,请检查控制台开通配置。');
132
+ break;
133
+ default:
134
+ console.error('发起录制失败:', error);
135
+ }
136
+ }
137
+ ```
138
+
139
+ ## 步骤2:停止云端录制
140
+
141
+ ### 前置条件
142
+
143
+ 当前房间内有进行中的录制任务(`RecordingStatus.Recording`)。
144
+
145
+ ### 权限要求
146
+
147
+ 仅**房主或管理员**可调用 `stopRecording()`。
148
+
149
+ ### 示例代码
150
+
151
+ 【Vue3】
152
+ ``` typescript
153
+ import { useRoomState } from 'tuikit-atomicx-vue3/room';
154
+
155
+ const { stopRecording } = useRoomState();
156
+
157
+ try {
158
+ await stopRecording();
159
+ } catch (error: any) {
160
+ console.error('停止录制失败:', error);
161
+ }
162
+ ```
163
+
164
+ 【React】
165
+ ``` typescript
166
+ import { useRoomState } from 'tuikit-atomicx-react/room';
167
+
168
+ const { stopRecording } = useRoomState();
169
+
170
+ try {
171
+ await stopRecording();
172
+ } catch (error: any) {
173
+ console.error('停止录制失败:', error);
174
+ }
175
+ ```
176
+
177
+ ## 步骤3:监听录制状态变化
178
+
179
+ ### 前置条件
180
+ - 已进房成功。
181
+
182
+ - 建议在进房后**立即**订阅事件,避免遗漏由其他端(例如移动端房主)发起的录制通知。
183
+
184
+ ### 示例代码
185
+
186
+ 【Vue3】
187
+ ``` typescript
188
+ import { useRoomState, RecordingStatus, RecordingStopReason, RoomEvent } from 'tuikit-atomicx-vue3/room';
189
+
190
+ const { currentRoom, subscribeEvent } = useRoomState();
191
+
192
+ // 主动查询当前录制状态
193
+ const isRecording = currentRoom.value?.recordingInfo?.status === RecordingStatus.Recording;
194
+
195
+ // 监听录制开始
196
+ subscribeEvent(RoomEvent.onRecordingStarted, ({ operator }) => {
197
+ console.log('录制已开始,操作人:', operator.userId);
198
+ });
199
+
200
+ // 监听录制停止
201
+ subscribeEvent(RoomEvent.onRecordingStopped, ({ operator, reason }) => {
202
+ if (reason === RecordingStopReason.StoppedByUser) {
203
+ console.log('录制已停止,操作人:', operator.userId);
204
+ } else if (reason === RecordingStopReason.RecorderLeftRoom) {
205
+ console.warn('录制异常中断,录制机器人已退出房间,请视需要重新发起录制。');
206
+ }
207
+ });
208
+ ```
209
+
210
+ 【React】
211
+ ``` typescript
212
+ import { useRoomState, RecordingStatus, RecordingStopReason, RoomEvent } from 'tuikit-atomicx-react/room';
213
+
214
+ const { currentRoom, subscribeEvent } = useRoomState();
215
+
216
+ // 主动查询当前录制状态
217
+ const isRecording = currentRoom?.recordingInfo?.status === RecordingStatus.Recording;
218
+
219
+ // 监听录制开始
220
+ subscribeEvent(RoomEvent.onRecordingStarted, ({ operator }) => {
221
+ console.log('录制已开始,操作人:', operator.userId);
222
+ });
223
+
224
+ // 监听录制停止
225
+ subscribeEvent(RoomEvent.onRecordingStopped, ({ operator, reason }) => {
226
+ if (reason === RecordingStopReason.StoppedByUser) {
227
+ console.log('录制已停止,操作人:', operator.userId);
228
+ } else if (reason === RecordingStopReason.RecorderLeftRoom) {
229
+ console.warn('录制异常中断,录制机器人已退出房间,请视需要重新发起录制。');
230
+ }
231
+ });
232
+ ```
233
+
234
+ ### 错误情况
235
+
236
+ `onRecordingStopped` 事件的 `reason` 字段标识录制停止原因:
237
+
238
+ |**枚举值**|**值**|**说明**|
239
+ |---------|---------|---------|
240
+ |`RecordingStopReason.StoppedByUser`|`0`|房主或管理员主动调用 `stopRecording()` 正常停止。|
241
+ |`RecordingStopReason.RecorderLeftRoom`|`1`|录制机器人异常退出房间,录制中断。建议提示用户并视业务需要决定是否重新发起录制。|
242
+
243
+ > **注意:**
244
+ > - 云端录制功能需提前完成套餐购买、存储服务开通及工单配置,请确认已完成本文**前提条件**中的全部步骤。
245
+ > - 录制文件存储在您配置的云点播(VOD)或对象存储(COS)中,请前往对应控制台查看和管理。
@@ -144,9 +144,6 @@ const placeholder = computed(() =>
144
144
  const messageActionList = useMessageActions(['copy', 'recall', 'delete']);
145
145
  </script>
146
146
 
147
- <style scoped>
148
- .room-chat-container{display:flex;flex-direction:column;height:100%;padding:8px;gap:8px}.message-list{flex:1;overflow:hidden}.message-input{flex-shrink:0;border:1px solid #e0e0e0;border-radius:8px}
149
- </style>
150
147
  ```
151
148
 
152
149
  【React】