@tencentcloud/sdk-mcp 1.7.7 → 1.7.9-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 (224) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +7 -9
  3. package/index.js +8 -8
  4. package/knowledge/chunker.js +1 -0
  5. package/knowledge/doc-url-resolver.js +16 -9
  6. package/knowledge/embedding/build-vectors.js +92 -0
  7. package/knowledge/embedding/embed-model.js +41 -0
  8. package/knowledge/embedding/vector-augment.js +126 -0
  9. package/knowledge/embedding/vector-index.js +70 -0
  10. package/knowledge/frontmatter-meta.js +23 -0
  11. package/knowledge/path-meta.js +56 -0
  12. package/knowledge/search/exact-lookup.js +145 -16
  13. package/knowledge/search/filter-pool.js +77 -33
  14. package/knowledge/search/rank-profile.js +25 -0
  15. package/knowledge/search/requires-framework.js +4 -1
  16. package/knowledge/search/search-core.js +74 -13
  17. package/knowledge/search/search-knowledge.js +24 -34
  18. package/knowledge/search/search-pass.js +495 -169
  19. package/knowledge/search/url-row-scorer.js +24 -6
  20. package/package.json +3 -1
  21. package/resource/index/manifest.json +1 -1
  22. package/resource/index/vectors/index.json +4 -0
  23. package/resource/integration/callkit/preset/android/integration.md +0 -2
  24. package/resource/integration/callkit/preset/ios/integration.md +0 -2
  25. package/resource/integration/chat/preset/react/integration.md +9 -5
  26. package/resource/integration/chat/preset/uni-app/integration.md +4 -0
  27. package/resource/integration/chat/preset/vue/integration.md +10 -6
  28. package/resource/integration/livekit/preset/live/android/prepare-integration.md +0 -4
  29. package/resource/integration/livekit/preset/live/ios/prepare-integration.md +0 -4
  30. package/resource/integration/roomkit/preset/vue/integration.md +154 -208
  31. package/resource/knowledge/callkit/best-practice/android/video-chat-dating.md +0 -2
  32. package/resource/knowledge/callkit/core-sdk/android/answer-call.md +0 -2
  33. package/resource/knowledge/callkit/core-sdk/android/make-call.md +0 -2
  34. package/resource/knowledge/callkit/core-sdk/flutter/answer-call.md +0 -4
  35. package/resource/knowledge/callkit/core-sdk/flutter/make-call.md +0 -2
  36. package/resource/knowledge/callkit/core-sdk/flutter/offline-push.md +0 -2
  37. package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +0 -2
  38. package/resource/knowledge/callkit/core-sdk/ios/make-call.md +0 -4
  39. package/resource/knowledge/callkit/core-sdk/ios/offline-push.md +0 -2
  40. package/resource/knowledge/callkit/core-sdk/uni-app/answer-call.md +0 -2
  41. package/resource/knowledge/callkit/core-sdk/uni-app/make-call.md +0 -2
  42. package/resource/knowledge/callkit/faq/ios.md +0 -2
  43. package/resource/knowledge/callkit/faq/uniapp-app.md +0 -2
  44. package/resource/knowledge/callkit/preset/miniprogram/integration.md +2 -3
  45. package/resource/knowledge/callkit/preset/miniprogram/uniapp-integration.md +0 -2
  46. package/resource/knowledge/chat/preset/ios-uikit/integration.md +0 -16
  47. package/resource/knowledge/chat/preset/react/h5/integration.md +16 -5
  48. package/resource/knowledge/chat/preset/vue/features/conversation-list.md +6 -3
  49. package/resource/knowledge/chat/preset/vue/h5/integration.md +7 -4
  50. package/resource/knowledge/iot/app/activate-service.md +95 -0
  51. package/resource/knowledge/iot/app/demo/android.md +93 -0
  52. package/resource/knowledge/iot/app/demo/ios.md +87 -0
  53. package/resource/knowledge/iot/app/demo/miniprogram.md +79 -0
  54. package/resource/knowledge/iot/app/device-binding.md +378 -0
  55. package/resource/knowledge/iot/app/device-sharing.md +414 -0
  56. package/resource/knowledge/iot/app/family-management.md +762 -0
  57. package/resource/knowledge/iot/app/integration/android.md +328 -0
  58. package/resource/knowledge/iot/app/integration/harmonyos.md +326 -0
  59. package/resource/knowledge/iot/app/integration/ios.md +351 -0
  60. package/resource/knowledge/iot/app/integration/miniprogram.md +268 -0
  61. package/resource/knowledge/iot/app/monitor-playback.md +557 -0
  62. package/resource/knowledge/iot/app/remote-control.md +139 -0
  63. package/resource/knowledge/iot/app/video-call.md +559 -0
  64. package/resource/knowledge/iot/app/wechat-call/device-call-miniprogram.md +204 -0
  65. package/resource/knowledge/iot/app/wechat-call/miniprogram-call-device.md +193 -0
  66. package/resource/knowledge/iot/client-api/app/android/txiotcallsession.md +189 -0
  67. package/resource/knowledge/iot/client-api/app/android/txiotcloudstorage.md +77 -0
  68. package/resource/knowledge/iot/client-api/app/android/txiotdevicemanager.md +175 -0
  69. package/resource/knowledge/iot/client-api/app/android/txiotengine.md +172 -0
  70. package/resource/knowledge/iot/client-api/app/android/txiotenginedef.md +163 -0
  71. package/resource/knowledge/iot/client-api/app/android/txiotfamilymanager.md +146 -0
  72. package/resource/knowledge/iot/client-api/app/android/txiotmonitorsession.md +246 -0
  73. package/resource/knowledge/iot/client-api/app/harmonyos/txiotcallsession.md +191 -0
  74. package/resource/knowledge/iot/client-api/app/harmonyos/txiotcloudstorage.md +77 -0
  75. package/resource/knowledge/iot/client-api/app/harmonyos/txiotdevicemanager.md +183 -0
  76. package/resource/knowledge/iot/client-api/app/harmonyos/txiotengine.md +186 -0
  77. package/resource/knowledge/iot/client-api/app/harmonyos/txiotenginedef.md +164 -0
  78. package/resource/knowledge/iot/client-api/app/harmonyos/txiotfamilymanager.md +150 -0
  79. package/resource/knowledge/iot/client-api/app/harmonyos/txiotmonitorsession.md +252 -0
  80. package/resource/knowledge/iot/client-api/app/ios/txiotcallsession.md +199 -0
  81. package/resource/knowledge/iot/client-api/app/ios/txiotcloudstorage.md +76 -0
  82. package/resource/knowledge/iot/client-api/app/ios/txiotdevicemanager.md +173 -0
  83. package/resource/knowledge/iot/client-api/app/ios/txiotengine.md +173 -0
  84. package/resource/knowledge/iot/client-api/app/ios/txiotenginedef.md +171 -0
  85. package/resource/knowledge/iot/client-api/app/ios/txiotfamilymanager.md +146 -0
  86. package/resource/knowledge/iot/client-api/app/ios/txiotmonitorsession.md +250 -0
  87. package/resource/knowledge/iot/client-api/app/miniprogram/txiotcallsession.md +180 -0
  88. package/resource/knowledge/iot/client-api/app/miniprogram/txiotcloudstorage.md +76 -0
  89. package/resource/knowledge/iot/client-api/app/miniprogram/txiotdevicemanager.md +281 -0
  90. package/resource/knowledge/iot/client-api/app/miniprogram/txiotengine.md +183 -0
  91. package/resource/knowledge/iot/client-api/app/miniprogram/txiotenginedef.md +152 -0
  92. package/resource/knowledge/iot/client-api/app/miniprogram/txiotfamilymanager.md +179 -0
  93. package/resource/knowledge/iot/client-api/app/miniprogram/txiotmonitorsession.md +226 -0
  94. package/resource/knowledge/iot/client-api/device/android-smart-device.md +813 -0
  95. package/resource/knowledge/iot/client-api/device/linux-rtos-device.md +2027 -0
  96. package/resource/knowledge/iot/device/activate-service.md +167 -0
  97. package/resource/knowledge/iot/device/ai-voice-chat/advanced-features/custom-agent.md +171 -0
  98. package/resource/knowledge/iot/device/ai-voice-chat/advanced-features/smart-device-control.md +721 -0
  99. package/resource/knowledge/iot/device/ai-voice-chat/integration-guide/android-smart-device.md +247 -0
  100. package/resource/knowledge/iot/device/ai-voice-chat/integration-guide/linux-rtos-device.md +368 -0
  101. package/resource/knowledge/iot/device/ai-voice-chat/overview.md +84 -0
  102. package/resource/knowledge/iot/device/cloud-storage.md +696 -0
  103. package/resource/knowledge/iot/device/data-model.md +972 -0
  104. package/resource/knowledge/iot/device/demo/android-smart-device.md +97 -0
  105. package/resource/knowledge/iot/device/demo/linux-rtos-device.md +106 -0
  106. package/resource/knowledge/iot/device/device-ota-upgrade.md +237 -0
  107. package/resource/knowledge/iot/device/dynamic-registration/android-smart-device.md +275 -0
  108. package/resource/knowledge/iot/device/dynamic-registration/linux-rtos-device.md +297 -0
  109. package/resource/knowledge/iot/device/login-and-register/android-smart-device.md +131 -0
  110. package/resource/knowledge/iot/device/login-and-register/linux-rtos-device.md +291 -0
  111. package/resource/knowledge/iot/device/monitor-pushing/android-smart-device.md +237 -0
  112. package/resource/knowledge/iot/device/monitor-pushing/linux-rtos-device.md +493 -0
  113. package/resource/knowledge/iot/device/video-call/android-smart-device.md +299 -0
  114. package/resource/knowledge/iot/device/video-call/linux-rtos-device.md +465 -0
  115. package/resource/knowledge/iot/device/wechat-call/android-smart-device.md +534 -0
  116. package/resource/knowledge/iot/device/wechat-call/linux-rtos-device.md +681 -0
  117. package/resource/knowledge/iot/kids-watch/overview.md +28 -0
  118. package/resource/knowledge/iot/security-camera/activate-service.md +74 -0
  119. package/resource/knowledge/iot/security-camera/monitor-playback/app-integration.md +302 -0
  120. package/resource/knowledge/iot/security-camera/monitor-playback/device-integration/android.md +237 -0
  121. package/resource/knowledge/iot/security-camera/monitor-playback/device-integration/linux-rtos.md +493 -0
  122. package/resource/knowledge/iot/security-camera/overview.md +31 -0
  123. package/resource/knowledge/iot/security-camera/ptz-control.md +153 -0
  124. package/resource/knowledge/iot/security-camera/recording-and-snapshot.md +182 -0
  125. package/resource/knowledge/iot/security-camera/voice-intercom.md +174 -0
  126. package/resource/knowledge/iot/smart-vision/serviceoverview.md +114 -0
  127. package/resource/knowledge/iot/voice-recorder/app-demo.md +99 -0
  128. package/resource/knowledge/iot/voice-recorder/device-demo.md +189 -0
  129. package/resource/knowledge/iot/voice-recorder/overview.md +64 -0
  130. package/resource/knowledge/livekit/core-sdk/features/android/base-beauty.md +0 -2
  131. package/resource/knowledge/livekit/core-sdk/features/android/gift.md +0 -4
  132. package/resource/knowledge/livekit/core-sdk/features/android/live-list.md +0 -2
  133. package/resource/knowledge/livekit/core-sdk/features/flutter/audio-effect.md +0 -2
  134. package/resource/knowledge/livekit/core-sdk/features/flutter/base-beauty.md +0 -2
  135. package/resource/knowledge/livekit/core-sdk/features/flutter/gift.md +0 -4
  136. package/resource/knowledge/livekit/core-sdk/features/ios/base-beauty.md +0 -2
  137. package/resource/knowledge/livekit/core-sdk/features/ios/gift.md +0 -4
  138. package/resource/knowledge/livekit/core-sdk/features/ios/live-list.md +0 -2
  139. package/resource/knowledge/livekit/core-sdk/features/uni-app/base-beauty.md +0 -2
  140. package/resource/knowledge/livekit/core-sdk/features/uni-app/gift.md +0 -4
  141. package/resource/knowledge/livekit/core-sdk/live/android/co-guest-interaction.md +0 -4
  142. package/resource/knowledge/livekit/core-sdk/live/android/host-interaction.md +0 -10
  143. package/resource/knowledge/livekit/core-sdk/live/android/integration.md +0 -2
  144. package/resource/knowledge/livekit/core-sdk/live/flutter/co-guest-interaction.md +0 -2
  145. package/resource/knowledge/livekit/core-sdk/live/flutter/host-interaction.md +0 -10
  146. package/resource/knowledge/livekit/core-sdk/live/flutter/integration.md +0 -2
  147. package/resource/knowledge/livekit/core-sdk/live/ios/co-guest-interaction.md +0 -4
  148. package/resource/knowledge/livekit/core-sdk/live/ios/host-interaction.md +0 -10
  149. package/resource/knowledge/livekit/core-sdk/live/ios/integration.md +0 -2
  150. package/resource/knowledge/livekit/core-sdk/live/uni-app/co-guest-interaction.md +0 -4
  151. package/resource/knowledge/livekit/core-sdk/live/uni-app/host-interaction.md +0 -4
  152. package/resource/knowledge/livekit/core-sdk/live/uni-app/integration.md +0 -2
  153. package/resource/knowledge/livekit/core-sdk/voice/android/co-guest-interaction.md +0 -2
  154. package/resource/knowledge/livekit/core-sdk/voice/android/host-interaction.md +0 -4
  155. package/resource/knowledge/livekit/core-sdk/voice/android/integration.md +0 -4
  156. package/resource/knowledge/livekit/core-sdk/voice/flutter/integration.md +0 -2
  157. package/resource/knowledge/livekit/core-sdk/voice/ios/co-guest-interaction.md +0 -2
  158. package/resource/knowledge/livekit/core-sdk/voice/ios/host-interaction.md +0 -4
  159. package/resource/knowledge/livekit/core-sdk/voice/ios/integration.md +0 -4
  160. package/resource/knowledge/livekit/core-sdk/voice/uni-app/co-guest-interaction.md +0 -2
  161. package/resource/knowledge/livekit/core-sdk/voice/uni-app/integration.md +0 -2
  162. package/resource/knowledge/livekit/faq/error-code.md +0 -2
  163. package/resource/knowledge/push/config/android/honor.md +16 -1
  164. package/resource/knowledge/push/config/android/huawei.md +20 -4
  165. package/resource/knowledge/push/config/android/meizu.md +19 -5
  166. package/resource/knowledge/push/config/android/vivo.md +20 -1
  167. package/resource/knowledge/push/config/donut.md +0 -2
  168. package/resource/knowledge/push/config/harmonyos.md +21 -5
  169. package/resource/knowledge/push/integration/android.md +0 -5
  170. package/resource/knowledge/push/integration/donut.md +0 -3
  171. package/resource/knowledge/push/integration/flutter.md +1 -4
  172. package/resource/knowledge/push/integration/harmonyos.md +0 -3
  173. package/resource/knowledge/push/integration/ios.md +0 -3
  174. package/resource/knowledge/push/integration/react-native.md +0 -5
  175. package/resource/knowledge/push/integration/uni-app.md +0 -3
  176. package/resource/knowledge/push/integration/unity.md +0 -3
  177. package/resource/knowledge/push/integration/unreal-engine.md +0 -3
  178. package/resource/knowledge/roomkit/core-sdk/android/call-user-to-room.md +0 -2
  179. package/resource/knowledge/roomkit/core-sdk/android/room-participant-state.md +0 -2
  180. package/resource/knowledge/roomkit/core-sdk/android/room-state.md +0 -2
  181. package/resource/knowledge/roomkit/core-sdk/android/schedule-room.md +0 -2
  182. package/resource/knowledge/roomkit/core-sdk/flutter/call-user-to-room.md +0 -2
  183. package/resource/knowledge/roomkit/core-sdk/flutter/room-participant-state.md +0 -2
  184. package/resource/knowledge/roomkit/core-sdk/flutter/room-state.md +0 -2
  185. package/resource/knowledge/roomkit/core-sdk/flutter/schedule-room.md +0 -2
  186. package/resource/knowledge/roomkit/core-sdk/ios/call-user-to-room.md +0 -2
  187. package/resource/knowledge/roomkit/core-sdk/ios/room-participant-state.md +0 -2
  188. package/resource/knowledge/roomkit/core-sdk/ios/room-state.md +0 -2
  189. package/resource/knowledge/roomkit/core-sdk/ios/schedule-room.md +0 -2
  190. package/resource/knowledge/roomkit/core-sdk/vue/room-view.md +0 -3
  191. package/resource/knowledge/roomkit/preset/uniapp-app/integration.md +18 -14
  192. package/resource/knowledge/rtcengine/web/how_to_run_web_sdk_demo.md +0 -2
  193. package/resource/knowledge/rtcengine/web/plugin/23-advanced-support-detection.md +30 -0
  194. package/resource/knowledge/rtcengine/web/plugin/24-advanced-network-quality.md +0 -2
  195. package/resource/knowledge/rtcengine/web/plugin/31-advanced-plugins-overview.md +1 -1
  196. package/resource/knowledge/rtcengine/web/plugin/35-advanced-ai-denoiser.md +1 -1
  197. package/resource/knowledge/rtcengine/web/plugin/36-advanced-virtual-background.md +4 -0
  198. package/resource/knowledge/trtc/android/TRTCCloud.md +94 -85
  199. package/resource/knowledge/trtc/android/TRTCCloudDef.md +48 -46
  200. package/resource/knowledge/trtc/android/TRTCCloudListener.md +48 -48
  201. package/resource/knowledge/trtc/android/TXAudioEffectManager.md +18 -18
  202. package/resource/knowledge/trtc/android/TXDeviceManager.md +4 -4
  203. package/resource/knowledge/trtc/android/TXLiteAVCode.md +1 -0
  204. package/resource/knowledge/trtc/c++/ITRTCCloud.md +90 -90
  205. package/resource/knowledge/trtc/c++/ITXAudioEffectManager.md +18 -18
  206. package/resource/knowledge/trtc/c++/ITXDeviceManager.md +9 -9
  207. package/resource/knowledge/trtc/c++/TRTCCloudCallback.md +47 -47
  208. package/resource/knowledge/trtc/c++/TRTCTypeDef.md +47 -45
  209. package/resource/knowledge/trtc/c++/TXLiteAVCode.md +1 -0
  210. package/resource/knowledge/trtc/ios/TRTCCloud.md +93 -93
  211. package/resource/knowledge/trtc/ios/TRTCCloudDelegate.md +50 -50
  212. package/resource/knowledge/trtc/ios/TXAudioEffectManager.md +8 -8
  213. package/resource/knowledge/trtc/ios/TXDeviceManager.md +9 -9
  214. package/resource/knowledge/trtc/ios/TXLiteAVCode.md +1 -0
  215. package/resource/knowledge/trtc/ios/TXLiveSDKTypeDef.md +48 -46
  216. package/server-config.js +8 -9
  217. package/server.js +1 -1
  218. package/tools/common/finalize_answer.js +1 -1
  219. package/tools/common/present_framework_choice.js +1 -1
  220. package/tools/common/search_trtc_knowledge.js +22 -3
  221. package/tools/definitions/search_trtc_knowledge_def.js +3 -2
  222. package/utils/preflight-route.js +19 -2
  223. package/utils/report-cls-client.js +1 -1
  224. package/utils/report-es-client.js +1 -1
@@ -0,0 +1,299 @@
1
+ ---
2
+ product: iot
3
+ framework:
4
+ - android
5
+ types:
6
+ - feature
7
+ retrievable_scope: always
8
+ feature_domain: device
9
+ ---
10
+
11
+ 本文将介绍在 Android 平台实现设备**响应**来自 App 或微信小程序的呼叫(接听/拒绝),以及通话建立后的音视频采集推流、对端画面渲染与挂断。
12
+
13
+ ## 前提条件
14
+
15
+ 在接入通话功能前,请您先完成 登录与注册 文档中跑通 login 登录功能,如果您已经完成,可以跳过该操作。
16
+
17
+ > **说明:**
18
+ > 音视频通话依赖摄像头与麦克风采集,请确保已在 `AndroidManifest.xml` 中声明 `android.permission.CAMERA`、`android.permission.RECORD_AUDIO` 权限,并在运行时向用户申请授权。
19
+ >
20
+
21
+ ## 接入步骤
22
+
23
+ ### 步骤 1:注册通话事件回调
24
+
25
+ 登录成功后,通过 `TXIoTCallSession.getInstance().addListener` 注册 TXIoTCallSession.Listener,通话相关的回调如下:
26
+
27
+ |回调|说明|
28
+ |---------|---------|
29
+ |`onCallRequested`|收到对端来电时触发,携带 contact(对端信息)与 option(通话媒体类型等)。|
30
+ |`onCallAccepted`|通话正式建立时触发。被叫方调用 `accept` 成功、SDK 完成通话通道建立后也会回调,此时才是开启摄像头/麦克风采集推流的时机。|
31
+ |`onCallRejected`|本次呼叫被拒绝时触发。被叫方调用 `reject` 成功后也会回调,需结束本次呼叫并释放资源。|
32
+ |`onCallTimeout`|来电未在指定时间内被接听或拒绝时触发,需释放资源。|
33
+ |`onCallHangup`|对端挂断通话时触发。|
34
+
35
+ ``` java
36
+ private final TXIoTCallSession.Listener mCallListener = new TXIoTCallSession.Listener() {
37
+ @Override
38
+ public void onCallRequested(Contact contact, Option option) {
39
+ // 收到来电,根据业务决定接听或拒绝(见步骤 2)
40
+ }
41
+
42
+ @Override
43
+ public void onCallAccepted(Contact contact) {
44
+ // 通话正式建立,此时开启采集推流与渲染对端画面(见步骤 3)
45
+ }
46
+
47
+ @Override
48
+ public void onCallRejected(Contact contact) {
49
+ // 本次呼叫被拒绝,结束本次呼叫并释放资源
50
+ }
51
+
52
+ @Override
53
+ public void onCallTimeout(Contact contact) {
54
+ // 来电未及时处理超时,释放资源
55
+ }
56
+
57
+ @Override
58
+ public void onCallHangup(Contact contact) {
59
+ // 对端挂断,停止采集与渲染并释放资源(见步骤 4)
60
+ }
61
+ };
62
+
63
+ // 登录成功后注册监听
64
+ TXIoTCallSession.getInstance().addListener(mCallListener);
65
+ ```
66
+
67
+ ### 步骤 2:响应来电
68
+
69
+ 设备作为被叫,收到 `onCallRequested` 后,根据业务逻辑调用 `accept` 接听,或调用 `reject` 拒绝:
70
+
71
+ > **注意:**
72
+ > `accept` 回调 `onSuccess` 仅代表**接听请求已发出**,通话尚未建立。请勿在此时立即开启采集推流,务必等到 `onCallAccepted` 回调触发后(通话正式建立)再开启摄像头/麦克风。
73
+ >
74
+
75
+ ``` java
76
+ @Override
77
+ public void onCallRequested(Contact contact, Option option) {
78
+ // 示例:直接接听,实际业务可结合按键、界面弹窗等方式决定接听或拒绝
79
+ TXIoTCallSession.getInstance().accept(contact.userId, new TXIoTCallback() {
80
+ @Override
81
+ public void onSuccess() {
82
+ // 接听请求已发出,等待 onCallAccepted 回调触发后再开启采集推流
83
+ }
84
+
85
+ @Override
86
+ public void onError(int code, String desc) {
87
+ Log.e(TAG, "accept failed: " + code + " " + desc);
88
+ }
89
+ });
90
+
91
+ // 拒绝来电:
92
+ // TXIoTCallSession.getInstance().reject(contact.userId, callback);
93
+ }
94
+ ```
95
+
96
+ ### 步骤 3:开启采集推流与渲染对端画面
97
+
98
+ 通话正式建立(`onCallAccepted` 回调触发)后,根据 `onCallRequested` 携带的 `option.mediaContent` 开启本地采集推流,直接调用如下接口即可:
99
+
100
+ |接口|说明|
101
+ |---------|---------|
102
+ |`openCamera(frontCamera, view)`|开启摄像头采集并推流,`frontCamera` 为是否使用前置摄像头,`view` 为本地画面预览的 `TXCloudVideoView`(可为 `null`),视频通话时调用。|
103
+ |`openMicrophone()`|开启麦克风采集并推流,音频/视频通话均需调用。|
104
+ |`startRemoteView(userId, view)`|拉取并渲染对端 `userId` 的视频画面到指定 `TXCloudVideoView`。|
105
+
106
+ ``` java
107
+ // mLocalView / mRemoteView 为布局中的 TXCloudVideoView,分别用于本地预览与对端画面
108
+ String userId = "peer_user_id";
109
+ if (media == MediaContent.VIDEO || media == MediaContent.AUDIO_VIDEO) {
110
+ TXIoTCallSession.getInstance().openCamera(true, mLocalView); // 使用前置摄像头,本地预览到 mLocalView
111
+ TXIoTCallSession.getInstance().startRemoteView(userId, mRemoteView);// 渲染对端画面
112
+ }
113
+
114
+ if (media == MediaContent.AUDIO || media == MediaContent.AUDIO_VIDEO) {
115
+ TXIoTCallSession.getInstance().openMicrophone();
116
+ }
117
+ ```
118
+
119
+ ### 步骤 4:挂断通话
120
+
121
+ 通话中主动挂断,调用 `hangup`;对端挂断时会触发 `onCallHangup`,此时应关闭本地采集、停止对端画面渲染:
122
+ ``` java
123
+ // 主动挂断
124
+ TXIoTCallSession.getInstance().hangup(userId, new TXIoTCallback() {
125
+ @Override
126
+ public void onSuccess() {
127
+ // 停止采集与渲染,释放资源(onCallHangup / onCallTimeout / onCallRejected 均调用)
128
+ TXIoTCallSession.getInstance().stopRemoteView(userId);
129
+ TXIoTCallSession.getInstance().closeCamera();
130
+ TXIoTCallSession.getInstance().closeMicrophone();
131
+ }
132
+
133
+ @Override
134
+ public void onError(int code, String desc) {
135
+ Log.e(TAG, "hangup failed: " + code + " " + desc);
136
+ }
137
+ });
138
+
139
+ ```
140
+
141
+ > **说明:**
142
+ > 来电未及时处理时会触发 `onCallTimeout`,处理方式与 `onCallHangup` 一致:关闭采集、停止渲染并释放资源。
143
+ >
144
+
145
+ ## 完整示例代码
146
+
147
+ 以下 `CallActivity` 示例整合了通话事件响应、接听来电、开启采集推流与渲染对端画面、以及挂断的完整流程,实际接入时,请将布局中的 `TXCloudVideoView` 与业务界面对接。
148
+ ``` java
149
+ import android.os.Bundle;
150
+ import android.util.Log;
151
+ import androidx.annotation.Nullable;
152
+ import androidx.appcompat.app.AppCompatActivity;
153
+
154
+ import com.tencent.liteav.iot.TXIoTCallback;
155
+ import com.tencent.liteav.iot.TXIoTCallSession;
156
+ import com.tencent.liteav.iot.TXIoTCallSession.Contact;
157
+ import com.tencent.liteav.iot.TXIoTCallSession.MediaContent;
158
+ import com.tencent.liteav.iot.TXIoTCallSession.Option;
159
+ import com.tencent.liteav.iot.TXIoTError;
160
+ import com.tencent.rtmp.ui.TXCloudVideoView;
161
+
162
+ public class CallActivity extends AppCompatActivity {
163
+ private static final String TAG = "CallActivity";
164
+
165
+ private TXCloudVideoView mLocalView;
166
+ private TXCloudVideoView mRemoteView;
167
+
168
+ // 记住当前通话的媒体类型与对端账号,供接听/挂断复用
169
+ private MediaContent mCurrentMedia = MediaContent.AUDIO_VIDEO;
170
+ private String mPeerUserId;
171
+
172
+ private final TXIoTCallSession.Listener mCallListener = new TXIoTCallSession.Listener() {
173
+ @Override
174
+ public void onCallRequested(Contact contact, Option option) {
175
+ Log.i(TAG, "onCallRequested userId=" + contact.userId + " media=" + option.mediaContent);
176
+ mPeerUserId = contact.userId;
177
+ mCurrentMedia = option.mediaContent;
178
+ // 示例:自动接听。实际可弹出接听/拒绝界面
179
+ acceptCall(contact.userId);
180
+ }
181
+
182
+ @Override
183
+ public void onCallAccepted(Contact contact) {
184
+ Log.i(TAG, "onCallAccepted userId=" + contact.userId);
185
+ // 通话正式建立,此时才开启采集推流与渲染对端画面
186
+ startCallStreams(contact, mCurrentMedia);
187
+ }
188
+
189
+ @Override
190
+ public void onCallRejected(Contact contact) {
191
+ Log.i(TAG, "onCallRejected userId=" + contact.userId);
192
+ stopCallStreams(contact.userId);
193
+ }
194
+
195
+ @Override
196
+ public void onCallTimeout(Contact contact) {
197
+ Log.i(TAG, "onCallTimeout userId=" + contact.userId);
198
+ stopCallStreams(contact.userId);
199
+ }
200
+
201
+ @Override
202
+ public void onCallHangup(Contact contact) {
203
+ Log.i(TAG, "onCallHangup userId=" + contact.userId);
204
+ stopCallStreams(contact.userId);
205
+ }
206
+ };
207
+
208
+ @Override
209
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
210
+ super.onCreate(savedInstanceState);
211
+ // setContentView(R.layout.activity_call);
212
+ // mLocalView = findViewById(R.id.local_view);
213
+ // mRemoteView = findViewById(R.id.remote_view);
214
+
215
+ // 请确保已完成 login 登录,并已申请摄像头/麦克风运行时权限
216
+ TXIoTCallSession.getInstance().addListener(mCallListener);
217
+ }
218
+
219
+ // 接听来电(采集推流放到 onCallAccepted 回调中执行)
220
+ private void acceptCall(String userId) {
221
+ TXIoTCallSession.getInstance().accept(userId, new TXIoTCallback() {
222
+ @Override
223
+ public void onSuccess() {
224
+ Log.i(TAG, "accept succeed, waiting for onCallAccepted");
225
+ }
226
+
227
+ @Override
228
+ public void onError(int code, String desc) {
229
+ Log.e(TAG, "accept failed: " + code + " " + desc);
230
+ }
231
+ });
232
+ }
233
+
234
+ // 通话建立后:根据媒体类型开启采集推流并渲染对端画面
235
+ private void startCallStreams(Contact contact, MediaContent media) {
236
+ TXIoTCallSession session = TXIoTCallSession.getInstance();
237
+ if (media == MediaContent.VIDEO || media == MediaContent.AUDIO_VIDEO) {
238
+ int rc = session.openCamera(true, mLocalView);
239
+ if (rc != TXIoTError.SUCCESS) {
240
+ Log.e(TAG, "openCamera failed: " + rc);
241
+ }
242
+ session.startRemoteView(contact.userId, mRemoteView);
243
+ }
244
+ if (media == MediaContent.AUDIO || media == MediaContent.AUDIO_VIDEO) {
245
+ int rc = session.openMicrophone();
246
+ if (rc != TXIoTError.SUCCESS) {
247
+ Log.e(TAG, "openMicrophone failed: " + rc);
248
+ }
249
+ }
250
+ }
251
+
252
+ // 主动挂断
253
+ private void hangupCall(String userId) {
254
+ TXIoTCallSession.getInstance().hangup(userId, new TXIoTCallback() {
255
+ @Override
256
+ public void onSuccess() {
257
+ stopCallStreams(userId);
258
+ }
259
+
260
+ @Override
261
+ public void onError(int code, String desc) {
262
+ Log.e(TAG, "hangup failed: " + code + " " + desc);
263
+ }
264
+ });
265
+ }
266
+
267
+ // 停止采集与渲染,释放资源
268
+ private void stopCallStreams(String userId) {
269
+ TXIoTCallSession session = TXIoTCallSession.getInstance();
270
+ if (userId != null) {
271
+ session.stopRemoteView(userId);
272
+ }
273
+ session.closeCamera();
274
+ session.closeMicrophone();
275
+ }
276
+
277
+ @Override
278
+ protected void onDestroy() {
279
+ super.onDestroy();
280
+ // 退出通话界面时,务必挂断并释放资源,移除监听
281
+ if (mPeerUserId != null) {
282
+ hangupCall(mPeerUserId);
283
+ } else {
284
+ stopCallStreams(null);
285
+ }
286
+ TXIoTCallSession.getInstance().removeListener(mCallListener);
287
+ }
288
+ }
289
+ ```
290
+
291
+ ## 常见问题
292
+
293
+ |现象|排查建议|
294
+ |---------|---------|
295
+ |APP 发起呼叫后,设备端未收到 `onCallRequested`。|确认设备已成功登录;确认已调用 `addListener` 注册监听且未被提前 `removeListener`。|
296
+ |`accept` 回调 `onError` 返回失败。|确认设备已成功登录;确认 `userId` 有效;确认当前没有其他通话正在进行。|
297
+ |本地或对端画面不显示。|确认已声明并授予 `CAMERA`、`RECORD_AUDIO` 权限;确认 `openCamera` 传入的本地 `TXCloudVideoView` 与 `startRemoteView` 传入的对端 `TXCloudVideoView` 均已正确加入布局且可见。|
298
+ |多次通话后设备资源占用持续增长。|检查 `onCallHangup` / `onCallTimeout` / `onCallRejected` 是否都正确调用了 `closeCamera` / `closeMicrophone` / `stopRemoteView`,并在退出界面时 `removeListener`,避免资源泄漏。|
299
+