From a0134d919452af520db6b2143eefd115be612aa1 Mon Sep 17 00:00:00 2001 From: Bleuzen <12885163+Bleuzen@users.noreply.github.com> Date: Thu, 7 May 2026 17:46:01 +0200 Subject: [PATCH] obs-webrtc: Allow B-frames for AV1 --- frontend/utility/AdvancedOutput.cpp | 1 + frontend/utility/SimpleOutput.cpp | 1 + plugins/obs-webrtc/whip-service.cpp | 6 +++++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/frontend/utility/AdvancedOutput.cpp b/frontend/utility/AdvancedOutput.cpp index aff3ad6231072b..4a7ef89b1a2fd0 100644 --- a/frontend/utility/AdvancedOutput.cpp +++ b/frontend/utility/AdvancedOutput.cpp @@ -208,6 +208,7 @@ void AdvancedOutput::UpdateStreamSettings() if (applyServiceSettings) { int bitrate = (int)obs_data_get_int(settings, "bitrate"); int keyint_sec = (int)obs_data_get_int(settings, "keyint_sec"); + obs_data_set_string(settings, "codec", obs_get_encoder_codec(streamEncoder)); obs_service_apply_encoder_settings(main->GetService(), settings, nullptr); if (!enforceBitrate) { int maxVideoBitrate; diff --git a/frontend/utility/SimpleOutput.cpp b/frontend/utility/SimpleOutput.cpp index c3491fd91c9319..f2b3a2188cf85c 100644 --- a/frontend/utility/SimpleOutput.cpp +++ b/frontend/utility/SimpleOutput.cpp @@ -326,6 +326,7 @@ void SimpleOutput::Update() obs_data_set_string(audioSettings, "rate_control", "CBR"); obs_data_set_int(audioSettings, "bitrate", audioBitrate); + obs_data_set_string(videoSettings, "codec", obs_get_encoder_codec(encoder_id)); obs_service_apply_encoder_settings(main->GetService(), videoSettings, audioSettings); if (!enforceBitrate) { diff --git a/plugins/obs-webrtc/whip-service.cpp b/plugins/obs-webrtc/whip-service.cpp index 33690fb394d9b5..577f4ec9fbd2a2 100644 --- a/plugins/obs-webrtc/whip-service.cpp +++ b/plugins/obs-webrtc/whip-service.cpp @@ -28,7 +28,11 @@ void WHIPService::ApplyEncoderSettings(obs_data_t *video_settings, obs_data_t *) { // For now, ensure maximum compatibility with webrtc peers if (video_settings) { - obs_data_set_int(video_settings, "bf", 0); + const char *codec = obs_data_get_string(video_settings, "codec"); + bool isAv1 = strcmp(codec, "av1") == 0; + if (!isAv1) { + obs_data_set_int(video_settings, "bf", 0); + } obs_data_set_bool(video_settings, "repeat_headers", true); } }