fix(webrtc): force IDR on KeyframeRequest via forced-idr=1 + pict_type (closes #16)
WebRTC KeyframeRequest 响应延迟 2.1s(152 P 帧丢弃)→ 端到端 5-20ms。 - BitrateCommand::ForceKeyframe variant over existing bitrate_tx channel - SwEncEncode.force_keyframe_pending: bypass dedup, set AV_PICTURE_TYPE_I, clear only after avcodec_send_frame succeeds - libx264 forced-idr=1 via av_opt_set (FFmpeg-level option, not x264-native) - pict_type reset to NONE per frame (reused AVFrame leak guard) - WebRtcInner.force_keyframe_to_encode + take_force_keyframe() drain API - recreate_encoder sets force_keyframe_pending (resolution change → IDR) Verification: skipping non-IDR frame 152→0, ForceKeyframe→IDR 4-5ms stable.
This commit is contained in:
@@ -702,6 +702,10 @@ fn webrtc_thread_loop(
|
||||
break;
|
||||
}
|
||||
|
||||
if wrtc.take_force_keyframe() {
|
||||
let _ = bitrate_tx.try_send(BitrateCommand::ForceKeyframe);
|
||||
}
|
||||
|
||||
let connected = wrtc.is_connected();
|
||||
let was_paused = paused.load(Ordering::Relaxed);
|
||||
let now_paused = !connected;
|
||||
|
||||
Reference in New Issue
Block a user