@@ -53,6 +53,7 @@ pub struct RecordingSession {
5353 speaker_recorder_worker : Option < JoinHandle < Result < ( ) , RecorderError > > > ,
5454
5555 audio_mixer_stop_sig : Option < Arc < AtomicBool > > ,
56+ audio_mixer_finished_sig : Option < Arc < AtomicBool > > ,
5657 audio_mixer_worker : Option < JoinHandle < ( ) > > ,
5758 mp4_writer_worker : Option < JoinHandle < ( ) > > ,
5859 h264_frame_sender : Option < Sender < VideoFrameType > > ,
@@ -86,7 +87,9 @@ impl RecordingSession {
8687 speaker_level_receiver : None ,
8788
8889 audio_mixer_stop_sig : None ,
90+ audio_mixer_finished_sig : None ,
8991 audio_mixer_worker : None ,
92+
9093 mp4_writer_worker : None ,
9194 h264_frame_sender : None ,
9295
@@ -466,7 +469,10 @@ impl RecordingSession {
466469 }
467470
468471 self . audio_mixer_stop_sig = Some ( Arc :: new ( AtomicBool :: new ( false ) ) ) ;
472+ self . audio_mixer_finished_sig = Some ( Arc :: new ( AtomicBool :: new ( false ) ) ) ;
473+
469474 let stop_sig = self . audio_mixer_stop_sig . clone ( ) . unwrap ( ) ;
475+ let finished_sig = self . audio_mixer_finished_sig . clone ( ) . unwrap ( ) ;
470476
471477 let handle = thread:: spawn ( move || {
472478 loop {
@@ -475,6 +481,10 @@ impl RecordingSession {
475481 }
476482
477483 if stop_sig. load ( Ordering :: Relaxed ) {
484+ if let Err ( e) = audio_processor. flush ( ) {
485+ log:: warn!( "Audio mixer flush sample failed: {e}" ) ;
486+ }
487+ finished_sig. store ( true , Ordering :: Relaxed ) ;
478488 return ;
479489 }
480490
@@ -550,6 +560,16 @@ impl RecordingSession {
550560
551561 if let Some ( stop_sig) = self . audio_mixer_stop_sig {
552562 stop_sig. store ( true , Ordering :: Relaxed ) ;
563+
564+ let mut try_counts = 0 ;
565+ while let Some ( ref finished_sig) = self . audio_mixer_finished_sig {
566+ if finished_sig. load ( Ordering :: Relaxed ) || try_counts > 5 {
567+ break ;
568+ }
569+
570+ try_counts += 1 ;
571+ thread:: sleep ( Duration :: from_millis ( 100 ) ) ;
572+ }
553573 }
554574
555575 if let Some ( sender) = self . h264_frame_sender . take ( )
0 commit comments