1:首先安装Pixel Streaming插件

启动后需重启

2: 偏好设置

额外启动参数:

-AudioMixer -PixelStreamingIP=localhost -PixelStreamingPort=8888

3:打包window
4:打包结束后,将UE的运行包新建一个快捷方式(按住ATL直接拖动)

5:给快捷方式添加相关运行参数:

-AudioMixer -PixelStreamingIP=localhost -PixelStreamingPort=8888

6:新建VUE工程

7:将UE5打包好的js文件拷贝到VUE里‘app.js’与‘webRtcPlayer.js’

8:将app.js更改为webrtc.js(可有可无)

9:vue项目index.html将webRtcPlayer导入

10:修改webrtc

修改websocket的链接地址(本人是写死的)

添加导出块

末文添加:

var temp = new window.webRtcPlayer({});
var webrtc = {load: load,webRtcPlayer: temp,resizePlayer: resizePlayerStyle,emitUIInter: emitUIInteraction
}export default {webrtc
}

11:新增vue代码块

<template><div><div ref="video" id="player"></div></div>
</template><script>
import { onMounted, ref } from "vue";
import webrtc from "../webrtc.js";export default {setup(props, context) {let video = ref(null);let videoInstance = ref(null);onMounted(() => {var htmlPlayer = document.getElementById("player");htmlPlayer.appendChild(webrtc.webrtc.webRtcPlayer.video);webrtc.webrtc.load();});return {video,};},
};
</script>

12:启动

在UE5打包好的Windows\Samples\PixelStreaming\WebServers\SignallingWebServer\platform_scripts\cmd路径下有个run_local.bat,首先将其启动起来

接着启动Windows里我们创建的快捷方式启动

这时,之前启动的会出现一句话 ,即成功

最后启动VUE点击'click to start'.

完结,撒花

2022年7月28日 新增:

VUE 与 UE5交互

1:首先蓝图里添加组件 为关卡中的Actor添加一个:PixelStreamingInput

蓝图如下:

2:

vue代码const onClickGift = (id) => {if (isLoad.value) {console.log("onClickGift:::", id);let data = {id,};api_send("onUEGiftCall", data, (info) => {console.log("api_register========", info);});}
};app.js/webrtc.js代码let bLog = true;// 前端发消息给后端,并监听返回
export function api_send(proto, data, callback) {let jsonData = { command: 'event', func_name: proto, args: data };if (bLog) {console.log('send:', jsonData);}//responseEventListeners.set(proto, callback);//emitUIInteraction(jsonData);
}

PS:

1: webrtc里面有很多找不到的id,这个哪里报错删哪里,先跑起来再说后面的

2:之前出过Player101错误:解决方法

在UE5打包好的Windows\Engine\Source\Programs\PixelStreaming\WebServers\SignallingWebServer路径下有个cirrus.js,

在第376行后加入如下代码:

_RemoveExtmapAllowMixed(msg);// 替换sdp协议内新内容

此块代码如下:


playerServer.on('connection', function (ws, req) {// Reject connection if streamer is not connectedif (!streamer || streamer.readyState != 1 /* OPEN */) {ws.close(1013 /* Try again later */, 'Streamer is not connected');return;}let playerId = ++nextPlayerId;console.log(`player ${playerId} (${req.connection.remoteAddress}) connected`);players.set(playerId, { ws: ws, id: playerId });function sendPlayersCount() {let playerCountMsg = JSON.stringify({ type: 'playerCount', count: players.size });for (let p of players.values()) {p.ws.send(playerCountMsg);}}ws.on('message', function (msg) {console.logColor(logging.Blue, `<- player ${playerId}: ${msg}`);try {msg = JSON.parse(msg);} catch (err) {console.error(`Cannot parse player ${playerId} message: ${err}`);ws.close(1008, 'Cannot parse');return;}if (msg.type == 'offer') {console.log(`<- player ${playerId}: offer`);_RemoveExtmapAllowMixed(msg);// 替换sdp协议内新内容msg.playerId = playerId;streamer.send(JSON.stringify(msg));} else if (msg.type == 'iceCandidate') {console.log(`<- player ${playerId}: iceCandidate`);msg.playerId = playerId;streamer.send(JSON.stringify(msg));} else if (msg.type == 'stats') {console.log(`<- player ${playerId}: stats\n${msg.data}`);} else if (msg.type == 'kick') {let playersCopy = new Map(players);for (let p of playersCopy.values()) {if (p.id != playerId) {console.log(`kicking player ${p.id}`)p.ws.close(4000, 'kicked');}}} else {console.error(`<- player ${playerId}: unsupported message type: ${msg.type}`);ws.close(1008, 'Unsupported message type');return;}});function onPlayerDisconnected() {players.delete(playerId);streamer.send(JSON.stringify({type: 'playerDisconnected', playerId: playerId}));sendPlayerDisconnectedToFrontend();sendPlayerDisconnectedToMatchmaker();sendPlayersCount();}ws.on('close', function(code, reason) {console.logColor(logging.Yellow, `player ${playerId} connection closed: ${code} - ${reason}`);onPlayerDisconnected();});ws.on('error', function(error) {console.error(`player ${playerId} connection error: ${error}`);ws.close(1006 /* abnormal closure */, error);onPlayerDisconnected();});sendPlayerConnectedToFrontend();sendPlayerConnectedToMatchmaker();ws.send(JSON.stringify(clientConfig));sendPlayersCount();
});

在文件末尾追加如下代码

/*** sdp协议更新的方法* @param desc offer内容* @returns {string}*/
function _RemoveExtmapAllowMixed(desc) {if (desc.sdp.indexOf('\na=extmap-allow-mixed') !== -1) {const sdp = desc.sdp.split('\n').filter((line) => {return line.trim() !== 'a=extmap-allow-mixed';}).join('\n');desc.sdp = sdp;return sdp;}
}

参考文献

vue3集成ue5像素流自定义网页

Vue.js集成UE4像素流自定义网页的实现方式

像素流送

Player 101找不到问题的解决方法

VUE与UE5 像素流送相关推荐

  1. [虚幻引擎][UE][UE5]像素流送(Pixel Streaming),像素流去掉黑边和按钮[UE5.1.0],鼠标控制

    [虚幻引擎][UE][UE5]像素流送Pixel Streaming,像素流去掉黑边和按钮[UE5.1.0] 1.写在前面 01.作者碎碎念 02.结果 演示截图 视频教程 2.需要准备的软件 3.U ...

  2. 【瑞模网】与UE5 像素流送

    1:首先安装Pixel Streaming插件 启动后需重启 2: 偏好设置 额外启动参数: -AudioMixer -PixelStreamingIP=localhost -PixelStreami ...

  3. UE5.1 像素流送公网部署无需GPU服务器

    因为工作需要最近在做虚幻引擎5.1这方面的部署,简单记录一下最近学习的一点知识. 本文参考:虚幻引擎官网文档 UE5像素流送原理及多用户公网部署小白教程202211022220 一.像素流送介绍 像素 ...

  4. ue4云渲染——像素流送实践

    一.安装 Epic Games Launcher 官方中文文档 https://docs.unrealengine.com/4.27/zh-CN/,点击下载 如需要登录账号,使用注册一个账号后再登录就 ...

  5. UE像素流送、 交互

    官网地址 =====> https://docs.unrealengine.com/4.26/zh-CN/ 第一步 先决条件 检查操作系统和硬件- 像素流送插件只能在运行Windows和Linu ...

  6. UE4 4.24像素流送学习整理

    UE4 4.24像素流送使用整理 像素流送技术使用的前置UE4部分的程序内容,参考官方文档的操作,设置打包出程序即可. https://docs.unrealengine.com/zh-CN/Plat ...

  7. UE4像素流送教程【Pixel Streaming】

    虚幻引擎像素流送(Pixel Streaming)允许你从任何有屏幕的联网设备(例如计算机,手机,平板电脑等)播放虚幻项目.在这个教程里,我们将学习如何激活虚幻引擎的像素流送并从任何Web浏览器控制P ...

  8. 有关像素流送手机浏览器触屏bug的总结

    Bug描述: 使用手机浏览器操作UE4像素流送程序时,程序只能正常处理一个按键. 当有两个或两个以上按键同时按下时,有一定几率导致程序始终有一个按键没有释放,致使程序再也无法处理用户的正常输入(多指触 ...

  9. UE4 4.24像素流送实践 pixel streaming

    UE4 4.24像素流送实践 pixel streaming 4.24电脑运行成功了 在实践像素流送的过程中,我参考了 ①官方视频https://www.bilibili.com/video/BV1U ...

最新文章

  1. Linux之查看目录命令
  2. python 网络爬虫(一)
  3. apache_svn
  4. CCKS-2017 行业知识图谱构建与应用-下篇
  5. [北京活动] 5月11日 PMCAFF创业私密分享会邀请函已经下发
  6. 登录注册的小项目对比.Net Core与 .Net Framework的一些区别
  7. LeetCode 1797. 设计一个验证系统(map)
  8. 运维自动化之5 - 基于LVS实现4层负载均衡应用
  9. 《普林斯顿微积分》读书笔记
  10. php基于纯真IP数据库实现IP地址信息查询
  11. 产品经理学习——卡诺模型
  12. pytorch 提取权重_获取Pytorch中间某一层权重或者特征
  13. solr6.2从环境部署到与mysql整合到中文分词器到solrJ的使用
  14. DJFocus是个什么东东
  15. Codeforces——C. Yet Another Walking Robot
  16. 【自制编译器】(一)
  17. oracle的system账户用normal模式登录失败,提示用户名或密码错误,但是如果用sysdba登录,即使不输入密码,或者密码错误也能登录成功。
  18. Canvas粒子交叉线条背景动态js特效
  19. 国家普通话水平测试官方手机软件,普通话测试软件 – 免费手机普通话测试软件,用手机模拟测试普通话水平[Android]...
  20. Linux各个发行版本代号整理

热门文章

  1. v2p更新----保姆级别教程
  2. Linux下nvidia压力测试,一种服务器linux系统下GPU压力测试的监控方法与流程
  3. NB-IOT的应用领域及其特点
  4. 把钱投资自己头脑上(三)
  5. APP推荐 - AirMore:移动设备与电脑间互传文件(iOS/Android)
  6. 用html制作用户信息注册,[网页设计]html用户注册界面
  7. 环境变量,fork,守护者进程
  8. Java基础核心之三大特性
  9. c语言之双精度数的有效数字
  10. DEBUG:plt图片不清晰问题