天天看点

UE像素流,来颗“减肥药”吧!

Part1前言

像素流是虚幻引擎UE5提供的前后端分离框架:服务器运行UE5,前端渲染UI,中间传输视频流。这样,即使是无显卡的低端电脑或手机也能访问运行着UE5的服务器。

但是UE官方的像素流代码库非常臃肿,文档匮乏,难以直接使用,我们将其改造成轻量版的,开箱即用的像素流前端库以及信令服务器,地址:

​​​ https://github.com/inveta/peer-stream。​​ 除此之外,我们还开发了与之配套的工具链,自动化监护像素流的生命周期,即使服务器无人管理也能正常运行。

UE像素流,来颗“减肥药”吧!

Part2UE5自启动:飞快的启动速度

拜UE5的HLOD技术(Nanite以及WorldPartition)所赐,UE5打包程序启动时间基本在5s以内(即使是超大的模型),因此UE5没必要一直开在服务器上耗资源,网页访问的时候再临时启动,反正耽误不了几秒钟。在我们的开源库中,UE5自启动程序写在信令服务器中:当WebSocket有来自前端的新连接时,就启动UE5,无人访问时经过一段时间自动关闭UE5。

Part3单例模式:线程安全的文件锁

UE5自启动需要考虑线程安全的问题:如果前端有高并发的连接,很可能会启动多个UE5进程,那就给服务器带来巨大的压力。除此之外,运维人员如果不规范操作,也可能意外的打开多个UE5,导致系统崩溃。为了从根源上避免这个问题,我们开源了UE5单例模式插件:它严格限制了在同一台电脑上至多只能同时开启一个UE5实例,通过文件锁实现原子操作,非常稳定。

插件地址:https://github.com/inveta/SingleTon。

UE像素流,来颗“减肥药”吧!

Part4UE5自动退出:节省系统资源

当没人看的时候,UE5自动关闭是理所应当的,但空闲关闭的超时时间需要设定在合理的区间内,时间设置既不能太短也不能太长:时间太短的话易发生频繁的启动与关闭,增加死机的风险;时间太长的话则形同虚设了,浪费系统资源。因此在合理的范围内,经过多次尝试,我们的像素流插件通过以下3种超时时间来控制UE5的生命周期,

● 信令服务器断开后10s内退出UE5:连信令服务器都挂了,UE5也就没有存在的必要了,但是为了防止短暂的中断,10s以内重连可以不用退出。

● 前端断开后,30分钟内退出UE5:用户关闭网页后,留30分钟观察期,期间若有新的网页连入,则停止计时器。

● UE5启动超过24小时后,退出UE5:有时候人不在电脑跟前,但浏览器保持着连接,导致UE5连续运行过长的时间,也会严重耗电,因此设定UE5最大运行时长为24小时。

Part5节流与防抖:最大程度预防崩溃