diff --git a/CHANGES.md b/CHANGES.md index 3b2bb28..f708441 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -21,10 +21,12 @@ - @torikizi - [CHANGE] FakeNetwork 系の機能を削除 - @melpon +- [ADD] `--degradation-preference` 引数を追加 + - @melpon - [UPDATE] CMakeLists の依存から libva と libdrm を削除する - @zztkm - [UPDATE] CI の Ubuntu で libba と libdrm をインストールしないようにする -- [UPDATE] Sora C++ SDK を `2024.8.0` に上げる +- [UPDATE] Sora C++ SDK を `2025.1.0-canary.2` に上げる - それに伴って以下のライブラリのバージョンも上げる - libwebrtc のバージョンを `m132.6834.4.0` に上げる - Boost のバージョンを `1.87.0` に上げる diff --git a/VERSION b/VERSION index 9957bc6..f7b3a7e 100644 --- a/VERSION +++ b/VERSION @@ -1,5 +1,5 @@ ZAKURO_VERSION=2024.2.0-canary.4 -SORA_CPP_SDK_VERSION=2025.1.0-canary.1 +SORA_CPP_SDK_VERSION=2025.1.0-canary.2 WEBRTC_BUILD_VERSION=m132.6834.4.0 BOOST_VERSION=1.87.0 CLI11_VERSION=v2.4.2 diff --git a/src/util.cpp b/src/util.cpp index 0a8ca41..e150c07 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -165,6 +165,18 @@ void Util::ParseArgs(const std::vector& cargs, app.add_option("--initial-mute-audio", config.initial_mute_audio, "Mute audio initialy (default: false)") ->transform(CLI::CheckedTransformer(bool_map, CLI::ignore_case)); + auto degradation_preference_map = + std::vector>( + {{"disabled", webrtc::DegradationPreference::DISABLED}, + {"maintain_framerate", + webrtc::DegradationPreference::MAINTAIN_FRAMERATE}, + {"maintain_resolution", + webrtc::DegradationPreference::MAINTAIN_RESOLUTION}, + {"balanced", webrtc::DegradationPreference::BALANCED}}); + app.add_option("--degradation-preference", config.degradation_preference, + "Degradation preference") + ->transform(CLI::CheckedTransformer(degradation_preference_map, + CLI::ignore_case)); // Sora 系オプション app.add_option("--sora-signaling-url", config.sora_signaling_urls, @@ -376,23 +388,23 @@ std::vector> Util::NodeToArgs(const YAML::Node& inst) { } } -#define DEF_SCALAR(x, prefix, key, type, type_name) \ - try { \ - const YAML::Node& node = x[key]; \ - if (node) { \ - if (!node.IsScalar()) { \ +#define DEF_SCALAR(x, prefix, key, type, type_name) \ + try { \ + const YAML::Node& node = x[key]; \ + if (node) { \ + if (!node.IsScalar()) { \ std::cerr << "\"" key "\" の値は " type_name " である必要があります。" \ - << std::endl; \ - has_error = true; \ - } else { \ - args.push_back("--" prefix key); \ - args.push_back(ConvertEnv(node, envs)); \ - } \ - } \ - } catch (YAML::BadConversion & e) { \ + << std::endl; \ + has_error = true; \ + } else { \ + args.push_back("--" prefix key); \ + args.push_back(ConvertEnv(node, envs)); \ + } \ + } \ + } catch (YAML::BadConversion & e) { \ std::cerr << "\"" key "\" の値は " type_name " である必要があります。" \ - << std::endl; \ - has_error = true; \ + << std::endl; \ + has_error = true; \ } #define DEF_STRING(x, prefix, key) \ @@ -401,24 +413,24 @@ std::vector> Util::NodeToArgs(const YAML::Node& inst) { #define DEF_DOUBLE(x, prefix, key) DEF_SCALAR(x, prefix, key, double, "実数") #define DEF_BOOLEAN(x, prefix, key) DEF_SCALAR(x, prefix, key, bool, "bool値") -#define DEF_FLAG(x, prefix, key) \ - try { \ - const YAML::Node& node = x[key]; \ - if (node) { \ - if (!node.IsScalar()) { \ +#define DEF_FLAG(x, prefix, key) \ + try { \ + const YAML::Node& node = x[key]; \ + if (node) { \ + if (!node.IsScalar()) { \ std::cerr << "\"" key "\" の値は bool値 である必要があります。" \ - << std::endl; \ - has_error = true; \ - } else { \ - if (node.as()) { \ - args.push_back("--" prefix key); \ - } \ - } \ - } \ - } catch (YAML::BadConversion & e) { \ + << std::endl; \ + has_error = true; \ + } else { \ + if (node.as()) { \ + args.push_back("--" prefix key); \ + } \ + } \ + } \ + } catch (YAML::BadConversion & e) { \ std::cerr << "\"" key "\" の値は bool値 である必要があります。" \ - << std::endl; \ - has_error = true; \ + << std::endl; \ + has_error = true; \ } for (int i = 0; i < instance_num; i++) { @@ -452,6 +464,7 @@ std::vector> Util::NodeToArgs(const YAML::Node& inst) { DEF_STRING(inst, "", "client-key"); DEF_BOOLEAN(inst, "", "initial-mute-video"); DEF_BOOLEAN(inst, "", "initial-mute-audio"); + DEF_STRING(inst, "", "degradation-preference"); const YAML::Node& sora = inst["sora"]; if (sora) { diff --git a/src/zakuro.cpp b/src/zakuro.cpp index 58941f4..42e314f 100644 --- a/src/zakuro.cpp +++ b/src/zakuro.cpp @@ -403,6 +403,7 @@ int Zakuro::Run() { config_.sora_ignore_disconnect_websocket; sora_config.disconnect_wait_timeout = config_.sora_disconnect_wait_timeout; sora_config.data_channels = dcs.schannels; + sora_config.degradation_preference = config_.degradation_preference; std::vector vc_configs; for (int i = 0; i < config_.vcs; i++) { diff --git a/src/zakuro.h b/src/zakuro.h index d3130ab..03cab0d 100644 --- a/src/zakuro.h +++ b/src/zakuro.h @@ -5,6 +5,9 @@ #include #include +// WebRTC +#include + // Boost #include #include @@ -42,6 +45,7 @@ struct ZakuroConfig { std::string client_key; bool initial_mute_video = false; bool initial_mute_audio = false; + std::optional degradation_preference; std::vector sora_signaling_urls; std::string sora_channel_id;