From 0a6b6572406d21b6dda6fcb7be2d61be4b177155 Mon Sep 17 00:00:00 2001 From: torikizi <51085972+torikizi@users.noreply.github.com> Date: Tue, 17 Dec 2024 19:26:16 +0900 Subject: [PATCH 01/16] =?UTF-8?q?=E8=BB=A2=E9=80=81=E3=83=95=E3=82=A3?= =?UTF-8?q?=E3=83=AB=E3=82=BF=E3=83=BC=E3=82=92=E8=A4=87=E6=95=B0=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E5=8F=AF=E8=83=BD=E3=81=AB=E3=81=97=20name=20/=20prio?= =?UTF-8?q?rity=20=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sora/Sora.cs | 8 ++++++ proto/sora_conf_internal.proto | 6 +++++ src/sora.cpp | 47 ++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) diff --git a/Sora/Sora.cs b/Sora/Sora.cs index 09fd638..cd1063a 100644 --- a/Sora/Sora.cs +++ b/Sora/Sora.cs @@ -75,6 +75,8 @@ public class DataChannel public class ForwardingFilter { public string? Action; + public string? Name; + public int? Priority; public class Rule { public string Field; @@ -86,6 +88,11 @@ public class Rule public string? Metadata; } + public class ForwardingFilters + { + public List Filters { get; set; } = new List(); + } + /// /// カメラの設定 /// @@ -236,6 +243,7 @@ public class Config public string ProxyAgent = ""; public ForwardingFilter ForwardingFilter; + public ForwardingFilters? ForwardingFilters; // ハードウェアエンコーダー/デコーダーを利用するかどうか。null の場合は実装依存となる public bool? UseHardwareEncoder; diff --git a/proto/sora_conf_internal.proto b/proto/sora_conf_internal.proto index 1789086..ec977d6 100644 --- a/proto/sora_conf_internal.proto +++ b/proto/sora_conf_internal.proto @@ -12,8 +12,14 @@ message DataChannel { optional bool compress = 12; } +message ForwardingFilters { + repeated ForwardingFilter filters = 1; +} + message ForwardingFilter { optional string action = 2; + optional string name = 4; + optional int32 priority = 6; message Rule { string field = 1; string op = 2; diff --git a/src/sora.cpp b/src/sora.cpp index b2a3dd1..3151292 100644 --- a/src/sora.cpp +++ b/src/sora.cpp @@ -451,6 +451,12 @@ void Sora::DoConnect(const sora_conf::internal::ConnectConfig& cc, if (cc.forwarding_filter.has_action()) { ff.action = cc.forwarding_filter.action; } + if (cc.forwarding_filter.has_name()) { + ff.name = cc.forwarding_filter.name; + } + if (cc.forwarding_filter.has_priority()) { + ff.priority = cc.forwarding_filter.priority; + } for (const auto& rs : cc.forwarding_filter.rules) { std::vector ffrs; for (const auto& r : rs.rules) { @@ -477,6 +483,47 @@ void Sora::DoConnect(const sora_conf::internal::ConnectConfig& cc, } config.forwarding_filter = ff; } + if (cc.has_forwarding_filters()) { + std::vector filters; + for (const auto& filter : cc.forwarding_filters().filters()) { + sora::SoraSignalingConfig::ForwardingFilter ff; + if (filter.has_action()) { + ff.action = filter.action(); + } + if (filter.has_name()) { + ff.name = filter.name(); + } + if (filter.has_priority()) { + ff.priority = filter.priority(); + } + for (const auto& rs : filter.rules()) { + std::vector ffrs; + for (const auto& r : rs.rules()) { + sora::SoraSignalingConfig::ForwardingFilter::Rule ffr; + ffr.field = r.field(); + ffr.op = r.op(); + ffr.values = r.values(); + ffrs.push_back(ffr); + } + ff.rules.push_back(ffrs); + } + if (filter.has_version()) { + ff.version = filter.version(); + } + if (filter.has_metadata()) { + boost::system::error_code ec; + auto ffmd = boost::json::parse(filter.metadata(), ec); + if (ec) { + RTC_LOG(LS_WARNING) << "Invalid JSON: forwarding_filters metadata=" + << filter.metadata(); + } else { + ff.metadata = ffmd; + } + } + filters.push_back(ff); + } + config.forwarding_filters = filters; + } if (cc.has_client_cert()) { config.client_cert = cc.client_cert; } From 874c8fe5826c823d15951f36eecb12b02fae83e4 Mon Sep 17 00:00:00 2001 From: torikizi <51085972+torikizi@users.noreply.github.com> Date: Tue, 17 Dec 2024 19:42:02 +0900 Subject: [PATCH 02/16] =?UTF-8?q?proto=20=E3=81=AE=E9=A0=86=E7=95=AA?= =?UTF-8?q?=E3=81=AB=E8=AA=A4=E3=82=8A=E3=81=8C=E3=81=82=E3=81=A3=E3=81=9F?= =?UTF-8?q?=E3=81=AE=E3=81=A7=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- proto/sora_conf_internal.proto | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/proto/sora_conf_internal.proto b/proto/sora_conf_internal.proto index ec977d6..98cf1b9 100644 --- a/proto/sora_conf_internal.proto +++ b/proto/sora_conf_internal.proto @@ -12,10 +12,6 @@ message DataChannel { optional bool compress = 12; } -message ForwardingFilters { - repeated ForwardingFilter filters = 1; -} - message ForwardingFilter { optional string action = 2; optional string name = 4; @@ -33,6 +29,10 @@ message ForwardingFilter { optional string metadata = 7; } +message ForwardingFilters { + repeated ForwardingFilter filters = 1; +} + message CameraConfig { int32 capturer_type = 17; int64 unity_camera_texture = 18; @@ -86,6 +86,7 @@ message ConnectConfig { string audio_streaming_language_code = 48; string signaling_notify_metadata = 49; optional ForwardingFilter forwarding_filter = 51; + optional ForwardingFilters forwarding_filters = 52; optional bool use_hardware_encoder = 53; optional string client_cert = 54; optional string client_key = 55; From 82928153c4f27a25a7e0c3d0fa146593b6a01673 Mon Sep 17 00:00:00 2001 From: torikizi <51085972+torikizi@users.noreply.github.com> Date: Tue, 17 Dec 2024 19:42:33 +0900 Subject: [PATCH 03/16] =?UTF-8?q?has=5Fforwarding=5Ffilters()=20=E3=81=AE?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sora.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/sora.cpp b/src/sora.cpp index 3151292..fb1c0dd 100644 --- a/src/sora.cpp +++ b/src/sora.cpp @@ -485,37 +485,38 @@ void Sora::DoConnect(const sora_conf::internal::ConnectConfig& cc, } if (cc.has_forwarding_filters()) { std::vector filters; - for (const auto& filter : cc.forwarding_filters().filters()) { + const auto& ff = cc.forwarding_filters; + for (const auto& filter : ff.filters) { sora::SoraSignalingConfig::ForwardingFilter ff; if (filter.has_action()) { - ff.action = filter.action(); + ff.action = filter.action; } if (filter.has_name()) { - ff.name = filter.name(); + ff.name = filter.name; } if (filter.has_priority()) { - ff.priority = filter.priority(); + ff.priority = filter.priority; } - for (const auto& rs : filter.rules()) { + for (const auto& rs : filter.rules) { std::vector ffrs; - for (const auto& r : rs.rules()) { + for (const auto& r : rs.rules) { sora::SoraSignalingConfig::ForwardingFilter::Rule ffr; - ffr.field = r.field(); - ffr.op = r.op(); - ffr.values = r.values(); + ffr.field = r.field; + ffr.op = r.op; + ffr.values = r.values; ffrs.push_back(ffr); } ff.rules.push_back(ffrs); } if (filter.has_version()) { - ff.version = filter.version(); + ff.version = filter.version; } if (filter.has_metadata()) { boost::system::error_code ec; - auto ffmd = boost::json::parse(filter.metadata(), ec); + auto ffmd = boost::json::parse(filter.metadata, ec); if (ec) { RTC_LOG(LS_WARNING) << "Invalid JSON: forwarding_filters metadata=" - << filter.metadata(); + << filter.metadata; } else { ff.metadata = ffmd; } From a515d82199dd56467afa48dc5c0ee2120637b8a3 Mon Sep 17 00:00:00 2001 From: torikizi <51085972+torikizi@users.noreply.github.com> Date: Wed, 18 Dec 2024 00:49:11 +0900 Subject: [PATCH 04/16] =?UTF-8?q?List=20=E3=82=92=E7=94=A8=E6=84=8F?= =?UTF-8?q?=E3=81=99=E3=82=8C=E3=81=B0=E8=89=AF=E3=81=95=E3=81=9D=E3=81=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sora/Sora.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sora/Sora.cs b/Sora/Sora.cs index cd1063a..fabf419 100644 --- a/Sora/Sora.cs +++ b/Sora/Sora.cs @@ -90,7 +90,7 @@ public class Rule public class ForwardingFilters { - public List Filters { get; set; } = new List(); + private List filters = new List(); } /// From dbeea612de3e280e17470fed9ac8e1815cecc943 Mon Sep 17 00:00:00 2001 From: torikizi <51085972+torikizi@users.noreply.github.com> Date: Wed, 18 Dec 2024 15:21:24 +0900 Subject: [PATCH 05/16] =?UTF-8?q?name=20/=20priority=20=E3=82=92=E9=80=81?= =?UTF-8?q?=E4=BF=A1=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sora/Sora.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Sora/Sora.cs b/Sora/Sora.cs index fabf419..70976b0 100644 --- a/Sora/Sora.cs +++ b/Sora/Sora.cs @@ -474,6 +474,14 @@ public void Connect(Config config) { ff.SetAction(config.ForwardingFilter.Action); } + if (config.ForwardingFilter.Name != null) + { + ff.SetName(config.ForwardingFilter.Name); + } + if (config.ForwardingFilter.Priority.HasValue) + { + ff.SetPriority(config.ForwardingFilter.Priority.Value); + } foreach (var rs in config.ForwardingFilter.Rules) { var ccrs = new SoraConf.Internal.ForwardingFilter.Rules(); From 0d3cb344da402dba29c7d4cea51bbfcc44320242 Mon Sep 17 00:00:00 2001 From: torikizi <51085972+torikizi@users.noreply.github.com> Date: Wed, 18 Dec 2024 19:27:31 +0900 Subject: [PATCH 06/16] =?UTF-8?q?=E3=83=9E=E3=83=AB=E3=83=81=E8=BB=A2?= =?UTF-8?q?=E9=80=81=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E7=94=A8?= =?UTF-8?q?=E3=81=AB=E8=A8=AD=E5=AE=9A=E3=82=92=E8=A6=8B=E7=9B=B4=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sora/Sora.cs | 133 ++++++++++++++++++++++++++++++++++++++++++++++++--- src/sora.cpp | 1 + 2 files changed, 128 insertions(+), 6 deletions(-) diff --git a/Sora/Sora.cs b/Sora/Sora.cs index 70976b0..1b39b3a 100644 --- a/Sora/Sora.cs +++ b/Sora/Sora.cs @@ -71,7 +71,6 @@ public class DataChannel public const string FieldKind = "kind"; public const string OperatorIsIn = "is_in"; public const string OperatorIsNotIn = "is_not_in"; - public class ForwardingFilter { public string? Action; @@ -87,12 +86,80 @@ public class Rule public string? Version; public string? Metadata; } + public class ForwardingFiltersRule + { + public string field = ""; + public string op = ""; + public string[] values = new string[0]; + } - public class ForwardingFilters + public class ForwardingFiltersRuleSet + { + public ForwardingFiltersRule[] rules = new ForwardingFiltersRule[0]; + } + + [Serializable] + public class ForwardingFiltersConfig { - private List filters = new List(); + [Header("Filter Settings")] + public bool enableAction = false; + [Tooltip("Action to take (block/allow)")] + public string action = ""; + + public bool enableName = false; + [Tooltip("Filter name")] + public string name = ""; + + public bool enablePriority = false; + [Tooltip("Filter priority")] + public int priority = 0; + + [Header("Rules")] + public ForwardingFiltersRuleSet[] ruleSets = new ForwardingFiltersRuleSet[0]; + + public bool enableVersion = false; + [Tooltip("Filter version")] + public string version = ""; + + public bool enableMetadata = false; + [Tooltip("Filter metadata")] + public string metadata = ""; } + public class ForwardingFilters + { + // 内部のfiltersリスト + public List filters { get; set; } + // 読み取り専用のFiltersプロパティ + public IReadOnlyList Filters => filters; + + public ForwardingFilters() + { + filters = new List(); + } + + public void Add(SoraConf.Internal.ForwardingFilter filter) + { + if (filters == null) + { + filters = new List(); + } + filters.Add(filter); + } + + // ForwardingFiltersインスタンスを追加するメソッド + public void Add(SoraConf.Internal.ForwardingFilters otherFilters) + { + if (otherFilters?.filters != null) + { + if (filters == null) + { + filters = new List(); + } + filters.AddRange(otherFilters.filters); + } + } + } /// /// カメラの設定 /// @@ -241,9 +308,8 @@ public class Config public string ProxyPassword = ""; // Proxy サーバーに接続するときの User-Agent。未設定ならデフォルト値が使われる public string ProxyAgent = ""; - public ForwardingFilter ForwardingFilter; - public ForwardingFilters? ForwardingFilters; + public SoraConf.Internal.ForwardingFilters? ForwardingFilters; // ハードウェアエンコーダー/デコーダーを利用するかどうか。null の場合は実装依存となる public bool? UseHardwareEncoder; @@ -508,6 +574,61 @@ public void Connect(Config config) } cc.SetForwardingFilter(ff); } + if (config.ForwardingFilters != null && config.ForwardingFilters.Filters.Count > 0) + { + var forwardingFilters = new SoraConf.Internal.ForwardingFilters(); + + foreach (var filter in config.ForwardingFilters.Filters) + { + var ff = new SoraConf.Internal.ForwardingFilter(); + + if (filter.Action != null) + { + ff.SetAction(filter.Action); + } + if (filter.Name != null) + { + ff.SetName(filter.Name); + } + if (filter.Priority.HasValue) + { + ff.SetPriority(filter.Priority.Value); + } + + foreach (var rs in filter.Rules) + { + var ccrs = new SoraConf.Internal.ForwardingFilter.Rules(); + + foreach (var r in rs) + { + var ccr = new SoraConf.Internal.ForwardingFilter.Rule(); + ccr.field = r.Field; + ccr.op = r.Operator; + foreach (var v in r.Values) + { + ccr.values.Add(v); + } + ccrs.rules.Add(ccr); + } + ff.rules.Add(ccrs); + } + + if (filter.Version != null) + { + ff.SetVersion(filter.Version); + } + if (filter.Metadata != null) + { + ff.SetMetadata(filter.Metadata); + } + + // ForwardingFilters に追加 + forwardingFilters.Add(ff); + } + + // forwarding_filters に設定 + cc.forwarding_filters = forwardingFilters; + } if (config.UseHardwareEncoder.HasValue) { cc.SetUseHardwareEncoder(config.UseHardwareEncoder.Value); @@ -1264,4 +1385,4 @@ public static IAudioOutputHelper Create(Action onChangeRoute) #endif } } -} +} \ No newline at end of file diff --git a/src/sora.cpp b/src/sora.cpp index fb1c0dd..669f91d 100644 --- a/src/sora.cpp +++ b/src/sora.cpp @@ -486,6 +486,7 @@ void Sora::DoConnect(const sora_conf::internal::ConnectConfig& cc, if (cc.has_forwarding_filters()) { std::vector filters; const auto& ff = cc.forwarding_filters; + // filters プロパティから直接フィルターを取得するように修正 for (const auto& filter : ff.filters) { sora::SoraSignalingConfig::ForwardingFilter ff; if (filter.has_action()) { From 6aa7560cff16dc12e6be431fe6b0b9b0fd945cde Mon Sep 17 00:00:00 2001 From: torikizi <51085972+torikizi@users.noreply.github.com> Date: Wed, 18 Dec 2024 21:30:21 +0900 Subject: [PATCH 07/16] =?UTF-8?q?public=20ForwardingFilters=20=E3=81=AB?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=A6=E4=BB=96=E3=81=AE=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=90=E3=82=82=E8=A6=8B=E7=9B=B4=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sora/Sora.cs | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/Sora/Sora.cs b/Sora/Sora.cs index 1b39b3a..2206037 100644 --- a/Sora/Sora.cs +++ b/Sora/Sora.cs @@ -112,7 +112,7 @@ public class ForwardingFiltersConfig public bool enablePriority = false; [Tooltip("Filter priority")] - public int priority = 0; + public int? priority; [Header("Rules")] public ForwardingFiltersRuleSet[] ruleSets = new ForwardingFiltersRuleSet[0]; @@ -309,7 +309,7 @@ public class Config // Proxy サーバーに接続するときの User-Agent。未設定ならデフォルト値が使われる public string ProxyAgent = ""; public ForwardingFilter ForwardingFilter; - public SoraConf.Internal.ForwardingFilters? ForwardingFilters; + public ForwardingFilters? ForwardingFilters; // ハードウェアエンコーダー/デコーダーを利用するかどうか。null の場合は実装依存となる public bool? UseHardwareEncoder; @@ -582,29 +582,29 @@ public void Connect(Config config) { var ff = new SoraConf.Internal.ForwardingFilter(); - if (filter.Action != null) + if (filter.action != null) { - ff.SetAction(filter.Action); + ff.SetAction(filter.action); } - if (filter.Name != null) + if (filter.name != null) { - ff.SetName(filter.Name); + ff.SetName(filter.name); } - if (filter.Priority.HasValue) + if (filter.priority != default(int)) { - ff.SetPriority(filter.Priority.Value); + ff.SetPriority(filter.priority); } - foreach (var rs in filter.Rules) + foreach (var rs in filter.rules) { var ccrs = new SoraConf.Internal.ForwardingFilter.Rules(); - foreach (var r in rs) + foreach (var r in rs.rules) { var ccr = new SoraConf.Internal.ForwardingFilter.Rule(); - ccr.field = r.Field; - ccr.op = r.Operator; - foreach (var v in r.Values) + ccr.field = r.field; + ccr.op = r.op; + foreach (var v in r.values) { ccr.values.Add(v); } @@ -613,17 +613,17 @@ public void Connect(Config config) ff.rules.Add(ccrs); } - if (filter.Version != null) + if (filter.version != null) { - ff.SetVersion(filter.Version); + ff.SetVersion(filter.version); } - if (filter.Metadata != null) + if (filter.metadata != null) { - ff.SetMetadata(filter.Metadata); + ff.SetMetadata(filter.metadata); } // ForwardingFilters に追加 - forwardingFilters.Add(ff); + forwardingFilters.AddFilter(ff); } // forwarding_filters に設定 From 219a3dfa288c9986f4d27a01a9dae92ee65605b4 Mon Sep 17 00:00:00 2001 From: torikizi <51085972+torikizi@users.noreply.github.com> Date: Wed, 18 Dec 2024 23:16:43 +0900 Subject: [PATCH 08/16] =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=9D=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sora/Sora.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sora/Sora.cs b/Sora/Sora.cs index 2206037..580a824 100644 --- a/Sora/Sora.cs +++ b/Sora/Sora.cs @@ -623,7 +623,7 @@ public void Connect(Config config) } // ForwardingFilters に追加 - forwardingFilters.AddFilter(ff); + forwardingFilters.Add(ff); } // forwarding_filters に設定 From 5cf82fe6f870830110f6d9335dfb8f8b5d85e543 Mon Sep 17 00:00:00 2001 From: torikizi <51085972+torikizi@users.noreply.github.com> Date: Thu, 19 Dec 2024 10:55:38 +0900 Subject: [PATCH 09/16] =?UTF-8?q?Internal=20=E3=82=92=E5=A4=96=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sora/Sora.cs | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/Sora/Sora.cs b/Sora/Sora.cs index 580a824..a5c968a 100644 --- a/Sora/Sora.cs +++ b/Sora/Sora.cs @@ -128,33 +128,33 @@ public class ForwardingFiltersConfig public class ForwardingFilters { // 内部のfiltersリスト - public List filters { get; set; } + public List filters { get; set; } // 読み取り専用のFiltersプロパティ - public IReadOnlyList Filters => filters; + public IReadOnlyList Filters => filters; public ForwardingFilters() { - filters = new List(); + filters = new List(); } - public void Add(SoraConf.Internal.ForwardingFilter filter) + public void Add(ForwardingFilter filter) { if (filters == null) { - filters = new List(); + filters = new List(); } filters.Add(filter); } // ForwardingFiltersインスタンスを追加するメソッド - public void Add(SoraConf.Internal.ForwardingFilters otherFilters) + public void Add(ForwardingFilters otherFilters) { if (otherFilters?.filters != null) { if (filters == null) { - filters = new List(); + filters = new List(); } filters.AddRange(otherFilters.filters); } @@ -582,29 +582,29 @@ public void Connect(Config config) { var ff = new SoraConf.Internal.ForwardingFilter(); - if (filter.action != null) + if (filter.Action != null) { - ff.SetAction(filter.action); + ff.SetAction(filter.Action); } - if (filter.name != null) + if (filter.Name != null) { - ff.SetName(filter.name); + ff.SetName(filter.Name); } - if (filter.priority != default(int)) + if (filter.Priority.HasValue) { - ff.SetPriority(filter.priority); + ff.SetPriority(filter.Priority.Value); } - foreach (var rs in filter.rules) + foreach (var rs in filter.Rules) { var ccrs = new SoraConf.Internal.ForwardingFilter.Rules(); - foreach (var r in rs.rules) + foreach (var r in rs) { var ccr = new SoraConf.Internal.ForwardingFilter.Rule(); - ccr.field = r.field; - ccr.op = r.op; - foreach (var v in r.values) + ccr.field = r.Field; + ccr.op = r.Operator; + foreach (var v in r.Values) { ccr.values.Add(v); } @@ -613,13 +613,13 @@ public void Connect(Config config) ff.rules.Add(ccrs); } - if (filter.version != null) + if (filter.Version != null) { - ff.SetVersion(filter.version); + ff.SetVersion(filter.Version); } - if (filter.metadata != null) + if (filter.Metadata != null) { - ff.SetMetadata(filter.metadata); + ff.SetMetadata(filter.Metadata); } // ForwardingFilters に追加 From 16a605c1e4de8a760c5871a4c2e3ac12914ee71a Mon Sep 17 00:00:00 2001 From: torikizi <51085972+torikizi@users.noreply.github.com> Date: Thu, 19 Dec 2024 12:55:47 +0900 Subject: [PATCH 10/16] =?UTF-8?q?=E3=82=B7=E3=83=B3=E3=83=97=E3=83=AB?= =?UTF-8?q?=E3=81=AA=E6=A7=8B=E6=88=90=E3=81=AB=E8=A6=8B=E7=9B=B4=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sora/Sora.cs | 87 +++------------------------------------------------- src/sora.cpp | 6 ++-- 2 files changed, 6 insertions(+), 87 deletions(-) diff --git a/Sora/Sora.cs b/Sora/Sora.cs index a5c968a..db6d1e9 100644 --- a/Sora/Sora.cs +++ b/Sora/Sora.cs @@ -86,79 +86,9 @@ public class Rule public string? Version; public string? Metadata; } - public class ForwardingFiltersRule - { - public string field = ""; - public string op = ""; - public string[] values = new string[0]; - } - - public class ForwardingFiltersRuleSet - { - public ForwardingFiltersRule[] rules = new ForwardingFiltersRule[0]; - } - - [Serializable] - public class ForwardingFiltersConfig - { - [Header("Filter Settings")] - public bool enableAction = false; - [Tooltip("Action to take (block/allow)")] - public string action = ""; - - public bool enableName = false; - [Tooltip("Filter name")] - public string name = ""; - - public bool enablePriority = false; - [Tooltip("Filter priority")] - public int? priority; - - [Header("Rules")] - public ForwardingFiltersRuleSet[] ruleSets = new ForwardingFiltersRuleSet[0]; - - public bool enableVersion = false; - [Tooltip("Filter version")] - public string version = ""; - - public bool enableMetadata = false; - [Tooltip("Filter metadata")] - public string metadata = ""; - } public class ForwardingFilters { - // 内部のfiltersリスト - public List filters { get; set; } - - // 読み取り専用のFiltersプロパティ - public IReadOnlyList Filters => filters; - - public ForwardingFilters() - { - filters = new List(); - } - - public void Add(ForwardingFilter filter) - { - if (filters == null) - { - filters = new List(); - } - filters.Add(filter); - } - - // ForwardingFiltersインスタンスを追加するメソッド - public void Add(ForwardingFilters otherFilters) - { - if (otherFilters?.filters != null) - { - if (filters == null) - { - filters = new List(); - } - filters.AddRange(otherFilters.filters); - } - } + public List Filters = new List(); } /// /// カメラの設定 @@ -576,12 +506,10 @@ public void Connect(Config config) } if (config.ForwardingFilters != null && config.ForwardingFilters.Filters.Count > 0) { - var forwardingFilters = new SoraConf.Internal.ForwardingFilters(); - + var ffs = new SoraConf.Internal.ForwardingFilters(); foreach (var filter in config.ForwardingFilters.Filters) { var ff = new SoraConf.Internal.ForwardingFilter(); - if (filter.Action != null) { ff.SetAction(filter.Action); @@ -594,11 +522,9 @@ public void Connect(Config config) { ff.SetPriority(filter.Priority.Value); } - foreach (var rs in filter.Rules) { var ccrs = new SoraConf.Internal.ForwardingFilter.Rules(); - foreach (var r in rs) { var ccr = new SoraConf.Internal.ForwardingFilter.Rule(); @@ -612,7 +538,6 @@ public void Connect(Config config) } ff.rules.Add(ccrs); } - if (filter.Version != null) { ff.SetVersion(filter.Version); @@ -621,13 +546,9 @@ public void Connect(Config config) { ff.SetMetadata(filter.Metadata); } - - // ForwardingFilters に追加 - forwardingFilters.Add(ff); + ffs.filters.Add(ff); } - - // forwarding_filters に設定 - cc.forwarding_filters = forwardingFilters; + cc.SetForwardingFilters(ffs); } if (config.UseHardwareEncoder.HasValue) { diff --git a/src/sora.cpp b/src/sora.cpp index 669f91d..1a352cc 100644 --- a/src/sora.cpp +++ b/src/sora.cpp @@ -485,9 +485,7 @@ void Sora::DoConnect(const sora_conf::internal::ConnectConfig& cc, } if (cc.has_forwarding_filters()) { std::vector filters; - const auto& ff = cc.forwarding_filters; - // filters プロパティから直接フィルターを取得するように修正 - for (const auto& filter : ff.filters) { + for (const auto& filter : cc.forwarding_filters.filters) { sora::SoraSignalingConfig::ForwardingFilter ff; if (filter.has_action()) { ff.action = filter.action; @@ -516,7 +514,7 @@ void Sora::DoConnect(const sora_conf::internal::ConnectConfig& cc, boost::system::error_code ec; auto ffmd = boost::json::parse(filter.metadata, ec); if (ec) { - RTC_LOG(LS_WARNING) << "Invalid JSON: forwarding_filters metadata=" + RTC_LOG(LS_WARNING) << "Invalid JSON: forwarding_filter metadata=" << filter.metadata; } else { ff.metadata = ffmd; From 3c9e6991aa11b02a6d2d25c660433aedc1756c94 Mon Sep 17 00:00:00 2001 From: torikizi <51085972+torikizi@users.noreply.github.com> Date: Thu, 19 Dec 2024 16:57:21 +0900 Subject: [PATCH 11/16] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 17aa236..8c321ec 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -28,6 +28,10 @@ - @torikizi - [ADD] `Sora.Config` に `ClientCert`, `ClientKey`, `CACert` を追加 - @melpon +- [ADD] ForwardingFilter に name と priority を追加 + - @torikizi +- [ADD] ForwardingFilters 機能を使えるようにする + - @torikizi ### misc From c55e16014a5b557e83510abf4ec591d086c0eebd Mon Sep 17 00:00:00 2001 From: torikizi <51085972+torikizi@users.noreply.github.com> Date: Fri, 20 Dec 2024 12:53:05 +0900 Subject: [PATCH 12/16] =?UTF-8?q?=E8=BB=A2=E9=80=81=E3=83=95=E3=82=A3?= =?UTF-8?q?=E3=83=AB=E3=82=BF=E3=83=BC=E3=81=AE=E8=A8=AD=E5=AE=9A=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E3=82=92=E3=81=BE=E3=81=A8=E3=82=81=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sora/Sora.cs | 127 +++++++++++++++++++-------------------------------- src/sora.cpp | 114 ++++++++++++++++++--------------------------- src/sora.h | 4 ++ 3 files changed, 96 insertions(+), 149 deletions(-) diff --git a/Sora/Sora.cs b/Sora/Sora.cs index db6d1e9..c27e921 100644 --- a/Sora/Sora.cs +++ b/Sora/Sora.cs @@ -239,7 +239,7 @@ public class Config // Proxy サーバーに接続するときの User-Agent。未設定ならデフォルト値が使われる public string ProxyAgent = ""; public ForwardingFilter ForwardingFilter; - public ForwardingFilters? ForwardingFilters; + public List ForwardingFilters; // ハードウェアエンコーダー/デコーダーを利用するかどうか。null の場合は実装依存となる public bool? UseHardwareEncoder; @@ -465,88 +465,15 @@ public void Connect(Config config) cc.proxy_agent = config.ProxyAgent; if (config.ForwardingFilter != null) { - var ff = new SoraConf.Internal.ForwardingFilter(); - if (config.ForwardingFilter.Action != null) - { - ff.SetAction(config.ForwardingFilter.Action); - } - if (config.ForwardingFilter.Name != null) - { - ff.SetName(config.ForwardingFilter.Name); - } - if (config.ForwardingFilter.Priority.HasValue) - { - ff.SetPriority(config.ForwardingFilter.Priority.Value); - } - foreach (var rs in config.ForwardingFilter.Rules) - { - var ccrs = new SoraConf.Internal.ForwardingFilter.Rules(); - foreach (var r in rs) - { - var ccr = new SoraConf.Internal.ForwardingFilter.Rule(); - ccr.field = r.Field; - ccr.op = r.Operator; - foreach (var v in r.Values) - { - ccr.values.Add(v); - } - ccrs.rules.Add(ccr); - } - ff.rules.Add(ccrs); - } - if (config.ForwardingFilter.Version != null) - { - ff.SetVersion(config.ForwardingFilter.Version); - } - if (config.ForwardingFilter.Metadata != null) - { - ff.SetMetadata(config.ForwardingFilter.Metadata); - } - cc.SetForwardingFilter(ff); + cc.SetForwardingFilter(ConvertToInternalFilter(config.ForwardingFilter)); } - if (config.ForwardingFilters != null && config.ForwardingFilters.Filters.Count > 0) + + if (config.ForwardingFilters != null && config.ForwardingFilters.Count > 0) { var ffs = new SoraConf.Internal.ForwardingFilters(); - foreach (var filter in config.ForwardingFilters.Filters) + foreach (var filter in config.ForwardingFilters) { - var ff = new SoraConf.Internal.ForwardingFilter(); - if (filter.Action != null) - { - ff.SetAction(filter.Action); - } - if (filter.Name != null) - { - ff.SetName(filter.Name); - } - if (filter.Priority.HasValue) - { - ff.SetPriority(filter.Priority.Value); - } - foreach (var rs in filter.Rules) - { - var ccrs = new SoraConf.Internal.ForwardingFilter.Rules(); - foreach (var r in rs) - { - var ccr = new SoraConf.Internal.ForwardingFilter.Rule(); - ccr.field = r.Field; - ccr.op = r.Operator; - foreach (var v in r.Values) - { - ccr.values.Add(v); - } - ccrs.rules.Add(ccr); - } - ff.rules.Add(ccrs); - } - if (filter.Version != null) - { - ff.SetVersion(filter.Version); - } - if (filter.Metadata != null) - { - ff.SetMetadata(filter.Metadata); - } - ffs.filters.Add(ff); + ffs.filters.Add(ConvertToInternalFilter(filter)); } cc.SetForwardingFilters(ffs); } @@ -580,6 +507,48 @@ public void Disconnect() sora_disconnect(p); } + private SoraConf.Internal.ForwardingFilter ConvertToInternalFilter(ForwardingFilter filter) + { + var ff = new SoraConf.Internal.ForwardingFilter(); + if (filter.Action != null) + { + ff.SetAction(filter.Action); + } + if (filter.Name != null) + { + ff.SetName(filter.Name); + } + if (filter.Priority.HasValue) + { + ff.SetPriority(filter.Priority.Value); + } + foreach (var rs in filter.Rules) + { + var ccrs = new SoraConf.Internal.ForwardingFilter.Rules(); + foreach (var r in rs) + { + var ccr = new SoraConf.Internal.ForwardingFilter.Rule(); + ccr.field = r.Field; + ccr.op = r.Operator; + foreach (var v in r.Values) + { + ccr.values.Add(v); + } + ccrs.rules.Add(ccr); + } + ff.rules.Add(ccrs); + } + if (filter.Version != null) + { + ff.SetVersion(filter.Version); + } + if (filter.Metadata != null) + { + ff.SetMetadata(filter.Metadata); + } + return ff; + } + /// /// カメラを切り替えます。 /// diff --git a/src/sora.cpp b/src/sora.cpp index 1a352cc..330ca50 100644 --- a/src/sora.cpp +++ b/src/sora.cpp @@ -447,80 +447,12 @@ void Sora::DoConnect(const sora_conf::internal::ConnectConfig& cc, config.proxy_agent = cc.proxy_agent; config.audio_streaming_language_code = cc.audio_streaming_language_code; if (cc.has_forwarding_filter()) { - sora::SoraSignalingConfig::ForwardingFilter ff; - if (cc.forwarding_filter.has_action()) { - ff.action = cc.forwarding_filter.action; - } - if (cc.forwarding_filter.has_name()) { - ff.name = cc.forwarding_filter.name; - } - if (cc.forwarding_filter.has_priority()) { - ff.priority = cc.forwarding_filter.priority; - } - for (const auto& rs : cc.forwarding_filter.rules) { - std::vector ffrs; - for (const auto& r : rs.rules) { - sora::SoraSignalingConfig::ForwardingFilter::Rule ffr; - ffr.field = r.field; - ffr.op = r.op; - ffr.values = r.values; - ffrs.push_back(ffr); - } - ff.rules.push_back(ffrs); - } - if (cc.forwarding_filter.has_version()) { - ff.version = cc.forwarding_filter.version; - } - if (cc.forwarding_filter.has_metadata()) { - boost::system::error_code ec; - auto ffmd = boost::json::parse(cc.forwarding_filter.metadata, ec); - if (ec) { - RTC_LOG(LS_WARNING) << "Invalid JSON: forwarding_filter metadata=" - << cc.forwarding_filter.metadata; - } else { - ff.metadata = ffmd; - } - } - config.forwarding_filter = ff; + config.forwarding_filter = convertForwardingFilter(cc.forwarding_filter); } if (cc.has_forwarding_filters()) { std::vector filters; for (const auto& filter : cc.forwarding_filters.filters) { - sora::SoraSignalingConfig::ForwardingFilter ff; - if (filter.has_action()) { - ff.action = filter.action; - } - if (filter.has_name()) { - ff.name = filter.name; - } - if (filter.has_priority()) { - ff.priority = filter.priority; - } - for (const auto& rs : filter.rules) { - std::vector ffrs; - for (const auto& r : rs.rules) { - sora::SoraSignalingConfig::ForwardingFilter::Rule ffr; - ffr.field = r.field; - ffr.op = r.op; - ffr.values = r.values; - ffrs.push_back(ffr); - } - ff.rules.push_back(ffrs); - } - if (filter.has_version()) { - ff.version = filter.version; - } - if (filter.has_metadata()) { - boost::system::error_code ec; - auto ffmd = boost::json::parse(filter.metadata, ec); - if (ec) { - RTC_LOG(LS_WARNING) << "Invalid JSON: forwarding_filter metadata=" - << filter.metadata; - } else { - ff.metadata = ffmd; - } - } - filters.push_back(ff); + filters.push_back(convertForwardingFilter(filter)); } config.forwarding_filters = filters; } @@ -808,6 +740,48 @@ bool Sora::InitADM(rtc::scoped_refptr adm, return true; } +sora::SoraSignalingConfig::ForwardingFilter Sora::convertForwardingFilter( + const sora_conf::internal::ForwardingFilter& filter) { + sora::SoraSignalingConfig::ForwardingFilter ff; + + if (filter.has_action()) { + ff.action = filter.action; + } + if (filter.has_name()) { + ff.name = filter.name; + } + if (filter.has_priority()) { + ff.priority = filter.priority; + } + for (const auto& rs : filter.rules) { + std::vector ffrs; + for (const auto& r : rs.rules) { + sora::SoraSignalingConfig::ForwardingFilter::Rule ffr; + ffr.field = r.field; + ffr.op = r.op; + ffr.values = r.values; + ffrs.push_back(ffr); + } + ff.rules.push_back(ffrs); + } + + if (filter.has_version()) { + ff.version = filter.version; + } + if (filter.has_metadata()) { + boost::system::error_code ec; + auto ffmd = boost::json::parse(filter.metadata, ec); + if (ec) { + RTC_LOG(LS_WARNING) << "Invalid JSON: forwarding_filter metadata=" + << filter.metadata; + } else { + ff.metadata = ffmd; + } + } + + return ff; +} + rtc::scoped_refptr Sora::CreateVideoCapturer( int capturer_type, void* unity_camera_texture, diff --git a/src/sora.h b/src/sora.h index ebbbd33..bbbc50b 100644 --- a/src/sora.h +++ b/src/sora.h @@ -80,6 +80,10 @@ class Sora : public std::enable_shared_from_this, void* GetAndroidApplicationContext(void* env); static sora_conf::ErrorCode ToErrorCode(sora::SoraSignalingErrorCode ec); + private: + sora::SoraSignalingConfig::ForwardingFilter convertForwardingFilter( + const sora_conf::internal::ForwardingFilter& filter); + // SoraSignalingObserver の実装 void OnSetOffer(std::string offer) override; void OnDisconnect(sora::SoraSignalingErrorCode ec, From d88a3cd78262ea8935cfa3643138d5201749fbd9 Mon Sep 17 00:00:00 2001 From: torikizi <51085972+torikizi@users.noreply.github.com> Date: Fri, 20 Dec 2024 17:59:40 +0900 Subject: [PATCH 13/16] =?UTF-8?q?=E5=85=B1=E9=80=9A=E5=8C=96=E3=81=97?= =?UTF-8?q?=E3=81=A6=E4=B8=8D=E8=A6=81=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=9F?= =?UTF-8?q?=E9=83=A8=E5=88=86=E3=82=92=E6=95=B4=E3=81=88=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sora/Sora.cs | 13 +++++-------- src/sora.cpp | 7 ++++--- src/sora.h | 3 +-- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/Sora/Sora.cs b/Sora/Sora.cs index c27e921..4a7083e 100644 --- a/Sora/Sora.cs +++ b/Sora/Sora.cs @@ -86,10 +86,7 @@ public class Rule public string? Version; public string? Metadata; } - public class ForwardingFilters - { - public List Filters = new List(); - } + public List Filters = new List(); /// /// カメラの設定 /// @@ -465,15 +462,15 @@ public void Connect(Config config) cc.proxy_agent = config.ProxyAgent; if (config.ForwardingFilter != null) { - cc.SetForwardingFilter(ConvertToInternalFilter(config.ForwardingFilter)); + cc.SetForwardingFilter(ConvertToInternalForwardingFilter(config.ForwardingFilter)); } - if (config.ForwardingFilters != null && config.ForwardingFilters.Count > 0) + if (config.ForwardingFilters != null) { var ffs = new SoraConf.Internal.ForwardingFilters(); foreach (var filter in config.ForwardingFilters) { - ffs.filters.Add(ConvertToInternalFilter(filter)); + ffs.filters.Add(ConvertToInternalForwardingFilter(filter)); } cc.SetForwardingFilters(ffs); } @@ -507,7 +504,7 @@ public void Disconnect() sora_disconnect(p); } - private SoraConf.Internal.ForwardingFilter ConvertToInternalFilter(ForwardingFilter filter) + static SoraConf.Internal.ForwardingFilter ConvertToInternalForwardingFilter(ForwardingFilter filter) { var ff = new SoraConf.Internal.ForwardingFilter(); if (filter.Action != null) diff --git a/src/sora.cpp b/src/sora.cpp index 330ca50..f06ab75 100644 --- a/src/sora.cpp +++ b/src/sora.cpp @@ -447,12 +447,13 @@ void Sora::DoConnect(const sora_conf::internal::ConnectConfig& cc, config.proxy_agent = cc.proxy_agent; config.audio_streaming_language_code = cc.audio_streaming_language_code; if (cc.has_forwarding_filter()) { - config.forwarding_filter = convertForwardingFilter(cc.forwarding_filter); + config.forwarding_filter = + ConvertToForwardingFilter(cc.forwarding_filter); } if (cc.has_forwarding_filters()) { std::vector filters; for (const auto& filter : cc.forwarding_filters.filters) { - filters.push_back(convertForwardingFilter(filter)); + filters.push_back(ConvertToForwardingFilter(filter)); } config.forwarding_filters = filters; } @@ -740,7 +741,7 @@ bool Sora::InitADM(rtc::scoped_refptr adm, return true; } -sora::SoraSignalingConfig::ForwardingFilter Sora::convertForwardingFilter( +sora::SoraSignalingConfig::ForwardingFilter Sora::ConvertToForwardingFilter( const sora_conf::internal::ForwardingFilter& filter) { sora::SoraSignalingConfig::ForwardingFilter ff; diff --git a/src/sora.h b/src/sora.h index bbbc50b..1345eb2 100644 --- a/src/sora.h +++ b/src/sora.h @@ -80,8 +80,7 @@ class Sora : public std::enable_shared_from_this, void* GetAndroidApplicationContext(void* env); static sora_conf::ErrorCode ToErrorCode(sora::SoraSignalingErrorCode ec); - private: - sora::SoraSignalingConfig::ForwardingFilter convertForwardingFilter( + static sora::SoraSignalingConfig::ForwardingFilter ConvertToForwardingFilter( const sora_conf::internal::ForwardingFilter& filter); // SoraSignalingObserver の実装 From 0e8f30924d2ea2df8823eb72222328a38b86f95c Mon Sep 17 00:00:00 2001 From: torikizi <51085972+torikizi@users.noreply.github.com> Date: Fri, 20 Dec 2024 21:03:10 +0900 Subject: [PATCH 14/16] =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=81=AA=E5=AE=9A?= =?UTF-8?q?=E7=BE=A9=E3=81=8C=E6=AE=8B=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sora/Sora.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Sora/Sora.cs b/Sora/Sora.cs index 4a7083e..39cfcb4 100644 --- a/Sora/Sora.cs +++ b/Sora/Sora.cs @@ -86,7 +86,6 @@ public class Rule public string? Version; public string? Metadata; } - public List Filters = new List(); /// /// カメラの設定 /// From 9c9d6f8449c5254e1630c6a54586d9cb4a87b638 Mon Sep 17 00:00:00 2001 From: torikizi <51085972+torikizi@users.noreply.github.com> Date: Wed, 25 Dec 2024 18:37:38 +0900 Subject: [PATCH 15/16] =?UTF-8?q?Obsolete=20=E3=83=A1=E3=83=83=E3=82=BB?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sora/Sora.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Sora/Sora.cs b/Sora/Sora.cs index 39cfcb4..dc94ce7 100644 --- a/Sora/Sora.cs +++ b/Sora/Sora.cs @@ -234,6 +234,7 @@ public class Config public string ProxyPassword = ""; // Proxy サーバーに接続するときの User-Agent。未設定ならデフォルト値が使われる public string ProxyAgent = ""; + [System.Obsolete("forwardingFilter は非推奨です。代わりに forwardingFilters を使用してください。")] public ForwardingFilter ForwardingFilter; public List ForwardingFilters; From 5fc12866b623d87a68cffe08833cd35cf5950e61 Mon Sep 17 00:00:00 2001 From: torikizi <51085972+torikizi@users.noreply.github.com> Date: Wed, 25 Dec 2024 18:46:45 +0900 Subject: [PATCH 16/16] =?UTF-8?q?CHANGES=20=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 8c321ec..5645803 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -18,6 +18,9 @@ - @torikizi - [CHANGE] CMakefile の依存から libva と libdrm を削除する - @torikizi +- [CHANGE] ForwardingFilter は非推奨であるため Obsolete を追加 + - 今後は ForwardingFilters を利用するように促すメッセージを追加 + - @torikizi - [UPDATE] Sora C++ SDK を `2024.8.0` に上げる - WEBRTC_BUILD_VERSION を `m131.6778.4.0` にアップデート - BOOST_VERSION を 1.87.0 にアップデート