# PixelStreamer
**Repository Path**: chen_Jerry/PixelStreamer
## Basic Information
- **Project Name**: PixelStreamer
- **Description**: 轻量级虚幻引擎像素流SDK
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 8
- **Created**: 2022-01-14
- **Last Updated**: 2025-05-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 3D 像素流: 虚幻引擎 WebRTC 核心组件
和 EpicGames 官方的像素流 SDK 相比,我们开发出了更轻量的像素流 SDK,包含 2 个文件:前端组件(WebComponents API)外加信令服务器(NodeJS)。
- signal.js:信令服务器,5KB
- peer-stream.js:前端组件,20KB
## 启动信令服务器
首先从 npm 安装 WebSocket 依赖,然后启动 signal.js。
```
npm install ws@8.4.0
node signal.js {key}={value}
```
启动选项:
| 选项 | 默认值 | 作用 |
| ------ | ------ | -------------------- |
| player | 88 | 浏览器(玩家)端口 |
| engine | 8888 | UE4 端口 |
| token | hello | 信令密码(url 末端) |
| limit | 4 | 玩家数量上限 |
## 启动 UE4
首先开启像素流插件,然后在独立启动模式的设置中,或者打包后的文件中输入启动选项。
```
Plugins > Built-In > Graphics > Pixel Streaming > Enabled
Editor Preferences > Level Editor > Play > Additional Launch Parameters
start packaged.exe -{key}={value}
```
常用的启动选项:
```
-ForceRes
-ResX=1920
-ResY=1080
-AudioMixer
-RenderOffScreen
-graphicsadapter=0
-AllowPixelStreamingCommands
-PixelStreamingEncoderRateControl=VBR
-PixelStreamingURL="ws://localhost:8888"
```
## 前端的 2 种调用方法
JavaScript:
```
import "peer-stream.js";
const ps = document.createElement("video", { is: "peer-stream" });
ps.setAttribute("signal", "ws://127.0.0.1:88/hello");
document.body.append(ps);
```
or HTML:
```
```
## 常用的调试命令
信令服务器可以通过 eval 函数解释执行任意的 NodeJS 代码,使用时需要注意安全。
```
ps.debug('PLAYER.clients.size') // 显示玩家数量
ps.debug('PLAYER.clients.forEach(p=>p.playerId!==playerId&&p.close(1011,"Infinity"));limit=1;') // 移除其他玩家
ps.debug('[...PLAYER.clients].map(x=>x.req.socket.remoteAddress)') // 每个玩家的IP地址
ps.debug('playerId') // 我的ID
ps.onmouseenter=_=>{ps.focus();ps.requestPointerLock()}) // 鼠标锁
ps.style.pointerEvents='none' // 只读的