Skip to content

Commit e710923

Browse files
committed
Allow switching between screenshares
Resolves #504
1 parent af080e8 commit e710923

1 file changed

Lines changed: 11 additions & 4 deletions

File tree

web/src/components/broadcast/Broadcast.tsx

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,17 @@ const mediaOptions = {
1818
},
1919
}
2020

21+
type MediaSource = "Screen" | "Webcam"
22+
2123
function BrowserBroadcaster() {
2224
const location = useLocation()
2325
const { locale } = useContext(LocaleContext)
2426
const navigate = useNavigate();
2527
const streamKey = decodeURIComponent(location.pathname.split('/').pop() ?? "")
2628
const [mediaAccessError, setMediaAccessError] = useState<ErrorMessageEnum | null>(null)
2729
const [publishSuccess, setPublishSuccess] = useState(false)
28-
const [useDisplayMedia, setUseDisplayMedia] = useState<"Screen" | "Webcam" | "None">("None");
30+
const [useDisplayMedia, setUseDisplayMedia] = useState<MediaSource | "None">("None");
31+
const [mediaRequestCount, setMediaRequestCount] = useState(0)
2932
const [peerConnectionDisconnected, setPeerConnectionDisconnected] = useState(false)
3033
const [hasPacketLoss, setHasPacketLoss] = useState<boolean>(false)
3134
const [hasSignal, setHasSignal] = useState<boolean>(false);
@@ -41,6 +44,10 @@ function BrowserBroadcaster() {
4144
const badSignalCountRef = useRef<number>(10);
4245

4346
const endStream = () => navigate('/')
47+
const requestMedia = (source: MediaSource) => {
48+
setUseDisplayMedia(source)
49+
setMediaRequestCount(prev => prev + 1)
50+
}
4451

4552
const stopLocalMediaStream = (localMediaStream: MediaStream | null) => {
4653
if (!localMediaStream) {
@@ -224,7 +231,7 @@ function BrowserBroadcaster() {
224231
cancelled = true
225232
}
226233
// eslint-disable-next-line react-hooks/exhaustive-deps
227-
}, [videoRef, useDisplayMedia, location.pathname])
234+
}, [videoRef, useDisplayMedia, mediaRequestCount, location.pathname])
228235

229236
useEffect(() => {
230237
hasSignalRef.current = hasSignal;
@@ -302,11 +309,11 @@ function BrowserBroadcaster() {
302309
<Button
303310
color='Accept'
304311
title={locale.player_header.publish_screen}
305-
onClick={() => setUseDisplayMedia("Screen")}
312+
onClick={() => requestMedia("Screen")}
306313
/>
307314
<Button
308315
title={locale.player_header.publish_webcam}
309-
onClick={() => setUseDisplayMedia("Webcam")}
316+
onClick={() => requestMedia("Webcam")}
310317
/>
311318
</div>
312319
)}

0 commit comments

Comments
 (0)