diff --git a/docs/configuration.md b/docs/configuration.md index f5e31f727f0..1f31d74c3e4 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -1316,6 +1316,29 @@ editing the `conf` file in a text editor. Use the examples as reference. +### max_bitrate + + + + + + + + + + + + + + +
Description + The maximum bitrate (in Kbps) that Sunshine will encode the stream at. If set to 0, it will always use the bitrate requested by Moonlight. +
Default@code{} + 0 + @endcode
Example@code{} + max_bitrate = 5000 + @endcode
+ ### min_fps_factor diff --git a/src/config.cpp b/src/config.cpp index 5809fc16eec..e97de9f523d 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -509,7 +509,8 @@ namespace config { {} // wa }, // display_device - 1 // min_fps_factor + 1, // min_fps_factor + 0 // max_bitrate }; audio_t audio { @@ -1138,6 +1139,7 @@ namespace config { bool_f(vars, "dd_wa_hdr_toggle", video.dd.wa.hdr_toggle); int_between_f(vars, "min_fps_factor", video.min_fps_factor, {1, 3}); + int_f(vars, "max_bitrate", video.max_bitrate); path_f(vars, "pkey", nvhttp.pkey); path_f(vars, "cert", nvhttp.cert); diff --git a/src/config.h b/src/config.h index 7b06e234fbb..fe6629da3b4 100644 --- a/src/config.h +++ b/src/config.h @@ -138,6 +138,7 @@ namespace config { } dd; int min_fps_factor; // Minimum fps target, determines minimum frame time + int max_bitrate; // Maximum bitrate, sets ceiling in kbps for bitrate requested from client }; struct audio_t { diff --git a/src/video.cpp b/src/video.cpp index f06e2360332..f75cfa34d7f 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -1687,7 +1687,8 @@ namespace video { } } - auto bitrate = config.bitrate * 1000; + auto bitrate = ((config::video.max_bitrate > 0) ? std::min(config.bitrate, config::video.max_bitrate) : config.bitrate) * 1000; + BOOST_LOG(info) << "Max bitrate is " << config::video.max_bitrate; ctx->rc_max_rate = bitrate; ctx->bit_rate = bitrate; diff --git a/src_assets/common/assets/web/config.html b/src_assets/common/assets/web/config.html index 3b74b922306..8fd43c4101f 100644 --- a/src_assets/common/assets/web/config.html +++ b/src_assets/common/assets/web/config.html @@ -179,6 +179,7 @@

{{ $t('config.configuration') }}

"dd_mode_remapping": {"mixed": [], "resolution_only": [], "refresh_rate_only": []}, "dd_wa_hdr_toggle": "disabled", "min_fps_factor": 1, + "max_bitrate": 0, }, }, { diff --git a/src_assets/common/assets/web/configs/tabs/audiovideo/DisplayModesSettings.vue b/src_assets/common/assets/web/configs/tabs/audiovideo/DisplayModesSettings.vue index c74d4a6c1b5..2bf997baea6 100644 --- a/src_assets/common/assets/web/configs/tabs/audiovideo/DisplayModesSettings.vue +++ b/src_assets/common/assets/web/configs/tabs/audiovideo/DisplayModesSettings.vue @@ -17,6 +17,13 @@ const config = ref(props.config)
{{ $t('config.min_fps_factor_desc') }}
+ + +
+ + +
{{ $t("config.max_bitrate_desc") }}
+