@nnepoch/dtc-sdk 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/README.md +298 -0
  2. package/dist/browser/dtc-sdk-3.0.0.js +2 -0
  3. package/dist/cjs/index.cjs +38 -0
  4. package/dist/cjs/index.d.cts +5600 -0
  5. package/dist/esm/index.d.ts +5600 -0
  6. package/dist/esm/index.js +38 -0
  7. package/docs/api/api/classes/Animation.md +280 -0
  8. package/docs/api/api/classes/ApiRegistryError.md +60 -0
  9. package/docs/api/api/classes/Camera.md +601 -0
  10. package/docs/api/api/classes/Connect.md +257 -0
  11. package/docs/api/api/classes/Dlss.md +67 -0
  12. package/docs/api/api/classes/HighLighterEffect.md +173 -0
  13. package/docs/api/api/classes/Layer.md +444 -0
  14. package/docs/api/api/classes/Model.md +193 -0
  15. package/docs/api/api/classes/ModelPOI.md +279 -0
  16. package/docs/api/api/classes/ModelTransform.md +579 -0
  17. package/docs/api/api/classes/PathPatrol.md +337 -0
  18. package/docs/api/api/classes/Popup.md +323 -0
  19. package/docs/api/api/classes/Scene.md +272 -0
  20. package/docs/api/api/classes/Screen.md +157 -0
  21. package/docs/api/api/classes/TimeLine.md +274 -0
  22. package/docs/api/api/classes/UIPOI.md +318 -0
  23. package/docs/api/api/classes/WeatherSystem.md +581 -0
  24. package/docs/api/api/functions/createApiFacade.md +20 -0
  25. package/docs/api/api/index.md +45 -0
  26. package/docs/api/api/interfaces/ApiInstanceMap.md +107 -0
  27. package/docs/api/api/interfaces/ApiRegistryContext.md +47 -0
  28. package/docs/api/api/type-aliases/ApiFacade.md +7 -0
  29. package/docs/api/api/type-aliases/ApiModuleFactory.md +23 -0
  30. package/docs/api/api/type-aliases/ApiModuleKey.md +5 -0
  31. package/docs/api/api/type-aliases/ApiRegistry.md +7 -0
  32. package/docs/api/api/variables/API_MODULE_KEYS.md +5 -0
  33. package/docs/api/api/variables/PendingValidationSchemaMap.md +9 -0
  34. package/docs/api/api/variables/apiRegistry.md +7 -0
  35. package/docs/api/application/DTCEngine/classes/DTCEngine.md +738 -0
  36. package/docs/api/application/DTCEngine/index.md +11 -0
  37. package/docs/api/application/DTCEngine/interfaces/DTCEngineOptions.md +22 -0
  38. package/docs/api/index.md +7 -0
  39. package/docs/api/typedoc-sidebar.json +735 -0
  40. package/docs/api/types/enumerations/LayerEnum.md +21 -0
  41. package/docs/api/types/enumerations/ModelTransformType.md +251 -0
  42. package/docs/api/types/enumerations/VideoCodeType.md +37 -0
  43. package/docs/api/types/index.md +146 -0
  44. package/docs/api/types/interfaces/AnimationGetLengthRequest.md +29 -0
  45. package/docs/api/types/interfaces/AnimationPlayRequest.md +61 -0
  46. package/docs/api/types/interfaces/AnimationSetSpeedRequest.md +29 -0
  47. package/docs/api/types/interfaces/AnimationStartLoopRequest.md +53 -0
  48. package/docs/api/types/interfaces/AnimationStopLoopRequest.md +21 -0
  49. package/docs/api/types/interfaces/AnimationStopRequest.md +21 -0
  50. package/docs/api/types/interfaces/ApiRequestEnvelope.md +45 -0
  51. package/docs/api/types/interfaces/ApiResponseEnvelope.md +57 -0
  52. package/docs/api/types/interfaces/AuthErrorInfo.md +21 -0
  53. package/docs/api/types/interfaces/AuthSessionSnapshot.md +45 -0
  54. package/docs/api/types/interfaces/CameraFlyByPathRequest.md +37 -0
  55. package/docs/api/types/interfaces/CameraFlyToTargetRequest.md +29 -0
  56. package/docs/api/types/interfaces/CameraLookAtRequest.md +69 -0
  57. package/docs/api/types/interfaces/CameraObjFollowRequest.md +37 -0
  58. package/docs/api/types/interfaces/CameraSetFlySpeedRequest.md +13 -0
  59. package/docs/api/types/interfaces/CameraSetFovRequest.md +13 -0
  60. package/docs/api/types/interfaces/CameraSetPositionAndRotationRequest.md +21 -0
  61. package/docs/api/types/interfaces/CenterConnectResult.md +27 -0
  62. package/docs/api/types/interfaces/CenterEnvelope.md +33 -0
  63. package/docs/api/types/interfaces/CenterServiceInfo.md +33 -0
  64. package/docs/api/types/interfaces/CenterTokenAuthorizeResult.md +9 -0
  65. package/docs/api/types/interfaces/DlssSetEnableRequest.md +23 -0
  66. package/docs/api/types/interfaces/DlssSetQualityRequest.md +14 -0
  67. package/docs/api/types/interfaces/EngineConfig.md +127 -0
  68. package/docs/api/types/interfaces/EngineStatusInfo.md +59 -0
  69. package/docs/api/types/interfaces/FeatureToggleRequest.md +21 -0
  70. package/docs/api/types/interfaces/HighLighterEnableRequest.md +11 -0
  71. package/docs/api/types/interfaces/HighLighterRemoveHighLightModelRequest.md +21 -0
  72. package/docs/api/types/interfaces/HighLighterSetHighLightModelRequest.md +29 -0
  73. package/docs/api/types/interfaces/LayerAddRequest.md +61 -0
  74. package/docs/api/types/interfaces/LayerChildElementRequest.md +21 -0
  75. package/docs/api/types/interfaces/LayerModelAddRequest.md +75 -0
  76. package/docs/api/types/interfaces/LayerModelRemoveRequest.md +21 -0
  77. package/docs/api/types/interfaces/LayerPOIAddRequest.md +117 -0
  78. package/docs/api/types/interfaces/LayerSelectorRequest.md +21 -0
  79. package/docs/api/types/interfaces/LayerShowUIPopRequest.md +51 -0
  80. package/docs/api/types/interfaces/LayerSwitchModelRequest.md +29 -0
  81. package/docs/api/types/interfaces/ModelAddRequest.md +61 -0
  82. package/docs/api/types/interfaces/ModelBoundsRequest.md +21 -0
  83. package/docs/api/types/interfaces/ModelPOIAddRequest.md +53 -0
  84. package/docs/api/types/interfaces/ModelPOIDeleteByGroupRequest.md +13 -0
  85. package/docs/api/types/interfaces/ModelPOIDeleteByIdRequest.md +21 -0
  86. package/docs/api/types/interfaces/ModelPOIGetInfoRequest.md +21 -0
  87. package/docs/api/types/interfaces/ModelPOIUpdateRequest.md +53 -0
  88. package/docs/api/types/interfaces/ModelPOIVisibleByGroupRequest.md +21 -0
  89. package/docs/api/types/interfaces/ModelRemoveRequest.md +21 -0
  90. package/docs/api/types/interfaces/ModelSelectorRequest.md +21 -0
  91. package/docs/api/types/interfaces/ModelSetVisibleByTagsRequest.md +21 -0
  92. package/docs/api/types/interfaces/ModelSetVisibleRequest.md +29 -0
  93. package/docs/api/types/interfaces/ModelTransformNodeRequest.md +21 -0
  94. package/docs/api/types/interfaces/ModelTransformRestoreRequest.md +21 -0
  95. package/docs/api/types/interfaces/ModelTransformRotateByTargetRequest.md +85 -0
  96. package/docs/api/types/interfaces/ModelTransformRotateRequest.md +29 -0
  97. package/docs/api/types/interfaces/ModelTransformScaleRequest.md +37 -0
  98. package/docs/api/types/interfaces/ModelTransformStartMoveRequest.md +61 -0
  99. package/docs/api/types/interfaces/NetworkAdaptationActionResult.md +47 -0
  100. package/docs/api/types/interfaces/NetworkAdaptationActionStep.md +29 -0
  101. package/docs/api/types/interfaces/NetworkAdaptationState.md +41 -0
  102. package/docs/api/types/interfaces/NetworkDecisionTrace.md +53 -0
  103. package/docs/api/types/interfaces/NetworkDiagnosticsSnapshot.md +53 -0
  104. package/docs/api/types/interfaces/NetworkMetricsSnapshot.md +59 -0
  105. package/docs/api/types/interfaces/PathPatrolAddRequest.md +109 -0
  106. package/docs/api/types/interfaces/PathPatrolNodeRequest.md +21 -0
  107. package/docs/api/types/interfaces/PathPatrolSetTimeNodeRequest.md +37 -0
  108. package/docs/api/types/interfaces/PathPatrolUpdateRequest.md +53 -0
  109. package/docs/api/types/interfaces/PopupAddRequest.md +21 -0
  110. package/docs/api/types/interfaces/PopupDelayRequest.md +13 -0
  111. package/docs/api/types/interfaces/PopupItemRequest.md +61 -0
  112. package/docs/api/types/interfaces/PopupRemoveRequest.md +21 -0
  113. package/docs/api/types/interfaces/PopupShowDistanceRequest.md +13 -0
  114. package/docs/api/types/interfaces/PopupShowRequest.md +29 -0
  115. package/docs/api/types/interfaces/PopupSyncInfoRequest.md +37 -0
  116. package/docs/api/types/interfaces/QosEvent.md +65 -0
  117. package/docs/api/types/interfaces/QosReportingPayload.md +47 -0
  118. package/docs/api/types/interfaces/QosRuntimeContext.md +29 -0
  119. package/docs/api/types/interfaces/QosSessionContext.md +29 -0
  120. package/docs/api/types/interfaces/QosWarnErrorSummary.md +37 -0
  121. package/docs/api/types/interfaces/ResolvedEngineConfig.md +123 -0
  122. package/docs/api/types/interfaces/SceneListenCompassRequest.md +13 -0
  123. package/docs/api/types/interfaces/SceneSwitchRequest.md +13 -0
  124. package/docs/api/types/interfaces/ScreenSetSceneFPSRequest.md +14 -0
  125. package/docs/api/types/interfaces/ScreenSetSceneRenderBitrateRequest.md +15 -0
  126. package/docs/api/types/interfaces/ScreenSetScreenResolutionRequest.md +23 -0
  127. package/docs/api/types/interfaces/ScreenSetVideoDecodeRequest.md +13 -0
  128. package/docs/api/types/interfaces/SignallingAllocateResponse.md +27 -0
  129. package/docs/api/types/interfaces/StandardResponse.md +33 -0
  130. package/docs/api/types/interfaces/TimeSerialNode.md +21 -0
  131. package/docs/api/types/interfaces/TimelineNodeRequest.md +21 -0
  132. package/docs/api/types/interfaces/TimelinePlayRequest.md +53 -0
  133. package/docs/api/types/interfaces/TimelineSetSpeedRequest.md +37 -0
  134. package/docs/api/types/interfaces/TimelineStopRequest.md +45 -0
  135. package/docs/api/types/interfaces/UIPOIAddRequest.md +21 -0
  136. package/docs/api/types/interfaces/UIPOIDeleteByGroupRequest.md +13 -0
  137. package/docs/api/types/interfaces/UIPOIDeleteByIdRequest.md +21 -0
  138. package/docs/api/types/interfaces/UIPOIEnableOverlapRequest.md +13 -0
  139. package/docs/api/types/interfaces/UIPOIShowDistanceRequest.md +13 -0
  140. package/docs/api/types/interfaces/UIPOIUpdateRequest.md +21 -0
  141. package/docs/api/types/interfaces/UIPOIUpdateStateRequest.md +21 -0
  142. package/docs/api/types/interfaces/Vector3JsonInput.md +27 -0
  143. package/docs/api/types/interfaces/WeatherChangeSeasonRequest.md +21 -0
  144. package/docs/api/types/interfaces/WeatherOpenCameraFogRequest.md +69 -0
  145. package/docs/api/types/interfaces/WeatherSetAnimateTimeOfDayRequest.md +29 -0
  146. package/docs/api/types/interfaces/WeatherSetDayAndNightRequest.md +13 -0
  147. package/docs/api/types/interfaces/WeatherSetSceneTimeRequest.md +21 -0
  148. package/docs/api/types/interfaces/WeatherSetTimeSyncRequest.md +13 -0
  149. package/docs/api/types/interfaces/WeatherTypeRequest.md +27 -0
  150. package/docs/api/types/type-aliases/ApiCallback.md +21 -0
  151. package/docs/api/types/type-aliases/AuthWorkflowState.md +5 -0
  152. package/docs/api/types/type-aliases/DlssQuality.md +7 -0
  153. package/docs/api/types/type-aliases/EngineLogLevel.md +5 -0
  154. package/docs/api/types/type-aliases/EngineViewMode.md +5 -0
  155. package/docs/api/types/type-aliases/GetWeatherTypeRequest.md +7 -0
  156. package/docs/api/types/type-aliases/NetworkAdaptationActionType.md +7 -0
  157. package/docs/api/types/type-aliases/NetworkAdaptationLevel.md +7 -0
  158. package/docs/api/types/type-aliases/NetworkAdaptationMode.md +9 -0
  159. package/docs/api/types/type-aliases/QosEventName.md +9 -0
  160. package/docs/api/types/type-aliases/QosLevel.md +7 -0
  161. package/docs/api/types/type-aliases/QosStage.md +7 -0
  162. package/docs/api/types/type-aliases/QosStatus.md +7 -0
  163. package/docs/api/types/type-aliases/ScreenRenderBitratePreset.md +7 -0
  164. package/docs/api/types/type-aliases/Season.md +7 -0
  165. package/docs/api/types/type-aliases/Vector3Input.md +5 -0
  166. package/docs/api/types/variables/DlssQuality.md +57 -0
  167. package/docs/api/types/variables/QOS_EVENT_NAMES.md +7 -0
  168. package/docs/api/types/variables/ScreenRenderBitratePreset.md +39 -0
  169. package/docs/api/types/variables/ScreenRenderBitratePresetOptions.md +5 -0
  170. package/docs/api/types/variables/ScreenRenderBitratePresetValueMap.md +27 -0
  171. package/docs/api/types/variables/Season.md +33 -0
  172. package/package.json +86 -0
package/README.md ADDED
@@ -0,0 +1,298 @@
1
+ # enginesdk3
2
+
3
+ 基于 `@epicgames-ps/lib-pixelstreamingfrontend-ue5.6` 的 UE 前端 SDK。
4
+
5
+ ## 📋 代码审查报告
6
+
7
+ > **最新审查**: 2026-08-15 | **健康度**: C+ (65/100) | **问题数**: 184
8
+
9
+ 查看完整报告:[docs/code-review/](./docs/code-review/)
10
+
11
+ **关键发现**:
12
+ - 🔴 6 个 Critical 问题需要立即处理
13
+ - 🟠 49 个 High 优先级问题
14
+ - ⚡ 5 个快速胜利(1.4 天可完成)
15
+
16
+ **代码审查与重构记录**:
17
+ - [总览、处理计划与完成情况](./docs/code-review/README.md)
18
+ - [详细问题清单](./docs/code-review/CODE_REVIEW_ISSUES.md)
19
+
20
+ **当前重构状态**:
21
+ - ✅ EventBus 提取完成
22
+ - ✅ ConnectionManager 提取完成
23
+ - ✅ EngineBuilder 装配完成
24
+ - ✅ DTCEngine 第一轮简化及生命周期回归修复完成
25
+ - ✅ 聚焦测试、类型检查和生产源码 lint 通过
26
+
27
+ ---
28
+
29
+ ## 安装
30
+
31
+ ```bash
32
+ pnpm install
33
+ ```
34
+
35
+ ## 构建命令
36
+
37
+ ```bash
38
+ pnpm run clean # 清理 dist 和 API 文档
39
+ pnpm run build # 构建 npm CJS/ESM、browser 压缩包和混淆包
40
+ pnpm run build:lib # 仅构建 npm CJS/ESM bundle 与声明文件
41
+ pnpm run build:browser # 仅构建 browser IIFE 压缩包和混淆包
42
+ pnpm run verify:build # 验证入口加载、导出、声明文件和 sourcemap
43
+ pnpm run typecheck # 仅执行 TypeScript 类型检查
44
+ pnpm run rebuild # clean + build
45
+ pnpm run build:release # rebuild + API 文档
46
+ pnpm run watch # library 构建监听
47
+ pnpm run dev:browser # browser 构建监听
48
+ ```
49
+
50
+ npm library 产物由 tsdown 统一生成:
51
+
52
+ ```text
53
+ dist/cjs/index.cjs
54
+ dist/cjs/index.d.cts
55
+ dist/esm/index.js
56
+ dist/esm/index.d.ts
57
+ ```
58
+
59
+ 浏览器产物由 tsdown 生成 IIFE,再由 `javascript-obfuscator` 就地替换为混淆版本:
60
+
61
+ ```text
62
+ dist/browser/dtc-sdk-3.0.0.js
63
+ ```
64
+
65
+
66
+ ## Playground 开发环境
67
+
68
+ - `playground/` 是 SDK 维护者使用的多技术栈联调容器。
69
+ - `playground/vue/` 当前使用 `Vue 3 + Vite`,页面入口在 `playground/vue/src/App.vue`,直接消费源码入口 `src/index.ts`。
70
+ - 现有 [examples/index.html](examples/index.html) 继续保留为版本化 browser 产物的 smoke test。
71
+ - 首次使用:
72
+
73
+ ```bash
74
+ pnpm run playground:dev
75
+ ```
76
+
77
+ - Vue Playground 配置固定写在 [playground/vue/src/App.vue](playground/vue/src/App.vue) 的 `PLAYGROUND_CONFIG` 常量中。
78
+ - 更详细的字段说明和联调说明见 [playground/vue/README.md](playground/vue/README.md)。
79
+
80
+ ## GitLab 发版流程
81
+
82
+ - 分支开发阶段仅执行 `pnpm changeset`(或 `npx @changesets/cli`)生成 `.changeset/*.md`。
83
+ - `changeset version` 由 GitLab CI 在默认主分支 push 的 `release` job 中统一执行。
84
+ - 发布完成后,CI 会回写版本文件并提交 `chore(release): vX.Y.Z [skip ci]`,同时推送 tag。
85
+ - 详细说明见 [docs/GITLAB_RELEASE_FLOW.md](docs/GITLAB_RELEASE_FLOW.md)。
86
+
87
+ ## 迁移说明
88
+
89
+ - 旧的 `build:cjs` / `build:esm` 已移除;CJS/ESM 由 `build:lib` 一次性生成。
90
+ - `build:lib` 同时执行类型检查和 npm bundle,不再保留单独的 `build:types` 命令。
91
+ - `build:obfuscate` 作为 `build:browser` 的内部后处理步骤,通常不需要单独调用。
92
+ - `verify:build` 用于检查发布产物,不参与默认构建。
93
+
94
+ ## 运行时配置
95
+
96
+ ```ts
97
+ import { DTCEngine } from '@nnepoch/dtc-sdk';
98
+
99
+ const engine = new DTCEngine({
100
+ centerIP: 'https://center.example.com',
101
+ sceneName: 'demo-scene',
102
+ token: 'token-from-auth-system',
103
+ dom: document.getElementById('app') as HTMLDivElement,
104
+ viewMode: 'bs',
105
+ logger: 'info'
106
+ });
107
+ ```
108
+
109
+ - 连接流程:`new DTCEngine(...)` 后会自动选择 bootstrap 模式并发起 WebRTC 连接。
110
+ - `Connect.connect()` 保留为兼容层接口,不再是用户必调入口。
111
+ - 支持 `engine.restart()`:用于按 `disconnect -> start` 顺序重启中心与 WebRTC 链路。
112
+ - `restart()` 返回 `Promise<AuthSessionSnapshot>`,重启成功 resolve,鉴权/建连失败 reject。
113
+ - `disconnect()` 后仍可调用 `restart()` 重新拉起链路。
114
+ - bootstrap 模式优先级:
115
+ - `signalingServer`
116
+ - `centerIP`
117
+ - `signalingServer` 的新语义为“信令服务 HTTP 基地址”,SDK 会自动请求 `${signalingServer}/api/v1/allocate?token={config.token}` 获取最终 WebSocket 播放地址。
118
+ - 中心鉴权模式下,`TokenAuthorize.values.signalingServer` 返回信令服务 HTTP 基地址,SDK 会再请求 `${signalingServer}/api/v1/allocate?token={engineToken}` 获取最终 WebSocket 播放地址。
119
+ - `setSignallingUrlBuilder` 不承载鉴权逻辑,不会在 builder 中发起异步鉴权请求。
120
+ - 中心消息处理采用 sdk2 风格的 `OnMessage` 路由分发,鉴权状态由消息事件驱动推进。
121
+ - 鉴权主链路不再依赖 `waitForMessage`。
122
+ - 参数校验基于 `zod`,在 API 调用前执行 `safeParse`。
123
+ - 初始化配置也会执行结构校验与默认值填充(如 `mapType=web`、`operationType=viewer`)。
124
+ - 支持从 `navigator.userAgent` 读取初始化覆盖参数,格式与 sdk2 对齐:
125
+ - `RunMode/<value>` -> `viewMode`
126
+ - `CenterIP/<value>` -> `centerIP`
127
+ - `PrivateKey/<value>` -> `privateKey`
128
+ - `showProgressBar/<true|false>` -> `showProgressBar`
129
+ - 配置优先级:`userAgent` > 调用方 `config` > SDK 默认值。
130
+ - `viewMode` 仅支持 `bs | cs`,默认值为 `bs`;传入 `desktop` 或其他非法值会直接抛错并中断初始化。
131
+ - 参数不合法时会快速失败,不会触发底层请求发送。
132
+ - 若未提供 `centerIP`、`signalingServer` 中的任意一种,初始化会直接失败。
133
+ - 日志默认复用 `@epicgames-ps/lib-pixelstreamingcommon-ue5.6` 的 logger。
134
+ - `logger` 参数为字符串级别:`silent | error | warn | info | debug`。
135
+ - `logger` 默认值为 `info`。
136
+ - BREAKING: 不再支持旧对象写法 `logger: { level, includeStack, prefix }`。
137
+ - `includeStack` 固定为 `false`,`prefix` 改为 SDK 内部固定策略。
138
+ - V1 不提供日志自定义 sink 接口。
139
+ - SDK 内部已接入轻量自定义日志上报通道(默认关闭),仅上报 SDK 内部 logger 打印日志。
140
+ - 日志上报配置不对业务侧暴露,统一由 SDK 内部维护。
141
+ - 运维接入步骤见 [docs/LOG_REPORTING_OPS.md](docs/LOG_REPORTING_OPS.md)。
142
+ - `agentBridge` 为可选宿主扩展能力,配置入口位于 `DTCEngine` 的第二个参数 `DTCEngineOptions` 中,而不是 `EngineConfig`。
143
+ - 当前 `agentBridge` 只完成源码骨架与生命周期挂载点预留,默认关闭,不会主动建立 MCP runtime 连接。
144
+
145
+ ```ts
146
+ await engine.whenReady();
147
+ await engine.restart();
148
+ ```
149
+
150
+ ### 初始对接推荐写法
151
+
152
+ 直接提供信令服务 HTTP 基地址:
153
+
154
+ ```ts
155
+ const engine = new DTCEngine({
156
+ signalingServer: 'https://signaling.example.com',
157
+ sceneName: 'demo-scene',
158
+ token: 'token-from-auth-system',
159
+ dom: document.getElementById('app') as HTMLDivElement
160
+ });
161
+ ```
162
+
163
+ 中心鉴权模式:
164
+
165
+ ```ts
166
+ const engine = new DTCEngine({
167
+ centerIP: 'https://center.example.com',
168
+ sceneName: 'demo-scene',
169
+ token: 'token-from-auth-system',
170
+ dom: document.getElementById('app') as HTMLDivElement
171
+ });
172
+ ```
173
+
174
+ ## viewMode 说明
175
+
176
+ - `bs`:浏览器流模式,启用完整浏览器输入链路(键鼠触摸等)与标准事件转发。
177
+ - `cs`:宿主协同模式,保留键盘输入并关闭鼠标/触摸/手柄/XR 输入转发,适用于宿主侧接管交互的场景。
178
+ - 不支持 `desktop`:不会做软降级映射,统一按配置错误处理。
179
+
180
+ ## API 接入维护说明
181
+
182
+ - `DTCEngine` 的 API 门面由注册表+工厂统一装配,不再在构造函数中逐个 `new Xxx(...)`。
183
+ - 新增 API 时,仅需修改 [src/api/apiRegistry.ts](src/api/apiRegistry.ts) 的注册项并实现对应模块类。
184
+ - 若新增模块需要特殊依赖注入(例如 `authWorkflow` / `session`),直接在该模块注册工厂中注入即可。
185
+ - 完成注册后,`engine.<Module>` 属性会自动挂载,避免重复修改入口初始化代码。
186
+ - 当前已补齐 `engine.Screen` 模块(码率/FPS/分辨率),用于业务调用与自动弱网策略复用。
187
+
188
+ ## 弱网自适应 V1
189
+
190
+ - 自动判定输入:`statsReceived + webRtc` 生命周期事件。
191
+ - 状态机档位:`Normal / Mild / Moderate / Severe / Recovering`,含迟滞与冷却机制。
192
+ - 自动动作:通过 `Screen.SetSceneRenderBitrate / SetSceneFPS / SetScreenResolution` 执行降级与恢复。
193
+ - 诊断面板:默认快捷键 `Ctrl + Alt + D`,支持 `Auto / Manual` 接管。
194
+ - 详细阈值和验收口径见 [docs/NETWORK_ADAPTATION_V1.md](docs/NETWORK_ADAPTATION_V1.md)。
195
+
196
+ 弱网相关事件:
197
+ - `networkLevelChanged`
198
+ - `networkActionExecuted`
199
+ - `networkModeChanged`
200
+ - `networkDiagnosticsVisibilityChanged`
201
+ - `networkDiagnosticsUpdated`
202
+
203
+ ## RequestBridge 多响应能力(开发说明)
204
+
205
+ - `RequestBridge.sendRequest(...)` 继续保持单响应语义:命中首条 `requestId` 响应即完成并释放 pending。
206
+ - `RequestBridge.sendStreamRequest(...)` 用于多响应场景:返回可取消 Promise,同一 `requestId` 的状态统一通过单个 `callback` 分发。
207
+ - 多响应请求释放条件:
208
+ - 收到结束信号(默认支持 `code=DONE/STREAM_DONE` 或 `done/isEnd=true`)
209
+ - 调用返回 Promise 的 `cancel()`
210
+ - 会话断开(`webRtcDisconnected` / `webRtcFailed`)
211
+ - 流式相关类型可从 SDK 类型导出中获取:
212
+ - `StreamRequestCallback`
213
+ - `StreamRequestEvent`
214
+ - `StreamRequestPromise`
215
+
216
+ ## EngineStatus 事件
217
+
218
+ ```ts
219
+ engine.on(engine.Events.EngineStatus, (status) => {
220
+ console.log(status);
221
+ });
222
+ ```
223
+
224
+ - `EngineStatus` 与 sdk2 事件名保持一致。
225
+ - 事件会在会话连接后持续更新派发;会话断开或失败时停止派发,重连成功后恢复。
226
+ - 状态来源仅为 WebRTC 统计(`statsReceived`)。
227
+
228
+ `EngineStatusInfo` 主要字段:
229
+ - `CameraHeight`
230
+ - `FPS`
231
+ - `Width`
232
+ - `Height`
233
+ - `runTime`
234
+ - `bytePerSecond`
235
+ - `lostPacketsRate`
236
+ - `delayTime`
237
+ - `Codec`
238
+
239
+ ## UE 主动推送事件
240
+
241
+ 以下事件由 UE 侧通过 Pixel Streaming Response 通道主动推送触发,SDK 内部使用单一 response listener 按 `fn/uuid` 路由后派发:
242
+
243
+ - `MapLoaded`(底层事件名:`OnApiDataChannelStarted`)
244
+ - `ModelClick`
245
+ - `CameraHeight`
246
+ - `LeftClick`(`MouseLeftButtonClick`)
247
+ - `LeftDoubleClick`(`MouseLeftButtonDoubleClick`)
248
+ - `LeftLongPressed`(`MouseLeftButtonLongPressed`)
249
+ - `RightClick`(`MouseRightButtonClick`)
250
+ - `RightDoubleClick`(`MouseRightButtonDoubleClick`)
251
+ - `RightLongPressed`(`MouseRightButtonLongPressed`)
252
+ - `SceneConfig`
253
+ - `ModelTrigger`
254
+
255
+ 示例:
256
+
257
+ ```ts
258
+ engine.on(engine.Events.ModelClick, (payload) => {
259
+ console.log('模型点击', payload);
260
+ });
261
+ ```
262
+
263
+ - 事件 payload 默认透传 UE 上行消息内容。
264
+ - 若上行消息中的 `fn/uuid` 未命中上述事件集合,SDK 不会触发这些事件。
265
+
266
+ ## 从 sdk2 迁移(模式相关)
267
+
268
+ - sdk2 中的 `desktop` 在 sdk3 中已移除;请改为 `bs` 或 `cs`。
269
+ - 若历史接入使用 `desktop`,需要在业务配置中显式切换为目标模式,不支持自动兜底。
270
+ - `new DTCEngine(...)` 后依然保持自动鉴权并自动连接,`Connect.connect()` 仅作为兼容层保留。
271
+ - sdk3 已对齐 sdk2 的容器注参逻辑:可通过 `navigator.userAgent` 注入 `RunMode/CenterIP/PrivateKey/showProgressBar` 并覆盖 `config`。
272
+ - 本次中心消息迁移范围内,`Offer`、`Answer`、`IceCandidate` 不新增专门处理逻辑。
273
+ - 详细迁移步骤可参考 `docs/VIEW_MODE_MIGRATION.md`。
274
+
275
+ ## 参数校验失败示例
276
+
277
+ ```ts
278
+ try {
279
+ await engine.Camera.lookAt({ id: '' });
280
+ } catch (error) {
281
+ console.error(error);
282
+ // SDKValidationError:
283
+ // {
284
+ // code: 'VALIDATION_ERROR',
285
+ // module: 'Camera',
286
+ // method: 'lookAt',
287
+ // issues: [...]
288
+ // }
289
+ }
290
+ ```
291
+
292
+ ## 产物
293
+
294
+ - `dist/cjs/index.cjs`(CJS)
295
+ - `dist/esm/index.js`(ESM)
296
+ - `dist/esm/index.d.ts`(types)
297
+ - `dist/browser/dtc-sdk-<version>.js`(script 可直引,已混淆)
298
+ - `docs/api`(typedoc)