livekit 0.11.1__tar.gz → 0.12.0.dev0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. {livekit-0.11.1 → livekit-0.12.0.dev0}/PKG-INFO +1 -1
  2. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/__init__.py +5 -1
  3. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/_event_emitter.py +2 -1
  4. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/_ffi_client.py +6 -1
  5. livekit-0.12.0.dev0/livekit/rtc/_proto/audio_frame_pb2.py +76 -0
  6. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/_proto/audio_frame_pb2.pyi +8 -2
  7. livekit-0.12.0.dev0/livekit/rtc/_proto/ffi_pb2.py +50 -0
  8. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/_proto/ffi_pb2.pyi +51 -27
  9. livekit-0.12.0.dev0/livekit/rtc/_proto/participant_pb2.py +34 -0
  10. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/_proto/participant_pb2.pyi +23 -1
  11. livekit-0.12.0.dev0/livekit/rtc/_proto/room_pb2.py +209 -0
  12. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/_proto/room_pb2.pyi +342 -91
  13. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/chat.py +1 -8
  14. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/participant.py +37 -26
  15. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/room.py +113 -66
  16. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/transcription.py +2 -2
  17. livekit-0.12.0.dev0/livekit/rtc/version.py +1 -0
  18. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit.egg-info/PKG-INFO +1 -1
  19. livekit-0.11.1/livekit/rtc/_proto/audio_frame_pb2.py +0 -76
  20. livekit-0.11.1/livekit/rtc/_proto/ffi_pb2.py +0 -50
  21. livekit-0.11.1/livekit/rtc/_proto/participant_pb2.py +0 -30
  22. livekit-0.11.1/livekit/rtc/_proto/room_pb2.py +0 -179
  23. livekit-0.11.1/livekit/rtc/version.py +0 -1
  24. {livekit-0.11.1 → livekit-0.12.0.dev0}/README.md +0 -0
  25. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/_proto/__init__.py +0 -0
  26. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/_proto/e2ee_pb2.py +0 -0
  27. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/_proto/e2ee_pb2.pyi +0 -0
  28. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/_proto/handle_pb2.py +0 -0
  29. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/_proto/handle_pb2.pyi +0 -0
  30. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/_proto/stats_pb2.py +0 -0
  31. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/_proto/stats_pb2.pyi +0 -0
  32. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/_proto/track_pb2.py +0 -0
  33. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/_proto/track_pb2.pyi +0 -0
  34. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/_proto/video_frame_pb2.py +0 -0
  35. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/_proto/video_frame_pb2.pyi +0 -0
  36. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/_utils.py +0 -0
  37. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/audio_frame.py +0 -0
  38. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/audio_source.py +0 -0
  39. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/audio_stream.py +0 -0
  40. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/e2ee.py +0 -0
  41. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/py.typed +0 -0
  42. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/resources/__init__.py +0 -0
  43. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/track.py +0 -0
  44. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/track_publication.py +0 -0
  45. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/video_frame.py +0 -0
  46. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/video_source.py +0 -0
  47. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit/rtc/video_stream.py +0 -0
  48. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit.egg-info/SOURCES.txt +0 -0
  49. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit.egg-info/dependency_links.txt +0 -0
  50. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit.egg-info/requires.txt +0 -0
  51. {livekit-0.11.1 → livekit-0.12.0.dev0}/livekit.egg-info/top_level.txt +0 -0
  52. {livekit-0.11.1 → livekit-0.12.0.dev0}/pyproject.toml +0 -0
  53. {livekit-0.11.1 → livekit-0.12.0.dev0}/setup.cfg +0 -0
  54. {livekit-0.11.1 → livekit-0.12.0.dev0}/setup.py +0 -0
  55. {livekit-0.11.1 → livekit-0.12.0.dev0}/tests/test_chat.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: livekit
3
- Version: 0.11.1
3
+ Version: 0.12.0.dev0
4
4
  Summary: Python Real-time SDK for LiveKit
5
5
  Home-page: https://github.com/livekit/python-sdks
6
6
  License: Apache-2.0
@@ -38,7 +38,11 @@ from .e2ee import (
38
38
  KeyProvider,
39
39
  KeyProviderOptions,
40
40
  )
41
- from .participant import LocalParticipant, Participant, RemoteParticipant
41
+ from .participant import (
42
+ LocalParticipant,
43
+ Participant,
44
+ RemoteParticipant,
45
+ )
42
46
  from .room import ConnectError, DataPacket, Room, RoomOptions, RtcConfiguration, SipDTMF
43
47
  from .track import (
44
48
  AudioTrack,
@@ -9,7 +9,8 @@ class EventEmitter(Generic[T]):
9
9
 
10
10
  def emit(self, event: T, *args, **kwargs) -> None:
11
11
  if event in self._events:
12
- for callback in self._events[event]:
12
+ callables = self._events[event].copy()
13
+ for callback in callables:
13
14
  callback(*args, **kwargs)
14
15
 
15
16
  def once(self, event: T, callback: Optional[Callable] = None) -> Callable:
@@ -106,7 +106,12 @@ class FfiQueue(Generic[T]):
106
106
  def put(self, item: T) -> None:
107
107
  with self._lock:
108
108
  for queue, loop in self._subscribers:
109
- loop.call_soon_threadsafe(queue.put_nowait, item)
109
+ try:
110
+ loop.call_soon_threadsafe(queue.put_nowait, item)
111
+ except Exception as e:
112
+ # this could happen if user closes the runloop without unsubscribing first
113
+ # it's not good when it does occur, but we should not fail the entire runloop
114
+ logger.error("error putting to queue: %s", e)
110
115
 
111
116
  def subscribe(self, loop: Optional[asyncio.AbstractEventLoop] = None) -> Queue[T]:
112
117
  with self._lock:
@@ -0,0 +1,76 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: audio_frame.proto
4
+ # Protobuf Python Version: 4.25.3
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from . import handle_pb2 as handle__pb2
16
+
17
+
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11\x61udio_frame.proto\x12\rlivekit.proto\x1a\x0chandle.proto\"[\n\x15NewAudioStreamRequest\x12\x14\n\x0ctrack_handle\x18\x01 \x01(\x04\x12,\n\x04type\x18\x02 \x01(\x0e\x32\x1e.livekit.proto.AudioStreamType\"I\n\x16NewAudioStreamResponse\x12/\n\x06stream\x18\x01 \x01(\x0b\x32\x1f.livekit.proto.OwnedAudioStream\"\xe1\x01\n\x15NewAudioSourceRequest\x12,\n\x04type\x18\x01 \x01(\x0e\x32\x1e.livekit.proto.AudioSourceType\x12\x37\n\x07options\x18\x02 \x01(\x0b\x32!.livekit.proto.AudioSourceOptionsH\x00\x88\x01\x01\x12\x13\n\x0bsample_rate\x18\x03 \x01(\r\x12\x14\n\x0cnum_channels\x18\x04 \x01(\r\x12\x19\n\x0c\x65nable_queue\x18\x05 \x01(\x08H\x01\x88\x01\x01\x42\n\n\x08_optionsB\x0f\n\r_enable_queue\"I\n\x16NewAudioSourceResponse\x12/\n\x06source\x18\x01 \x01(\x0b\x32\x1f.livekit.proto.OwnedAudioSource\"f\n\x18\x43\x61ptureAudioFrameRequest\x12\x15\n\rsource_handle\x18\x01 \x01(\x04\x12\x33\n\x06\x62uffer\x18\x02 \x01(\x0b\x32#.livekit.proto.AudioFrameBufferInfo\"-\n\x19\x43\x61ptureAudioFrameResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x01(\x04\"K\n\x19\x43\x61ptureAudioFrameCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x01(\x04\x12\x12\n\x05\x65rror\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_error\"\x1a\n\x18NewAudioResamplerRequest\"R\n\x19NewAudioResamplerResponse\x12\x35\n\tresampler\x18\x01 \x01(\x0b\x32\".livekit.proto.OwnedAudioResampler\"\x93\x01\n\x17RemixAndResampleRequest\x12\x18\n\x10resampler_handle\x18\x01 \x01(\x04\x12\x33\n\x06\x62uffer\x18\x02 \x01(\x0b\x32#.livekit.proto.AudioFrameBufferInfo\x12\x14\n\x0cnum_channels\x18\x03 \x01(\r\x12\x13\n\x0bsample_rate\x18\x04 \x01(\r\"P\n\x18RemixAndResampleResponse\x12\x34\n\x06\x62uffer\x18\x01 \x01(\x0b\x32$.livekit.proto.OwnedAudioFrameBuffer\"p\n\x14\x41udioFrameBufferInfo\x12\x10\n\x08\x64\x61ta_ptr\x18\x01 \x01(\x04\x12\x14\n\x0cnum_channels\x18\x02 \x01(\r\x12\x13\n\x0bsample_rate\x18\x03 \x01(\r\x12\x1b\n\x13samples_per_channel\x18\x04 \x01(\r\"y\n\x15OwnedAudioFrameBuffer\x12-\n\x06handle\x18\x01 \x01(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12\x31\n\x04info\x18\x02 \x01(\x0b\x32#.livekit.proto.AudioFrameBufferInfo\"?\n\x0f\x41udioStreamInfo\x12,\n\x04type\x18\x01 \x01(\x0e\x32\x1e.livekit.proto.AudioStreamType\"o\n\x10OwnedAudioStream\x12-\n\x06handle\x18\x01 \x01(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12,\n\x04info\x18\x02 \x01(\x0b\x32\x1e.livekit.proto.AudioStreamInfo\"\x9f\x01\n\x10\x41udioStreamEvent\x12\x15\n\rstream_handle\x18\x01 \x01(\x04\x12;\n\x0e\x66rame_received\x18\x02 \x01(\x0b\x32!.livekit.proto.AudioFrameReceivedH\x00\x12,\n\x03\x65os\x18\x03 \x01(\x0b\x32\x1d.livekit.proto.AudioStreamEOSH\x00\x42\t\n\x07message\"I\n\x12\x41udioFrameReceived\x12\x33\n\x05\x66rame\x18\x01 \x01(\x0b\x32$.livekit.proto.OwnedAudioFrameBuffer\"\x10\n\x0e\x41udioStreamEOS\"e\n\x12\x41udioSourceOptions\x12\x19\n\x11\x65\x63ho_cancellation\x18\x01 \x01(\x08\x12\x19\n\x11noise_suppression\x18\x02 \x01(\x08\x12\x19\n\x11\x61uto_gain_control\x18\x03 \x01(\x08\"?\n\x0f\x41udioSourceInfo\x12,\n\x04type\x18\x02 \x01(\x0e\x32\x1e.livekit.proto.AudioSourceType\"o\n\x10OwnedAudioSource\x12-\n\x06handle\x18\x01 \x01(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12,\n\x04info\x18\x02 \x01(\x0b\x32\x1e.livekit.proto.AudioSourceInfo\"\x14\n\x12\x41udioResamplerInfo\"u\n\x13OwnedAudioResampler\x12-\n\x06handle\x18\x01 \x01(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12/\n\x04info\x18\x02 \x01(\x0b\x32!.livekit.proto.AudioResamplerInfo*A\n\x0f\x41udioStreamType\x12\x17\n\x13\x41UDIO_STREAM_NATIVE\x10\x00\x12\x15\n\x11\x41UDIO_STREAM_HTML\x10\x01**\n\x0f\x41udioSourceType\x12\x17\n\x13\x41UDIO_SOURCE_NATIVE\x10\x00\x42\x10\xaa\x02\rLiveKit.Protob\x06proto3')
19
+
20
+ _globals = globals()
21
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
22
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'audio_frame_pb2', _globals)
23
+ if _descriptor._USE_C_DESCRIPTORS == False:
24
+ _globals['DESCRIPTOR']._options = None
25
+ _globals['DESCRIPTOR']._serialized_options = b'\252\002\rLiveKit.Proto'
26
+ _globals['_AUDIOSTREAMTYPE']._serialized_start=2185
27
+ _globals['_AUDIOSTREAMTYPE']._serialized_end=2250
28
+ _globals['_AUDIOSOURCETYPE']._serialized_start=2252
29
+ _globals['_AUDIOSOURCETYPE']._serialized_end=2294
30
+ _globals['_NEWAUDIOSTREAMREQUEST']._serialized_start=50
31
+ _globals['_NEWAUDIOSTREAMREQUEST']._serialized_end=141
32
+ _globals['_NEWAUDIOSTREAMRESPONSE']._serialized_start=143
33
+ _globals['_NEWAUDIOSTREAMRESPONSE']._serialized_end=216
34
+ _globals['_NEWAUDIOSOURCEREQUEST']._serialized_start=219
35
+ _globals['_NEWAUDIOSOURCEREQUEST']._serialized_end=444
36
+ _globals['_NEWAUDIOSOURCERESPONSE']._serialized_start=446
37
+ _globals['_NEWAUDIOSOURCERESPONSE']._serialized_end=519
38
+ _globals['_CAPTUREAUDIOFRAMEREQUEST']._serialized_start=521
39
+ _globals['_CAPTUREAUDIOFRAMEREQUEST']._serialized_end=623
40
+ _globals['_CAPTUREAUDIOFRAMERESPONSE']._serialized_start=625
41
+ _globals['_CAPTUREAUDIOFRAMERESPONSE']._serialized_end=670
42
+ _globals['_CAPTUREAUDIOFRAMECALLBACK']._serialized_start=672
43
+ _globals['_CAPTUREAUDIOFRAMECALLBACK']._serialized_end=747
44
+ _globals['_NEWAUDIORESAMPLERREQUEST']._serialized_start=749
45
+ _globals['_NEWAUDIORESAMPLERREQUEST']._serialized_end=775
46
+ _globals['_NEWAUDIORESAMPLERRESPONSE']._serialized_start=777
47
+ _globals['_NEWAUDIORESAMPLERRESPONSE']._serialized_end=859
48
+ _globals['_REMIXANDRESAMPLEREQUEST']._serialized_start=862
49
+ _globals['_REMIXANDRESAMPLEREQUEST']._serialized_end=1009
50
+ _globals['_REMIXANDRESAMPLERESPONSE']._serialized_start=1011
51
+ _globals['_REMIXANDRESAMPLERESPONSE']._serialized_end=1091
52
+ _globals['_AUDIOFRAMEBUFFERINFO']._serialized_start=1093
53
+ _globals['_AUDIOFRAMEBUFFERINFO']._serialized_end=1205
54
+ _globals['_OWNEDAUDIOFRAMEBUFFER']._serialized_start=1207
55
+ _globals['_OWNEDAUDIOFRAMEBUFFER']._serialized_end=1328
56
+ _globals['_AUDIOSTREAMINFO']._serialized_start=1330
57
+ _globals['_AUDIOSTREAMINFO']._serialized_end=1393
58
+ _globals['_OWNEDAUDIOSTREAM']._serialized_start=1395
59
+ _globals['_OWNEDAUDIOSTREAM']._serialized_end=1506
60
+ _globals['_AUDIOSTREAMEVENT']._serialized_start=1509
61
+ _globals['_AUDIOSTREAMEVENT']._serialized_end=1668
62
+ _globals['_AUDIOFRAMERECEIVED']._serialized_start=1670
63
+ _globals['_AUDIOFRAMERECEIVED']._serialized_end=1743
64
+ _globals['_AUDIOSTREAMEOS']._serialized_start=1745
65
+ _globals['_AUDIOSTREAMEOS']._serialized_end=1761
66
+ _globals['_AUDIOSOURCEOPTIONS']._serialized_start=1763
67
+ _globals['_AUDIOSOURCEOPTIONS']._serialized_end=1864
68
+ _globals['_AUDIOSOURCEINFO']._serialized_start=1866
69
+ _globals['_AUDIOSOURCEINFO']._serialized_end=1929
70
+ _globals['_OWNEDAUDIOSOURCE']._serialized_start=1931
71
+ _globals['_OWNEDAUDIOSOURCE']._serialized_end=2042
72
+ _globals['_AUDIORESAMPLERINFO']._serialized_start=2044
73
+ _globals['_AUDIORESAMPLERINFO']._serialized_end=2064
74
+ _globals['_OWNEDAUDIORESAMPLER']._serialized_start=2066
75
+ _globals['_OWNEDAUDIORESAMPLER']._serialized_end=2183
76
+ # @@protoc_insertion_point(module_scope)
@@ -110,11 +110,13 @@ class NewAudioSourceRequest(google.protobuf.message.Message):
110
110
  OPTIONS_FIELD_NUMBER: builtins.int
111
111
  SAMPLE_RATE_FIELD_NUMBER: builtins.int
112
112
  NUM_CHANNELS_FIELD_NUMBER: builtins.int
113
+ ENABLE_QUEUE_FIELD_NUMBER: builtins.int
113
114
  type: global___AudioSourceType.ValueType
114
115
  @property
115
116
  def options(self) -> global___AudioSourceOptions: ...
116
117
  sample_rate: builtins.int
117
118
  num_channels: builtins.int
119
+ enable_queue: builtins.bool
118
120
  def __init__(
119
121
  self,
120
122
  *,
@@ -122,9 +124,13 @@ class NewAudioSourceRequest(google.protobuf.message.Message):
122
124
  options: global___AudioSourceOptions | None = ...,
123
125
  sample_rate: builtins.int = ...,
124
126
  num_channels: builtins.int = ...,
127
+ enable_queue: builtins.bool | None = ...,
125
128
  ) -> None: ...
126
- def HasField(self, field_name: typing_extensions.Literal["_options", b"_options", "options", b"options"]) -> builtins.bool: ...
127
- def ClearField(self, field_name: typing_extensions.Literal["_options", b"_options", "num_channels", b"num_channels", "options", b"options", "sample_rate", b"sample_rate", "type", b"type"]) -> None: ...
129
+ def HasField(self, field_name: typing_extensions.Literal["_enable_queue", b"_enable_queue", "_options", b"_options", "enable_queue", b"enable_queue", "options", b"options"]) -> builtins.bool: ...
130
+ def ClearField(self, field_name: typing_extensions.Literal["_enable_queue", b"_enable_queue", "_options", b"_options", "enable_queue", b"enable_queue", "num_channels", b"num_channels", "options", b"options", "sample_rate", b"sample_rate", "type", b"type"]) -> None: ...
131
+ @typing.overload
132
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_enable_queue", b"_enable_queue"]) -> typing_extensions.Literal["enable_queue"] | None: ...
133
+ @typing.overload
128
134
  def WhichOneof(self, oneof_group: typing_extensions.Literal["_options", b"_options"]) -> typing_extensions.Literal["options"] | None: ...
129
135
 
130
136
  global___NewAudioSourceRequest = NewAudioSourceRequest
@@ -0,0 +1,50 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: ffi.proto
4
+ # Protobuf Python Version: 4.25.3
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from . import e2ee_pb2 as e2ee__pb2
16
+ from . import track_pb2 as track__pb2
17
+ from . import room_pb2 as room__pb2
18
+ from . import video_frame_pb2 as video__frame__pb2
19
+ from . import audio_frame_pb2 as audio__frame__pb2
20
+
21
+
22
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\tffi.proto\x12\rlivekit.proto\x1a\ne2ee.proto\x1a\x0btrack.proto\x1a\nroom.proto\x1a\x11video_frame.proto\x1a\x11\x61udio_frame.proto\"\x9c\r\n\nFfiRequest\x12\x30\n\x07\x64ispose\x18\x02 \x01(\x0b\x32\x1d.livekit.proto.DisposeRequestH\x00\x12\x30\n\x07\x63onnect\x18\x03 \x01(\x0b\x32\x1d.livekit.proto.ConnectRequestH\x00\x12\x36\n\ndisconnect\x18\x04 \x01(\x0b\x32 .livekit.proto.DisconnectRequestH\x00\x12;\n\rpublish_track\x18\x05 \x01(\x0b\x32\".livekit.proto.PublishTrackRequestH\x00\x12?\n\x0funpublish_track\x18\x06 \x01(\x0b\x32$.livekit.proto.UnpublishTrackRequestH\x00\x12\x39\n\x0cpublish_data\x18\x07 \x01(\x0b\x32!.livekit.proto.PublishDataRequestH\x00\x12=\n\x0eset_subscribed\x18\x08 \x01(\x0b\x32#.livekit.proto.SetSubscribedRequestH\x00\x12\x44\n\x12set_local_metadata\x18\t \x01(\x0b\x32&.livekit.proto.SetLocalMetadataRequestH\x00\x12<\n\x0eset_local_name\x18\n \x01(\x0b\x32\".livekit.proto.SetLocalNameRequestH\x00\x12H\n\x14set_local_attributes\x18\x0b \x01(\x0b\x32(.livekit.proto.SetLocalAttributesRequestH\x00\x12\x42\n\x11get_session_stats\x18\x0c \x01(\x0b\x32%.livekit.proto.GetSessionStatsRequestH\x00\x12K\n\x15publish_transcription\x18\r \x01(\x0b\x32*.livekit.proto.PublishTranscriptionRequestH\x00\x12@\n\x10publish_sip_dtmf\x18\x0e \x01(\x0b\x32$.livekit.proto.PublishSipDtmfRequestH\x00\x12\x44\n\x12\x63reate_video_track\x18\x0f \x01(\x0b\x32&.livekit.proto.CreateVideoTrackRequestH\x00\x12\x44\n\x12\x63reate_audio_track\x18\x10 \x01(\x0b\x32&.livekit.proto.CreateAudioTrackRequestH\x00\x12\x33\n\tget_stats\x18\x11 \x01(\x0b\x32\x1e.livekit.proto.GetStatsRequestH\x00\x12@\n\x10new_video_stream\x18\x12 \x01(\x0b\x32$.livekit.proto.NewVideoStreamRequestH\x00\x12@\n\x10new_video_source\x18\x13 \x01(\x0b\x32$.livekit.proto.NewVideoSourceRequestH\x00\x12\x46\n\x13\x63\x61pture_video_frame\x18\x14 \x01(\x0b\x32\'.livekit.proto.CaptureVideoFrameRequestH\x00\x12;\n\rvideo_convert\x18\x15 \x01(\x0b\x32\".livekit.proto.VideoConvertRequestH\x00\x12@\n\x10new_audio_stream\x18\x17 \x01(\x0b\x32$.livekit.proto.NewAudioStreamRequestH\x00\x12@\n\x10new_audio_source\x18\x18 \x01(\x0b\x32$.livekit.proto.NewAudioSourceRequestH\x00\x12\x46\n\x13\x63\x61pture_audio_frame\x18\x19 \x01(\x0b\x32\'.livekit.proto.CaptureAudioFrameRequestH\x00\x12\x46\n\x13new_audio_resampler\x18\x1a \x01(\x0b\x32\'.livekit.proto.NewAudioResamplerRequestH\x00\x12\x44\n\x12remix_and_resample\x18\x1b \x01(\x0b\x32&.livekit.proto.RemixAndResampleRequestH\x00\x12*\n\x04\x65\x32\x65\x65\x18\x1c \x01(\x0b\x32\x1a.livekit.proto.E2eeRequestH\x00\x42\t\n\x07message\"\xb7\r\n\x0b\x46\x66iResponse\x12\x31\n\x07\x64ispose\x18\x02 \x01(\x0b\x32\x1e.livekit.proto.DisposeResponseH\x00\x12\x31\n\x07\x63onnect\x18\x03 \x01(\x0b\x32\x1e.livekit.proto.ConnectResponseH\x00\x12\x37\n\ndisconnect\x18\x04 \x01(\x0b\x32!.livekit.proto.DisconnectResponseH\x00\x12<\n\rpublish_track\x18\x05 \x01(\x0b\x32#.livekit.proto.PublishTrackResponseH\x00\x12@\n\x0funpublish_track\x18\x06 \x01(\x0b\x32%.livekit.proto.UnpublishTrackResponseH\x00\x12:\n\x0cpublish_data\x18\x07 \x01(\x0b\x32\".livekit.proto.PublishDataResponseH\x00\x12>\n\x0eset_subscribed\x18\x08 \x01(\x0b\x32$.livekit.proto.SetSubscribedResponseH\x00\x12\x45\n\x12set_local_metadata\x18\t \x01(\x0b\x32\'.livekit.proto.SetLocalMetadataResponseH\x00\x12=\n\x0eset_local_name\x18\n \x01(\x0b\x32#.livekit.proto.SetLocalNameResponseH\x00\x12I\n\x14set_local_attributes\x18\x0b \x01(\x0b\x32).livekit.proto.SetLocalAttributesResponseH\x00\x12\x43\n\x11get_session_stats\x18\x0c \x01(\x0b\x32&.livekit.proto.GetSessionStatsResponseH\x00\x12L\n\x15publish_transcription\x18\r \x01(\x0b\x32+.livekit.proto.PublishTranscriptionResponseH\x00\x12\x41\n\x10publish_sip_dtmf\x18\x0e \x01(\x0b\x32%.livekit.proto.PublishSipDtmfResponseH\x00\x12\x45\n\x12\x63reate_video_track\x18\x0f \x01(\x0b\x32\'.livekit.proto.CreateVideoTrackResponseH\x00\x12\x45\n\x12\x63reate_audio_track\x18\x10 \x01(\x0b\x32\'.livekit.proto.CreateAudioTrackResponseH\x00\x12\x34\n\tget_stats\x18\x11 \x01(\x0b\x32\x1f.livekit.proto.GetStatsResponseH\x00\x12\x41\n\x10new_video_stream\x18\x12 \x01(\x0b\x32%.livekit.proto.NewVideoStreamResponseH\x00\x12\x41\n\x10new_video_source\x18\x13 \x01(\x0b\x32%.livekit.proto.NewVideoSourceResponseH\x00\x12G\n\x13\x63\x61pture_video_frame\x18\x14 \x01(\x0b\x32(.livekit.proto.CaptureVideoFrameResponseH\x00\x12<\n\rvideo_convert\x18\x15 \x01(\x0b\x32#.livekit.proto.VideoConvertResponseH\x00\x12\x41\n\x10new_audio_stream\x18\x16 \x01(\x0b\x32%.livekit.proto.NewAudioStreamResponseH\x00\x12\x41\n\x10new_audio_source\x18\x17 \x01(\x0b\x32%.livekit.proto.NewAudioSourceResponseH\x00\x12G\n\x13\x63\x61pture_audio_frame\x18\x18 \x01(\x0b\x32(.livekit.proto.CaptureAudioFrameResponseH\x00\x12G\n\x13new_audio_resampler\x18\x19 \x01(\x0b\x32(.livekit.proto.NewAudioResamplerResponseH\x00\x12\x45\n\x12remix_and_resample\x18\x1a \x01(\x0b\x32\'.livekit.proto.RemixAndResampleResponseH\x00\x12+\n\x04\x65\x32\x65\x65\x18\x1b \x01(\x0b\x32\x1b.livekit.proto.E2eeResponseH\x00\x42\t\n\x07message\"\xc6\t\n\x08\x46\x66iEvent\x12.\n\nroom_event\x18\x01 \x01(\x0b\x32\x18.livekit.proto.RoomEventH\x00\x12\x30\n\x0btrack_event\x18\x02 \x01(\x0b\x32\x19.livekit.proto.TrackEventH\x00\x12=\n\x12video_stream_event\x18\x03 \x01(\x0b\x32\x1f.livekit.proto.VideoStreamEventH\x00\x12=\n\x12\x61udio_stream_event\x18\x04 \x01(\x0b\x32\x1f.livekit.proto.AudioStreamEventH\x00\x12\x31\n\x07\x63onnect\x18\x05 \x01(\x0b\x32\x1e.livekit.proto.ConnectCallbackH\x00\x12\x37\n\ndisconnect\x18\x07 \x01(\x0b\x32!.livekit.proto.DisconnectCallbackH\x00\x12\x31\n\x07\x64ispose\x18\x08 \x01(\x0b\x32\x1e.livekit.proto.DisposeCallbackH\x00\x12<\n\rpublish_track\x18\t \x01(\x0b\x32#.livekit.proto.PublishTrackCallbackH\x00\x12@\n\x0funpublish_track\x18\n \x01(\x0b\x32%.livekit.proto.UnpublishTrackCallbackH\x00\x12:\n\x0cpublish_data\x18\x0b \x01(\x0b\x32\".livekit.proto.PublishDataCallbackH\x00\x12L\n\x15publish_transcription\x18\x0c \x01(\x0b\x32+.livekit.proto.PublishTranscriptionCallbackH\x00\x12G\n\x13\x63\x61pture_audio_frame\x18\r \x01(\x0b\x32(.livekit.proto.CaptureAudioFrameCallbackH\x00\x12\x45\n\x12set_local_metadata\x18\x0e \x01(\x0b\x32\'.livekit.proto.SetLocalMetadataCallbackH\x00\x12=\n\x0eset_local_name\x18\x0f \x01(\x0b\x32#.livekit.proto.SetLocalNameCallbackH\x00\x12I\n\x14set_local_attributes\x18\x10 \x01(\x0b\x32).livekit.proto.SetLocalAttributesCallbackH\x00\x12\x34\n\tget_stats\x18\x11 \x01(\x0b\x32\x1f.livekit.proto.GetStatsCallbackH\x00\x12\'\n\x04logs\x18\x12 \x01(\x0b\x32\x17.livekit.proto.LogBatchH\x00\x12\x43\n\x11get_session_stats\x18\x13 \x01(\x0b\x32&.livekit.proto.GetSessionStatsCallbackH\x00\x12%\n\x05panic\x18\x14 \x01(\x0b\x32\x14.livekit.proto.PanicH\x00\x12\x41\n\x10publish_sip_dtmf\x18\x15 \x01(\x0b\x32%.livekit.proto.PublishSipDtmfCallbackH\x00\x42\t\n\x07message\"\x1f\n\x0e\x44isposeRequest\x12\r\n\x05\x61sync\x18\x01 \x01(\x08\"5\n\x0f\x44isposeResponse\x12\x15\n\x08\x61sync_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x42\x0b\n\t_async_id\"#\n\x0f\x44isposeCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x01(\x04\"\xb6\x01\n\tLogRecord\x12&\n\x05level\x18\x01 \x01(\x0e\x32\x17.livekit.proto.LogLevel\x12\x0e\n\x06target\x18\x02 \x01(\t\x12\x18\n\x0bmodule_path\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04\x66ile\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04line\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x0f\n\x07message\x18\x06 \x01(\tB\x0e\n\x0c_module_pathB\x07\n\x05_fileB\x07\n\x05_line\"5\n\x08LogBatch\x12)\n\x07records\x18\x01 \x03(\x0b\x32\x18.livekit.proto.LogRecord\"\x18\n\x05Panic\x12\x0f\n\x07message\x18\x01 \x01(\t*S\n\x08LogLevel\x12\r\n\tLOG_ERROR\x10\x00\x12\x0c\n\x08LOG_WARN\x10\x01\x12\x0c\n\x08LOG_INFO\x10\x02\x12\r\n\tLOG_DEBUG\x10\x03\x12\r\n\tLOG_TRACE\x10\x04\x42\x10\xaa\x02\rLiveKit.Protob\x06proto3')
23
+
24
+ _globals = globals()
25
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
26
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ffi_pb2', _globals)
27
+ if _descriptor._USE_C_DESCRIPTORS == False:
28
+ _globals['DESCRIPTOR']._options = None
29
+ _globals['DESCRIPTOR']._serialized_options = b'\252\002\rLiveKit.Proto'
30
+ _globals['_LOGLEVEL']._serialized_start=5136
31
+ _globals['_LOGLEVEL']._serialized_end=5219
32
+ _globals['_FFIREQUEST']._serialized_start=104
33
+ _globals['_FFIREQUEST']._serialized_end=1796
34
+ _globals['_FFIRESPONSE']._serialized_start=1799
35
+ _globals['_FFIRESPONSE']._serialized_end=3518
36
+ _globals['_FFIEVENT']._serialized_start=3521
37
+ _globals['_FFIEVENT']._serialized_end=4743
38
+ _globals['_DISPOSEREQUEST']._serialized_start=4745
39
+ _globals['_DISPOSEREQUEST']._serialized_end=4776
40
+ _globals['_DISPOSERESPONSE']._serialized_start=4778
41
+ _globals['_DISPOSERESPONSE']._serialized_end=4831
42
+ _globals['_DISPOSECALLBACK']._serialized_start=4833
43
+ _globals['_DISPOSECALLBACK']._serialized_end=4868
44
+ _globals['_LOGRECORD']._serialized_start=4871
45
+ _globals['_LOGRECORD']._serialized_end=5053
46
+ _globals['_LOGBATCH']._serialized_start=5055
47
+ _globals['_LOGBATCH']._serialized_end=5108
48
+ _globals['_PANIC']._serialized_start=5110
49
+ _globals['_PANIC']._serialized_end=5134
50
+ # @@protoc_insertion_point(module_scope)
@@ -98,10 +98,12 @@ class FfiRequest(google.protobuf.message.Message):
98
98
  UNPUBLISH_TRACK_FIELD_NUMBER: builtins.int
99
99
  PUBLISH_DATA_FIELD_NUMBER: builtins.int
100
100
  SET_SUBSCRIBED_FIELD_NUMBER: builtins.int
101
- UPDATE_LOCAL_METADATA_FIELD_NUMBER: builtins.int
102
- UPDATE_LOCAL_NAME_FIELD_NUMBER: builtins.int
101
+ SET_LOCAL_METADATA_FIELD_NUMBER: builtins.int
102
+ SET_LOCAL_NAME_FIELD_NUMBER: builtins.int
103
+ SET_LOCAL_ATTRIBUTES_FIELD_NUMBER: builtins.int
103
104
  GET_SESSION_STATS_FIELD_NUMBER: builtins.int
104
105
  PUBLISH_TRANSCRIPTION_FIELD_NUMBER: builtins.int
106
+ PUBLISH_SIP_DTMF_FIELD_NUMBER: builtins.int
105
107
  CREATE_VIDEO_TRACK_FIELD_NUMBER: builtins.int
106
108
  CREATE_AUDIO_TRACK_FIELD_NUMBER: builtins.int
107
109
  GET_STATS_FIELD_NUMBER: builtins.int
@@ -131,14 +133,18 @@ class FfiRequest(google.protobuf.message.Message):
131
133
  @property
132
134
  def set_subscribed(self) -> room_pb2.SetSubscribedRequest: ...
133
135
  @property
134
- def update_local_metadata(self) -> room_pb2.UpdateLocalMetadataRequest: ...
136
+ def set_local_metadata(self) -> room_pb2.SetLocalMetadataRequest: ...
135
137
  @property
136
- def update_local_name(self) -> room_pb2.UpdateLocalNameRequest: ...
138
+ def set_local_name(self) -> room_pb2.SetLocalNameRequest: ...
139
+ @property
140
+ def set_local_attributes(self) -> room_pb2.SetLocalAttributesRequest: ...
137
141
  @property
138
142
  def get_session_stats(self) -> room_pb2.GetSessionStatsRequest: ...
139
143
  @property
140
144
  def publish_transcription(self) -> room_pb2.PublishTranscriptionRequest: ...
141
145
  @property
146
+ def publish_sip_dtmf(self) -> room_pb2.PublishSipDtmfRequest: ...
147
+ @property
142
148
  def create_video_track(self) -> track_pb2.CreateVideoTrackRequest:
143
149
  """Track"""
144
150
  @property
@@ -177,10 +183,12 @@ class FfiRequest(google.protobuf.message.Message):
177
183
  unpublish_track: room_pb2.UnpublishTrackRequest | None = ...,
178
184
  publish_data: room_pb2.PublishDataRequest | None = ...,
179
185
  set_subscribed: room_pb2.SetSubscribedRequest | None = ...,
180
- update_local_metadata: room_pb2.UpdateLocalMetadataRequest | None = ...,
181
- update_local_name: room_pb2.UpdateLocalNameRequest | None = ...,
186
+ set_local_metadata: room_pb2.SetLocalMetadataRequest | None = ...,
187
+ set_local_name: room_pb2.SetLocalNameRequest | None = ...,
188
+ set_local_attributes: room_pb2.SetLocalAttributesRequest | None = ...,
182
189
  get_session_stats: room_pb2.GetSessionStatsRequest | None = ...,
183
190
  publish_transcription: room_pb2.PublishTranscriptionRequest | None = ...,
191
+ publish_sip_dtmf: room_pb2.PublishSipDtmfRequest | None = ...,
184
192
  create_video_track: track_pb2.CreateVideoTrackRequest | None = ...,
185
193
  create_audio_track: track_pb2.CreateAudioTrackRequest | None = ...,
186
194
  get_stats: track_pb2.GetStatsRequest | None = ...,
@@ -195,9 +203,9 @@ class FfiRequest(google.protobuf.message.Message):
195
203
  remix_and_resample: audio_frame_pb2.RemixAndResampleRequest | None = ...,
196
204
  e2ee: e2ee_pb2.E2eeRequest | None = ...,
197
205
  ) -> None: ...
198
- def HasField(self, field_name: typing_extensions.Literal["capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "message", b"message", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "publish_data", b"publish_data", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "remix_and_resample", b"remix_and_resample", "set_subscribed", b"set_subscribed", "unpublish_track", b"unpublish_track", "update_local_metadata", b"update_local_metadata", "update_local_name", b"update_local_name", "video_convert", b"video_convert"]) -> builtins.bool: ...
199
- def ClearField(self, field_name: typing_extensions.Literal["capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "message", b"message", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "publish_data", b"publish_data", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "remix_and_resample", b"remix_and_resample", "set_subscribed", b"set_subscribed", "unpublish_track", b"unpublish_track", "update_local_metadata", b"update_local_metadata", "update_local_name", b"update_local_name", "video_convert", b"video_convert"]) -> None: ...
200
- def WhichOneof(self, oneof_group: typing_extensions.Literal["message", b"message"]) -> typing_extensions.Literal["dispose", "connect", "disconnect", "publish_track", "unpublish_track", "publish_data", "set_subscribed", "update_local_metadata", "update_local_name", "get_session_stats", "publish_transcription", "create_video_track", "create_audio_track", "get_stats", "new_video_stream", "new_video_source", "capture_video_frame", "video_convert", "new_audio_stream", "new_audio_source", "capture_audio_frame", "new_audio_resampler", "remix_and_resample", "e2ee"] | None: ...
206
+ def HasField(self, field_name: typing_extensions.Literal["capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "message", b"message", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "publish_data", b"publish_data", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "remix_and_resample", b"remix_and_resample", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_subscribed", b"set_subscribed", "unpublish_track", b"unpublish_track", "video_convert", b"video_convert"]) -> builtins.bool: ...
207
+ def ClearField(self, field_name: typing_extensions.Literal["capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "message", b"message", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "publish_data", b"publish_data", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "remix_and_resample", b"remix_and_resample", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_subscribed", b"set_subscribed", "unpublish_track", b"unpublish_track", "video_convert", b"video_convert"]) -> None: ...
208
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["message", b"message"]) -> typing_extensions.Literal["dispose", "connect", "disconnect", "publish_track", "unpublish_track", "publish_data", "set_subscribed", "set_local_metadata", "set_local_name", "set_local_attributes", "get_session_stats", "publish_transcription", "publish_sip_dtmf", "create_video_track", "create_audio_track", "get_stats", "new_video_stream", "new_video_source", "capture_video_frame", "video_convert", "new_audio_stream", "new_audio_source", "capture_audio_frame", "new_audio_resampler", "remix_and_resample", "e2ee"] | None: ...
201
209
 
202
210
  global___FfiRequest = FfiRequest
203
211
 
@@ -214,10 +222,12 @@ class FfiResponse(google.protobuf.message.Message):
214
222
  UNPUBLISH_TRACK_FIELD_NUMBER: builtins.int
215
223
  PUBLISH_DATA_FIELD_NUMBER: builtins.int
216
224
  SET_SUBSCRIBED_FIELD_NUMBER: builtins.int
217
- UPDATE_LOCAL_METADATA_FIELD_NUMBER: builtins.int
218
- UPDATE_LOCAL_NAME_FIELD_NUMBER: builtins.int
225
+ SET_LOCAL_METADATA_FIELD_NUMBER: builtins.int
226
+ SET_LOCAL_NAME_FIELD_NUMBER: builtins.int
227
+ SET_LOCAL_ATTRIBUTES_FIELD_NUMBER: builtins.int
219
228
  GET_SESSION_STATS_FIELD_NUMBER: builtins.int
220
229
  PUBLISH_TRANSCRIPTION_FIELD_NUMBER: builtins.int
230
+ PUBLISH_SIP_DTMF_FIELD_NUMBER: builtins.int
221
231
  CREATE_VIDEO_TRACK_FIELD_NUMBER: builtins.int
222
232
  CREATE_AUDIO_TRACK_FIELD_NUMBER: builtins.int
223
233
  GET_STATS_FIELD_NUMBER: builtins.int
@@ -247,14 +257,18 @@ class FfiResponse(google.protobuf.message.Message):
247
257
  @property
248
258
  def set_subscribed(self) -> room_pb2.SetSubscribedResponse: ...
249
259
  @property
250
- def update_local_metadata(self) -> room_pb2.UpdateLocalMetadataResponse: ...
260
+ def set_local_metadata(self) -> room_pb2.SetLocalMetadataResponse: ...
261
+ @property
262
+ def set_local_name(self) -> room_pb2.SetLocalNameResponse: ...
251
263
  @property
252
- def update_local_name(self) -> room_pb2.UpdateLocalNameResponse: ...
264
+ def set_local_attributes(self) -> room_pb2.SetLocalAttributesResponse: ...
253
265
  @property
254
266
  def get_session_stats(self) -> room_pb2.GetSessionStatsResponse: ...
255
267
  @property
256
268
  def publish_transcription(self) -> room_pb2.PublishTranscriptionResponse: ...
257
269
  @property
270
+ def publish_sip_dtmf(self) -> room_pb2.PublishSipDtmfResponse: ...
271
+ @property
258
272
  def create_video_track(self) -> track_pb2.CreateVideoTrackResponse:
259
273
  """Track"""
260
274
  @property
@@ -293,10 +307,12 @@ class FfiResponse(google.protobuf.message.Message):
293
307
  unpublish_track: room_pb2.UnpublishTrackResponse | None = ...,
294
308
  publish_data: room_pb2.PublishDataResponse | None = ...,
295
309
  set_subscribed: room_pb2.SetSubscribedResponse | None = ...,
296
- update_local_metadata: room_pb2.UpdateLocalMetadataResponse | None = ...,
297
- update_local_name: room_pb2.UpdateLocalNameResponse | None = ...,
310
+ set_local_metadata: room_pb2.SetLocalMetadataResponse | None = ...,
311
+ set_local_name: room_pb2.SetLocalNameResponse | None = ...,
312
+ set_local_attributes: room_pb2.SetLocalAttributesResponse | None = ...,
298
313
  get_session_stats: room_pb2.GetSessionStatsResponse | None = ...,
299
314
  publish_transcription: room_pb2.PublishTranscriptionResponse | None = ...,
315
+ publish_sip_dtmf: room_pb2.PublishSipDtmfResponse | None = ...,
300
316
  create_video_track: track_pb2.CreateVideoTrackResponse | None = ...,
301
317
  create_audio_track: track_pb2.CreateAudioTrackResponse | None = ...,
302
318
  get_stats: track_pb2.GetStatsResponse | None = ...,
@@ -311,9 +327,9 @@ class FfiResponse(google.protobuf.message.Message):
311
327
  remix_and_resample: audio_frame_pb2.RemixAndResampleResponse | None = ...,
312
328
  e2ee: e2ee_pb2.E2eeResponse | None = ...,
313
329
  ) -> None: ...
314
- def HasField(self, field_name: typing_extensions.Literal["capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "message", b"message", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "publish_data", b"publish_data", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "remix_and_resample", b"remix_and_resample", "set_subscribed", b"set_subscribed", "unpublish_track", b"unpublish_track", "update_local_metadata", b"update_local_metadata", "update_local_name", b"update_local_name", "video_convert", b"video_convert"]) -> builtins.bool: ...
315
- def ClearField(self, field_name: typing_extensions.Literal["capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "message", b"message", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "publish_data", b"publish_data", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "remix_and_resample", b"remix_and_resample", "set_subscribed", b"set_subscribed", "unpublish_track", b"unpublish_track", "update_local_metadata", b"update_local_metadata", "update_local_name", b"update_local_name", "video_convert", b"video_convert"]) -> None: ...
316
- def WhichOneof(self, oneof_group: typing_extensions.Literal["message", b"message"]) -> typing_extensions.Literal["dispose", "connect", "disconnect", "publish_track", "unpublish_track", "publish_data", "set_subscribed", "update_local_metadata", "update_local_name", "get_session_stats", "publish_transcription", "create_video_track", "create_audio_track", "get_stats", "new_video_stream", "new_video_source", "capture_video_frame", "video_convert", "new_audio_stream", "new_audio_source", "capture_audio_frame", "new_audio_resampler", "remix_and_resample", "e2ee"] | None: ...
330
+ def HasField(self, field_name: typing_extensions.Literal["capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "message", b"message", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "publish_data", b"publish_data", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "remix_and_resample", b"remix_and_resample", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_subscribed", b"set_subscribed", "unpublish_track", b"unpublish_track", "video_convert", b"video_convert"]) -> builtins.bool: ...
331
+ def ClearField(self, field_name: typing_extensions.Literal["capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "message", b"message", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "publish_data", b"publish_data", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "remix_and_resample", b"remix_and_resample", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_subscribed", b"set_subscribed", "unpublish_track", b"unpublish_track", "video_convert", b"video_convert"]) -> None: ...
332
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["message", b"message"]) -> typing_extensions.Literal["dispose", "connect", "disconnect", "publish_track", "unpublish_track", "publish_data", "set_subscribed", "set_local_metadata", "set_local_name", "set_local_attributes", "get_session_stats", "publish_transcription", "publish_sip_dtmf", "create_video_track", "create_audio_track", "get_stats", "new_video_stream", "new_video_source", "capture_video_frame", "video_convert", "new_audio_stream", "new_audio_source", "capture_audio_frame", "new_audio_resampler", "remix_and_resample", "e2ee"] | None: ...
317
333
 
318
334
  global___FfiResponse = FfiResponse
319
335
 
@@ -338,12 +354,14 @@ class FfiEvent(google.protobuf.message.Message):
338
354
  PUBLISH_DATA_FIELD_NUMBER: builtins.int
339
355
  PUBLISH_TRANSCRIPTION_FIELD_NUMBER: builtins.int
340
356
  CAPTURE_AUDIO_FRAME_FIELD_NUMBER: builtins.int
341
- UPDATE_LOCAL_METADATA_FIELD_NUMBER: builtins.int
342
- UPDATE_LOCAL_NAME_FIELD_NUMBER: builtins.int
357
+ SET_LOCAL_METADATA_FIELD_NUMBER: builtins.int
358
+ SET_LOCAL_NAME_FIELD_NUMBER: builtins.int
359
+ SET_LOCAL_ATTRIBUTES_FIELD_NUMBER: builtins.int
343
360
  GET_STATS_FIELD_NUMBER: builtins.int
344
361
  LOGS_FIELD_NUMBER: builtins.int
345
362
  GET_SESSION_STATS_FIELD_NUMBER: builtins.int
346
363
  PANIC_FIELD_NUMBER: builtins.int
364
+ PUBLISH_SIP_DTMF_FIELD_NUMBER: builtins.int
347
365
  @property
348
366
  def room_event(self) -> room_pb2.RoomEvent: ...
349
367
  @property
@@ -369,9 +387,11 @@ class FfiEvent(google.protobuf.message.Message):
369
387
  @property
370
388
  def capture_audio_frame(self) -> audio_frame_pb2.CaptureAudioFrameCallback: ...
371
389
  @property
372
- def update_local_metadata(self) -> room_pb2.UpdateLocalMetadataCallback: ...
390
+ def set_local_metadata(self) -> room_pb2.SetLocalMetadataCallback: ...
391
+ @property
392
+ def set_local_name(self) -> room_pb2.SetLocalNameCallback: ...
373
393
  @property
374
- def update_local_name(self) -> room_pb2.UpdateLocalNameCallback: ...
394
+ def set_local_attributes(self) -> room_pb2.SetLocalAttributesCallback: ...
375
395
  @property
376
396
  def get_stats(self) -> track_pb2.GetStatsCallback: ...
377
397
  @property
@@ -380,6 +400,8 @@ class FfiEvent(google.protobuf.message.Message):
380
400
  def get_session_stats(self) -> room_pb2.GetSessionStatsCallback: ...
381
401
  @property
382
402
  def panic(self) -> global___Panic: ...
403
+ @property
404
+ def publish_sip_dtmf(self) -> room_pb2.PublishSipDtmfCallback: ...
383
405
  def __init__(
384
406
  self,
385
407
  *,
@@ -395,16 +417,18 @@ class FfiEvent(google.protobuf.message.Message):
395
417
  publish_data: room_pb2.PublishDataCallback | None = ...,
396
418
  publish_transcription: room_pb2.PublishTranscriptionCallback | None = ...,
397
419
  capture_audio_frame: audio_frame_pb2.CaptureAudioFrameCallback | None = ...,
398
- update_local_metadata: room_pb2.UpdateLocalMetadataCallback | None = ...,
399
- update_local_name: room_pb2.UpdateLocalNameCallback | None = ...,
420
+ set_local_metadata: room_pb2.SetLocalMetadataCallback | None = ...,
421
+ set_local_name: room_pb2.SetLocalNameCallback | None = ...,
422
+ set_local_attributes: room_pb2.SetLocalAttributesCallback | None = ...,
400
423
  get_stats: track_pb2.GetStatsCallback | None = ...,
401
424
  logs: global___LogBatch | None = ...,
402
425
  get_session_stats: room_pb2.GetSessionStatsCallback | None = ...,
403
426
  panic: global___Panic | None = ...,
427
+ publish_sip_dtmf: room_pb2.PublishSipDtmfCallback | None = ...,
404
428
  ) -> None: ...
405
- def HasField(self, field_name: typing_extensions.Literal["audio_stream_event", b"audio_stream_event", "capture_audio_frame", b"capture_audio_frame", "connect", b"connect", "disconnect", b"disconnect", "dispose", b"dispose", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "logs", b"logs", "message", b"message", "panic", b"panic", "publish_data", b"publish_data", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "room_event", b"room_event", "track_event", b"track_event", "unpublish_track", b"unpublish_track", "update_local_metadata", b"update_local_metadata", "update_local_name", b"update_local_name", "video_stream_event", b"video_stream_event"]) -> builtins.bool: ...
406
- def ClearField(self, field_name: typing_extensions.Literal["audio_stream_event", b"audio_stream_event", "capture_audio_frame", b"capture_audio_frame", "connect", b"connect", "disconnect", b"disconnect", "dispose", b"dispose", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "logs", b"logs", "message", b"message", "panic", b"panic", "publish_data", b"publish_data", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "room_event", b"room_event", "track_event", b"track_event", "unpublish_track", b"unpublish_track", "update_local_metadata", b"update_local_metadata", "update_local_name", b"update_local_name", "video_stream_event", b"video_stream_event"]) -> None: ...
407
- def WhichOneof(self, oneof_group: typing_extensions.Literal["message", b"message"]) -> typing_extensions.Literal["room_event", "track_event", "video_stream_event", "audio_stream_event", "connect", "disconnect", "dispose", "publish_track", "unpublish_track", "publish_data", "publish_transcription", "capture_audio_frame", "update_local_metadata", "update_local_name", "get_stats", "logs", "get_session_stats", "panic"] | None: ...
429
+ def HasField(self, field_name: typing_extensions.Literal["audio_stream_event", b"audio_stream_event", "capture_audio_frame", b"capture_audio_frame", "connect", b"connect", "disconnect", b"disconnect", "dispose", b"dispose", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "logs", b"logs", "message", b"message", "panic", b"panic", "publish_data", b"publish_data", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "room_event", b"room_event", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "track_event", b"track_event", "unpublish_track", b"unpublish_track", "video_stream_event", b"video_stream_event"]) -> builtins.bool: ...
430
+ def ClearField(self, field_name: typing_extensions.Literal["audio_stream_event", b"audio_stream_event", "capture_audio_frame", b"capture_audio_frame", "connect", b"connect", "disconnect", b"disconnect", "dispose", b"dispose", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "logs", b"logs", "message", b"message", "panic", b"panic", "publish_data", b"publish_data", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "room_event", b"room_event", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "track_event", b"track_event", "unpublish_track", b"unpublish_track", "video_stream_event", b"video_stream_event"]) -> None: ...
431
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["message", b"message"]) -> typing_extensions.Literal["room_event", "track_event", "video_stream_event", "audio_stream_event", "connect", "disconnect", "dispose", "publish_track", "unpublish_track", "publish_data", "publish_transcription", "capture_audio_frame", "set_local_metadata", "set_local_name", "set_local_attributes", "get_stats", "logs", "get_session_stats", "panic", "publish_sip_dtmf"] | None: ...
408
432
 
409
433
  global___FfiEvent = FfiEvent
410
434
 
@@ -0,0 +1,34 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: participant.proto
4
+ # Protobuf Python Version: 4.25.3
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from . import handle_pb2 as handle__pb2
16
+
17
+
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11participant.proto\x12\rlivekit.proto\x1a\x0chandle.proto\"\xc7\x01\n\x0fParticipantInfo\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08identity\x18\x03 \x01(\t\x12\x10\n\x08metadata\x18\x04 \x01(\t\x12\x42\n\nattributes\x18\x05 \x03(\x0b\x32..livekit.proto.ParticipantInfo.AttributesEntry\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"o\n\x10OwnedParticipant\x12-\n\x06handle\x18\x01 \x01(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12,\n\x04info\x18\x02 \x01(\x0b\x32\x1e.livekit.proto.ParticipantInfoB\x10\xaa\x02\rLiveKit.Protob\x06proto3')
19
+
20
+ _globals = globals()
21
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
22
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'participant_pb2', _globals)
23
+ if _descriptor._USE_C_DESCRIPTORS == False:
24
+ _globals['DESCRIPTOR']._options = None
25
+ _globals['DESCRIPTOR']._serialized_options = b'\252\002\rLiveKit.Proto'
26
+ _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._options = None
27
+ _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_options = b'8\001'
28
+ _globals['_PARTICIPANTINFO']._serialized_start=51
29
+ _globals['_PARTICIPANTINFO']._serialized_end=250
30
+ _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_start=201
31
+ _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_end=250
32
+ _globals['_OWNEDPARTICIPANT']._serialized_start=252
33
+ _globals['_OWNEDPARTICIPANT']._serialized_end=363
34
+ # @@protoc_insertion_point(module_scope)
@@ -16,7 +16,9 @@ See the License for the specific language governing permissions and
16
16
  limitations under the License.
17
17
  """
18
18
  import builtins
19
+ import collections.abc
19
20
  import google.protobuf.descriptor
21
+ import google.protobuf.internal.containers
20
22
  import google.protobuf.message
21
23
  from . import handle_pb2
22
24
  import sys
@@ -32,14 +34,33 @@ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
32
34
  class ParticipantInfo(google.protobuf.message.Message):
33
35
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
34
36
 
37
+ @typing_extensions.final
38
+ class AttributesEntry(google.protobuf.message.Message):
39
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
40
+
41
+ KEY_FIELD_NUMBER: builtins.int
42
+ VALUE_FIELD_NUMBER: builtins.int
43
+ key: builtins.str
44
+ value: builtins.str
45
+ def __init__(
46
+ self,
47
+ *,
48
+ key: builtins.str = ...,
49
+ value: builtins.str = ...,
50
+ ) -> None: ...
51
+ def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ...
52
+
35
53
  SID_FIELD_NUMBER: builtins.int
36
54
  NAME_FIELD_NUMBER: builtins.int
37
55
  IDENTITY_FIELD_NUMBER: builtins.int
38
56
  METADATA_FIELD_NUMBER: builtins.int
57
+ ATTRIBUTES_FIELD_NUMBER: builtins.int
39
58
  sid: builtins.str
40
59
  name: builtins.str
41
60
  identity: builtins.str
42
61
  metadata: builtins.str
62
+ @property
63
+ def attributes(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: ...
43
64
  def __init__(
44
65
  self,
45
66
  *,
@@ -47,8 +68,9 @@ class ParticipantInfo(google.protobuf.message.Message):
47
68
  name: builtins.str = ...,
48
69
  identity: builtins.str = ...,
49
70
  metadata: builtins.str = ...,
71
+ attributes: collections.abc.Mapping[builtins.str, builtins.str] | None = ...,
50
72
  ) -> None: ...
51
- def ClearField(self, field_name: typing_extensions.Literal["identity", b"identity", "metadata", b"metadata", "name", b"name", "sid", b"sid"]) -> None: ...
73
+ def ClearField(self, field_name: typing_extensions.Literal["attributes", b"attributes", "identity", b"identity", "metadata", b"metadata", "name", b"name", "sid", b"sid"]) -> None: ...
52
74
 
53
75
  global___ParticipantInfo = ParticipantInfo
54
76