本发明涉及数据处理,尤其涉及一种基于cesium的服务器端渲染及实时像素流服务发布方法。
背景技术:
1、随着云计算的快速发展,云渲染作为一种新兴的前沿技术已经逐渐成为三维渲染领域的重要技术手段,尤其在数字孪生业务的应用比较广泛。但目前,该项技术的实现主要依赖虚幻引擎、unity等商业游戏引擎厂商,当前数字孪生应用仅仅是基于这些引擎的二次开发,这与科技发展方向以及信创发展要求相悖。
2、在实际项目建设过程中发现,基于商用游戏引擎的服务器端三维场景发布像素流方法也存在以下不足:1)场景固定。在制作完成部署后无法动态扩充新增场景,新的场景上线需重新打包部署。2)新增负载服务困难。游戏引擎要实现负载服务的拓展,需要改造其云渲染信令程序以及进行繁琐配置。3)非自主研发风险不可控。企业需遵守商用游戏引擎研发企业制定的商业规则及收费规则,这为企业自主研发带来了技术风险和成本不确定风险。通过调研,很多小微企业的数字孪生应用往往采用轻量级的webgl技术进行三维渲染,如果要基于云渲染进行业务开发就要面临推翻原有技术积累,重新进行技术转型和研发团队重建,从而导致学习门槛提高,开发成本增加等问题,也意味着丧失了核心技术。
3、因此,有必要提供一种基于cesium的服务器端渲染及实时像素流服务发布方法解决上述技术问题。
技术实现思路
1、本发明提供一种基于cesium的服务器端渲染及实时像素流服务发布方法,该方法以基于webgl技术的开源组件cesium为切入点,进行三维实时云渲染,在服务器端开启一个在进程中运行的浏览器,利用该浏览器访问基于cesium的三维场景页面,并在页面中集成三维场景图像捕获与webrtc 类库调用的脚本程序,从而实现了在服务器端渲染并发布实时像素流服务的功能。
2、为解决上述技术问题,本发明提供的一种基于cesium的服务器端渲染及实时像素流服务发布方法,包括以下步骤:
3、s1.启动渲染应用程序;启动采用node.js语言构建的渲染应用程序;在启动过程中,渲染应用程序会加载必要的node.js模块,包括puppeteer库和fs库,以支持后续操作;
4、s2.启动无头模式浏览器;渲染应用程序调用s1中加载的puppeteer.launch()方法,添加服务器gpu可用和无头模式初始化配置;
5、s3.读取场景配置文件;渲染应用程序利用s1中加载的fs库,读取场景配置文件并将文件内容加载到程序中,通过场景数量计算接下来需要打开的标签页数量;
6、s4.打开标签页访问三维场景页面网址;渲染应用程序使用s2中browser类对象的newpage()方法,打开s3中对应数量的标签页,并获取可以控制和操作标签页的page类对象;使用page.goto()方法访问三维场景页面网址,page.setviewport()方法设置s3中的场景参数,page.evaluate()方法调用三维场景页面中的 dom 元素、执行 javascript 代码;
7、s5.捕获三维场景图像;三维场景渲染站点服务页面根据接收到的场景参数,利用cesium在画布canvas上渲染满足条件的三维场景,利用canvas.capturestream()方法捕获画布内容,并创建mediastream对象来存储捕获到的像素流,其中mediastream对象是webrtc 类库像素流传输的标准对象;
8、s6.发送像素流;服务端三维场景渲染站点服务页面利用s4中连通的媒体通道,使用rtcpeerconnection.addtrack()方法,将s5中获取的mediastream对象发送到客户端页面,从而实现了服务器端的发布像素流功能;
9、s7.接收并执行鼠标操作指令;服务端三维场景渲染站点服务页面利用s4中连通的数据通道,接收传来的鼠标操作指令对象dataview后,解析dataview中鼠标的坐标、类型以及其他相关信息,使用mouseevent事件对象来创建模拟事件,使用 dom 元素的dispatchevent 方法来触发模拟事件,从而影响服务端三维场景发生变化,实现了用户的实时远程操控。
10、优选的,s2启动无头模式浏览器时,进程中开启一个无头模式chromium浏览器并获取到launch()方法返回的browser类对象,通过browser类对象控制和操作chromium浏览器。
11、优选的,s3读取场景配置文件时,该场景配置文件中包含多个三维场景页面的访问网址以及场景配置参数。
12、优选的,s4中,page.setviewport()方法设置s3中的场景参数,该场景参数包括设置三维场景渲染的分辨率以及捕获时帧率。
13、优选的,s4在页面加载时调用webrtc类库init()方法以进行初始化并获取rtcpeerconnection类对象,初始化完成后接通客户端页面与服务端三维场景渲染站点服务页面的媒体通道,并利用rtcpeerconnection.createdatachannel()方法连通数据通道,以便后续传输像素流与接收鼠标操作指令。
14、优选的,s7中解析dataview中的鼠标操作类型包括点击、移动及释放。
15、与相关技术相比较,本发明具有如下有益效果:
16、本发明提供一种基于cesium的服务器端渲染及实时像素流服务发布方法,该方法为那些希望借助cesium实现服务器渲染的企业,提供了一种高效且经济的解决方案,使采用cesium作为开发引擎的gis与数字孪生整合的系统可以低成本的使用云渲染技术。
17、本发明提供一种基于cesium的服务器端渲染及实时像素流服务发布方法,该方法实现了渲染应用程序和三维场景渲染的分开部署,通过场景配置文件进行关联,减小已采用cesium作为开发引擎的三维项目的接入难度。
18、本发明提供一种基于cesium的服务器端渲染及实时像素流服务发布方法,该方法支持单个渲染应用通过配置兼容多个三维场景,极大的增加了服务器端像素流发布的灵活性,并且充实了渲染应用的服务内容。
19、本发明提供一种基于cesium的服务器端渲染及实时像素流服务发布方法,该方法实现了跨平台支持,支持在windows和linux两种服务器操作系统中部署使用。
1.一种基于cesium的服务器端渲染及实时像素流服务发布方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的一种基于cesium的服务器端渲染及实时像素流服务发布方法,其特征在于:所述s2启动无头模式浏览器时,进程中开启一个无头模式chromium浏览器并获取到launch()方法返回的browser类对象,通过browser类对象控制和操作chromium浏览器。
3.根据权利要求1所述的一种基于cesium的服务器端渲染及实时像素流服务发布方法,其特征在于:所述s3读取场景配置文件时,该场景配置文件中包含多个三维场景页面的访问网址以及场景配置参数。
4.根据权利要求1所述的一种基于cesium的服务器端渲染及实时像素流服务发布方法,其特征在于:所述s4中,page.setviewport()方法设置s3中的场景参数,该场景参数包括设置三维场景渲染的分辨率以及捕获时帧率。
5.根据权利要求1所述的一种基于cesium的服务器端渲染及实时像素流服务发布方法,其特征在于:所述s4在页面加载时调用webrtc类库init()方法以进行初始化并获取rtcpeerconnection类对象,初始化完成后接通客户端页面与服务端三维场景渲染站点服务页面的媒体通道,并利用rtcpeerconnection.createdatachannel()方法连通数据通道,以便后续传输像素流与接收鼠标操作指令。
6.根据权利要求1所述的一种基于cesium的服务器端渲染及实时像素流服务发布方法,其特征在于:所述s7中解析dataview中的鼠标操作类型包括点击、移动及释放。