Add native self-hosted instance connection to fluxer_desktop
Trimmed monorepo checkout (fluxer_desktop + packages/voice_engine_v2 + tools/ci) with a "Connect to a Different Server" menu item and popout that lets the desktop app switch to any self-hosted Fluxer instance, plus fixes for well-known discovery on single-domain self-hosted deployments and a false-positive ERR_ABORTED on same-origin client redirects during the switch. Defaults to chat.fluxr.chat and uses an isolated userData directory from the official build.
This commit is contained in:
+331
@@ -0,0 +1,331 @@
|
||||
{
|
||||
"status": "pass",
|
||||
"startedAt": "2026-06-09T04:09:48.418Z",
|
||||
"endedAt": "2026-06-09T04:09:50.279Z",
|
||||
"platform": "darwin",
|
||||
"arch": "arm64",
|
||||
"config": {
|
||||
"url": "ws://localhost:7880",
|
||||
"serverApiUrl": "http://localhost:7880",
|
||||
"apiKey": "devkey",
|
||||
"room": "fluxer-webrtc-harness-39291-5ee61a43-3009-4112-bca3-ae4b4667a371",
|
||||
"externalTokens": false,
|
||||
"publisherIdentity": "fluxer-native-publisher-39291",
|
||||
"secondaryPublisherIdentity": "fluxer-native-publisher-2-39291",
|
||||
"subscriberIdentity": "fluxer-native-subscriber-39291",
|
||||
"required": false,
|
||||
"strict": false,
|
||||
"timeoutMs": 30000,
|
||||
"connectTimeoutMs": 30000,
|
||||
"disconnectTimeoutMs": 10000,
|
||||
"probeTimeoutMs": 1500,
|
||||
"durationMs": 0,
|
||||
"width": 320,
|
||||
"height": 180,
|
||||
"expectedWidth": 320,
|
||||
"expectedHeight": 180,
|
||||
"fps": 15,
|
||||
"minFpsRatio": 0,
|
||||
"maxFrameGapMs": 0,
|
||||
"maxAudioFrameGapMs": 0,
|
||||
"maxAvDriftMs": 0,
|
||||
"maxPacketLoss": null,
|
||||
"requireStableResolution": false,
|
||||
"videoPattern": "gradient",
|
||||
"videoInput": "bgra",
|
||||
"subscriberVideoQuality": null,
|
||||
"screenCodecs": ["vp8"],
|
||||
"expectedScreenCodecs": ["vp8"],
|
||||
"codec": "vp8",
|
||||
"expectedScreenCodec": "video/VP8",
|
||||
"secondaryPublisher": false,
|
||||
"secondaryPublisherCodec": "vp8",
|
||||
"secondaryPublisherCodecExplicit": false,
|
||||
"expectedSecondaryPublisherCodec": "video/VP8",
|
||||
"expectedSecondaryPublisherCodecExplicit": false,
|
||||
"screenSimulcast": true,
|
||||
"secondaryPublisherScreenSimulcast": true,
|
||||
"adaptiveSend": true,
|
||||
"minVideoFps": 15,
|
||||
"minResolutionScale": 0.5,
|
||||
"maxAudioBufferMs": 750,
|
||||
"secondaryPublisherMicrophone": true,
|
||||
"secondaryPublisherScreenAudio": false,
|
||||
"maxBitrateBps": 400000,
|
||||
"sampleRate": 48000,
|
||||
"channels": 1,
|
||||
"audioChunkMs": 20,
|
||||
"microphone": true,
|
||||
"screenAudio": false,
|
||||
"dataPacket": false,
|
||||
"subscriptionCycle": false,
|
||||
"validateServerPublishing": false,
|
||||
"camera": false,
|
||||
"cameraDeviceId": null,
|
||||
"expectedCameraCodec": null,
|
||||
"expectedHardwareEncoder": null,
|
||||
"reportPath": "/Users/hampus/Development/fluxer/fluxer_desktop/native-media-reports/2026-06-09T0407-codex-macos-smoke/livekit-harness.json",
|
||||
"verbose": false,
|
||||
"scenarioName": "codec-vp8",
|
||||
"apiSecret": "<redacted>",
|
||||
"e2eeKey": null,
|
||||
"publisherToken": null,
|
||||
"secondaryPublisherToken": null,
|
||||
"subscriberToken": null
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"name": "publisher connected",
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "subscriber connected",
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "publisher local screenshare publication",
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "subscriber remote screenshare subscription",
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "subscriber inbound video frames >= 3",
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "subscriber video frame callback",
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "publisher outbound screenshare stats",
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "subscriber inbound video stats",
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "subscriber inbound video stats count >= 1",
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "subscriber video resolution 320x180",
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "subscriber aggregate inbound audio frames >= 3",
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "subscriber inbound audio stats count >= 1",
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "publisher local microphone publication",
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "subscriber remote microphone subscription",
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "subscriber inbound audio frames >= 3",
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "publisher outbound microphone stats",
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "subscriber inbound audio stats",
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "publisher outbound screenshare codec video/VP8",
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "subscriber inbound video codec video/VP8",
|
||||
"pass": true
|
||||
}
|
||||
],
|
||||
"skippedReason": null,
|
||||
"error": null,
|
||||
"hardwareEncoder": {
|
||||
"available": true,
|
||||
"backend": "videotoolbox",
|
||||
"compiled": true,
|
||||
"runtime": true,
|
||||
"codecs": ["h264", "h265"],
|
||||
"zeroCopy": false,
|
||||
"nativeInputs": [],
|
||||
"detail": "VideoToolbox can create hardware-accelerated compression sessions for h264, h265; supported hardware-codec probe set: h264, h265"
|
||||
},
|
||||
"metrics": {
|
||||
"inboundAudioFrames": 72,
|
||||
"inboundVideoFrames": 5,
|
||||
"strictAudioFrames": 0,
|
||||
"strictVideoFrames": 0,
|
||||
"videoCallbacks": 5,
|
||||
"videoBytes": 432000,
|
||||
"receivedFps": 0,
|
||||
"requiredFps": null,
|
||||
"maxVideoFrameGapMs": 0,
|
||||
"maxAudioFrameGapMs": 0,
|
||||
"maxVideoFrameGapOverallMs": 132,
|
||||
"maxAudioFrameGapOverallMs": 101,
|
||||
"avDriftMs": 2,
|
||||
"maxObservedPacketLoss": 0,
|
||||
"maxObservedPacketLossDelta": 0,
|
||||
"videoResolutionCounts": {},
|
||||
"videoResolutionMismatchCount": 0,
|
||||
"droppedVideoFrameCallbacks": 0,
|
||||
"publisherVideoPump": {
|
||||
"input": "bgra",
|
||||
"pattern": "gradient",
|
||||
"targetFps": 15,
|
||||
"startedAtMs": 1780978189023,
|
||||
"stoppedAtMs": null,
|
||||
"framesPushed": 0,
|
||||
"framesRejected": 0,
|
||||
"errors": 0,
|
||||
"maxPushGapMs": 0,
|
||||
"lastPushAtMs": null,
|
||||
"elapsedMs": 1264,
|
||||
"producedFps": 0
|
||||
},
|
||||
"secondaryPublisherVideoPump": null,
|
||||
"serverPublishing": {
|
||||
"fetchedAtMs": null,
|
||||
"error": null,
|
||||
"participants": []
|
||||
},
|
||||
"lastVideoMeta": {
|
||||
"participantSid": "PA_tmqNx963FdVV",
|
||||
"trackSid": "TR_VS7wQpyDuhX3NX",
|
||||
"width": 320,
|
||||
"height": 180,
|
||||
"timestampUs": 524374518000
|
||||
},
|
||||
"publisherStats": {
|
||||
"rttMs": 1,
|
||||
"outbound": [
|
||||
{
|
||||
"trackSid": "TR_VS7wQpyDuhX3NX",
|
||||
"source": "screen_share",
|
||||
"kind": "video",
|
||||
"bitrateKbps": 0,
|
||||
"packetsLost": 0,
|
||||
"fps": 10,
|
||||
"width": 320,
|
||||
"height": 180,
|
||||
"sourceWidth": 320,
|
||||
"sourceHeight": 180,
|
||||
"targetBitrateKbps": 400,
|
||||
"configuredFps": 15,
|
||||
"targetFps": 15,
|
||||
"effectiveFps": 0,
|
||||
"framesProduced": 0,
|
||||
"framesAccepted": 0,
|
||||
"framesDropped": 0,
|
||||
"framesCoalesced": 0,
|
||||
"framesCaptured": 0,
|
||||
"captureFailures": 0,
|
||||
"maxQueueAgeMs": 0,
|
||||
"maxPushLatencyMs": 0,
|
||||
"adaptiveSendTier": "full",
|
||||
"adaptiveSendReason": "stable",
|
||||
"codec": "video/VP8"
|
||||
},
|
||||
{
|
||||
"trackSid": "TR_AMq6BwJ6fu5yXx",
|
||||
"source": "microphone",
|
||||
"kind": "audio",
|
||||
"bitrateKbps": 0,
|
||||
"packetsLost": 0,
|
||||
"audioLevel": 0.305,
|
||||
"codec": "audio/opus"
|
||||
}
|
||||
],
|
||||
"inbound": [],
|
||||
"send": {
|
||||
"outgoingVideoQueueDepth": 0,
|
||||
"outgoingVideoQueueCapacity": 8,
|
||||
"outgoingVideoMaxQueueDepth": 0,
|
||||
"outgoingVideoFramesProduced": 0,
|
||||
"outgoingVideoFramesAccepted": 0,
|
||||
"outgoingVideoFramesDropped": 0,
|
||||
"outgoingVideoFramesCoalesced": 0,
|
||||
"outgoingVideoFramesCaptured": 0,
|
||||
"outgoingVideoCaptureFailures": 0,
|
||||
"outgoingVideoEffectiveFps": 0,
|
||||
"outgoingVideoTargetFps": 15,
|
||||
"outgoingVideoPacingTargetFps": 15,
|
||||
"outgoingVideoMaxQueueAgeMs": 0,
|
||||
"outgoingVideoMaxPushLatencyMs": 0,
|
||||
"outgoingVideoPacingMode": "source",
|
||||
"outgoingVideoBusActive": false,
|
||||
"outgoingAudioBufferTargetMs": 200,
|
||||
"outgoingAudioBufferMaxMs": 750,
|
||||
"outgoingAudioUnderruns": 0,
|
||||
"outgoingAudioRebuffers": 0,
|
||||
"outgoingAudioMaxFrameGapMs": 23,
|
||||
"adaptiveSendTier": "full",
|
||||
"adaptiveSendReason": "stable"
|
||||
}
|
||||
},
|
||||
"secondaryPublisherStats": null,
|
||||
"subscriberStats": {
|
||||
"rttMs": 2,
|
||||
"outbound": [],
|
||||
"inbound": [
|
||||
{
|
||||
"participantSid": "PA_tmqNx963FdVV",
|
||||
"trackSid": "TR_AMq6BwJ6fu5yXx",
|
||||
"kind": "audio",
|
||||
"bitrateKbps": 0,
|
||||
"packetsLost": 0,
|
||||
"jitterMs": 0,
|
||||
"audioLevel": 0.307,
|
||||
"codec": "audio/opus"
|
||||
},
|
||||
{
|
||||
"participantSid": "PA_tmqNx963FdVV",
|
||||
"trackSid": "TR_VS7wQpyDuhX3NX",
|
||||
"kind": "video",
|
||||
"bitrateKbps": 0,
|
||||
"packetsLost": 0,
|
||||
"jitterMs": 0,
|
||||
"codec": "video/VP8"
|
||||
}
|
||||
],
|
||||
"send": {
|
||||
"outgoingVideoQueueDepth": 0,
|
||||
"outgoingVideoQueueCapacity": 0,
|
||||
"outgoingVideoMaxQueueDepth": 0,
|
||||
"outgoingVideoFramesProduced": 0,
|
||||
"outgoingVideoFramesAccepted": 0,
|
||||
"outgoingVideoFramesDropped": 0,
|
||||
"outgoingVideoFramesCoalesced": 0,
|
||||
"outgoingVideoFramesCaptured": 0,
|
||||
"outgoingVideoCaptureFailures": 0,
|
||||
"outgoingVideoEffectiveFps": 0,
|
||||
"outgoingVideoTargetFps": 0,
|
||||
"outgoingVideoPacingTargetFps": 0,
|
||||
"outgoingVideoMaxQueueAgeMs": 0,
|
||||
"outgoingVideoMaxPushLatencyMs": 0,
|
||||
"outgoingVideoPacingMode": "idle",
|
||||
"outgoingVideoBusActive": false,
|
||||
"outgoingAudioBufferTargetMs": 200,
|
||||
"outgoingAudioBufferMaxMs": 750,
|
||||
"outgoingAudioUnderruns": 0,
|
||||
"outgoingAudioRebuffers": 0,
|
||||
"outgoingAudioMaxFrameGapMs": 0,
|
||||
"adaptiveSendTier": "idle",
|
||||
"adaptiveSendReason": "notPublishing"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user