赞
踩
index.html 中引入 webRtcPlayer.js
这里目前只初步导出了 ueapp.js 中的 load、resizePlayerStyle、emitUIInteraction 等方法。有需要的话,还可以继续导出所需要的方法。
var temp = new window.webRtcPlayer({})
var webrtc = {
load: load,
webRtcPlayer: temp,
resizePlayerStyle: resizePlayerStyle,
emitUIInteraction: emitUIInteraction,
onConfig: onConfig
}
export default { webrtc }
ueapp.js 中,有些变量没有定义就直接在函数中使用了,这将导致在运行使用时的报错,需要增加定义:
// 新增
let unquantizeAndDenormalizeUnsigned = null
let receivedBytesMeasurement = null
let receivedBytes = null
let Data = null
let gamepad = null
本地启动打包后的云渲染的 run.bat 后,在本机浏览器上输入的地址是:localhost,也就是 http://127.0.0.1
那么 需要修改 ueapp.js 中 websocket 中对应的地址:
// ws = new WebSocket(
// window.location.href
// .replace("http://", "ws://")
// .replace("https://", "wss://")
// )
ws = new WebSocket("ws://127.0.0.1")
将 showPlayOverlay 中的 createElement(“img”) 屏蔽掉。
引入 ueapp.js,并使用 vue3 的语法:app.provide,注册 WebRtc 的全局属性,用于方便在 vue 文件中直接调用使用。
云渲染/像素流推送的本质是视频播放。
在最新版的 Chrome浏览器(以及所有以 Chromium 为内核的浏览器)中,已不再允许自动播放音频和视频。就算为 video 或audi o标签设置了 autoplay 属性也一样不能自动播放。
因此想要视频流在网页加载时自动播放,就需要设置 video 的 muted 属性为 true。即声音为静音模式。
如果本身游戏引擎是有音效的,可以在网页加载后的一定时间内,再将 video 的 muted 设置为 false,之后用户可以调整系统音量,实现音效的展示。
注意:需要首先启动打包后的 UE 游戏引擎 exe 和 run.bat 开启像素流送。
效果如下:
GIF1
以上的验证过程,是基于打包后的游戏引擎的。对于正在开发中的 UE4 项目,以及实现 vue 和 游戏引擎的相互发消息的交互机制,还尚未实现。下面,就介绍如何实现与项目的实时交互。
以保证 SignallingWebServer 的像素流服务可以正常启动。
注意:run_local.bat 默认以 80 端口,若有其他程序占用了 80 端口,则 run_local.bat 将会运行错误或失败,需要移除占用的端口的软件,再重新以管理员身份运行 run_local.bat。
运行成功,将会如下所示:
此时当 以 Standalone Game 方式运行了游戏引擎,且运行了 run_local.bat,那么将可以在网页中输入 localhost:80,在线访问游戏引擎界面:
此时可以看到,运行后,vue 项目也可以正常访问到游戏引擎界面。只不过界面并不是全屏的,需要在代码中做一些样式调整,使游戏引擎界面铺满全屏。
这里 vue 项目可以访问游戏引擎界面的原因在于,我们在 ueapp.js 中修改了对应的 WebSocket 地址。
修改 webRtcPlayer.js 中的 video 的 style。
var video = document.createElement("video")
video.id = "streamingVideo"
video.playsInline = true
video.disablepictureinpicture = true
video.muted = true // self.startVideoMuted
video.style.width = "100vw"
video.style.height = "100vh"
video.style.objectFit = "fill"
这样就有占满全屏的效果了。
Vue 和 UE 相互通信的原理是借助于 WebSocket,利用像素流启动服务(run_local.bat),Vue 和 UE 同时监听像素流服务的地址、端口,通过 WebSocket 相互发送、监听消息,再利用各自的对于消息的处理方法,进行消息的处理与响应。
而具体的方法就是 调用 emitUIInteraction 方法 和 addResponseEventListener 方法,前者用于从 JS/Vue 向 UE 发消息,后者用于接收、处理 从 UE 向 JS/Vue 发的消息。
完整蓝图事件:
至此就完成了,Vue 和 UE 相互通信以及通信消息的响应处理。
效果如下:
GIF3
【UE4】一个实现Web穿透,用HTML开发UI的方式——WebUI的用法
[Vue3] TS7016: Could not find a declaration file for module ‘…/assets/js/util.js‘
jQuery报错 Uncaught (in promise) DOMException: play() failed because the user didn‘t interact
UE4像素流送PixelStreaming_ue4像素流到移动端可以吗_WindRushToNight的博客-CSDN博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。