@@ -18,14 +18,17 @@ const mediaOptions = {
1818 } ,
1919}
2020
21+ type MediaSource = "Screen" | "Webcam"
22+
2123function 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