@@ -576,40 +576,34 @@ export function useMeetingLogic(meetingState, meetingId, options = {}) {
576576 // Apply noise cancellation if enabled
577577 const track = await getProcessedAudioTrack ( stream ) ;
578578 if ( mh ?. audioProducer ) {
579- if ( meetingState . isScreenSharing . value ) {
580- const currentTrack = mh . audioProducer . track ;
581- if ( currentTrack && currentTrack . readyState === "ended" ) {
582- await mh . audioProducer . replaceTrack ( { track } ) ;
583- } else {
584- mh . audioProducer . resume ?. ( ) ;
585- if ( track ) track . enabled = true ;
586- }
587- } else {
588- const producer =
589- await sfuManager . value . transportManager . createProducer ( track , {
590- type : "microphone" ,
591- } ) ;
592- mh ?. setProducers ( { audioProducer : producer } ) ;
579+ // if we have an existing paused producer resume it
580+ const currentTrack = mh . audioProducer . track ;
581+ if ( currentTrack && currentTrack . readyState === "ended" ) {
582+ // if track died unexpectedly, replace it
583+ await mh . audioProducer . replaceTrack ( { track } ) ;
584+ } else if ( track ) {
585+ track . enabled = true ;
586+ }
587+ mh . audioProducer . resume ?. ( ) ;
588+
589+ const sfuClient = getSFUClient ( ) ;
590+ if ( sfuClient . isConnected ( ) ) {
591+ sfuClient . resumeProducer ( mh . audioProducer . id ) . catch ( ( ) => { } ) ;
593592 }
594593 } else if ( track && sfuManager . value ?. transportManager ) {
594+ // if no existing producer create one
595595 const producer =
596596 await sfuManager . value . transportManager . createProducer ( track , {
597597 type : "microphone" ,
598598 } ) ;
599599 mh ?. setProducers ( { audioProducer : producer } ) ;
600600 }
601601 } else {
602- // Turning mic OFF
602+ // disable the track and pause the producer
603603 if ( stream ) {
604604 const at = stream . getAudioTracks ( ) [ 0 ] ;
605605 if ( at ) {
606- if ( meetingState . isScreenSharing . value ) {
607- // Keep track alive for resuming, else user can't unmute after screen share
608- at . enabled = false ;
609- } else {
610- at . stop ( ) ;
611- stream . removeTrack ( at ) ;
612- }
606+ at . enabled = false ;
613607 }
614608 }
615609
@@ -619,14 +613,12 @@ export function useMeetingLogic(meetingState, meetingId, options = {}) {
619613 }
620614
621615 if ( mh ?. audioProducer ) {
622- mh . audioProducer . close ?. ( ) ;
616+ mh . audioProducer . pause ?. ( ) ;
623617
624618 const sfuClient = getSFUClient ( ) ;
625619 if ( sfuClient . isConnected ( ) ) {
626- sfuClient . closeProducer ( mh . audioProducer . id ) . catch ( ( ) => { } ) ;
620+ sfuClient . pauseProducer ( mh . audioProducer . id ) ;
627621 }
628-
629- mh . audioProducer = null ;
630622 }
631623 }
632624
0 commit comments