Part1前言 和官方臃肿不堪的像素流SDK相比,我们在官方的基础上做了大量的优化和精简,开发出了轻量、零依赖、开箱即用的软件套装,项目持续开发了2年,经受住了大量的压力测试,收获了许多社区文档和用户反馈 基于WebRTC 的像素流技术主要由 3 个网络节点组成,各司其职: 基于像素流的三维可视化技术以图中的 UE5、信令、前端这 3 个节点为主,再辅以 Web、代理、Stun 等可选节点,组成了整个云渲染的底层架构 ,各节点之间相互配合、监控、认证,为像素流的稳定性提供了全面的保护,各节点的分工如下: Part3示例:完整的像素流工程 # 安装 WebSocket npm install ws@8.5.0 # /UE5.exe -PixelStreamingURL="ws://localhost:88" # 打开测试网页 start http://localhost:88/test.html Part4signal.js response = await ps.emitMessage(request); // 返回不稳定 Part11展望 接下来,我们准备兼容苹果IOS端,升级至UE5.1,希望大家帮忙提提PR、问题反馈,一起把像素流
像素流SDK 目录像素流SDK 组成 动机 Pixel Streamer 信令服务器 密码认证 nginx的wss代理 WebComponnets:Web组件API 生命周期控制 启动UE 限制连接人数 版本的更新 Data Channel接口 信令服务器的调试 鼠标、键盘、触屏事件 自动播放 资源 SDK地址:https://gitee.com/pqo/PixelStreamer/ 我们的虚幻引擎像素流 下面是开发过程中的一些核心理念 组成 像素流SDK由3个端组成,分别是: ·前端:浏览器 ·中间件:信令服务器,nodejs ·后端:UE4 其中后端是UE官方开发的C++插件,前端和中间件则是由我们开发 这里我们定义了
UE4官方从4.21版嵌入像素流送插件Pixel Streaming,到了4.24版本插件已经做了很大改善,目前使用像素流技术可以在用户非本机的电脑或者服务器上,远程运行虚幻的应用程序。 C、延迟低 像素流送使用WebRTC点对点通信框架,使用者和虚幻引擎应用程序之间的延迟很低。点量软件像素流产品可以做到5-30ms的延迟,和本地安装的效果几乎一样。 虽然UE4官方对于像素流技术出了很多相关文档和资料,但在将该技术应用于实际项目中时,点量软件发现很多客户存在以下问题: 1、部分浏览器的兼容性问题,比如iOS下的微信、部分chrome版本,会出现莫名其妙打不开的情况 像素流只支持UE4的内容,点量像素流产品是支持所有的内容,不止UE4、Unity,还包括各种软件,比如3DMax、BIM、Flash等。 所以对于UE4像素流使用中浏览器兼容性等问题合作也许是个不错的选择。 像素流应用领域.png
UE4的像素流自4.21推出Beta版后,我们根据官方文档分别在局域网和公有云部署像素流应用进行测试,对跨不同平台、画质、延迟等特性一一测试。 同时我们关注到目前市场上有点量云流化可以提供内容流送的服务,测试后要比UE4像素流更产品化,做的已经比较成熟了。 下面简单介绍云流化对比UE4像素流的优势:1、测试中发现像素流有一些浏览器兼容性问题,比如iOS下的微信、部分chrome版本的浏览器,会出现打不开的问题。 2、像素流是作为引擎的插件,只支持UE4的内容,点量云流化是支持所有的内容,不止UE4、Unity,还包括各种软件,比如3DMax、Flash等。 3、像素流只是引擎的一个功能,缺少产品化功能和服务,比如负载均衡、测速调度、自动更新、发布、后台统计报表、用户状态监控、报警等机制,后续完善需要不少精力和时间。4、像素流没有客户端模式,只支持网页版。
如果想要使用网页访问这些模型资源内容,我们通常会使用官方的像素流,虽然这种方式可以实现网页访问,但是也存在一些问题和缺点。传统像素流1. 适用类型,传统像素流只是作为UE的引擎插件,只支持UE的内容,像unity或者其他类型的软件都没办法支持使用。4. 在以上几种因素的影响下,传统的像素流满足不了一些使用者的需求,通常会采用新型的像素流送方式---点量像素流送。在上述几个影响的因素方面,点量像素流送是如何解决的?以下可供参考:1. 兼容性,点量像素流送像常规的主流浏览器都支持,包括谷歌、360、微信或iOS,都能轻松打开进行操作。2. 访问方面,点量像素流送在弱网环境下会自动匹配相适应的码率,达到稳定流畅的运行操作。3. 总的来说,这种新的像素流送方式能够解决传统像素流的痛点,并且应用支持的范围也较广,对于一些场景使用者来说大大减少了问题的存在,让使用更加方便。
官方的像素流 SDK 相比,我们开发出了更轻量的像素流 SDK,包含 2 个文件:前端组件(WebComponents API)外加信令服务器(NodeJS)。 端口 token insigma 信令密码 limit 4 玩家数量上限 启动 UE4 首先开启像素流插件,然后在独立启动模式的设置中,或者打包后的文件中输入启动选项。 所有依赖升级到最新版,包括浏览器、NodeJS、UE4、像素流。 网络问题:是否能 ping 通,是否开了防火墙(可用 test/unreal.html 测试)。 高频请求导致 UE4 崩溃。 UE 端通过检查启动命令行来判断像素流的相关信息。 不需要像素流的时候只要把 video 移出 DOM 即可,不用手动关闭 WebRTC。 访问外网时,需要添加 stun。 像素流 2 个 js 文件的版本号和虚幻引擎同步,目前是 4.27.0。 在任务管理器中通过“命令行”一列获悉 UE4 程序的启动参数。
Programs\PixelStreaming\WebServers\SignallingWebServer 即信令网页服务器,删除了其中90%以上的无用代码和库,解决了许多bug,成就了一个超轻量,上手即用的像素流前端库和信令服务器 先复习一下WebRTC技术,相关内容推荐: 《虚幻引擎的像素流技术》 《WebRTC:理论基础、行业地位、网络架构》 《WebRTC安全问题:私有IP与mDNS》 类型 即时性 数据量 场景 通讯 低 小 http网页、文件传输、Email 即时通讯 高 小 聊天室、电话、RTS网络游戏 即时音视频通讯 高 大 视频通讯、远程桌面、3D像素流 WebRTC主要是为了解决“即时音视频通讯”的需求的 像素流协议 PixelStreamer最核心的基础组件是虚幻引擎像素流插件定义的“像素流协议”,其中分2个部分,分别是基于DataChannel的二进制消息格式,和基于WebSocket和信令服务器之间的
前言 像素是构成数字图像的基本单位,像素处理是图像处理的基本操作。 对像素的访问、修改,可以使用 Numpy 方法直接访问数组元素。 1. 像素的访问 1.1 数组索引访问 语法结构: retval = img[row, col, cancel] col:列索引 row:行索引 cancel:通道索引, 0 表示蓝色通道,1 表示绿色通道 import cv2 import numpy as np # 读取彩色图像 img = cv2.imread('img/lena.jpg') # 获取位于 (10, 20) 位置的像素的蓝色通道值 像素的修改 2.1 数值索引修改 img[row, col, channel] = new_value 2.2 img.itemset() 语法结构: img.itemset(row, col, channel import cv2 import numpy as np # 读取彩色图像 img = cv2.imread('img/lena.jpg') # 将位于 (10, 20) 位置的像素的红色通道值设置为
经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《从零学习OpenCV 4》。 我们可以将数字图像理解成一定尺寸的矩阵,矩阵中每个元素的大小表示了图像中每个像素的亮暗程度,因此统计矩阵中的最大值,就是寻找图像中灰度值最大的像素,计算平均值就是计算图像像素平均灰度,可以用来表示图像整体的亮暗程度 因此针对矩阵数据的统计工作在图像像素中同样具有一定的意义和作用。在OpenCV 4中集成了求取图像像素最大值、最小值、平均值、均方差等众多统计量的函数,接下来将详细介绍这些功能的相关函数。 1 01 寻找图像像素最大值与最小值 OpenCV 4提供了寻找图像像素最大值、最小值的函数minMaxLoc(),该函数的原型在代码清单3-7中给出。 该函数的第二个参数用于控制图像求取均值的范围,在第一个参数中去除第二个参数中像素值为0的像素,计算的原理如式(3.5)所示,当不输入第二个参数时,表示求取第一个参数全部像素的平均值。 ?
Gibson在1950年首先提出来的,是空间运动物体在成像平面上的像素运动的瞬时速度,是利用图像序列中像素的变化以及相邻帧之间的相关性,来找到上一帧跟当前帧的像素点之间存在的对应关系,从而计算出相邻帧之间像素点的运动信息的一种方法 稠密光流描述图像每个像素向下一帧运动的光流。为了方便表示,使用不同的颜色和亮度表示光流的大小和方向,如下图的不同颜色。 随后出现了PWC[3]、RAFT[4]等一系列深度学习模型,并不断刷新EPE(光流估计的评价指标)。需要注意的是,基于深度学习的光流估计算法都是针对稠密光流估计问题。 上图对比发现,椅子的相对位置有变化 光流估计评价指标 EPE(Endpoint Error)是光流估计中标准的误差度量,是预测光流向量与真实光流向量的欧氏距离在所有像素上的均值(越低越好)。 一个相关层,通过取所有特征向量对的内积,构造4D W×H×W×H相关体。4D矩阵的最后2维在多个尺度上汇集,以构建一组多尺度体积。
在UE4中使用PixelStream功能将渲染画面发送至前端页面。 像素流与WebRTC 像素流是虚幻引擎利用WebRTC技术将视频流实时传输到浏览器的流程,像素流由3个部分组成: 发送方:虚幻引擎后端的像素流官方插件,用于发送实时视频流 中间方:用NodeJS启动的信令服务器 ,用于在发送方和接收方之间转发信令,协助建立P2P 接收方:浏览器前端用JavaScript调用WebRTC的功能,接受视频流 像素流是WebRTC的一个子集,因为WebRTC包含mesh、sfu、mcu 等多种复杂架构,但数字大桥使用的像素流只用到了最简单的p2p架构,即一个虚幻引擎后端向多个浏览器前端传输像素流。 个端的启动方式如下: 信令服务器启动参数 选项 默认值 作用 player 88 浏览器用户端口 unreal 8888 虚幻引擎端口 token insigma WebSocket认证凭证 limit 4
实时云渲染(Real-time Rendering)技术作为通用引擎的流送技术,比像素流推出还要早几年。 如何使用像素流服务UE的像素流送Pixel Streaming通过WebRTC协议将渲染后的画面(像素数据)实时编码为视频流,传输到客户端(如浏览器)。 像素流的技术架构图如下。需要将项目作为打包应用程序运行时、或使用 Standalone Game 选项在虚幻引擎中启动时才能使用像素流送插件。总流程至少包括如下四步:1. 集成像素流插件在UE引擎中找到像素流送(Pixel Streaming) 插件并勾选 启用(Enabled) 框,重启项目修改应用。 如果要满足1对多的服务配置,使用像素流送中的Matchmaker来自动分配端口。
微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 图像超像素 传统方式的图像超像素常见的方式就是基于立方插值跟金字塔重建。 OpenCV中对这两种方式均有实现,低像素图像在纹理细节方面很难恢复,从低像素图像到高像素图像是典型的一对多映射,如果找到一种好的映射关系可以尽可能多的恢复或者保留图像纹理细节是图像超像素重建的难点之一 而基于深度学习的超像素重新方式过程未知但是结果优于传统方式。在深度学习方式的超像素重建中,对低像素图像采样大感受野来获取更多的纹理特征信息。 OpenVINO中提供的单张图像超像素网络参考了下面这篇文章 https://arxiv.org/pdf/1807.06779.pdf 该网络模型主要分为两个部分 特征重建网络,实现从低分辨率到高分辨率的像素重建 卷积层实现特征提取,卷积层采样大感受野来得到更多纹理细节;多个DenseRes 叠加模块,级联DenseRes可以让网络更深,效果更好;一个亚像素卷积层作为上采样模块。
在之前《UE像素流技术:边缘计算与RTC架构》一文中论证了WebRTC的基本原理,以及WebRTC与虚幻引擎结合使用的可行性。 之后在《像素流协议》一文中介绍了虚幻引擎基于WebRTC定义的一套像素流协议,这套协议本身又分成2部分: 基于DataChannel的二进制格式:用于UE4与前端通讯 基于WebSocket的JSON格式 :用于UE4与信令服务器通讯 至于前端与信令服务器之间的通讯格式则可以自定义,PixelStreamer包含了2个js文件,分别是前端SDK和信令服务器,分别运行在浏览器和nodejs上,下面看一下它的 PixelStreamer是一个轻量级的前端像素流SDK(另赠送信令服务),对接的是虚幻的像素流插件。本项改编自虚幻的原版本,但删除了所有但依赖库和垃圾代码,同时合并成一个JS模块,开箱即用。 ({detail}) => { ps.emitDescriptor('received'); }); Requirement 版本要求 Chrome NodeJS 10+ Unreal Engine 4+
所以总的像素点的个数就等于 = 4 375 667 = 750 * 1334. 其实这个也很好理解,逻辑像素嘛,不就是我们平时用的 CSS 像素么,在 Android 中交设备独立像素。所以 设备独立像素 = CSS 像素。 但是随着技术的发展,从 iPhone 4 开始,苹果公司将 iPhone 4 的分辨率提高了一倍,但是尺寸没有变化,这意味着大小相同的屏幕上,像素多了一倍(一个方向上,像素点其实是 4 倍),但是屏幕的尺寸没有变化 ,因为以前设备像素与逻辑像素的比例一直是 1 : 1,都没人去关心这个,而 iPhone 4 的 DPR 为 2 了,所以就有了 DPR 的概念。 最初采用该种屏幕的产品是 iPhone 4,其屏幕分辨率为 640 x 960(每英寸像素数为 326 ppi)。这种分辨率在正常观看距离下足以使人肉眼无法分辨其中的单独像素。 ?
点量小芹接到部分用户反馈,使用UE4做的模型,在使用像素流技术实现多终端支持时,在微信和小程序中会出现不能全屏的问题,偶尔还会出现在iOS手机中卡死的问题。找了很多方案,也没有解决这个问题。 其实在很早之前小芹和大家分享过,像素流技术不是一个完善的产品,是从理论上验证了可行性,如果真想用到实际的项目中,还需要做很多技术开发和学习,尤其是在大并发的项目要求中。 图片点量云渲染方案,针对像素流技术中可能存在的问题,做了深入研究,并将其产品化。 其实除了这个问题,在使用像素流的时候,还有客户遇到其他的比如并发无法做到很大,而且多块显卡的使用不能负载均衡,显卡增加一定数量后就不会在被启用。这些都是在实际中遇到的,而负载均衡在大并发中是很重要的。 其实不仅仅是UE4或者U3D的模型,Windows下的大部分程序都可以云渲染。而且对于网络环境没有特殊的要求,局域网、公网或者私有网络均可实现部署。如果在使用像素流技术的过程中遇到疑问,欢迎交流。
很多开发者在UE程序像素流推流的过程中,会遇到插件1和2版本不兼容、依托WebRTC传输数据字节有限,以及推流并发数受限等问题,以下逐一分析解答。 像素流1和2插件版本迁移问题UE像素流插件支持完成基础的三维程序推流到网页的过程,可以实现单机单并发的演示效果。 实时云渲染技术从底层架构完全兼容各类2D/3D开发引擎,对UE程序无要求,同时支持像素流送1和2,也可无需集成像素流插件,即可实现一键推流,采用松耦合的方式降低风险和开发变更的工作量,UE开发者专注于3D 像素流运行多个实例数量受限根据UE官方文档显示,针对不同系列的NVIDIA显卡,UE像素流推流数量有所不同。 但是Quadro和Tesla的专业级显卡在图形渲染能力和性价比层面远远低于消费级的GeForce显卡,在UE像素流框架下无法达成平衡。
为了实现UE引擎开发的3D/XR程序推流,绝大多数开发者会研究像素流送(Pixel Streaming)的使用方法,并尝试将插件集成在程序中。对于短时、少并发、演示场景而言,像素流送可以满足基本需求。 当3D/XR项目进入落地交付周期后,像素流送本身的弊端凸显,实时云渲染方案是更好的选择。Deepseek初步分析了二者的技术路线,给出了一定的结论匹配:1. 技术原理像素流送(Pixel Streaming)原理: UE的Pixel Streaming通过WebRTC协议将渲染后的画面(像素数据)实时编码为视频流,传输到客户端(如浏览器)。 特征对比特性像素流送(Pixel Streaming)实时云渲染(Real-time Cloud Rendering)渲染位置服务器端服务器端协议WebRTCWebRTC、RTMP、SRT等客户端支持浏览器 无需大幅修改代码弹性扩展Paraverse平行云LarkXR支持动态扩展渲染资源,根据用户需求自动分配和释放 GPU 资源适合高并发场景(如大型元宇宙云活动项目),能够有效降低成本并提升资源利用率高质量画面支持高分辨率(4K
实时云渲染技术可以解决这一问题,尤其针对高精度、强交互的UE程序,解决了像素流技术无法集群部署、无法定制二次开发等问题,通过PaaS平台级部署,实现多渲染集群的平台级运维。
而作为云推流实时渲染厂家,这正是我所擅长的。 实时云渲染推流是很好的解决方案,可以实现用户在网页直接就可以自定义自己的数字人形象,只要电脑可以观看1080P视频即可。 其实现在大部分是通过录制视频的方式来展示能力,但如果想要实现直接数字人客服来引导用户浏览网页的话,需要网站所以者通过推流的方式,让数字人可以在网页中使用。 具体的方案和上文中基本类似,将数字人客服模型放在服务器端,通过实时渲染推流系统获得网页直接访问的网址,这样用户就可以在网站上和用户交流了。 而实时云渲染推流的方案,可以在景区机房配置高性能的服务器,将数字人模型推流后再网页、手机平板等设备上使用,可以景区多个热门景点使用,可以更好的满足为游客讲解的需要。