bzl

self-hosted ephemeral community engine
Log | Files | Refs | README | LICENSE

commit 3d59ddc6648cc9d98f7f216c02c150e18b018a74
parent f90614e6990592c48a5aa1cdb61e929e34a09466
Author: SageAzakaela <106701693+SageAzakaela@users.noreply.github.com>
Date:   Sat, 21 Feb 2026 17:36:01 -0700

video streams allow mic audio in addition to screen audio

Diffstat:
Mpublic/app.js | 24++++++++++++++++++++----
1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/public/app.js b/public/app.js @@ -9085,8 +9085,10 @@ async function tryGetMicrophoneTrack() { } } -async function ensureStreamAudioForKind(media, kind) { +async function ensureStreamAudioForKind(media, kind, opts = null) { if (!media) return media; + const options = opts && typeof opts === "object" ? opts : {}; + const includeMicForScreen = options.includeMicForScreen !== false; const audioTracks = media.getAudioTracks(); const hasAudio = audioTracks.length > 0; if (kind === "audio" || kind === "webcam") { @@ -9096,8 +9098,9 @@ async function ensureStreamAudioForKind(media, kind) { return media; } if (kind === "screen") { + if (!includeMicForScreen) return media; const micTrack = await tryGetMicrophoneTrack(); - if (micTrack && !hasAudio) media.addTrack(micTrack); + if (micTrack) media.addTrack(micTrack); } return media; } @@ -9120,17 +9123,30 @@ async function startStreamHost(post) { try { if (!navigator.mediaDevices) throw new Error("Media devices are unavailable in this browser."); let media = null; + let includeMicForScreen = true; if (kind === "screen") { media = await navigator.mediaDevices.getDisplayMedia({ video: true, audio: true }); + try { + const remembered = readBoolPref("bzl_stream_screen_include_mic", true); + const ask = window.confirm( + remembered + ? "Include your microphone with screen share? (Recommended)" + : "Include your microphone with screen share?" + ); + includeMicForScreen = Boolean(ask); + writeBoolPref("bzl_stream_screen_include_mic", includeMicForScreen); + } catch { + includeMicForScreen = true; + } } else if (kind === "audio") { media = await navigator.mediaDevices.getUserMedia({ audio: true, video: false }); } else { media = await navigator.mediaDevices.getUserMedia({ audio: true, video: true }); } if (!media) throw new Error("No stream media available."); - media = await ensureStreamAudioForKind(media, kind); + media = await ensureStreamAudioForKind(media, kind, { includeMicForScreen }); if (!media.getAudioTracks().length) { - throw new Error("No audio track available. Allow microphone access to go live with sound."); + throw new Error("No audio track available. Share system audio and/or allow microphone access to go live with sound."); } leaveActiveStream(false);