@@ -35,7 +35,7 @@ const ANNEX_B_START_CODE: &[u8] = &[0, 0, 0, 1];
3535const DEFAULT_STUN_URL : & str = "stun:stun.l.google.com:19302" ;
3636const WEBRTC_CONTROL_CHANNEL_LABEL : & str = "simdeck-control" ;
3737const WEBRTC_BOOTSTRAP_KEYFRAME_INTERVAL : Duration = Duration :: from_millis ( 150 ) ;
38- const WEBRTC_BOOTSTRAP_KEYFRAME_REPEATS : u8 = 8 ;
38+ const WEBRTC_BOOTSTRAP_KEYFRAME_REPEATS : u8 = 3 ;
3939const WEBRTC_MIN_REFRESH_INTERVAL : Duration = Duration :: from_millis ( 16 ) ;
4040const WEBRTC_MAX_REFRESH_INTERVAL : Duration = Duration :: from_millis ( 100 ) ;
4141const WEBRTC_LOW_LATENCY_REFRESH_INTERVAL : Duration = Duration :: from_millis ( 67 ) ;
@@ -617,7 +617,11 @@ impl WebRtcMediaStream {
617617 . metrics
618618 . frames_dropped_server
619619 . fetch_add ( 1 , Ordering :: Relaxed ) ;
620- session. request_keyframe ( ) ;
620+ if realtime_stream {
621+ session. request_refresh ( ) ;
622+ } else {
623+ session. request_keyframe ( ) ;
624+ }
621625 }
622626 Err ( error) => {
623627 warn ! ( "WebRTC initial keyframe write failed for {udid}: {error}" ) ;
@@ -655,7 +659,11 @@ impl WebRtcMediaStream {
655659 . metrics
656660 . frames_dropped_server
657661 . fetch_add( 1 , Ordering :: Relaxed ) ;
658- session. request_keyframe( ) ;
662+ if realtime_stream {
663+ session. request_refresh( ) ;
664+ } else {
665+ session. request_keyframe( ) ;
666+ }
659667 }
660668 Err ( error) => {
661669 warn!( "WebRTC bootstrap keyframe write failed for {udid}: {error}" ) ;
@@ -681,8 +689,12 @@ impl WebRtcMediaStream {
681689 . metrics
682690 . frames_dropped_server
683691 . fetch_add( skipped, Ordering :: Relaxed ) ;
684- waiting_for_keyframe = true ;
685- session. request_keyframe( ) ;
692+ if realtime_stream {
693+ session. request_refresh( ) ;
694+ } else {
695+ waiting_for_keyframe = true ;
696+ session. request_keyframe( ) ;
697+ }
686698 continue ;
687699 }
688700 Err ( broadcast:: error:: RecvError :: Closed ) => {
@@ -691,7 +703,7 @@ impl WebRtcMediaStream {
691703 }
692704 } ;
693705 let ( frame, stale_frames) = drain_to_latest_frame( & mut rx, frame, & state. metrics) ;
694- if stale_frames > 0 {
706+ if stale_frames > 0 && !realtime_stream {
695707 session. request_keyframe( ) ;
696708 }
697709 if stale_frames > 0 && !realtime_stream && !frame. is_keyframe {
@@ -729,7 +741,11 @@ impl WebRtcMediaStream {
729741 . fetch_add( 1 , Ordering :: Relaxed ) ;
730742 waiting_for_keyframe = !realtime_stream;
731743 adaptive_refresh_interval = refresh_ceiling;
732- session. request_keyframe( ) ;
744+ if realtime_stream {
745+ session. request_refresh( ) ;
746+ } else {
747+ session. request_keyframe( ) ;
748+ }
733749 }
734750 Err ( error) => {
735751 warn!( "WebRTC frame write failed for {udid}: {error}" ) ;
0 commit comments