Code Monkey home page Code Monkey logo

pixelstreaminginfrastructure's People

Contributors

adamrehn avatar ahhj93 avatar alien299 avatar belchy06 avatar chasse20 avatar david-macpherson avatar denistensorworks avatar dependabot[bot] avatar devrajgadhvi avatar evenstensberg avatar gingernaz avatar github-actions[bot] avatar hmuurine avatar i-m-none-user avatar imhunterand avatar itsjayway avatar joel-patteson avatar kasp1 avatar kass-kass avatar kroecks avatar lukehb avatar marcinbiegun avatar mcottontensor avatar mentalnote avatar mirmidion avatar mwillwallt avatar senseme avatar sheepsteak avatar stomypx avatar timbotimbo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pixelstreaminginfrastructure's Issues

Publish container images for the signalling server

Prior to the release of Unreal Engine 5.1, the ghcr.io/epicgames/pixel-streaming-signalling-server container image was built from this Dockerfile in the Unreal Engine source tree, and published at the same time as the dev and dev-slim variants of the ghcr.io/epicgames/unreal-engine image.

Now that the Pixel Streaming server components are no longer stored in-tree, we should build and push the signalling server container image as part of a GitHub Actions CI/CD pipeline within the PixelStreamingInfrastructure repository. That way, container image updates will be decoupled from the release cadence of the Unreal Engine in the same manner as the source code (and the eventual NPM packages), facilitating faster delivery to users.

[BUG] - onSFUDisconnected sfuPlayer.Subscribe()

**UE Version: **
UE 5.2

Problem component
SignallingWebServer/cirrus.js

Description
in the function onSFUDisconnected, sfuPlayer uses subscribe when it is ready to disconnect. It looks like a clerical error because it makes no sense to do so.

Expected behavior
I think it should be unsubscribe instead of subscribe.

Make the Websocket disconnect: 1006 error more informative for end users

Component your feature request relates to

  • Signalling server
  • Frontend library
  • Frontend UI library
  • Matchmaker
  • SFU
  • This repo

Problem your feature solves? Please describe.
Currently, all websocket disconnects are presented with the same "Websocket disconnected: 1006" error (see screenshot). This is a generic error, but not overly useful to assist with debugging whether UE disconnected or the browser disconnected.

Describe the solution you'd like
Ideally, rather than a catch all disconnect message, a user would be able to see which component has disconnected: e.g. UE disconnected, Signalling Server disconnected, Browser disconnected etc.

Additional context
websocket-disconnected

Refactor SFU to be consumable as an extensible libarary

Similar to #9, we want to update the SFU scripts so they can be interfaced with as a library.

This will more easily allow users to simply integrate the functionality they need from the library into their own infrastructure, along with the benefits described in the referred to issue above.

We should expose this as lib-pssfu

WebCam feed

Hi,
I've very interested in receiving webcam feeds from remote user(s) as a texture in Unreal that I can use in a material or widget. Is there a way to achieve this using the native Pixel Streaming plugin or do I still need to find a third party solution?

Refactor SignallingWebServer to be consumable as an extensible libarary

Similar to #9, we want to update the SignallingWebServer scripts so they can be interfaced with as a library.

This will more easily allow users to simply integrate the functionality they need from the library into their own infrastructure, along with the benefits described in the referred to issue above.

Names for this library up for discussion.

Is it even possible to set up pixel streaming from a host behind NAT without public IP address?

What im trying to achieve is the following:

image
It's kind of a dumb question but is it possible to do using the tools from this repository?

The docs suggest it's okay that both sides might not be able to acess each other's IP directly. That's when the TURN Server kicks in. But with the following setup pixel streaming works only if you access it through the browser on the same host machine. If you try to connect to a streamer from a different machine all you get is a message saying "WebRTC connection negotiated" in Web UI.

According to console logs client receives IP address of a host instead of TURN relay and obviously can't establish the connection because host is behind NAT. "Force TURN" option is also doesn't help as there seem to be no turn relays in candidates list.

The setup:

  • host PC with UE app and Pixel Streaming Plugin. Exists behind NAT type 2.
  • Server with public IP, all necessary ports are open
  • Docker container on this server, built with Dockerfile from SignallingWebServer folder (used both 5.1 and pre-release 5.2 versions). The default entrypoint is changed to a script Start_WithTURN_SignallingServer.sh. All the ports (80, 443, 8888, 19303, even 19302) are published.
  • Mobile and desktop browsers inside different network (also behind NAT)

Container logs says turnserver is working and its' address and credentials are passed to cirrus config but they're not seem to be used at runtime.

What am I doing wrong?

Refactor front end to be consumed as an extensible library

The current front end (the loose collection of html, js, and css) does not serve its purpose as a reference because:

  1. It is quite complex and all crammed into a few files.
  2. There are no obvious extension points in the code.
  3. When upstream changes are made users who have modified the code are left manually incorporating fixes.

The net result is most users end up with a modified version of this messy frontend and are applying fixes as they come in from UE releases.

I propose we move the front end to a lib-psfrontend that can actually be consumed as library with sensible extension points and API surface so that users can bring it in as library and make whatever custom extensions are suitable for their application.

Patch UE4.27 branch so that it actually works with UE4.27 Release version

When player connects to the signalling server, it causes the streamer to disconnect momentarily before it reconnects.

Example output:

streamer disconnected: 4001 - Unsupported message received: playerConnected
15:09:35.740 killing all players
15:09:35.742 player 105 connection closed: 1005 -
sendMessageToController: No streamer or SFU connected!
MSG: {"type":"playerDisconnected","playerId":"105"}
15:09:35.784 Streamer connected: ::ffff:127.0.0.1

Refactor Matchmaker to be consumable as an extensible libarary

Similar to #9, we want to update the Matchmaker scripts so they can be interfaced with as a library.

This will more easily allow users to simply integrate the functionality they need from the library into their own infrastructure, along with the benefits described in the referred to issue above.

We should expose this as lib-psmatchmaker or potentially fold this into the SignallingWebServer lib.

Docker SignalingWebServer not able to append config changes

Did docker pull ghcr.io/epicgames/pixel-streaming-signalling-server:5.1

Volume Mounted a folder with config json to opt/SignallingWebServer
we get an error saying cirrus.js not found.

Tried copying all data from container to a directory (using docker cp ) and volume mount that to the same said path, got an error saying express.js not found.

Tried passing PublicIp="127.0.0.1" as arg at the end after specifying image just to test, that didn't help as well
Any help is appreciated.
Thanks,
Karthik

Drops New streamer connections

hello, current implementation drops multiple instances of games streaming
13:51:24.318 Dropping new streamer connection, we already have a connected streamer
13:51:33.890 Dropping new streamer connection, we already have a connected streamer

with above message

I'm trying to implement a case where every player has his own unique experience for which we need as many game connections as players ref:https://docs.unrealengine.com/5.1/en-US/hosting-and-networking-guide-for-pixel-streaming-in-unreal-engine/

Am I missing something here, or the method for that has changed?

please help me in this aspect

[BUG] - NPM emits warnings when running Jest + Bundled NodeJS used in platform_scripts

**UE Version: **
Any

**Frontend Version: **
Since f58b32c

Problem component

  • Signalling Server
  • Frontend library

Description
When running the unit tests in the frontend library using npm run test I am presented with the following warning log output from NPM/Jest:

npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@jest/[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@jest/[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@jest/[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@jest/[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@jest/[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@jest/[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@jest/[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@jest/[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@jest/[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@jest/[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@jest/[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@jest/[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@jest/[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@jest/[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
npm WARN EBADENGINE   current: { node: 'v16.4.2', npm: '7.18.1' }
npm WARN EBADENGINE }

Steps to Reproduce:

  1. Run platform_scripts/cmd/run_local.bat --build
  2. This will download and use Node JS 16.4.2
  3. When using NodeJS with this version of Jest the above warnings with be emitted.

Expected behavior

  1. Run run_local.bat and there are no warnings emitted from NPM.

Platform (please complete the following information):

  • OS: Windows 10 Pro (but would occur on Linux too)

Additional context
We are using NodeJS version 16.4.2 because this has been QA'd across all cloud platforms we support without issue. We could bump this version; however this would be a large QA effort.

Acceptable solutions

  • Bump NodeJS version used in the scripts and QA on Windows, Linux, AWS, Azure, GCP
  • Rollback version of Jest used to not need this version of Node
  • Do not install Jest as a devDependency but instead simply as part of npm run test

[Segmentation fault] - Engine crash handling finished

Hi,

./MYBUILD_427.sh -RenderOffScreen -PixelStreamingURL=ws://IPSERVER:8888

after starting the stream I get this error

............................

Failed to find symbol file, expected location:
"/home/ubuntu/PixelStreamingTest_PointCloud_01/LinuxNoEditor/MYBUILD_427/Binaries/Linux/MYBUILD_427.sym"
Assertion failed: Handler [File:D:/Build/++UE4/Sync/Engine/Plugins/Enterprise/LidarPointCloud/Source/LidarPointCloudRuntime/Private/IO/LidarPointCloudFileIO.cpp] [Line: 281]

[2023.04.03-16.04.46:061][ 0]LogCore: Error: appError called: Assertion failed: Handler [File:D:/Build/++UE4/Sync/Engine/Plugins/Enterprise/LidarPointCloud/Source/LidarPointCloudRuntime/Private/IO/LidarPointCloudFileIO.cpp] [Line: 281]

Signal 11 caught.
Malloc Size=65538 LargeMemoryPoolOffset=65554
CommonUnixCrashHandler: Signal=11
[2023.04.03-16.04.46:086][ 0]LogCore: === Critical error: ===
Unhandled Exception: SIGSEGV: invalid attempt to write memory at address 0x0000000000000003

[2023.04.03-16.04.46:086][ 0]LogCore: Assertion failed: Handler [File:D:/Build/++UE4/Sync/Engine/Plugins/Enterprise/LidarPointCloud/Source/LidarPointCloudRuntime/Private/IO/LidarPointCloudFileIO.cpp] [Line: 281]

0x000000000424a33d MYBUILD_427!UnknownFunction(0x404a33d)
0x0000000004416bbb MYBUILD_427!UnknownFunction(0x4216bba)
0x00000000043bc7e4 MYBUILD_427!UnknownFunction(0x41bc7e3)
0x00000000043bc68b MYBUILD_427!UnknownFunction(0x41bc68a)
0x00000000033a2966 MYBUILD_427!UnknownFunction(0x31a2965)
0x00000000033aa966 MYBUILD_427!UnknownFunction(0x31aa965)
0x000000000472059e MYBUILD_427!UnknownFunction(0x452059d)
0x000000000471b1b7 MYBUILD_427!UnknownFunction(0x451b1b6)
0x000000000471ab0c MYBUILD_427!UnknownFunction(0x451ab0b)
0x000000000472600f MYBUILD_427!UnknownFunction(0x452600e)
0x000000000472e916 MYBUILD_427!UnknownFunction(0x452e915)
0x000000000472dea5 MYBUILD_427!UnknownFunction(0x452dea4)
0x000000000473d071 MYBUILD_427!UnknownFunction(0x453d070)
0x000000000478a6fa MYBUILD_427!UnknownFunction(0x458a6f9)
0x00000000049611aa MYBUILD_427!UnknownFunction(0x47611a9)
0x000000000495f10d MYBUILD_427!UnknownFunction(0x475f10c)
0x00000000081fd5e4 MYBUILD_427!UnknownFunction(0x7ffd5e3)
0x00000000081fa106 MYBUILD_427!UnknownFunction(0x7ffa105)
0x0000000007966f2e MYBUILD_427!UnknownFunction(0x7766f2d)
0x000000000336f92b MYBUILD_427!UnknownFunction(0x316f92a)
0x000000000337de20 MYBUILD_427!UnknownFunction(0x317de1f)
0x0000000008b797f9 MYBUILD_427!UnknownFunction(0x89797f8)
0x00007ff6c02ce083 libc.so.6!__libc_start_main(+0xf2)
0x000000000336eaa9 MYBUILD_427!UnknownFunction(0x316eaa8)

[2023.04.03-16.04.46:090][ 0]LogExit: Executing StaticShutdownAfterError
Engine crash handling finished; re-raising signal 11 for the default handler. Good bye.
Segmentation fault (core dumped)


  • OS: Ubuntu
    Description: Ubuntu 20.04.5 LTS
    Release: 20.04
    Codename: focal

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.161.03 Driver Version: 470.161.03 CUDA Version: 11.4 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 Off | 00000000:00:1E.0 Off | 0 |
| N/A 22C P8 8W / 70W | 106MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 910 G /usr/lib/xorg/Xorg 96MiB |
| 0 N/A N/A 1036 G /usr/bin/gnome-shell 8MiB |
+-----------------------------------------------------------------------------+

Document frontend library usage and examples

We would like to the following for 5.2:

  • create some "getting started" documentation for Frontend library
  • create some examples showing common API usage of the library
  • publish our generated API docs using typedoc

Game crashes with more than 2 connections when using PixelStreaming with SFU

With reference implementations of the Signalling server and the SFU, when trying to connect from the 3rd tab, the game crashes. This issue is not reproducible if ?preferSFU=false.

Signal 11 caught.
Malloc Size=262146 LargeMemoryPoolOffset=262162
CommonUnixCrashHandler: Signal=11
[2023.01.16-12.13.11:591][244]LogCore: === Critical error: ===
Unhandled Exception: SIGSEGV: invalid attempt to write memory at address 0x0000000000000003

[2023.01.16-12.13.11:591][244]LogCore: Assertion failed: RecvResult.ok() [File:.\../Plugins/Media/PixelStreaming/Source/PixelStreaming/Private/PixelStreamingDataChannel.cpp] [Line: 52]
Failed to create Data Channel. Msg=Data channel creation failed

Could not initialize connection

Thanks for having release this useful package!

I am trying to use it locally on my Ubuntu 22 - RTX 3070 laptop, so after configuring, packaging and running a project under UE 5.0.3 with :
./MyProject2.sh -PixelStreamingURL=ws://localhost:8888 -RenderOffScreen -> log
And launched the Signalling and Web Server container with :
docker run -p 80:80 -p 8888:8888 ghcr.io/epicgames/pixel-streaming-signalling-server:5.0.3 -> log

I got this error message :

LogPixelStreamingSS: Connecting to SS ws://localhost:8888
LogPixelStreamingSS: Error: Failed to connect to SS: Could not initialize connection.

Does it sound familiar to you?

Thanks a lot in advance!

KeyboardEvent.keyCode is Deprecated

https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode

Deprecated: This feature is no longer recommended. Though some browsers might still support it, it may have already been removed from the relevant web standards, may be in the process of being dropped, or may only be kept for compatibility purposes. Avoid using it, and update existing code if possible; see the [compatibility table](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#browser_compatibility) at the bottom of this page to guide your decision. Be aware that this feature may cease to work at any time.

文档未更新

使用ue5.1,最新代码拉下来。整体界面以及代码对比4.27版本有改动。虚幻官网像素流文档未更新,需要向虚幻应用发送自定义消息未实现,文档中也没有相关描述

Max FPS not honouring the URL parameter with 5.1 and not working at all with 5.0

On the settings panel under WebRTC there is a Max FPS setting. If value in the panel is changed, it appends a parameter to the URL e.g. http://localhost/?WebRTCFPS=30

Using UE 5.1

  • Visiting the frontend URL with the ?WebRTCFPS=30 parameter does not update the Max FPS in the Information panel.
  • Changing the Max FPS in the WebRTC section on the Settings panel does update the MaxFPS in the Information panel.

Using UE 5.0, Max FPS just does not seem to work at all

[BUG] - Mic not working

**UE Version: **
UE 5.1.1

Hi I am making a multiplayer pixel streaming game, and I have implemented voice chat in the game. While the mic worked during PC to PC in Lan, it fails to work after using pixel streaming through browser.

Just want to make sure that the mic from browser is working right? Becasue I read some comment on youtube saying that the turn on mic toggle is not actually working in 5.1

Faild to read DnsConfig

image

Hi, I'm currently working on Pixel Streaming to run my exe on a non-networked pc, but I got the message Faild to read DnsConfig so my exe can't connet to the signalling server.
I didn't find any file named dns_config_service_win.cc in my computer so I guess Unreal has build it into a lib file or other else.
Is there anyway to support my exe connet to the signalling server running on a non-networked pc with no Wifi or network cable connected? Thanks!

Stuck on the mobile terminal interface

In the LAN, I access through the mobile terminal, and the interface is often stuck and cannot be operated. I must refresh the page to get the stream again. Do you have any suggestions and methods?

[BUG] - Issues running Signalling Server Behind NGINX TLS Reverse Proxy

**UE Version: **
UE 5.1.1

**Frontend Version: **
0.3.0

Problem component
Signalling Server

Description
When running a signaling server behind a reverse proxy (nginx+tls) I experience disconnects - stream suddenly disconnects on a random point of time.

Signalling Server throws error 1001 in log

Apr 05 12:28:17 ip-172-31-27-78 bash[2191]: 12:28:17.408 <- Streamer: {"type":"pong","time":1680697697}
Apr 05 12:28:38 ip-172-31-27-78 bash[2191]: 12:28:38.820 player 142 connection closed: 1001 - 
Apr 05 12:28:38 ip-172-31-27-78 bash[2191]: 12:28:38.820 <- Streamer: {"type":"playerDisconnected","playerId":"142"}
Apr 05 12:29:23 ip-172-31-27-78 bash[2191]: 12:29:23.503 -> Streamer: {"type":"ping","time":1680697763}

Nginx access log shows last HTTP response of 101 and following with 404 code in access.log

x.x.x.x - - [05/Apr/2023:12:11:36 +0000] "GET /player.css HTTP/2.0" 304 0 "https://example.com/images/Info.svg" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x.x.x.x Safari/537.36" -*
x.x.x.x - - [05/Apr/2023:12:11:36 +0000] "GET /player.css HTTP/2.0" 304 0 "https://example.com/images/Maximize.svg" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x.x.x.x Safari/537.36" -*
x.x.x.x - - [05/Apr/2023:12:11:36 +0000] "GET /player.css HTTP/2.0" 304 0 "https://example.com/images/Settings.svg" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x.x.x.x Safari/537.36" -*
x.x.x.x - - [05/Apr/2023:12:11:38 +0000] "GET /images/Play.png HTTP/2.0" 304 0 "https://example.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x.x.x.x Safari/537.36" -*
x.x.x.x - - [05/Apr/2023:12:11:39 +0000] "GET /images/favicon-96x96.png HTTP/2.0" 304 0 "https://example.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x.x.x.x Safari/537.36" -*
x.x.x.x - - [05/Apr/2023:12:16:38 +0000] "GET / HTTP/1.1" 101 6370 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x.x.x.x Safari/537.36" -*
x.x.x.x - - [05/Apr/2023:12:22:16 +0000] "GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application HTTP/1.1" 404 187 "-" "Mozilla/5.0 zgrab/0.x" -*
x.x.x.x - - [05/Apr/2023:12:26:13 +0000] "GET /images/Play.png HTTP/2.0" 304 0 "https://example.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x.x.x.x Safari/537.36" -*
x.x.x.x - - [05/Apr/2023:12:28:38 +0000] "GET / HTTP/1.1" 101 6366 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x.x.x.x Safari/537.36" -*
x.x.x.x - - [05/Apr/2023:12:39:29 +0000] "GET / HTTP/1.1" 404 197 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36 Edg/x.x.x.x" -*

I've managed to do some packet capture on machine running SignallingServer. this is what I get in packet with 101 response:

GET / HTTP/1.1
Upgrade: websocket
Connection: upgrade
Host: example.com
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Key: e3qkaYZW2rBFr24k1gHiyQ==
Sec-WebSocket-Version: 13
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
Origin: https://example.com
Accept-Encoding: gzip, deflate, br
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,be;q=0.6,lt;q=0.5,pl;q=0.4
Cookie: AWSALBTG=nv8d6aTRJevVGR+q+1HwA8CKzshoQA6yeZumjaLoaXOxFmERg0kRDjFQsRNhOTy7qGpNRaKrEvMHmywnDeP34ojyKDzZYWz/rR5Bx8T6J+z3cmO+WIbV6kj+gxV3dLn1ke/t/QxNY3dVZDs/T6InL5kARtDdPAjeGm9MwYgEPHzHBOkbK/o=; AWSALBTGCORS=nv8d6aTRJevVGR+q+1HwA8CKzshoQA6yeZumjaLoaXOxFmERg0kRDjFQsRNhOTy7qGpNRaKrEvMHmywnDeP34ojyKDzZYWz/rR5Bx8T6J+z3cmO+WIbV6kj+gxV3dLn1ke/t/QxNY3dVZDs/T6InL5kARtDdPAjeGm9MwYgEPHzHBOkbK/o=

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: ytWyo6hXjYCAaPKgmQ+Ah006Rn8=

nginx site conf looks like that

server {
    server_name example.com;

    location / {
        proxy_pass http://localhost:8080;  # Replace 3000 with your signaling server port
        proxy_connect_timeout 300;
        proxy_send_timeout 300;
        proxy_read_timeout 300;        
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        #proxy_set_header Connection $connection_upgrade;
        proxy_set_header Sec-WebSocket-Accept $http_sec_websocket_accept;
        proxy_set_header Sec-WebSocket-Extensions $http_sec_websocket_extensions;
        proxy_set_header Sec-WebSocket-Key $http_sec_websocket_key;
        proxy_set_header Sec-WebSocket-Protocol $http_sec_websocket_protocol;
        proxy_set_header Sec-WebSocket-Version $http_sec_websocket_version;
    }

    listen 443 ssl;  
    ssl_certificate /etc/cert/live/example.com/fullchain.pem;  
    ssl_certificate_key /etc/cert/live/example.com/privkey.pem;  
    include /etc/cert/options-ssl-nginx.conf;  
    ssl_dhparam /etc/cert/ssl-dhparams.pem;  

}
# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#	listen 80;
#	listen [::]:80;
#
#	server_name example.com;
#
#	root /var/www/example.com;
#	index index.html;
#
#	location / {
#		try_files $uri $uri/ =404;
#	}
#}

server {
    if ($host = example.com) {
        return 301 https://$host$request_uri;
    }  


    listen 80;
    server_name example.com;
    return 404;  


}

As you I've added the utmost amount of possible headers required for WS protocol to work properly but still have no luck getting signalling server working properly behind a reverse proxy

Steps to Reproduce:
Run SignallingServer behind Nginx reverse proxy with tt TLS termination and pixel streaming plugin application on a backend

Expected behavior
Stream never breaks unrepentingly

Screenshots
If applicable, add screenshots to help explain your problem.

Platform (please complete the following information):

  • OS: Mac OS 12.5.4
  • Chrome 111.0.5563.146
  • Version 0.0.1

Additional context
Add any other context about the problem here.

Wrong path to login page when using authentication

in cirrus.js, when using authentication, the path is:

if(config.UseAuthentication){
	if(config.EnableWebserver) {
		app.get('/login', function(req, res){
			res.sendFile(__dirname + '/login.htm');
		});
	}

But the login page is login.html
And it seems not to be able to find the public folder, so address should look like this for it to work:

res.sendFile(__dirname + '/public/login.html');

Decouple UI and business logic from Frontend library

The Pixel Streaming connection handling code and sample UI application code are tightly coupled in the current Typescript version of the public Pixel Streaming browser-side code.

The main goals of this effort are:

  • decouple the UI code from the code that establishes and handles the Pixel Streaming connection and video playback
  • provide a headless API
  • let developers develop their own UI on top of the base library.

Links broken in documentation

Gamepad not working in 5.1

As per the discussion in #136 it was noted that gamepad input was not working when using UE 5.1 with frontend 5.1 or frontend 5.2.

Issue does not occur with UE 5.2 and frontend 5.1 or 5.2.

MatchMaking is not able to manage session

HI

Same setup i deployed on AWS EKS and things working fine except below issue.
Issue:
Matchmaker is exposed on Load Balancer service.
Signalling server is also expoed on Load balancer service which is having multiple pods in backend.

When matchmaking is redirecting request to signalling server, request is being routed to random pods that are already being 
used by some other user who is already playing game  which tends multiple user in same game.

I think matchmaking is not able to manage session for this.
Kindly help in the same.

Sound is bad on 5.1

After an upgrade from 5.0 to 5.1 the sound of unreal is really bad. We currently experience a bunch of 'hickups' and 'ticks' in the sound. This is not the case when we downgrade again to 5.0. I do not know where the issue comes from, only that this happens when we build in 5.1.

We did notice that 'red' is used now for sound and that more additional parameters are used in the sound of the pixel stream. Disabling these from the unreal PixelStreaming Plugin and the signalling server side did not result in any improvement in the sound.

Next to this the main issue that we face is that the recording of the microphone sounds really bad in the new version of the pixel stream. It sounds like the sample rate changed a little bit, even though the audio consumer still reports the sample rate to be 48khz. We cannot really use 5.1 now for our project because of this and we will revert to 5.0 for the time being, but we would like to move to 5.1 in the future.

I hope someone with more knowledge of webrtc can look into this and fix these issues such that 5.1 will work with normal sound.

Edit:
Here are the specs of the PC so you can rule that out:
Laptop: Omen 16n-0690nd
CPU: Amd ryzen 6800H
GPU: Nvidia RTX 3060 laptop gpu
RAM: 32GB DDR 5

it runs our game at ~150 fps

[BUG] - build-dev-all script broken in the ui-library package

**UE Version: **
N/A

**Frontend Version: **
All

Problem component
ui-library NPM script build-dev-all

Description
The NPM script build-dev-all appears to be broken in the ui-library package. This is causing the build-dev-all script to also fail in the implementation etc.

Steps to Reproduce:

  1. Clone repo
  2. npm install on the library and ui-library packages
  3. cd into Frontend/implementations/EpicGames
  4. run npm install
  5. run npm run build-dev-all
  6. Observe that it gets stuck

** Note: It will also fail if you try to run build-dev-all from the ui-library package assuming you've run npm install everywhere .

Expected behavior

  1. The build should complete without errors and not hang

Connecting to Unreal 5.1 app with the 5.2 frontend crashes on connect

Using the npm package lib-pixelstreamingfrontend-ue5.2 with the standard signalling server and an Unreal app (both UE 5.1), and connecting to WebSocket connection on localhost, clicking the "play" button on the frontend, the streamer app crashes with

LogPixelStreaming: Error: Failed to set remote description: Failed to set remote answer sdp: Called in wrong state: stable
LogWindows: Error: appError called: Assertion failed: IsInGameThread() || IsInSlateThread() || IsInAsyncLoadingThread() [File:D:\build\++UE5\Sync\Engine\Source\Runtime\Slate\Public\Framework\Application\SlateApplication.h] [Line: 255] 

According to the debugger it comes from FPixelStreamingInputHandler::HandleOnMouseLeave, which triggers FSlateApplication::Get().

I understand that the readme of PixelStreamingInfrastructure states

⚠️ There are breaking changes between UE versions - so make sure you get the right version. ⚠️

so this might be expected, since it's UE5.2 frontend + UE5.1 application. However, the latest stable engine version available is 5.1, and the only currently available frontend package is -5.2, so this is the only combination I could get.

Bug: Invisible Cursor

There is a problem with the cursor, while using Pixel Streaming.

I'm using Pixel Streaming mainly for Unreal 4.27, but the bug occurs with 5.0 Unreal projects too.
My mouse cursor disappears while using Pixel Streaming.

It doesn’t happen instantly. I can start my App and join a level.
But as soon as I leave the level and go back to the main menu, the cursor turns invisible.
It’s still there, I can hover over buttons, and I am still able to click, but the cursor stays hidden from then on.
It is only fixable by restarting the stream (the app, SWS can keep operating).

If you want to test this. You can easily replicate the issue:
Just create a project using the Lyra-template for Unreal Engine 5.0. I used the current version 5.0.3
Package the project for Windows and run the App + SWS.
In my case, the stream starts as wanted, but the cursor is never visible. You can still control the app with mouse clicks, but you can only guess the cursors position if it hovers over a button.

I'm using the LockedMouse ControlSchemeType.

NPM package releases

First we need to complete the following tasks:

Once we have done this, we can further improve the user experience in using PixelStreamingInfrastructure by synthesising it's libraries into a single or multiple semantically versioned npm packages, generating these automatically as new changes make their way into this repository.

Locked mouse scaling seems too sensitive

Steps to reproduce:

  • Enable pointer locked mode using settings, Control Scheme: Locked
  • Focus the UE application, do some small circles with the mouse to move the camera
  • Focus the Pixel Streaming browser tab, do the same motion with the mouse
  • Note the sensitivity seems much higher.

This does not appear to reproduce when using "hovering mouse mode".

CC @Belchy06 to review.

Add experimental support for WebXR based experiences.

As of this commit, Pixel Streaming supports VR streamed experiences.

However, as of 7th of February 2023, the latest reference Epic Games implementation doesn't support these experiences.

Adding support for these experiences will require:

  • Display the stream in the headset
  • Transmit the headset transformation to UE
  • Transmit controller transformations to UE
  • Transmit button and analog axes interations
  • Utilise multiple streamers to improve the spectator experience

Known limitations:

  • XR controllers are unable to receive haptic commands on chrome

Gamepad indices clash with multiple peers

Problem

When multiple peers are connected, each peer's controllers will increment from 0.

This means that if player 0 has 2 gamepads, they'll be assigned index 0 and index 1 and when player 1 connects with two gamepads of its own, they'll also be assigned index 0 and index 1 as illustrated below:

Blank diagram (1)

The clashing of these gamepads prevents use cases such as local multiplayer (co-op) experiences.

Pixel Streaming Audio not working on IOS

I have a pixel streaming application running in which we are using Linux containers to run it . There are 2 containers 1 is signaling an the other runs the project. For signaling we are using https://github.com/orgs/epicgames/packages/container/package/pixel-streaming-signalling-server image .. The application seems to work fine every browser and OS , but when it comes to IOS the audio is missing. This is not specific to one single browser on IOS. Even if host it Windows server we get the same issue. Is there a fix for it ??
If yes then is the issue on the server level or the application level

Adding Arm64 Support

Any interest in adding support for Arm64? Specifically Amazon's Graviton2/3 CPUs. If no one has started working on or unwilling to share, I wouldn't mind tackling this and submitting a PR.

Mouse cursor doesn't work in some UE 5.1 projects

I used Pixel Streaming with Unreal 4.27 and recently wanted to update my project to 5.1.
I updated my Unreal project and started your original SWS from the UE5.1 branch. I both tested starting the Unreal app as a standalone game and later via the editor (as Standalone Game) with the parameters: -AudioMixer -AllowPixelStreamingCommands -PixelStreamingIP=localhost -PixelStreamingPort=8888.
But I had the problem that the streamed application wasn't able to detect the mouse movement and click inputs. Keyboard inputs worked fine. Same issue with LockedMouse and HoveringMouse mode.

I tried to reproduce this behavior in freshly created Unreal projects (FP- & TP- default templates from Unreal) but the mouse input worked fine there.

But I managed it to recreate the problem with the Lyra Sample Game template. I created two projects with this template. Once for UE 5 and a second one for UE 5.1. I started them with the corresponding SWS from your UE5.0 and UE5.1 branches. The 5.0 stream is working fine. But the 5.1 Lyra stream has the same problem. The running application doesn't receive any data from mouse movement and inputs.

There appears to be a problem according updated unreal projects and templates created before Unreal 5.1.
I couldn't figure out, if there are any settings for this kind of projects that I need to configure. Maybe this is a general bug or you might be able to tell me what I need to do.

The only information I was able to gather during my research according to this problem is this community post answer

I couldn't find any errors in log files.

Bundle size has increased (~1.5x) since introducing UI library

Since decoupling the UI into its own library in: #110 we now see the bundle size has increased nearly ~1.5x.

We have some tight requirements about bundle size for some of our usecases so would like to fix this regression in bundle size if possible.

By bundle size, I specifically mean the size of the final player.js that is produced as a result of building implementations/EpicGames.

You can see the difference by comparing releases:

After the UI library change - https://github.com/EpicGames/PixelStreamingInfrastructure/releases/tag/UE5.2-0.2.1 - 347kb
Before the UI library change - https://github.com/EpicGames/PixelStreamingInfrastructure/releases/tag/UE5.2-0.1.0 - 203kb

@hmuurine Wondering if you had any ideas here?

I think what might be happening here player.ts depends on both the ui library and the core library and the transitive dependency of the core library is being built in twice.

Update page information to new front-end steps. Customising Player Pages

The newly added pages under EpicGames/PixelStreamingInfrastructure/Frontend/Docs all contain information relevant to the previous version of PS Infra/front end.

Update the page info and clear out any old information that no longer applies.
Add extra information that may be missing.
Delete the TO-DO from the top of all the pages.

Container images/docker files SFU and Matchmaker

We currently provide scripts which will install all the required dependencies and run each of the SignallingWebServer, SFU, or Matchmaker. This works pretty well but still involves machinery with the potential to fail in not accounted for environments.

We can sidestep these difficulties by additionally providing a mechanism to build these individual applications as a standalone executable using a technology such as https://github.com/nexe/nexe

Stuck in "Starting connection to server, please wait"

for the problem above, i search this article below:
https://dev.epicgames.com/community/learning/tutorials/VY4X/unreal-engine-where-s-my-stream-turn-server-debugging-for-pixel-streaming
and found out where is the bug. thx for that.

the turn server is indeed not relaying as expected,
even i force using turn in chrome,
and it doesnt work just as the article informed,
my ue project on cloud is 4.27 version.
Screen Shot 2022-11-03 at 13 49 59

So what is next, how can i fix this issue?
let me know if i miss anything that might help.🌹

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.