From 7b07a46cd824c61d547e73cff1a06b6794da9300 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Thu, 14 May 2026 18:05:28 +0000 Subject: [PATCH] Changes Co-authored-by: Reifonas <211114984+Reifonas@users.noreply.github.com> --- src/components/ShareButton.tsx | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/components/ShareButton.tsx b/src/components/ShareButton.tsx index a1fff34..bea6fe3 100644 --- a/src/components/ShareButton.tsx +++ b/src/components/ShareButton.tsx @@ -27,15 +27,22 @@ export function ShareButton({ variant = 'default', autoOpen, onHandleChange, onV const start = async () => { setStarting(true); try { - // Try canvas.captureStream first (works inside the page, no permission prompt) - const canvas = document.querySelector('canvas') as HTMLCanvasElement | null; + // Prefer the XR broadcast mirror (opaque) if active — required during AR passthrough. let stream: MediaStream | null = null; - - if (canvas && typeof canvas.captureStream === 'function') { - stream = canvas.captureStream(30); + const mirror = getBroadcastSource(); + if (mirror && typeof mirror.captureStream === 'function') { + stream = mirror.captureStream(24); } - // Fallback: getDisplayMedia (asks user permission, captures the browser tab) + // Fallback: main page canvas + if (!stream || stream.getVideoTracks().length === 0) { + const canvas = document.querySelector('canvas') as HTMLCanvasElement | null; + if (canvas && typeof canvas.captureStream === 'function') { + stream = canvas.captureStream(30); + } + } + + // Last resort: getDisplayMedia (asks user permission) if (!stream || stream.getVideoTracks().length === 0) { stream = await navigator.mediaDevices.getDisplayMedia({ video: { frameRate: 30 }, @@ -46,7 +53,8 @@ export function ShareButton({ variant = 'default', autoOpen, onHandleChange, onV streamRef.current = stream; const h = await startBroadcast(stream); setHandle(h); - h.onViewerCountChange(setViewerCount); + onHandleChange?.(h); + h.onViewerCountChange((n) => { setViewerCount(n); onViewerCountChange?.(n); }); toast.success(`Sala criada: ${h.code}`); } catch (e) { const msg = e instanceof Error ? e.message : String(e);