mapv-cloudrenderengine 2.7.9 → 2.8.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.
package/README.md CHANGED
@@ -1,133 +1,282 @@
1
- # CloudRenderEngine
1
+ # CloudRenderEngine 🌐
2
2
 
3
- CloudRenderEngine 是由百度地图开放平台FE团队推出的基于一个基于Unreal Engine 5 引擎封装的JavaScript API三维孪生SDK,支持前端开发人员快速完成实时三维数字孪生系统的开发,构建智慧城市、交通、文旅、园区、元宇宙、BIM等场景业务应用。
3
+ CloudRenderEngine 是百度地图开放平台推出的 UE5 像素流三维数字孪生前端 SDK
4
+ 它通过 WebRTC 将 Unreal Engine 5 场景实时推流到浏览器,并提供统一 JavaScript API 完成场景渲染、交互控制、对象管理和行业可视化能力接入。
4
5
 
5
- 开发者使用 CloudRenderEngine 提供的丰富 API 可以完成全球级别的球面和平面三维场景实时高性能渲染、三维场景交互、移动端高性能渲染和交互、各类点线面动态数据可视化展示、巡航、模型单体化应用、路侧资产数据挂接、地图路径规划、实时信号灯、路名、POI,全球实时路况等功能。CloudRenderEngine 降低了 UE 研发的门槛,提升数字孪生场景构建的效率,是一款具备强地图能力、大规模场景渲染、效果高保真、强业务支撑的数字孪生引擎 SDK。
6
+ 适用场景包括智慧城市、智慧交通、园区管理、文旅展陈、BIM 可视化、实时监控和数字底座应用。
6
7
 
7
8
  ---
8
9
 
9
- ## 📚 API 文档
10
+ ## 产品能力
10
11
 
11
- [点击访问 API 文档](https://mapv.baidu.com/mapvunreal/docs/AssetLayer.html)
12
-
13
- ## 🤖 SKill
14
-
15
- [点击访问SKill](https://github.com/baidu-maps/unreal-sdk-skills)
12
+ - **云渲染交互**:浏览器低门槛接入 UE5 高保真场景,支持鼠标/触控/键盘交互。
13
+ - **地图级可视化**:支持点、线、面、热力、雷达、粒子、轨迹、标签等对象体系。
14
+ - **行业对象能力**:支持交通、资产、路况、监控、信息牌等业务对象挂接。
15
+ - **相机与动画系统**:支持飞行、巡航、关键帧导航、场景切换。
16
+ - **环境控制能力**:支持天气、时间、光照等全局场景调度。
17
+ - **WebRTC 监控诊断**:可监控连接质量、码率、丢包与延迟指标。
16
18
 
17
19
  ---
18
20
 
19
- ## 🚀 开始使用
21
+ ## 安装与引入 📦
20
22
 
21
- ### 1️⃣ 接入 MapV CloudRenderEngine
23
+ 包名:`mapv-cloudrenderengine`
22
24
 
23
- #### 通过 npm 引入
24
25
  ```bash
25
26
  npm install mapv-cloudrenderengine
26
27
  ```
27
28
 
29
+ ```javascript
30
+ import * as Engine from 'mapv-cloudrenderengine';
31
+ ```
32
+
33
+ ---
34
+
35
+ ## 必备前提 ✅
36
+
37
+ 云渲染模式下,页面必须提供 `id="player"` 的容器作为视频输出目标:
38
+
39
+ ```html
40
+ <div id="player" style="width: 100vw; height: 100vh;"></div>
41
+ ```
42
+
43
+ 建议 `player` 全屏铺设,并将业务 UI 通过更高 `z-index` 叠加显示。
44
+
45
+ ---
46
+
47
+ ## 最小可运行示例(React) 🚀
48
+
49
+ ```jsx
50
+ import { useEffect } from 'react';
51
+ import * as Engine from 'mapv-cloudrenderengine';
52
+
53
+ export default function App() {
54
+ useEffect(() => {
55
+ Engine.CloudRenderEngine.DispatchServer.host = 'http://your-dispatch-host:8017';
56
+
57
+ const engine = new Engine.CloudRenderEngine({
58
+ projectName: 'your-project-name',
59
+ connectOnLoad: true,
60
+ shouldShowPlayOverlay: false,
61
+ matchViewportResolution: true,
62
+ });
63
+
64
+ engine.load(
65
+ () => console.log('connected'),
66
+ err => console.error('load error', err)
67
+ );
68
+
69
+ engine.addEventListener('videoInitialised', () => {
70
+ console.log('video ready');
71
+ });
72
+
73
+ return () => {
74
+ // 业务侧可在此处补充销毁逻辑
75
+ };
76
+ }, []);
77
+
78
+ return <div id="player" style={{ width: '100vw', height: '100vh' }} />;
79
+ }
80
+ ```
81
+
28
82
  ---
29
83
 
30
- ### 2️⃣ Hello World 示例
84
+ ## 快速开始 🧭
85
+
86
+ CloudRenderEngine 支持两种接入模式:
87
+
88
+ 1. **调度服务模式(推荐)**:通过调度服务分配 UE5 渲染实例,适合生产环境。
89
+ 2. **单机像素流模式**:直连单实例流服务,适合本地调试或固定部署场景。
90
+
91
+ ### 1) 调度服务模式(推荐) ☁️
92
+
93
+ ```javascript
94
+ import * as Engine from 'mapv-cloudrenderengine';
95
+
96
+ // 1. 配置调度服务
97
+ Engine.CloudRenderEngine.DispatchServer.host = 'http://your-dispatch-host:8017';
98
+ Engine.CloudRenderEngine.DispatchServer.tag = 'all'; // 可选
99
+ Engine.CloudRenderEngine.DispatchServer.username = 'admin'; // 可选
100
+ Engine.CloudRenderEngine.DispatchServer.password = 'admin'; // 可选
101
+
102
+ // 2. 检查可用容量(建议)
103
+ const capacity = await Engine.CloudRenderEngine.DispatchServer.GetAllCapacityInfo();
104
+ if (!capacity || capacity.all <= 0) {
105
+ throw new Error('服务器暂无可用渲染容量');
106
+ }
107
+
108
+ // 3. 初始化引擎
109
+ const engine = new Engine.CloudRenderEngine({
110
+ projectName: 'your-project-name',
111
+ connectOnLoad: true,
112
+ shouldShowPlayOverlay: false,
113
+ matchViewportResolution: true,
114
+ });
115
+
116
+ // 4. 连接并监听状态
117
+ engine.load(
118
+ () => console.log('调度成功'),
119
+ err => console.error('调度失败', err)
120
+ );
31
121
 
32
- CloudRenderEngine 支持两种引擎连接模式:
33
- 1. **单机像素流模式**
34
- 2. **调度服务模式**
122
+ engine.addEventListener('videoInitialised', () => {
123
+ console.log('画面就绪,可以安全调用场景 API');
124
+ });
35
125
 
36
- #### 单机像素流模式
126
+ engine.addEventListener('signalingServerError', () => {
127
+ console.error('信令服务连接异常');
128
+ });
129
+ ```
130
+
131
+ ### 2) 单机像素流模式 🖥️
37
132
 
38
133
  ```javascript
39
- axios.get('http://10.18.165.2:8889/streamer?project=' + name);
134
+ import * as Engine from 'mapv-cloudrenderengine';
135
+
40
136
  const engine = new Engine.CloudRenderEngine({
41
- wsUrl: wsUrl, // 重要参数
42
- isShowTestUI: false,
137
+ wsUrl: 'ws://your-pixel-streaming-signaling',
43
138
  connectOnLoad: true,
44
139
  shouldShowPlayOverlay: false,
45
140
  matchViewportResolution: true,
46
141
  });
47
142
 
48
- // 渲染场景。 此时可以开启一个加载动画
49
143
  engine.load();
144
+ engine.addEventListener('videoInitialised', () => {
145
+ console.log('画面就绪');
146
+ });
147
+ ```
50
148
 
51
- const handleEngineLoaded = () => {
52
- // 执行这个事件后代表资源加载完
53
- // 加载完成才可以使用 engine 的一系列方法
54
- // 此时可以关闭加载动画
55
- };
149
+ ---
150
+
151
+ ## 常用 API 模式 🛠️
152
+
153
+ ### 场景对象增删 🧱
56
154
 
57
- const disconnected = () => {
58
- // 服务连接异常时会回调此方法
59
- };
155
+ ```javascript
156
+ const line = new Engine.Line({ color: { r: 0, g: 1, b: 0 }, width: 5 });
157
+ line.setData(geojsonData);
158
+ engine.addToScene(line);
60
159
 
61
- engine.addEventListener('videoInitialised', handleEngineLoaded);
62
- engine.addEventListener('signalingServerError', disconnected);
160
+ // 资源释放
161
+ engine.destoryObject(line);
63
162
  ```
64
163
 
65
- [查看详细文档](https://mapv.baidu.com/mapvunreal/docs/singlePixel.html)
164
+ ### 相机飞行与巡航 🎥
66
165
 
67
- ---
166
+ ```javascript
167
+ engine.moveTo(
168
+ { x: 116.404, y: 39.915, z: 500 },
169
+ { roll: 0, pitch: -45, yaw: 0 },
170
+ { duration: 2.0, zoom: 1500 }
171
+ );
172
+
173
+ engine.navigateByKeypoints(
174
+ [[116.40, 39.91, 20, 0, -30, 160], [116.41, 39.92, 30, 0, -40, 130]],
175
+ { speed: 36, lockAll: true }
176
+ );
177
+ ```
68
178
 
69
- #### 调度服务模式
179
+ ### 环境控制(天气/时间) 🌤️
70
180
 
71
181
  ```javascript
72
- import { CloudRenderEngine } from '@baidu/cloudrenderengine';
73
-
74
- // 配置调度服务 host 必须
75
- CloudRenderEngine.DispatchServer.host = 'http://10.18.165.2:8889';
76
- // 设置要调度的集群 tag 可选
77
- CloudRenderEngine.DispatchServer.tag = 'online';
78
-
79
- // 设置用户名和密码 可选,默认都是 admin
80
- Engine.CloudRenderEngine.DispatchServer.username = 'maptest';
81
- Engine.CloudRenderEngine.DispatchServer.password = 'maptest';
82
-
83
- CloudRenderEngine.DispatchServer.GetAllCapacity()
84
- .then(capacity => {
85
- if (capacity > 0) {
86
- // 可以连接了
87
- }
88
- });
89
-
90
- const engine = new CloudRenderEngine({
91
- isShowTestUI: false,
92
- connectOnLoad: true,
93
- shouldShowPlayOverlay: false,
94
- // consul 里配置的英文项目名称
95
- projectName: 'beijing',
182
+ engine.UDS.changeWeather('clearSkies');
183
+ engine.UDS.changeTime(14, 30);
184
+ ```
185
+
186
+ ### 获取点击坐标 📍
187
+
188
+ ```javascript
189
+ engine.camera.addEventListener('clickLocation', event => {
190
+ const loc = event?.content?.Location;
191
+ if (loc) {
192
+ console.log(loc.longitude, loc.latitude, loc.altitude);
193
+ }
96
194
  });
195
+ ```
97
196
 
98
- const onSuccessed = message => {
99
- // 调度成功
100
- };
101
197
 
102
- const onLoadError = error => {
103
- // 调度失败,此处会给出具体原因,比如权限不足、可用调度容量不足、用户名或者密码错误、已达到该用户的最大连接数等。
104
- };
198
+ ---
105
199
 
106
- // 渲染场景。调用 GetAllCapacity 检查 capacity 大于 0 后才可以
107
- engine.load(onSuccessed, onLoadError);
200
+ ## AssetLayer 使用要求(重点) 📌
108
201
 
109
- const handleEngineLoaded = () => {
110
- // 执行这个事件后代表资源加载完
111
- // 加载完成才可以使用 engine 的一系列方法
112
- };
202
+ `AssetLayer` 依赖模型信息初始化,必须遵循顺序:
113
203
 
114
- const disconnected = () => {
115
- // 服务连接异常时会回调此方法
116
- };
204
+ 1. `videoInitialised` 中调用一次 `engine.setupModelInfo(...)`
205
+ 2. 再创建 `new Engine.AssetLayer(...)`
206
+ 3. 最后 `engine.addToScene(assetLayer)`
117
207
 
118
- engine.addEventListener('videoInitialised', handleEngineLoaded);
119
- engine.addEventListener('signalingServerError', disconnected);
120
- ```
208
+ 如果跳过第 1 步,`AssetLayer` 将无法正常工作。
209
+
210
+ ---
211
+
212
+ ## 数据格式约定 📐
213
+
214
+ - 坐标系:WGS84 经纬度
215
+ - 位置结构:`{ x: 经度, y: 纬度, z: 高度(米) }`
216
+ - 旋转结构:`{ roll, pitch, yaw }`
217
+ - 颜色结构:`{ r, g, b }`,范围 `0~1`
218
+ - 可视化对象数据:GeoJSON
219
+
220
+ ---
121
221
 
122
- [查看详细文档](https://mapv.baidu.com/mapvunreal/docs/schServer.html)
222
+ ## 连接与性能诊断建议 📊
223
+
224
+ - 使用 `videoInitialised` 作为“可操作场景”的唯一就绪信号。
225
+ - 连接前先检查调度容量,避免无效重试。
226
+ - 通过 `engine.onWebRtcConnectionStats()` 监控 RTT、丢包、码率等指标。
227
+ - 对于大量对象场景,及时调用 `engine.destoryObject()` 回收资源。
228
+
229
+ ---
230
+
231
+ ## 版本与发布 🏷️
232
+
233
+ - npm 包名:`mapv-cloudrenderengine`
234
+ - 当前版本可在 `package.open.json` 中查看
235
+
236
+ ---
237
+
238
+ ## 文档与资源 📚
239
+
240
+ - API 文档:[https://mapv.baidu.com/mapvunreal/docs/AssetLayer.html](https://mapv.baidu.com/mapvunreal/docs/AssetLayer.html)
241
+ - 调度服务接入说明:[https://mapv.baidu.com/mapvunreal/docs/schServer.html](https://mapv.baidu.com/mapvunreal/docs/schServer.html)
242
+ - 单机像素流说明:[https://mapv.baidu.com/mapvunreal/docs/singlePixel.html](https://mapv.baidu.com/mapvunreal/docs/singlePixel.html)
243
+
244
+ ---
245
+
246
+ ## Skill 介绍 🤖
247
+
248
+ 为方便开发者和 AI 助手快速接入,本 SDK 提供配套 Skill 知识库,覆盖以下能力:
249
+
250
+ - 引擎初始化与调度服务接入
251
+ - 点线面与行业对象可视化代码生成
252
+ - 相机控制、事件处理、天气时间控制
253
+ - AssetLayer 使用规范与常见问题排障
254
+
255
+ Skill 仓库地址:
256
+ [https://github.com/baidu-maps/unreal-sdk-skills](https://github.com/baidu-maps/unreal-sdk-skills)
123
257
 
124
258
  ---
125
259
 
126
- ## 🛠️ 常见问题
127
260
 
128
- ### 如何获取更多支持?
129
- - 访问 [官方文档](https://mapv.baidu.com/mapvunreal/docs/AssetLayer.html)
130
- - 联系百度地图开放平台技术支持团队
261
+ ## 常见问题 ❓
262
+
263
+ **Q1:页面无画面输出?**
264
+ 优先检查:`#player` 容器是否存在、调度服务配置是否正确、项目容量是否充足。
265
+
266
+ **Q2:对象已创建但不显示?**
267
+ 检查数据坐标、GeoJSON 结构、`visible` 状态、相机位置和高度。
268
+
269
+ **Q3:点击无法获取坐标?**
270
+ 使用 `engine.camera.addEventListener('clickLocation', ...)` 并确认画面已 `videoInitialised`。
271
+
272
+ **Q4:连接卡顿或延迟高?**
273
+ 查看 WebRTC 统计指标(RTT/丢包/码率),并优先排查网络与服务端资源瓶颈。
131
274
 
132
275
  ---
133
276
 
277
+
278
+ ## 如何获取更多支持 📮
279
+
280
+ - 技术支持:联系百度地图开放平台技术支持团队
281
+ - 商务合作:[百度地图开放平台](https://jiaotong.baidu.com/contactus/)
282
+