diff --git a/Runtime/Plugins/ffi-android-arm64/liblivekit_ffi.so b/Runtime/Plugins/ffi-android-arm64/liblivekit_ffi.so
index 847fc8e7..c0a50105 100755
--- a/Runtime/Plugins/ffi-android-arm64/liblivekit_ffi.so
+++ b/Runtime/Plugins/ffi-android-arm64/liblivekit_ffi.so
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8d84c1a8aa204a0fd2d0776c81941788946704737e69375119442988507a76d9
-size 19600080
+oid sha256:4317aed8b627ad611553011d7eed13949780675d25d49b26e587efdf8952f1b1
+size 19667784
diff --git a/Runtime/Plugins/ffi-android-arm64/libwebrtc.jar b/Runtime/Plugins/ffi-android-arm64/libwebrtc.jar
index bcd7d3e4..9ea87ad1 100644
--- a/Runtime/Plugins/ffi-android-arm64/libwebrtc.jar
+++ b/Runtime/Plugins/ffi-android-arm64/libwebrtc.jar
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:03ad4bb4c95034263d1c727a1d41e0293f5c4bf4a9445eef7e64ebeef99fa51f
-size 543957
+oid sha256:7f551a7a1e1b3119d1ffdd01831fd43299d64821bb570b38f5e85df906c21bab
+size 551694
diff --git a/Runtime/Plugins/ffi-android-armv7/liblivekit_ffi.so b/Runtime/Plugins/ffi-android-armv7/liblivekit_ffi.so
index ccfa2ec2..f1aa8495 100755
--- a/Runtime/Plugins/ffi-android-armv7/liblivekit_ffi.so
+++ b/Runtime/Plugins/ffi-android-armv7/liblivekit_ffi.so
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f844dc63471bb01f1a7b9ffdd589f8f908d8deada2c5e6aa3717177566a6df75
-size 11157644
+oid sha256:33b8d21e4e2f85078f97219119b661a78c243ca54a2aa0ea34688160ad1ca364
+size 11185316
diff --git a/Runtime/Plugins/ffi-android-armv7/libwebrtc.jar b/Runtime/Plugins/ffi-android-armv7/libwebrtc.jar
index bcd7d3e4..9ea87ad1 100644
--- a/Runtime/Plugins/ffi-android-armv7/libwebrtc.jar
+++ b/Runtime/Plugins/ffi-android-armv7/libwebrtc.jar
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:03ad4bb4c95034263d1c727a1d41e0293f5c4bf4a9445eef7e64ebeef99fa51f
-size 543957
+oid sha256:7f551a7a1e1b3119d1ffdd01831fd43299d64821bb570b38f5e85df906c21bab
+size 551694
diff --git a/Runtime/Plugins/ffi-android-x86_64/liblivekit_ffi.so b/Runtime/Plugins/ffi-android-x86_64/liblivekit_ffi.so
index feba507a..821cc19c 100755
--- a/Runtime/Plugins/ffi-android-x86_64/liblivekit_ffi.so
+++ b/Runtime/Plugins/ffi-android-x86_64/liblivekit_ffi.so
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5800c6f48381c6ee0f5b1e90a8dc8491cf4acb054ed08b1f0b446eae9348fd6c
-size 24255816
+oid sha256:0acaf43a740f6003d4ae03e9c246e0b8fd7ba2edef4f5bf60c5b54dfa0ae6fbd
+size 24316912
diff --git a/Runtime/Plugins/ffi-android-x86_64/libwebrtc.jar b/Runtime/Plugins/ffi-android-x86_64/libwebrtc.jar
index bcd7d3e4..9ea87ad1 100644
--- a/Runtime/Plugins/ffi-android-x86_64/libwebrtc.jar
+++ b/Runtime/Plugins/ffi-android-x86_64/libwebrtc.jar
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:03ad4bb4c95034263d1c727a1d41e0293f5c4bf4a9445eef7e64ebeef99fa51f
-size 543957
+oid sha256:7f551a7a1e1b3119d1ffdd01831fd43299d64821bb570b38f5e85df906c21bab
+size 551694
diff --git a/Runtime/Plugins/ffi-ios-arm64/liblivekit_ffi.a b/Runtime/Plugins/ffi-ios-arm64/liblivekit_ffi.a
index 45dd58f1..ca65fbad 100644
--- a/Runtime/Plugins/ffi-ios-arm64/liblivekit_ffi.a
+++ b/Runtime/Plugins/ffi-ios-arm64/liblivekit_ffi.a
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:23bfa175eb4273fa6d9c16d66059f3d0f0956e5d34719a3747e106c5727def23
-size 49564360
+oid sha256:69b4f9156b47c41ed060b1e0131057d2c0f31df01169a3563ca7cc33f1c6b174
+size 49704640
diff --git a/Runtime/Plugins/ffi-ios-sim-arm64/liblivekit_ffi.a b/Runtime/Plugins/ffi-ios-sim-arm64/liblivekit_ffi.a
index 02130dc2..32311b37 100644
--- a/Runtime/Plugins/ffi-ios-sim-arm64/liblivekit_ffi.a
+++ b/Runtime/Plugins/ffi-ios-sim-arm64/liblivekit_ffi.a
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f17db0ef2bb9d5d348211955fe8faddf07350f81c82561db3149518efcb5b29e
-size 49634008
+oid sha256:f25b0e2fa1a58287ad2694b2b9fd59c43229f62b418803929c34a6f06df74ce4
+size 49771632
diff --git a/Runtime/Plugins/ffi-linux-x86_64/liblivekit_ffi.so b/Runtime/Plugins/ffi-linux-x86_64/liblivekit_ffi.so
index 2afd560a..e60be1fc 100644
--- a/Runtime/Plugins/ffi-linux-x86_64/liblivekit_ffi.so
+++ b/Runtime/Plugins/ffi-linux-x86_64/liblivekit_ffi.so
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:05a58fc83b3515cd4e984a66c69c22e0aad09eadb6e972edde626488dafbf5ad
-size 28196848
+oid sha256:b0e3b91dcf42b486045b6acca4863b132e3c4d114d5701b5759c7661c04ea1eb
+size 28265384
diff --git a/Runtime/Plugins/ffi-macos-arm64/liblivekit_ffi.dylib b/Runtime/Plugins/ffi-macos-arm64/liblivekit_ffi.dylib
index e6b9060d..403c74d3 100644
--- a/Runtime/Plugins/ffi-macos-arm64/liblivekit_ffi.dylib
+++ b/Runtime/Plugins/ffi-macos-arm64/liblivekit_ffi.dylib
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:41ad8dfc42f2cf0e959231947556d961e49f9d402511a96ee3c230463139d735
-size 18286592
+oid sha256:f7ef1bb6803a43559382dc72a5447fb6743dcacdad194edd065140af85078eb4
+size 18324672
diff --git a/Runtime/Plugins/ffi-macos-x86_64/liblivekit_ffi.dylib b/Runtime/Plugins/ffi-macos-x86_64/liblivekit_ffi.dylib
index 5bae38c1..66362147 100644
--- a/Runtime/Plugins/ffi-macos-x86_64/liblivekit_ffi.dylib
+++ b/Runtime/Plugins/ffi-macos-x86_64/liblivekit_ffi.dylib
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e635bde8a0d1fb1158d0a7909d91fcf51722b9ab16d3055c9956e0d520ebc830
-size 23152200
+oid sha256:659767038036c1a6c6e33ffff6be08f10dec03b957a27d8a103fda713ec040c9
+size 23193968
diff --git a/Runtime/Plugins/ffi-windows-arm64/livekit_ffi.dll b/Runtime/Plugins/ffi-windows-arm64/livekit_ffi.dll
index a699c8f5..7f17b49f 100644
--- a/Runtime/Plugins/ffi-windows-arm64/livekit_ffi.dll
+++ b/Runtime/Plugins/ffi-windows-arm64/livekit_ffi.dll
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4036b4a511d31d3bb2f1f28ee4db9b98a029c31dddb5dfc2ad4b103f42884239
-size 18745856
+oid sha256:dbacc26914977bb54fb70105444d79342f296dbc450615ba54d5e35b0dfb8132
+size 18786304
diff --git a/Runtime/Plugins/ffi-windows-x86_64/livekit_ffi.dll b/Runtime/Plugins/ffi-windows-x86_64/livekit_ffi.dll
index 21f5575d..5792f70d 100644
--- a/Runtime/Plugins/ffi-windows-x86_64/livekit_ffi.dll
+++ b/Runtime/Plugins/ffi-windows-x86_64/livekit_ffi.dll
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6795bb63c0a72566d68243d3bd0b40ee5c2a122bbaf8f6db9021a8bbd8bc4e43
-size 25057792
+oid sha256:f3456b002f2157b9cbacad5296433d71b2ba1228c1bc26c5a89c8e559e05c103
+size 25098240
diff --git a/Runtime/Scripts/Proto/Capture.cs b/Runtime/Scripts/Proto/Capture.cs
index 4ff1a025..7cbf7811 100644
--- a/Runtime/Scripts/Proto/Capture.cs
+++ b/Runtime/Scripts/Proto/Capture.cs
@@ -25,53 +25,69 @@ static CaptureReflection() {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
"Cg1jYXB0dXJlLnByb3RvEg1saXZla2l0LnByb3RvGgxoYW5kbGUucHJvdG8a",
- "CnJvb20ucHJvdG8aEXZpZGVvX2ZyYW1lLnByb3RvIpQBChhQYXR0ZXJuVmlk",
- "ZW9Tb3VyY2VDb25maWcSOAoKcmVzb2x1dGlvbhgBIAIoCzIkLmxpdmVraXQu",
- "cHJvdG8uVmlkZW9Tb3VyY2VSZXNvbHV0aW9uEhUKDWZyYW1lcmF0ZV9mcHMY",
- "AiACKA0SJwoHcGF0dGVybhgDIAIoDjIWLmxpdmVraXQucHJvdG8uUGF0dGVy",
- "biJpChZDbG9ja1ZpZGVvU291cmNlQ29uZmlnEjgKCnJlc29sdXRpb24YASAC",
- "KAsyJC5saXZla2l0LnByb3RvLlZpZGVvU291cmNlUmVzb2x1dGlvbhIVCg1m",
- "cmFtZXJhdGVfZnBzGAIgAigNIqcCChFDYXB0dXJlU291cmNlSW5mbxIuCgRr",
- "aW5kGAEgAigOMiAubGl2ZWtpdC5wcm90by5DYXB0dXJlU291cmNlS2luZBI4",
- "CgpyZXNvbHV0aW9uGAIgAigLMiQubGl2ZWtpdC5wcm90by5WaWRlb1NvdXJj",
- "ZVJlc29sdXRpb24SKAoFY29kZWMYAyABKA4yGS5saXZla2l0LnByb3RvLlZp",
- "ZGVvQ29kZWMSRwobcmVjb21tZW5kZWRfcHVibGlzaF9vcHRpb25zGAQgAigL",
- "MiIubGl2ZWtpdC5wcm90by5UcmFja1B1Ymxpc2hPcHRpb25zEjUKDHZpZGVv",
- "X3NvdXJjZRgFIAIoCzIfLmxpdmVraXQucHJvdG8uT3duZWRWaWRlb1NvdXJj",
- "ZSJzChJPd25lZENhcHR1cmVTb3VyY2USLQoGaGFuZGxlGAEgAigLMh0ubGl2",
- "ZWtpdC5wcm90by5GZmlPd25lZEhhbmRsZRIuCgRpbmZvGAIgAigLMiAubGl2",
- "ZWtpdC5wcm90by5DYXB0dXJlU291cmNlSW5mbyKxAQoXTmV3Q2FwdHVyZVNv",
- "dXJjZVJlcXVlc3QSOgoHcGF0dGVybhgCIAEoCzInLmxpdmVraXQucHJvdG8u",
- "UGF0dGVyblZpZGVvU291cmNlQ29uZmlnSAASNgoFY2xvY2sYBSABKAsyJS5s",
- "aXZla2l0LnByb3RvLkNsb2NrVmlkZW9Tb3VyY2VDb25maWdIABIYChByZXF1",
- "ZXN0X2FzeW5jX2lkGAMgASgEQggKBmNvbmZpZyIsChhOZXdDYXB0dXJlU291",
- "cmNlUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQifQoYTmV3Q2FwdHVyZVNv",
- "dXJjZUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJ",
- "SAASMwoGc291cmNlGAMgASgLMiEubGl2ZWtpdC5wcm90by5Pd25lZENhcHR1",
- "cmVTb3VyY2VIAEIJCgdtZXNzYWdlIi0KE1N0YXJ0Q2FwdHVyZVJlcXVlc3QS",
- "FgoOY2FwdHVyZV9oYW5kbGUYASACKAQiJQoUU3RhcnRDYXB0dXJlUmVzcG9u",
- "c2USDQoFZXJyb3IYASABKAkiLAoSU3RvcENhcHR1cmVSZXF1ZXN0EhYKDmNh",
- "cHR1cmVfaGFuZGxlGAEgAigEIiQKE1N0b3BDYXB0dXJlUmVzcG9uc2USDQoF",
- "ZXJyb3IYASABKAkiVAoPQ2FwdHVyZUZpbmlzaGVkEhcKD2ZyYW1lc19jYXB0",
- "dXJlZBgBIAIoBBIoCgRleGl0GAIgAigOMhoubGl2ZWtpdC5wcm90by5DYXB0",
- "dXJlRXhpdCIdCgxDYXB0dXJlRXJyb3ISDQoFZXJyb3IYASACKAkimQEKEkNh",
- "cHR1cmVTb3VyY2VFdmVudBIWCg5jYXB0dXJlX2hhbmRsZRgBIAIoBBIyCghm",
- "aW5pc2hlZBgCIAEoCzIeLmxpdmVraXQucHJvdG8uQ2FwdHVyZUZpbmlzaGVk",
- "SAASLAoFZXJyb3IYAyABKAsyGy5saXZla2l0LnByb3RvLkNhcHR1cmVFcnJv",
- "ckgAQgkKB21lc3NhZ2UqMQoHUGF0dGVybhIUChBQQVRURVJOX0dSQURJRU5U",
- "EAASEAoMUEFUVEVSTl9MT0dPEAEqSQoRQ2FwdHVyZVNvdXJjZUtpbmQSGAoU",
- "Q0FQVFVSRV9TT1VSQ0VfUElYRUwQABIaChZDQVBUVVJFX1NPVVJDRV9FTkNP",
- "REVEEAEqRwoLQ2FwdHVyZUV4aXQSGAoUQ0FQVFVSRV9FWElUX1NUT1BQRUQQ",
- "ABIeChpDQVBUVVJFX0VYSVRfRU5EX09GX1NUUkVBTRABQhCqAg1MaXZlS2l0",
+ "CnJvb20ucHJvdG8aEXZpZGVvX2ZyYW1lLnByb3RvImwKFEdzdHJlYW1lclJh",
+ "dGVDb250cm9sEg8KB2VsZW1lbnQYASACKAkSEAoIcHJvcGVydHkYAiACKAkS",
+ "MQoEdW5pdBgDIAIoDjIjLmxpdmVraXQucHJvdG8uR3N0cmVhbWVyQml0cmF0",
+ "ZVVuaXQizQEKGkdzdHJlYW1lclZpZGVvU291cmNlQ29uZmlnEhAKCHBpcGVs",
+ "aW5lGAEgAigJEigKBWNvZGVjGAIgASgOMhkubGl2ZWtpdC5wcm90by5WaWRl",
+ "b0NvZGVjEjgKCnJlc29sdXRpb24YAyABKAsyJC5saXZla2l0LnByb3RvLlZp",
+ "ZGVvU291cmNlUmVzb2x1dGlvbhI5CgxyYXRlX2NvbnRyb2wYBCABKAsyIy5s",
+ "aXZla2l0LnByb3RvLkdzdHJlYW1lclJhdGVDb250cm9sIpQBChhQYXR0ZXJu",
+ "VmlkZW9Tb3VyY2VDb25maWcSOAoKcmVzb2x1dGlvbhgBIAIoCzIkLmxpdmVr",
+ "aXQucHJvdG8uVmlkZW9Tb3VyY2VSZXNvbHV0aW9uEhUKDWZyYW1lcmF0ZV9m",
+ "cHMYAiACKA0SJwoHcGF0dGVybhgDIAIoDjIWLmxpdmVraXQucHJvdG8uUGF0",
+ "dGVybiJpChZDbG9ja1ZpZGVvU291cmNlQ29uZmlnEjgKCnJlc29sdXRpb24Y",
+ "ASACKAsyJC5saXZla2l0LnByb3RvLlZpZGVvU291cmNlUmVzb2x1dGlvbhIV",
+ "Cg1mcmFtZXJhdGVfZnBzGAIgAigNIqcCChFDYXB0dXJlU291cmNlSW5mbxIu",
+ "CgRraW5kGAEgAigOMiAubGl2ZWtpdC5wcm90by5DYXB0dXJlU291cmNlS2lu",
+ "ZBI4CgpyZXNvbHV0aW9uGAIgAigLMiQubGl2ZWtpdC5wcm90by5WaWRlb1Nv",
+ "dXJjZVJlc29sdXRpb24SKAoFY29kZWMYAyABKA4yGS5saXZla2l0LnByb3Rv",
+ "LlZpZGVvQ29kZWMSRwobcmVjb21tZW5kZWRfcHVibGlzaF9vcHRpb25zGAQg",
+ "AigLMiIubGl2ZWtpdC5wcm90by5UcmFja1B1Ymxpc2hPcHRpb25zEjUKDHZp",
+ "ZGVvX3NvdXJjZRgFIAIoCzIfLmxpdmVraXQucHJvdG8uT3duZWRWaWRlb1Nv",
+ "dXJjZSJzChJPd25lZENhcHR1cmVTb3VyY2USLQoGaGFuZGxlGAEgAigLMh0u",
+ "bGl2ZWtpdC5wcm90by5GZmlPd25lZEhhbmRsZRIuCgRpbmZvGAIgAigLMiAu",
+ "bGl2ZWtpdC5wcm90by5DYXB0dXJlU291cmNlSW5mbyLxAQoXTmV3Q2FwdHVy",
+ "ZVNvdXJjZVJlcXVlc3QSPgoJZ3N0cmVhbWVyGAEgASgLMikubGl2ZWtpdC5w",
+ "cm90by5Hc3RyZWFtZXJWaWRlb1NvdXJjZUNvbmZpZ0gAEjoKB3BhdHRlcm4Y",
+ "AiABKAsyJy5saXZla2l0LnByb3RvLlBhdHRlcm5WaWRlb1NvdXJjZUNvbmZp",
+ "Z0gAEjYKBWNsb2NrGAUgASgLMiUubGl2ZWtpdC5wcm90by5DbG9ja1ZpZGVv",
+ "U291cmNlQ29uZmlnSAASGAoQcmVxdWVzdF9hc3luY19pZBgDIAEoBEIICgZj",
+ "b25maWciLAoYTmV3Q2FwdHVyZVNvdXJjZVJlc3BvbnNlEhAKCGFzeW5jX2lk",
+ "GAEgAigEIn0KGE5ld0NhcHR1cmVTb3VyY2VDYWxsYmFjaxIQCghhc3luY19p",
+ "ZBgBIAIoBBIPCgVlcnJvchgCIAEoCUgAEjMKBnNvdXJjZRgDIAEoCzIhLmxp",
+ "dmVraXQucHJvdG8uT3duZWRDYXB0dXJlU291cmNlSABCCQoHbWVzc2FnZSIt",
+ "ChNTdGFydENhcHR1cmVSZXF1ZXN0EhYKDmNhcHR1cmVfaGFuZGxlGAEgAigE",
+ "IiUKFFN0YXJ0Q2FwdHVyZVJlc3BvbnNlEg0KBWVycm9yGAEgASgJIiwKElN0",
+ "b3BDYXB0dXJlUmVxdWVzdBIWCg5jYXB0dXJlX2hhbmRsZRgBIAIoBCIkChNT",
+ "dG9wQ2FwdHVyZVJlc3BvbnNlEg0KBWVycm9yGAEgASgJIlQKD0NhcHR1cmVG",
+ "aW5pc2hlZBIXCg9mcmFtZXNfY2FwdHVyZWQYASACKAQSKAoEZXhpdBgCIAIo",
+ "DjIaLmxpdmVraXQucHJvdG8uQ2FwdHVyZUV4aXQiTAoMQ2FwdHVyZUVycm9y",
+ "Eg0KBWVycm9yGAEgAigJEi0KBGtpbmQYAiACKA4yHy5saXZla2l0LnByb3Rv",
+ "LkNhcHR1cmVFcnJvcktpbmQimQEKEkNhcHR1cmVTb3VyY2VFdmVudBIWCg5j",
+ "YXB0dXJlX2hhbmRsZRgBIAIoBBIyCghmaW5pc2hlZBgCIAEoCzIeLmxpdmVr",
+ "aXQucHJvdG8uQ2FwdHVyZUZpbmlzaGVkSAASLAoFZXJyb3IYAyABKAsyGy5s",
+ "aXZla2l0LnByb3RvLkNhcHR1cmVFcnJvckgAQgkKB21lc3NhZ2UqVwoUR3N0",
+ "cmVhbWVyQml0cmF0ZVVuaXQSHgoaR1NUUkVBTUVSX0JJVFJBVEVfVU5JVF9C",
+ "UFMQABIfChtHU1RSRUFNRVJfQklUUkFURV9VTklUX0tCUFMQASoxCgdQYXR0",
+ "ZXJuEhQKEFBBVFRFUk5fR1JBRElFTlQQABIQCgxQQVRURVJOX0xPR08QASpJ",
+ "ChFDYXB0dXJlU291cmNlS2luZBIYChRDQVBUVVJFX1NPVVJDRV9QSVhFTBAA",
+ "EhoKFkNBUFRVUkVfU09VUkNFX0VOQ09ERUQQASpHCgtDYXB0dXJlRXhpdBIY",
+ "ChRDQVBUVVJFX0VYSVRfU1RPUFBFRBAAEh4KGkNBUFRVUkVfRVhJVF9FTkRf",
+ "T0ZfU1RSRUFNEAEqbgoQQ2FwdHVyZUVycm9yS2luZBIdChlDQVBUVVJFX0VS",
+ "Uk9SX0tJTkRfU09VUkNFEAASGgoWQ0FQVFVSRV9FUlJPUl9LSU5EX1JUQxAB",
+ "Eh8KG0NBUFRVUkVfRVJST1JfS0lORF9QQU5JQ0tFRBACQhCqAg1MaXZlS2l0",
"LlByb3Rv"));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::LiveKit.Proto.HandleReflection.Descriptor, global::LiveKit.Proto.RoomReflection.Descriptor, global::LiveKit.Proto.VideoFrameReflection.Descriptor, },
- new pbr::GeneratedClrTypeInfo(new[] {typeof(global::LiveKit.Proto.Pattern), typeof(global::LiveKit.Proto.CaptureSourceKind), typeof(global::LiveKit.Proto.CaptureExit), }, null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(new[] {typeof(global::LiveKit.Proto.GstreamerBitrateUnit), typeof(global::LiveKit.Proto.Pattern), typeof(global::LiveKit.Proto.CaptureSourceKind), typeof(global::LiveKit.Proto.CaptureExit), typeof(global::LiveKit.Proto.CaptureErrorKind), }, null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::LiveKit.Proto.GstreamerRateControl), global::LiveKit.Proto.GstreamerRateControl.Parser, new[]{ "Element", "Property", "Unit" }, null, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::LiveKit.Proto.GstreamerVideoSourceConfig), global::LiveKit.Proto.GstreamerVideoSourceConfig.Parser, new[]{ "Pipeline", "Codec", "Resolution", "RateControl" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::LiveKit.Proto.PatternVideoSourceConfig), global::LiveKit.Proto.PatternVideoSourceConfig.Parser, new[]{ "Resolution", "FramerateFps", "Pattern" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::LiveKit.Proto.ClockVideoSourceConfig), global::LiveKit.Proto.ClockVideoSourceConfig.Parser, new[]{ "Resolution", "FramerateFps" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::LiveKit.Proto.CaptureSourceInfo), global::LiveKit.Proto.CaptureSourceInfo.Parser, new[]{ "Kind", "Resolution", "Codec", "RecommendedPublishOptions", "VideoSource" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::LiveKit.Proto.OwnedCaptureSource), global::LiveKit.Proto.OwnedCaptureSource.Parser, new[]{ "Handle", "Info" }, null, null, null, null),
- new pbr::GeneratedClrTypeInfo(typeof(global::LiveKit.Proto.NewCaptureSourceRequest), global::LiveKit.Proto.NewCaptureSourceRequest.Parser, new[]{ "Pattern", "Clock", "RequestAsyncId" }, new[]{ "Config" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::LiveKit.Proto.NewCaptureSourceRequest), global::LiveKit.Proto.NewCaptureSourceRequest.Parser, new[]{ "Gstreamer", "Pattern", "Clock", "RequestAsyncId" }, new[]{ "Config" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::LiveKit.Proto.NewCaptureSourceResponse), global::LiveKit.Proto.NewCaptureSourceResponse.Parser, new[]{ "AsyncId" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::LiveKit.Proto.NewCaptureSourceCallback), global::LiveKit.Proto.NewCaptureSourceCallback.Parser, new[]{ "AsyncId", "Error", "Source" }, new[]{ "Message" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::LiveKit.Proto.StartCaptureRequest), global::LiveKit.Proto.StartCaptureRequest.Parser, new[]{ "CaptureHandle" }, null, null, null, null),
@@ -79,7 +95,7 @@ static CaptureReflection() {
new pbr::GeneratedClrTypeInfo(typeof(global::LiveKit.Proto.StopCaptureRequest), global::LiveKit.Proto.StopCaptureRequest.Parser, new[]{ "CaptureHandle" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::LiveKit.Proto.StopCaptureResponse), global::LiveKit.Proto.StopCaptureResponse.Parser, new[]{ "Error" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::LiveKit.Proto.CaptureFinished), global::LiveKit.Proto.CaptureFinished.Parser, new[]{ "FramesCaptured", "Exit" }, null, null, null, null),
- new pbr::GeneratedClrTypeInfo(typeof(global::LiveKit.Proto.CaptureError), global::LiveKit.Proto.CaptureError.Parser, new[]{ "Error" }, null, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::LiveKit.Proto.CaptureError), global::LiveKit.Proto.CaptureError.Parser, new[]{ "Error", "Kind" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::LiveKit.Proto.CaptureSourceEvent), global::LiveKit.Proto.CaptureSourceEvent.Parser, new[]{ "CaptureHandle", "Finished", "Error" }, new[]{ "Message" }, null, null, null)
}));
}
@@ -87,6 +103,14 @@ static CaptureReflection() {
}
#region Enums
+ ///
+ /// Bitrate unit expected by a GStreamer encoder property.
+ ///
+ public enum GstreamerBitrateUnit {
+ [pbr::OriginalName("GSTREAMER_BITRATE_UNIT_BPS")] Bps = 0,
+ [pbr::OriginalName("GSTREAMER_BITRATE_UNIT_KBPS")] Kbps = 1,
+ }
+
///
/// Test patterns built into livekit-capture.
///
@@ -101,37 +125,764 @@ public enum Pattern {
[pbr::OriginalName("PATTERN_LOGO")] Logo = 1,
}
- ///
- /// Kind of media a capture source produces.
- ///
- public enum CaptureSourceKind {
- ///
- /// Pixel frames, published through the WebRTC encoder.
- ///
- [pbr::OriginalName("CAPTURE_SOURCE_PIXEL")] CaptureSourcePixel = 0,
- ///
- /// Pre-encoded access units, published as passthrough.
- ///
- [pbr::OriginalName("CAPTURE_SOURCE_ENCODED")] CaptureSourceEncoded = 1,
- }
+ ///
+ /// Kind of media a capture source produces.
+ ///
+ public enum CaptureSourceKind {
+ ///
+ /// Pixel frames, published through the WebRTC encoder.
+ ///
+ [pbr::OriginalName("CAPTURE_SOURCE_PIXEL")] CaptureSourcePixel = 0,
+ ///
+ /// Pre-encoded access units, published as passthrough.
+ ///
+ [pbr::OriginalName("CAPTURE_SOURCE_ENCODED")] CaptureSourceEncoded = 1,
+ }
+
+ ///
+ /// Why a capture ended without error.
+ ///
+ public enum CaptureExit {
+ ///
+ /// Stopped by StopCaptureRequest (or handle disposal).
+ ///
+ [pbr::OriginalName("CAPTURE_EXIT_STOPPED")] Stopped = 0,
+ ///
+ /// The producer reached the end of its stream.
+ ///
+ [pbr::OriginalName("CAPTURE_EXIT_END_OF_STREAM")] EndOfStream = 1,
+ }
+
+ ///
+ /// Why a capture ended with an error.
+ ///
+ public enum CaptureErrorKind {
+ ///
+ /// The capture source failed or violated its contract.
+ ///
+ [pbr::OriginalName("CAPTURE_ERROR_KIND_SOURCE")] Source = 0,
+ ///
+ /// The RTC video source rejected a frame.
+ ///
+ [pbr::OriginalName("CAPTURE_ERROR_KIND_RTC")] Rtc = 1,
+ ///
+ /// The pump thread panicked.
+ ///
+ [pbr::OriginalName("CAPTURE_ERROR_KIND_PANICKED")] Panicked = 2,
+ }
+
+ #endregion
+
+ #region Messages
+ ///
+ /// Binding from WebRTC rate-control targets to a GStreamer encoder property.
+ ///
+ [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
+ public sealed partial class GstreamerRateControl : pb::IMessage
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ , pb::IBufferMessage
+ #endif
+ {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new GstreamerRateControl());
+ private pb::UnknownFieldSet _unknownFields;
+ private int _hasBits0;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::LiveKit.Proto.CaptureReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public GstreamerRateControl() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public GstreamerRateControl(GstreamerRateControl other) : this() {
+ _hasBits0 = other._hasBits0;
+ element_ = other.element_;
+ property_ = other.property_;
+ unit_ = other.unit_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public GstreamerRateControl Clone() {
+ return new GstreamerRateControl(this);
+ }
+
+ /// Field number for the "element" field.
+ public const int ElementFieldNumber = 1;
+ private readonly static string ElementDefaultValue = "";
+
+ private string element_;
+ ///
+ /// Name of the encoder element in the pipeline (e.g. `lk_encoder`).
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string Element {
+ get { return element_ ?? ElementDefaultValue; }
+ set {
+ element_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+ /// Gets whether the "element" field is set
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool HasElement {
+ get { return element_ != null; }
+ }
+ /// Clears the value of the "element" field
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void ClearElement() {
+ element_ = null;
+ }
+
+ /// Field number for the "property" field.
+ public const int PropertyFieldNumber = 2;
+ private readonly static string PropertyDefaultValue = "";
+
+ private string property_;
+ ///
+ /// Bitrate property to set on the element (e.g. `bitrate` for x264enc,
+ /// `target-bitrate` for vp8enc/vp9enc).
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string Property {
+ get { return property_ ?? PropertyDefaultValue; }
+ set {
+ property_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+ /// Gets whether the "property" field is set
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool HasProperty {
+ get { return property_ != null; }
+ }
+ /// Clears the value of the "property" field
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void ClearProperty() {
+ property_ = null;
+ }
+
+ /// Field number for the "unit" field.
+ public const int UnitFieldNumber = 3;
+ private readonly static global::LiveKit.Proto.GstreamerBitrateUnit UnitDefaultValue = global::LiveKit.Proto.GstreamerBitrateUnit.Bps;
+
+ private global::LiveKit.Proto.GstreamerBitrateUnit unit_;
+ ///
+ /// Unit the property expects.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::LiveKit.Proto.GstreamerBitrateUnit Unit {
+ get { if ((_hasBits0 & 1) != 0) { return unit_; } else { return UnitDefaultValue; } }
+ set {
+ _hasBits0 |= 1;
+ unit_ = value;
+ }
+ }
+ /// Gets whether the "unit" field is set
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool HasUnit {
+ get { return (_hasBits0 & 1) != 0; }
+ }
+ /// Clears the value of the "unit" field
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void ClearUnit() {
+ _hasBits0 &= ~1;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override bool Equals(object other) {
+ return Equals(other as GstreamerRateControl);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool Equals(GstreamerRateControl other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Element != other.Element) return false;
+ if (Property != other.Property) return false;
+ if (Unit != other.Unit) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (HasElement) hash ^= Element.GetHashCode();
+ if (HasProperty) hash ^= Property.GetHashCode();
+ if (HasUnit) hash ^= Unit.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void WriteTo(pb::CodedOutputStream output) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ output.WriteRawMessage(this);
+ #else
+ if (HasElement) {
+ output.WriteRawTag(10);
+ output.WriteString(Element);
+ }
+ if (HasProperty) {
+ output.WriteRawTag(18);
+ output.WriteString(Property);
+ }
+ if (HasUnit) {
+ output.WriteRawTag(24);
+ output.WriteEnum((int) Unit);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
+ if (HasElement) {
+ output.WriteRawTag(10);
+ output.WriteString(Element);
+ }
+ if (HasProperty) {
+ output.WriteRawTag(18);
+ output.WriteString(Property);
+ }
+ if (HasUnit) {
+ output.WriteRawTag(24);
+ output.WriteEnum((int) Unit);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(ref output);
+ }
+ }
+ #endif
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public int CalculateSize() {
+ int size = 0;
+ if (HasElement) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Element);
+ }
+ if (HasProperty) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Property);
+ }
+ if (HasUnit) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Unit);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void MergeFrom(GstreamerRateControl other) {
+ if (other == null) {
+ return;
+ }
+ if (other.HasElement) {
+ Element = other.Element;
+ }
+ if (other.HasProperty) {
+ Property = other.Property;
+ }
+ if (other.HasUnit) {
+ Unit = other.Unit;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void MergeFrom(pb::CodedInputStream input) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ input.ReadRawMessage(this);
+ #else
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ if ((tag & 7) == 4) {
+ // Abort on any end group tag.
+ return;
+ }
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ Element = input.ReadString();
+ break;
+ }
+ case 18: {
+ Property = input.ReadString();
+ break;
+ }
+ case 24: {
+ Unit = (global::LiveKit.Proto.GstreamerBitrateUnit) input.ReadEnum();
+ break;
+ }
+ }
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ if ((tag & 7) == 4) {
+ // Abort on any end group tag.
+ return;
+ }
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
+ break;
+ case 10: {
+ Element = input.ReadString();
+ break;
+ }
+ case 18: {
+ Property = input.ReadString();
+ break;
+ }
+ case 24: {
+ Unit = (global::LiveKit.Proto.GstreamerBitrateUnit) input.ReadEnum();
+ break;
+ }
+ }
+ }
+ }
+ #endif
+
+ }
+
+ ///
+ /// Encoded ingest from a GStreamer pipeline.
+ ///
+ [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
+ public sealed partial class GstreamerVideoSourceConfig : pb::IMessage
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ , pb::IBufferMessage
+ #endif
+ {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new GstreamerVideoSourceConfig());
+ private pb::UnknownFieldSet _unknownFields;
+ private int _hasBits0;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::LiveKit.Proto.CaptureReflection.Descriptor.MessageTypes[1]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public GstreamerVideoSourceConfig() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public GstreamerVideoSourceConfig(GstreamerVideoSourceConfig other) : this() {
+ _hasBits0 = other._hasBits0;
+ pipeline_ = other.pipeline_;
+ codec_ = other.codec_;
+ resolution_ = other.resolution_ != null ? other.resolution_.Clone() : null;
+ rateControl_ = other.rateControl_ != null ? other.rateControl_.Clone() : null;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public GstreamerVideoSourceConfig Clone() {
+ return new GstreamerVideoSourceConfig(this);
+ }
+
+ /// Field number for the "pipeline" field.
+ public const int PipelineFieldNumber = 1;
+ private readonly static string PipelineDefaultValue = "";
+
+ private string pipeline_;
+ ///
+ /// GStreamer launch description for the encoded producer pipeline.
+ /// Must contain `appsink name=lk_appsink`, or leave exactly one encoded
+ /// video source pad unlinked for the source to attach one to.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string Pipeline {
+ get { return pipeline_ ?? PipelineDefaultValue; }
+ set {
+ pipeline_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+ /// Gets whether the "pipeline" field is set
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool HasPipeline {
+ get { return pipeline_ != null; }
+ }
+ /// Clears the value of the "pipeline" field
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void ClearPipeline() {
+ pipeline_ = null;
+ }
+
+ /// Field number for the "codec" field.
+ public const int CodecFieldNumber = 2;
+ private readonly static global::LiveKit.Proto.VideoCodec CodecDefaultValue = global::LiveKit.Proto.VideoCodec.Vp8;
+
+ private global::LiveKit.Proto.VideoCodec codec_;
+ ///
+ /// Codec expected from the pipeline; inferred from pipeline caps when
+ /// omitted.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::LiveKit.Proto.VideoCodec Codec {
+ get { if ((_hasBits0 & 1) != 0) { return codec_; } else { return CodecDefaultValue; } }
+ set {
+ _hasBits0 |= 1;
+ codec_ = value;
+ }
+ }
+ /// Gets whether the "codec" field is set
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool HasCodec {
+ get { return (_hasBits0 & 1) != 0; }
+ }
+ /// Clears the value of the "codec" field
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void ClearCodec() {
+ _hasBits0 &= ~1;
+ }
+
+ /// Field number for the "resolution" field.
+ public const int ResolutionFieldNumber = 3;
+ private global::LiveKit.Proto.VideoSourceResolution resolution_;
+ ///
+ /// Encoded frame resolution. When omitted, it is discovered from the
+ /// pipeline's negotiated caps; when set, the pipeline output is verified
+ /// against it.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::LiveKit.Proto.VideoSourceResolution Resolution {
+ get { return resolution_; }
+ set {
+ resolution_ = value;
+ }
+ }
+
+ /// Field number for the "rate_control" field.
+ public const int RateControlFieldNumber = 4;
+ private global::LiveKit.Proto.GstreamerRateControl rateControl_;
+ ///
+ /// Forwards WebRTC rate-control targets to an encoder element's bitrate
+ /// property. Without this, the pipeline encodes at a fixed bitrate.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::LiveKit.Proto.GstreamerRateControl RateControl {
+ get { return rateControl_; }
+ set {
+ rateControl_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override bool Equals(object other) {
+ return Equals(other as GstreamerVideoSourceConfig);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool Equals(GstreamerVideoSourceConfig other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Pipeline != other.Pipeline) return false;
+ if (Codec != other.Codec) return false;
+ if (!object.Equals(Resolution, other.Resolution)) return false;
+ if (!object.Equals(RateControl, other.RateControl)) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (HasPipeline) hash ^= Pipeline.GetHashCode();
+ if (HasCodec) hash ^= Codec.GetHashCode();
+ if (resolution_ != null) hash ^= Resolution.GetHashCode();
+ if (rateControl_ != null) hash ^= RateControl.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void WriteTo(pb::CodedOutputStream output) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ output.WriteRawMessage(this);
+ #else
+ if (HasPipeline) {
+ output.WriteRawTag(10);
+ output.WriteString(Pipeline);
+ }
+ if (HasCodec) {
+ output.WriteRawTag(16);
+ output.WriteEnum((int) Codec);
+ }
+ if (resolution_ != null) {
+ output.WriteRawTag(26);
+ output.WriteMessage(Resolution);
+ }
+ if (rateControl_ != null) {
+ output.WriteRawTag(34);
+ output.WriteMessage(RateControl);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
+ if (HasPipeline) {
+ output.WriteRawTag(10);
+ output.WriteString(Pipeline);
+ }
+ if (HasCodec) {
+ output.WriteRawTag(16);
+ output.WriteEnum((int) Codec);
+ }
+ if (resolution_ != null) {
+ output.WriteRawTag(26);
+ output.WriteMessage(Resolution);
+ }
+ if (rateControl_ != null) {
+ output.WriteRawTag(34);
+ output.WriteMessage(RateControl);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(ref output);
+ }
+ }
+ #endif
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public int CalculateSize() {
+ int size = 0;
+ if (HasPipeline) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Pipeline);
+ }
+ if (HasCodec) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Codec);
+ }
+ if (resolution_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(Resolution);
+ }
+ if (rateControl_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(RateControl);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
- ///
- /// Why a capture ended without error.
- ///
- public enum CaptureExit {
- ///
- /// Stopped by StopCaptureRequest (or handle disposal).
- ///
- [pbr::OriginalName("CAPTURE_EXIT_STOPPED")] Stopped = 0,
- ///
- /// The producer reached the end of its stream.
- ///
- [pbr::OriginalName("CAPTURE_EXIT_END_OF_STREAM")] EndOfStream = 1,
- }
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void MergeFrom(GstreamerVideoSourceConfig other) {
+ if (other == null) {
+ return;
+ }
+ if (other.HasPipeline) {
+ Pipeline = other.Pipeline;
+ }
+ if (other.HasCodec) {
+ Codec = other.Codec;
+ }
+ if (other.resolution_ != null) {
+ if (resolution_ == null) {
+ Resolution = new global::LiveKit.Proto.VideoSourceResolution();
+ }
+ Resolution.MergeFrom(other.Resolution);
+ }
+ if (other.rateControl_ != null) {
+ if (rateControl_ == null) {
+ RateControl = new global::LiveKit.Proto.GstreamerRateControl();
+ }
+ RateControl.MergeFrom(other.RateControl);
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
- #endregion
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void MergeFrom(pb::CodedInputStream input) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ input.ReadRawMessage(this);
+ #else
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ if ((tag & 7) == 4) {
+ // Abort on any end group tag.
+ return;
+ }
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ Pipeline = input.ReadString();
+ break;
+ }
+ case 16: {
+ Codec = (global::LiveKit.Proto.VideoCodec) input.ReadEnum();
+ break;
+ }
+ case 26: {
+ if (resolution_ == null) {
+ Resolution = new global::LiveKit.Proto.VideoSourceResolution();
+ }
+ input.ReadMessage(Resolution);
+ break;
+ }
+ case 34: {
+ if (rateControl_ == null) {
+ RateControl = new global::LiveKit.Proto.GstreamerRateControl();
+ }
+ input.ReadMessage(RateControl);
+ break;
+ }
+ }
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ if ((tag & 7) == 4) {
+ // Abort on any end group tag.
+ return;
+ }
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
+ break;
+ case 10: {
+ Pipeline = input.ReadString();
+ break;
+ }
+ case 16: {
+ Codec = (global::LiveKit.Proto.VideoCodec) input.ReadEnum();
+ break;
+ }
+ case 26: {
+ if (resolution_ == null) {
+ Resolution = new global::LiveKit.Proto.VideoSourceResolution();
+ }
+ input.ReadMessage(Resolution);
+ break;
+ }
+ case 34: {
+ if (rateControl_ == null) {
+ RateControl = new global::LiveKit.Proto.GstreamerRateControl();
+ }
+ input.ReadMessage(RateControl);
+ break;
+ }
+ }
+ }
+ }
+ #endif
+
+ }
- #region Messages
///
/// Test pattern rendered on the GPU.
///
@@ -151,7 +902,7 @@ public sealed partial class PatternVideoSourceConfig : pb::IMessage
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
- get { return global::LiveKit.Proto.CaptureReflection.Descriptor.MessageTypes[2]; }
+ get { return global::LiveKit.Proto.CaptureReflection.Descriptor.MessageTypes[4]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -1163,7 +1914,7 @@ public sealed partial class OwnedCaptureSource : pb::IMessageField number for the "gstreamer" field.
+ public const int GstreamerFieldNumber = 1;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::LiveKit.Proto.GstreamerVideoSourceConfig Gstreamer {
+ get { return configCase_ == ConfigOneofCase.Gstreamer ? (global::LiveKit.Proto.GstreamerVideoSourceConfig) config_ : null; }
+ set {
+ config_ = value;
+ configCase_ = value == null ? ConfigOneofCase.None : ConfigOneofCase.Gstreamer;
+ }
+ }
+
/// Field number for the "pattern" field.
public const int PatternFieldNumber = 2;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -1519,6 +2285,7 @@ public void ClearRequestAsyncId() {
/// Enum of possible cases for the "config" oneof.
public enum ConfigOneofCase {
None = 0,
+ Gstreamer = 1,
Pattern = 2,
Clock = 5,
}
@@ -1551,6 +2318,7 @@ public bool Equals(NewCaptureSourceRequest other) {
if (ReferenceEquals(other, this)) {
return true;
}
+ if (!object.Equals(Gstreamer, other.Gstreamer)) return false;
if (!object.Equals(Pattern, other.Pattern)) return false;
if (!object.Equals(Clock, other.Clock)) return false;
if (RequestAsyncId != other.RequestAsyncId) return false;
@@ -1562,6 +2330,7 @@ public bool Equals(NewCaptureSourceRequest other) {
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override int GetHashCode() {
int hash = 1;
+ if (configCase_ == ConfigOneofCase.Gstreamer) hash ^= Gstreamer.GetHashCode();
if (configCase_ == ConfigOneofCase.Pattern) hash ^= Pattern.GetHashCode();
if (configCase_ == ConfigOneofCase.Clock) hash ^= Clock.GetHashCode();
if (HasRequestAsyncId) hash ^= RequestAsyncId.GetHashCode();
@@ -1584,6 +2353,10 @@ public void WriteTo(pb::CodedOutputStream output) {
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
output.WriteRawMessage(this);
#else
+ if (configCase_ == ConfigOneofCase.Gstreamer) {
+ output.WriteRawTag(10);
+ output.WriteMessage(Gstreamer);
+ }
if (configCase_ == ConfigOneofCase.Pattern) {
output.WriteRawTag(18);
output.WriteMessage(Pattern);
@@ -1606,6 +2379,10 @@ public void WriteTo(pb::CodedOutputStream output) {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
+ if (configCase_ == ConfigOneofCase.Gstreamer) {
+ output.WriteRawTag(10);
+ output.WriteMessage(Gstreamer);
+ }
if (configCase_ == ConfigOneofCase.Pattern) {
output.WriteRawTag(18);
output.WriteMessage(Pattern);
@@ -1628,6 +2405,9 @@ public void WriteTo(pb::CodedOutputStream output) {
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public int CalculateSize() {
int size = 0;
+ if (configCase_ == ConfigOneofCase.Gstreamer) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(Gstreamer);
+ }
if (configCase_ == ConfigOneofCase.Pattern) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(Pattern);
}
@@ -1653,6 +2433,12 @@ public void MergeFrom(NewCaptureSourceRequest other) {
RequestAsyncId = other.RequestAsyncId;
}
switch (other.ConfigCase) {
+ case ConfigOneofCase.Gstreamer:
+ if (Gstreamer == null) {
+ Gstreamer = new global::LiveKit.Proto.GstreamerVideoSourceConfig();
+ }
+ Gstreamer.MergeFrom(other.Gstreamer);
+ break;
case ConfigOneofCase.Pattern:
if (Pattern == null) {
Pattern = new global::LiveKit.Proto.PatternVideoSourceConfig();
@@ -1686,6 +2472,15 @@ public void MergeFrom(pb::CodedInputStream input) {
default:
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
break;
+ case 10: {
+ global::LiveKit.Proto.GstreamerVideoSourceConfig subBuilder = new global::LiveKit.Proto.GstreamerVideoSourceConfig();
+ if (configCase_ == ConfigOneofCase.Gstreamer) {
+ subBuilder.MergeFrom(Gstreamer);
+ }
+ input.ReadMessage(subBuilder);
+ Gstreamer = subBuilder;
+ break;
+ }
case 18: {
global::LiveKit.Proto.PatternVideoSourceConfig subBuilder = new global::LiveKit.Proto.PatternVideoSourceConfig();
if (configCase_ == ConfigOneofCase.Pattern) {
@@ -1727,6 +2522,15 @@ public void MergeFrom(pb::CodedInputStream input) {
default:
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
break;
+ case 10: {
+ global::LiveKit.Proto.GstreamerVideoSourceConfig subBuilder = new global::LiveKit.Proto.GstreamerVideoSourceConfig();
+ if (configCase_ == ConfigOneofCase.Gstreamer) {
+ subBuilder.MergeFrom(Gstreamer);
+ }
+ input.ReadMessage(subBuilder);
+ Gstreamer = subBuilder;
+ break;
+ }
case 18: {
global::LiveKit.Proto.PatternVideoSourceConfig subBuilder = new global::LiveKit.Proto.PatternVideoSourceConfig();
if (configCase_ == ConfigOneofCase.Pattern) {
@@ -1772,7 +2576,7 @@ public sealed partial class NewCaptureSourceResponse : pb::IMessage
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
- get { return global::LiveKit.Proto.CaptureReflection.Descriptor.MessageTypes[11]; }
+ get { return global::LiveKit.Proto.CaptureReflection.Descriptor.MessageTypes[13]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -3457,6 +4261,7 @@ public sealed partial class CaptureError : pb::IMessage
{
private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new CaptureError());
private pb::UnknownFieldSet _unknownFields;
+ private int _hasBits0;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pb::MessageParser Parser { get { return _parser; } }
@@ -3464,7 +4269,7 @@ public sealed partial class CaptureError : pb::IMessage
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
- get { return global::LiveKit.Proto.CaptureReflection.Descriptor.MessageTypes[12]; }
+ get { return global::LiveKit.Proto.CaptureReflection.Descriptor.MessageTypes[14]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -3484,7 +4289,9 @@ public CaptureError() {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public CaptureError(CaptureError other) : this() {
+ _hasBits0 = other._hasBits0;
error_ = other.error_;
+ kind_ = other.kind_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
@@ -3520,6 +4327,33 @@ public void ClearError() {
error_ = null;
}
+ /// Field number for the "kind" field.
+ public const int KindFieldNumber = 2;
+ private readonly static global::LiveKit.Proto.CaptureErrorKind KindDefaultValue = global::LiveKit.Proto.CaptureErrorKind.Source;
+
+ private global::LiveKit.Proto.CaptureErrorKind kind_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::LiveKit.Proto.CaptureErrorKind Kind {
+ get { if ((_hasBits0 & 1) != 0) { return kind_; } else { return KindDefaultValue; } }
+ set {
+ _hasBits0 |= 1;
+ kind_ = value;
+ }
+ }
+ /// Gets whether the "kind" field is set
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool HasKind {
+ get { return (_hasBits0 & 1) != 0; }
+ }
+ /// Clears the value of the "kind" field
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void ClearKind() {
+ _hasBits0 &= ~1;
+ }
+
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override bool Equals(object other) {
@@ -3536,6 +4370,7 @@ public bool Equals(CaptureError other) {
return true;
}
if (Error != other.Error) return false;
+ if (Kind != other.Kind) return false;
return Equals(_unknownFields, other._unknownFields);
}
@@ -3544,6 +4379,7 @@ public bool Equals(CaptureError other) {
public override int GetHashCode() {
int hash = 1;
if (HasError) hash ^= Error.GetHashCode();
+ if (HasKind) hash ^= Kind.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
@@ -3566,6 +4402,10 @@ public void WriteTo(pb::CodedOutputStream output) {
output.WriteRawTag(10);
output.WriteString(Error);
}
+ if (HasKind) {
+ output.WriteRawTag(16);
+ output.WriteEnum((int) Kind);
+ }
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@@ -3580,6 +4420,10 @@ public void WriteTo(pb::CodedOutputStream output) {
output.WriteRawTag(10);
output.WriteString(Error);
}
+ if (HasKind) {
+ output.WriteRawTag(16);
+ output.WriteEnum((int) Kind);
+ }
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
@@ -3593,6 +4437,9 @@ public int CalculateSize() {
if (HasError) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(Error);
}
+ if (HasKind) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Kind);
+ }
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
@@ -3608,6 +4455,9 @@ public void MergeFrom(CaptureError other) {
if (other.HasError) {
Error = other.Error;
}
+ if (other.HasKind) {
+ Kind = other.Kind;
+ }
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
@@ -3631,6 +4481,10 @@ public void MergeFrom(pb::CodedInputStream input) {
Error = input.ReadString();
break;
}
+ case 16: {
+ Kind = (global::LiveKit.Proto.CaptureErrorKind) input.ReadEnum();
+ break;
+ }
}
}
#endif
@@ -3654,6 +4508,10 @@ public void MergeFrom(pb::CodedInputStream input) {
Error = input.ReadString();
break;
}
+ case 16: {
+ Kind = (global::LiveKit.Proto.CaptureErrorKind) input.ReadEnum();
+ break;
+ }
}
}
}
@@ -3681,7 +4539,7 @@ public sealed partial class CaptureSourceEvent : pb::IMessage