diff --git a/containerfiles/runner.Containerfile b/containerfiles/runner.Containerfile index 7e0de173..7cdc6c4f 100644 --- a/containerfiles/runner.Containerfile +++ b/containerfiles/runner.Containerfile @@ -72,6 +72,11 @@ RUN mkdir -p "${NESTRI_HOME}/.local/share/Steam/config" COPY packages/configs/steam/config.vdf "${NESTRI_HOME}/.local/share/Steam/config/" +## MangoHud Config ## +RUN mkdir -p "${NESTRI_HOME}/.config/MangoHud" + +COPY packages/configs/MangoHud/MangoHud.conf "${NESTRI_HOME}/.config/MangoHud/" + ### Artifacts from Builder ### COPY --from=builder /artifacts/bin/nestri-server /usr/bin/ COPY --from=builder /artifacts/bin/bwrap /usr/bin/ diff --git a/packages/configs/MangoHud/MangoHud.conf b/packages/configs/MangoHud/MangoHud.conf new file mode 100644 index 00000000..41a1cf48 --- /dev/null +++ b/packages/configs/MangoHud/MangoHud.conf @@ -0,0 +1,48 @@ +legacy_layout=false + +# common +horizontal +horizontal_stretch +hud_no_margin +no_small_font +background_alpha=0.66 +round_corners=0 +background_color=000000 +font_size=24 +position=top-left +engine_short_names + +# colors +text_color=DFDFDF +gpu_color=FF4E00 +cpu_color=00AA00 +engine_color=00AA00 +vram_color=00AA00 +ram_color=00AA00 +frametime_color=FF4E00 + +# load colors +cpu_load_color=DFDFDF,DF964D,DF3D3D +gpu_load_color=DFDFDF,DF964D,DF3D3D + +# GPU and VRAM +gpu_text=NESTRI +gpu_stats +gpu_load_change +gpu_load_value=70,90 + +vram + +# CPU and RAM +cpu_text=CPU +cpu_stats +cpu_load_change +cpu_load_value=70,90 + +ram + +# FPS and timing +fps +fps_metrics=0.01 + +frame_timing diff --git a/packages/input/src/webrtc-stream.ts b/packages/input/src/webrtc-stream.ts index 0b90faf2..8d202034 100644 --- a/packages/input/src/webrtc-stream.ts +++ b/packages/input/src/webrtc-stream.ts @@ -123,8 +123,6 @@ export class WebRTCStream { } else { iceHolder.push(cand); } - } else { - iceHolder.push(cand); } }); @@ -143,6 +141,14 @@ export class WebRTCStream { sdp: data.sdp.sdp, type: data.sdp.type as RTCSdpType, }); + // Add held candidates + iceHolder.forEach((candidate) => { + this._pc!.addIceCandidate(candidate).catch((err) => { + console.error("Error adding held ICE candidate:", err); + }); + }); + iceHolder = []; + // Create our answer const answer = await this._pc!.createAnswer(); // Force stereo in Chromium browsers diff --git a/packages/play-standalone/package.json b/packages/play-standalone/package.json index 5460a2f1..b7d85ac1 100644 --- a/packages/play-standalone/package.json +++ b/packages/play-standalone/package.json @@ -16,6 +16,7 @@ "@capacitor/core": "^7.4.3", "@capacitor/ios": "^7.4.3", "@astrojs/node": "9.5.0", + "@nestri/input": "*", "astro": "5.15.1" } } \ No newline at end of file diff --git a/packages/relay/internal/core/protocol_stream.go b/packages/relay/internal/core/protocol_stream.go index 925eb4bf..9c847ba0 100644 --- a/packages/relay/internal/core/protocol_stream.go +++ b/packages/relay/internal/core/protocol_stream.go @@ -271,12 +271,16 @@ func (sp *StreamProtocol) handleStreamRequest(stream network.Stream) { } candInit := candidate.ToJSON() - biggified := uint32(*candInit.SDPMLineIndex) + var sdpMLineIndex *uint32 + if candInit.SDPMLineIndex != nil { + idx := uint32(*candInit.SDPMLineIndex) + sdpMLineIndex = &idx + } iceMsg, err := common.CreateMessage( &gen.ProtoICE{ Candidate: &gen.RTCIceCandidateInit{ Candidate: candInit.Candidate, - SdpMLineIndex: &biggified, + SdpMLineIndex: sdpMLineIndex, SdpMid: candInit.SDPMid, }, }, @@ -338,13 +342,15 @@ func (sp *StreamProtocol) handleStreamRequest(stream network.Stream) { case "ice-candidate": iceMsg := msgWrapper.GetIce() if iceMsg != nil { - smollified := uint16(*iceMsg.Candidate.SdpMLineIndex) cand := webrtc.ICECandidateInit{ Candidate: iceMsg.Candidate.Candidate, SDPMid: iceMsg.Candidate.SdpMid, - SDPMLineIndex: &smollified, UsernameFragment: iceMsg.Candidate.UsernameFragment, } + if iceMsg.Candidate.SdpMLineIndex != nil { + smollified := uint16(*iceMsg.Candidate.SdpMLineIndex) + cand.SDPMLineIndex = &smollified + } iceHelper.AddCandidate(cand) } else { slog.Error("Could not GetIce from ice-candidate") @@ -396,7 +402,7 @@ func (sp *StreamProtocol) handleStreamPush(stream network.Stream) { slog.Debug("Stream push connection closed by peer", "peer", stream.Conn().RemotePeer(), "error", err) if room != nil { room.Close() - sp.incomingConns.Set(room.Name, nil) + sp.incomingConns.Delete(room.Name) } return } @@ -405,7 +411,7 @@ func (sp *StreamProtocol) handleStreamPush(stream network.Stream) { _ = stream.Reset() if room != nil { room.Close() - sp.incomingConns.Set(room.Name, nil) + sp.incomingConns.Delete(room.Name) } return } diff --git a/packages/relay/internal/shared/participant.go b/packages/relay/internal/shared/participant.go index 9fef6ad1..f9db6637 100644 --- a/packages/relay/internal/shared/participant.go +++ b/packages/relay/internal/shared/participant.go @@ -63,13 +63,13 @@ func (p *Participant) SetTrack(trackType webrtc.RTPCodecType, track *webrtc.Trac p.AudioTrack = track _, err := p.PeerConnection.AddTrack(track) if err != nil { - slog.Error("Failed to add Participant audio track", "participant", p.ID, "err", err) + slog.Error("Failed to add audio track", "participant", p.ID, "err", err) } case webrtc.RTPCodecTypeVideo: p.VideoTrack = track _, err := p.PeerConnection.AddTrack(track) if err != nil { - slog.Error("Failed to add Participant video track", "participant", p.ID, "err", err) + slog.Error("Failed to add video track", "participant", p.ID, "err", err) } default: slog.Warn("Unknown track type", "participant", p.ID, "trackType", trackType) @@ -84,14 +84,14 @@ func (p *Participant) Close() { if p.DataChannel != nil { err := p.DataChannel.Close() if err != nil { - slog.Error("Failed to close Participant DataChannel", err) + slog.Error("Failed to close DataChannel", "participant", p.ID, "err", err) } p.DataChannel = nil } if p.PeerConnection != nil { err := p.PeerConnection.Close() if err != nil { - slog.Error("Failed to close Participant PeerConnection", err) + slog.Error("Failed to close PeerConnection", "participant", p.ID, "err", err) } p.PeerConnection = nil } diff --git a/packages/scripts/envs.sh b/packages/scripts/envs.sh index 2542da6c..43650f17 100644 --- a/packages/scripts/envs.sh +++ b/packages/scripts/envs.sh @@ -10,9 +10,6 @@ export DISPLAY=:0 # Causes some setups to break export PROTON_NO_FSYNC=1 -# Sleeker Mangohud preset :) -export MANGOHUD_CONFIG=preset=2 - # Make gstreamer GL elements work without display output (NVIDIA issue..) export GST_GL_API=gles2 export GST_GL_WINDOW=surfaceless