diff --git a/examples/data_tracks/publisher.py b/examples/data_tracks/publisher.py new file mode 100644 index 00000000..d3185ccd --- /dev/null +++ b/examples/data_tracks/publisher.py @@ -0,0 +1,70 @@ +import os +import logging +import asyncio +import time +from signal import SIGINT, SIGTERM +from livekit import rtc + +# Set the following environment variables with your own values +TOKEN = os.environ.get("LIVEKIT_TOKEN") +URL = os.environ.get("LIVEKIT_URL") + + +async def read_sensor() -> bytes: + # Dynamically read some sensor data... + return bytes([0xFA] * 256) + + +async def push_frames(track: rtc.LocalDataTrack): + while True: + logging.info("Pushing frame") + data = await read_sensor() + try: + frame = rtc.DataTrackFrame(payload=data, user_timestamp=int(time.time() * 1000)) + track.try_push(frame) + except rtc.PushFrameError as e: + logging.error("Failed to push frame: %s", e) + await asyncio.sleep(0.5) + + +async def main(room: rtc.Room): + logging.basicConfig(level=logging.INFO) + logger = logging.getLogger(__name__) + + await room.connect(URL, TOKEN) + logger.info("connected to room %s", room.name) + + track = await room.local_participant.publish_data_track(name="my_sensor_data") + await push_frames(track) + + +if __name__ == "__main__": + logging.basicConfig( + level=logging.INFO, + handlers=[ + logging.FileHandler("publisher.log"), + logging.StreamHandler(), + ], + ) + + loop = asyncio.get_event_loop() + room = rtc.Room(loop=loop) + + main_task = asyncio.ensure_future(main(room)) + + async def cleanup(): + main_task.cancel() + try: + await main_task + except asyncio.CancelledError: + pass + await room.disconnect() + loop.stop() + + for signal in [SIGINT, SIGTERM]: + loop.add_signal_handler(signal, lambda: asyncio.ensure_future(cleanup())) + + try: + loop.run_forever() + finally: + loop.close() diff --git a/examples/data_tracks/subscriber.py b/examples/data_tracks/subscriber.py new file mode 100644 index 00000000..bc5e988f --- /dev/null +++ b/examples/data_tracks/subscriber.py @@ -0,0 +1,69 @@ +import os +import logging +import asyncio +import time +from signal import SIGINT, SIGTERM +from livekit import rtc + +# Set the following environment variables with your own values +TOKEN = os.environ.get("LIVEKIT_TOKEN") +URL = os.environ.get("LIVEKIT_URL") + + +async def subscribe(track: rtc.RemoteDataTrack): + logging.info( + "Subscribing to '%s' published by '%s'", + track.info.name, + track.publisher_identity, + ) + try: + async for frame in track.subscribe(): + logging.info("Received frame (%d bytes)", len(frame.payload)) + + if frame.user_timestamp is not None: + latency = (int(time.time() * 1000) - frame.user_timestamp) / 1000.0 + logging.info("Latency: %.3f s", latency) + except rtc.SubscribeDataTrackError as e: + logging.error("Failed to subscribe to '%s': %s", track.info.name, e.message) + + +async def main(room: rtc.Room): + logging.basicConfig(level=logging.INFO) + logger = logging.getLogger(__name__) + + active_tasks = [] + + @room.on("data_track_published") + def on_data_track_published(track: rtc.RemoteDataTrack): + task = asyncio.create_task(subscribe(track)) + active_tasks.append(task) + task.add_done_callback(lambda _: active_tasks.remove(task)) + + await room.connect(URL, TOKEN) + logger.info("connected to room %s", room.name) + + +if __name__ == "__main__": + logging.basicConfig( + level=logging.INFO, + handlers=[ + logging.FileHandler("subscriber.log"), + logging.StreamHandler(), + ], + ) + + loop = asyncio.get_event_loop() + room = rtc.Room(loop=loop) + + async def cleanup(): + await room.disconnect() + loop.stop() + + asyncio.ensure_future(main(room)) + for signal in [SIGINT, SIGTERM]: + loop.add_signal_handler(signal, lambda: asyncio.ensure_future(cleanup())) + + try: + loop.run_forever() + finally: + loop.close() diff --git a/livekit-rtc/generate_proto.sh b/livekit-rtc/generate_proto.sh index 02f8cddb..76d8bb8a 100755 --- a/livekit-rtc/generate_proto.sh +++ b/livekit-rtc/generate_proto.sh @@ -31,6 +31,7 @@ protoc \ $FFI_PROTOCOL/participant.proto \ $FFI_PROTOCOL/room.proto \ $FFI_PROTOCOL/track.proto \ + $FFI_PROTOCOL/data_track.proto \ $FFI_PROTOCOL/video_frame.proto \ $FFI_PROTOCOL/e2ee.proto \ $FFI_PROTOCOL/stats.proto \ @@ -41,5 +42,5 @@ protoc \ touch -a "$FFI_OUT_PYTHON/__init__.py" for f in "$FFI_OUT_PYTHON"/*.py "$FFI_OUT_PYTHON"/*.pyi; do - perl -i -pe 's|^(import (audio_frame_pb2\|ffi_pb2\|handle_pb2\|participant_pb2\|room_pb2\|track_pb2\|video_frame_pb2\|e2ee_pb2\|stats_pb2\|rpc_pb2\|track_publication_pb2\|data_stream_pb2))|from . $1|g' "$f" + perl -i -pe 's|^(import (audio_frame_pb2\|ffi_pb2\|handle_pb2\|participant_pb2\|room_pb2\|track_pb2\|video_frame_pb2\|e2ee_pb2\|stats_pb2\|rpc_pb2\|track_publication_pb2\|data_stream_pb2\|data_track_pb2))|from . $1|g' "$f" done diff --git a/livekit-rtc/livekit/rtc/__init__.py b/livekit-rtc/livekit/rtc/__init__.py index f641bfd9..39b23feb 100644 --- a/livekit-rtc/livekit/rtc/__init__.py +++ b/livekit-rtc/livekit/rtc/__init__.py @@ -108,6 +108,15 @@ ByteStreamWriter, ByteStreamReader, ) +from .data_track import ( + LocalDataTrack, + RemoteDataTrack, + DataTrackStream, + DataTrackFrame, + DataTrackInfo, + PushFrameError, + SubscribeDataTrackError, +) from .frame_processor import FrameProcessor __all__ = [ @@ -186,6 +195,13 @@ "ByteStreamWriter", "AudioProcessingModule", "FrameProcessor", + "LocalDataTrack", + "RemoteDataTrack", + "DataTrackStream", + "DataTrackFrame", + "DataTrackInfo", + "PushFrameError", + "SubscribeDataTrackError", "__version__", ] diff --git a/livekit-rtc/livekit/rtc/_proto/audio_frame_pb2.pyi b/livekit-rtc/livekit/rtc/_proto/audio_frame_pb2.pyi index 976027a5..cb73e1ea 100644 --- a/livekit-rtc/livekit/rtc/_proto/audio_frame_pb2.pyi +++ b/livekit-rtc/livekit/rtc/_proto/audio_frame_pb2.pyi @@ -167,6 +167,11 @@ class NewAudioStreamRequest(google.protobuf.message.Message): of decoded PCM audio on the receive path. Omit this field to use the default bounded queue size of 10 frames. Set it to 0 to request unbounded buffering. + + If your application consumes both audio and video, keep the queue sizing + strategy coordinated across both streams. Using a much larger queue, or + unbounded buffering, for only one of them can increase end-to-end latency + for that stream and cause audio/video drift. """ def __init__( self, @@ -228,6 +233,11 @@ class AudioStreamFromParticipantRequest(google.protobuf.message.Message): of decoded PCM audio on the receive path. Omit this field to use the default bounded queue size of 10 frames. Set it to 0 to request unbounded buffering. + + If your application consumes both audio and video, keep the queue sizing + strategy coordinated across both streams. Using a much larger queue, or + unbounded buffering, for only one of them can increase end-to-end latency + for that stream and cause audio/video drift. """ def __init__( self, diff --git a/livekit-rtc/livekit/rtc/_proto/data_track_pb2.py b/livekit-rtc/livekit/rtc/_proto/data_track_pb2.py new file mode 100644 index 00000000..f59f0bf7 --- /dev/null +++ b/livekit-rtc/livekit/rtc/_proto/data_track_pb2.py @@ -0,0 +1,92 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: data_track.proto +# Protobuf Python Version: 4.25.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import handle_pb2 as handle__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x64\x61ta_track.proto\x12\rlivekit.proto\x1a\x0chandle.proto\"=\n\rDataTrackInfo\x12\x0c\n\x04name\x18\x01 \x02(\t\x12\x0b\n\x03sid\x18\x02 \x02(\t\x12\x11\n\tuses_e2ee\x18\x03 \x02(\x08\"9\n\x0e\x44\x61taTrackFrame\x12\x0f\n\x07payload\x18\x01 \x02(\x0c\x12\x16\n\x0euser_timestamp\x18\x02 \x01(\x04\"R\n\x0e\x44\x61taTrackError\x12/\n\x04\x63ode\x18\x01 \x02(\x0e\x32!.livekit.proto.DataTrackErrorCode\x12\x0f\n\x07message\x18\x02 \x02(\t\"`\n\x15PublishDataTrackError\x12\x36\n\x04\x63ode\x18\x01 \x02(\x0e\x32(.livekit.proto.PublishDataTrackErrorCode\x12\x0f\n\x07message\x18\x02 \x02(\t\"j\n\x1aLocalDataTrackTryPushError\x12;\n\x04\x63ode\x18\x01 \x02(\x0e\x32-.livekit.proto.LocalDataTrackTryPushErrorCode\x12\x0f\n\x07message\x18\x02 \x02(\t\"d\n\x17SubscribeDataTrackError\x12\x38\n\x04\x63ode\x18\x01 \x02(\x0e\x32*.livekit.proto.SubscribeDataTrackErrorCode\x12\x0f\n\x07message\x18\x02 \x02(\t\" \n\x10\x44\x61taTrackOptions\x12\x0c\n\x04name\x18\x01 \x02(\t\"\x87\x01\n\x17PublishDataTrackRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x30\n\x07options\x18\x02 \x02(\x0b\x32\x1f.livekit.proto.DataTrackOptions\x12\x18\n\x10request_async_id\x18\x03 \x01(\x04\",\n\x18PublishDataTrackResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"\xa2\x01\n\x18PublishDataTrackCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\x33\n\x05track\x18\x02 \x01(\x0b\x32\".livekit.proto.OwnedLocalDataTrackH\x00\x12\x35\n\x05\x65rror\x18\x03 \x01(\x0b\x32$.livekit.proto.PublishDataTrackErrorH\x00\x42\x08\n\x06result\"p\n\x13OwnedLocalDataTrack\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12*\n\x04info\x18\x02 \x02(\x0b\x32\x1c.livekit.proto.DataTrackInfo\"b\n\x1cLocalDataTrackTryPushRequest\x12\x14\n\x0ctrack_handle\x18\x01 \x02(\x04\x12,\n\x05\x66rame\x18\x02 \x02(\x0b\x32\x1d.livekit.proto.DataTrackFrame\"Y\n\x1dLocalDataTrackTryPushResponse\x12\x38\n\x05\x65rror\x18\x02 \x01(\x0b\x32).livekit.proto.LocalDataTrackTryPushError\"8\n LocalDataTrackIsPublishedRequest\x12\x14\n\x0ctrack_handle\x18\x01 \x02(\x04\"9\n!LocalDataTrackIsPublishedResponse\x12\x14\n\x0cis_published\x18\x01 \x02(\x08\"6\n\x1eLocalDataTrackUnpublishRequest\x12\x14\n\x0ctrack_handle\x18\x01 \x02(\x04\"!\n\x1fLocalDataTrackUnpublishResponse\"\x8d\x01\n\x14OwnedRemoteDataTrack\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12*\n\x04info\x18\x02 \x02(\x0b\x32\x1c.livekit.proto.DataTrackInfo\x12\x1a\n\x12publisher_identity\x18\x03 \x02(\t\"E\n\x14OwnedDataTrackStream\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\"0\n\x19\x44\x61taTrackSubscribeOptions\x12\x13\n\x0b\x62uffer_size\x18\x01 \x01(\r\"9\n!RemoteDataTrackIsPublishedRequest\x12\x14\n\x0ctrack_handle\x18\x01 \x02(\x04\":\n\"RemoteDataTrackIsPublishedResponse\x12\x14\n\x0cis_published\x18\x01 \x02(\x08\"l\n\x19SubscribeDataTrackRequest\x12\x14\n\x0ctrack_handle\x18\x01 \x02(\x04\x12\x39\n\x07options\x18\x02 \x02(\x0b\x32(.livekit.proto.DataTrackSubscribeOptions\"Q\n\x1aSubscribeDataTrackResponse\x12\x33\n\x06stream\x18\x01 \x02(\x0b\x32#.livekit.proto.OwnedDataTrackStream\"3\n\x1a\x44\x61taTrackStreamReadRequest\x12\x15\n\rstream_handle\x18\x01 \x02(\x04\"\x1d\n\x1b\x44\x61taTrackStreamReadResponse\"\xb0\x01\n\x14\x44\x61taTrackStreamEvent\x12\x15\n\rstream_handle\x18\x01 \x02(\x04\x12\x45\n\x0e\x66rame_received\x18\x02 \x01(\x0b\x32+.livekit.proto.DataTrackStreamFrameReceivedH\x00\x12\x30\n\x03\x65os\x18\x03 \x01(\x0b\x32!.livekit.proto.DataTrackStreamEOSH\x00\x42\x08\n\x06\x64\x65tail\"L\n\x1c\x44\x61taTrackStreamFrameReceived\x12,\n\x05\x66rame\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.DataTrackFrame\"#\n\x12\x44\x61taTrackStreamEOS\x12\r\n\x05\x65rror\x18\x01 \x01(\t*\x87\x03\n\x12\x44\x61taTrackErrorCode\x12!\n\x1d\x44\x41TA_TRACK_ERROR_CODE_UNKNOWN\x10\x00\x12(\n$DATA_TRACK_ERROR_CODE_INVALID_HANDLE\x10\x01\x12.\n*DATA_TRACK_ERROR_CODE_DUPLICATE_TRACK_NAME\x10\x02\x12+\n\'DATA_TRACK_ERROR_CODE_TRACK_UNPUBLISHED\x10\x03\x12%\n!DATA_TRACK_ERROR_CODE_BUFFER_FULL\x10\x04\x12-\n)DATA_TRACK_ERROR_CODE_SUBSCRIPTION_CLOSED\x10\x05\x12#\n\x1f\x44\x41TA_TRACK_ERROR_CODE_CANCELLED\x10\x06\x12(\n$DATA_TRACK_ERROR_CODE_PROTOCOL_ERROR\x10\x07\x12\"\n\x1e\x44\x41TA_TRACK_ERROR_CODE_INTERNAL\x10\x08*\xf3\x03\n\x19PublishDataTrackErrorCode\x12)\n%PUBLISH_DATA_TRACK_ERROR_CODE_UNKNOWN\x10\x00\x12\x30\n,PUBLISH_DATA_TRACK_ERROR_CODE_INVALID_HANDLE\x10\x01\x12\x30\n,PUBLISH_DATA_TRACK_ERROR_CODE_DUPLICATE_NAME\x10\x02\x12)\n%PUBLISH_DATA_TRACK_ERROR_CODE_TIMEOUT\x10\x03\x12.\n*PUBLISH_DATA_TRACK_ERROR_CODE_DISCONNECTED\x10\x04\x12-\n)PUBLISH_DATA_TRACK_ERROR_CODE_NOT_ALLOWED\x10\x05\x12.\n*PUBLISH_DATA_TRACK_ERROR_CODE_INVALID_NAME\x10\x06\x12/\n+PUBLISH_DATA_TRACK_ERROR_CODE_LIMIT_REACHED\x10\x07\x12\x30\n,PUBLISH_DATA_TRACK_ERROR_CODE_PROTOCOL_ERROR\x10\x08\x12*\n&PUBLISH_DATA_TRACK_ERROR_CODE_INTERNAL\x10\t*\xaf\x02\n\x1eLocalDataTrackTryPushErrorCode\x12\x30\n,LOCAL_DATA_TRACK_TRY_PUSH_ERROR_CODE_UNKNOWN\x10\x00\x12\x37\n3LOCAL_DATA_TRACK_TRY_PUSH_ERROR_CODE_INVALID_HANDLE\x10\x01\x12:\n6LOCAL_DATA_TRACK_TRY_PUSH_ERROR_CODE_TRACK_UNPUBLISHED\x10\x02\x12\x33\n/LOCAL_DATA_TRACK_TRY_PUSH_ERROR_CODE_QUEUE_FULL\x10\x03\x12\x31\n-LOCAL_DATA_TRACK_TRY_PUSH_ERROR_CODE_INTERNAL\x10\x04*\xf0\x02\n\x1bSubscribeDataTrackErrorCode\x12+\n\'SUBSCRIBE_DATA_TRACK_ERROR_CODE_UNKNOWN\x10\x00\x12\x32\n.SUBSCRIBE_DATA_TRACK_ERROR_CODE_INVALID_HANDLE\x10\x01\x12/\n+SUBSCRIBE_DATA_TRACK_ERROR_CODE_UNPUBLISHED\x10\x02\x12+\n\'SUBSCRIBE_DATA_TRACK_ERROR_CODE_TIMEOUT\x10\x03\x12\x30\n,SUBSCRIBE_DATA_TRACK_ERROR_CODE_DISCONNECTED\x10\x04\x12\x32\n.SUBSCRIBE_DATA_TRACK_ERROR_CODE_PROTOCOL_ERROR\x10\x05\x12,\n(SUBSCRIBE_DATA_TRACK_ERROR_CODE_INTERNAL\x10\x06\x42\x10\xaa\x02\rLiveKit.Proto') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'data_track_pb2', _globals) +if _descriptor._USE_C_DESCRIPTORS == False: + _globals['DESCRIPTOR']._options = None + _globals['DESCRIPTOR']._serialized_options = b'\252\002\rLiveKit.Proto' + _globals['_DATATRACKERRORCODE']._serialized_start=2415 + _globals['_DATATRACKERRORCODE']._serialized_end=2806 + _globals['_PUBLISHDATATRACKERRORCODE']._serialized_start=2809 + _globals['_PUBLISHDATATRACKERRORCODE']._serialized_end=3308 + _globals['_LOCALDATATRACKTRYPUSHERRORCODE']._serialized_start=3311 + _globals['_LOCALDATATRACKTRYPUSHERRORCODE']._serialized_end=3614 + _globals['_SUBSCRIBEDATATRACKERRORCODE']._serialized_start=3617 + _globals['_SUBSCRIBEDATATRACKERRORCODE']._serialized_end=3985 + _globals['_DATATRACKINFO']._serialized_start=49 + _globals['_DATATRACKINFO']._serialized_end=110 + _globals['_DATATRACKFRAME']._serialized_start=112 + _globals['_DATATRACKFRAME']._serialized_end=169 + _globals['_DATATRACKERROR']._serialized_start=171 + _globals['_DATATRACKERROR']._serialized_end=253 + _globals['_PUBLISHDATATRACKERROR']._serialized_start=255 + _globals['_PUBLISHDATATRACKERROR']._serialized_end=351 + _globals['_LOCALDATATRACKTRYPUSHERROR']._serialized_start=353 + _globals['_LOCALDATATRACKTRYPUSHERROR']._serialized_end=459 + _globals['_SUBSCRIBEDATATRACKERROR']._serialized_start=461 + _globals['_SUBSCRIBEDATATRACKERROR']._serialized_end=561 + _globals['_DATATRACKOPTIONS']._serialized_start=563 + _globals['_DATATRACKOPTIONS']._serialized_end=595 + _globals['_PUBLISHDATATRACKREQUEST']._serialized_start=598 + _globals['_PUBLISHDATATRACKREQUEST']._serialized_end=733 + _globals['_PUBLISHDATATRACKRESPONSE']._serialized_start=735 + _globals['_PUBLISHDATATRACKRESPONSE']._serialized_end=779 + _globals['_PUBLISHDATATRACKCALLBACK']._serialized_start=782 + _globals['_PUBLISHDATATRACKCALLBACK']._serialized_end=944 + _globals['_OWNEDLOCALDATATRACK']._serialized_start=946 + _globals['_OWNEDLOCALDATATRACK']._serialized_end=1058 + _globals['_LOCALDATATRACKTRYPUSHREQUEST']._serialized_start=1060 + _globals['_LOCALDATATRACKTRYPUSHREQUEST']._serialized_end=1158 + _globals['_LOCALDATATRACKTRYPUSHRESPONSE']._serialized_start=1160 + _globals['_LOCALDATATRACKTRYPUSHRESPONSE']._serialized_end=1249 + _globals['_LOCALDATATRACKISPUBLISHEDREQUEST']._serialized_start=1251 + _globals['_LOCALDATATRACKISPUBLISHEDREQUEST']._serialized_end=1307 + _globals['_LOCALDATATRACKISPUBLISHEDRESPONSE']._serialized_start=1309 + _globals['_LOCALDATATRACKISPUBLISHEDRESPONSE']._serialized_end=1366 + _globals['_LOCALDATATRACKUNPUBLISHREQUEST']._serialized_start=1368 + _globals['_LOCALDATATRACKUNPUBLISHREQUEST']._serialized_end=1422 + _globals['_LOCALDATATRACKUNPUBLISHRESPONSE']._serialized_start=1424 + _globals['_LOCALDATATRACKUNPUBLISHRESPONSE']._serialized_end=1457 + _globals['_OWNEDREMOTEDATATRACK']._serialized_start=1460 + _globals['_OWNEDREMOTEDATATRACK']._serialized_end=1601 + _globals['_OWNEDDATATRACKSTREAM']._serialized_start=1603 + _globals['_OWNEDDATATRACKSTREAM']._serialized_end=1672 + _globals['_DATATRACKSUBSCRIBEOPTIONS']._serialized_start=1674 + _globals['_DATATRACKSUBSCRIBEOPTIONS']._serialized_end=1722 + _globals['_REMOTEDATATRACKISPUBLISHEDREQUEST']._serialized_start=1724 + _globals['_REMOTEDATATRACKISPUBLISHEDREQUEST']._serialized_end=1781 + _globals['_REMOTEDATATRACKISPUBLISHEDRESPONSE']._serialized_start=1783 + _globals['_REMOTEDATATRACKISPUBLISHEDRESPONSE']._serialized_end=1841 + _globals['_SUBSCRIBEDATATRACKREQUEST']._serialized_start=1843 + _globals['_SUBSCRIBEDATATRACKREQUEST']._serialized_end=1951 + _globals['_SUBSCRIBEDATATRACKRESPONSE']._serialized_start=1953 + _globals['_SUBSCRIBEDATATRACKRESPONSE']._serialized_end=2034 + _globals['_DATATRACKSTREAMREADREQUEST']._serialized_start=2036 + _globals['_DATATRACKSTREAMREADREQUEST']._serialized_end=2087 + _globals['_DATATRACKSTREAMREADRESPONSE']._serialized_start=2089 + _globals['_DATATRACKSTREAMREADRESPONSE']._serialized_end=2118 + _globals['_DATATRACKSTREAMEVENT']._serialized_start=2121 + _globals['_DATATRACKSTREAMEVENT']._serialized_end=2297 + _globals['_DATATRACKSTREAMFRAMERECEIVED']._serialized_start=2299 + _globals['_DATATRACKSTREAMFRAMERECEIVED']._serialized_end=2375 + _globals['_DATATRACKSTREAMEOS']._serialized_start=2377 + _globals['_DATATRACKSTREAMEOS']._serialized_end=2412 +# @@protoc_insertion_point(module_scope) diff --git a/livekit-rtc/livekit/rtc/_proto/data_track_pb2.pyi b/livekit-rtc/livekit/rtc/_proto/data_track_pb2.pyi new file mode 100644 index 00000000..a12996c2 --- /dev/null +++ b/livekit-rtc/livekit/rtc/_proto/data_track_pb2.pyi @@ -0,0 +1,719 @@ +""" +@generated by mypy-protobuf. Do not edit manually! +isort:skip_file +Copyright 2026 LiveKit, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +""" + +import builtins +import google.protobuf.descriptor +import google.protobuf.internal.enum_type_wrapper +import google.protobuf.message +from . import handle_pb2 +import sys +import typing + +if sys.version_info >= (3, 10): + import typing as typing_extensions +else: + import typing_extensions + +DESCRIPTOR: google.protobuf.descriptor.FileDescriptor + +class _DataTrackErrorCode: + ValueType = typing.NewType("ValueType", builtins.int) + V: typing_extensions.TypeAlias = ValueType + +class _DataTrackErrorCodeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_DataTrackErrorCode.ValueType], builtins.type): + DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor + DATA_TRACK_ERROR_CODE_UNKNOWN: _DataTrackErrorCode.ValueType # 0 + DATA_TRACK_ERROR_CODE_INVALID_HANDLE: _DataTrackErrorCode.ValueType # 1 + DATA_TRACK_ERROR_CODE_DUPLICATE_TRACK_NAME: _DataTrackErrorCode.ValueType # 2 + DATA_TRACK_ERROR_CODE_TRACK_UNPUBLISHED: _DataTrackErrorCode.ValueType # 3 + DATA_TRACK_ERROR_CODE_BUFFER_FULL: _DataTrackErrorCode.ValueType # 4 + DATA_TRACK_ERROR_CODE_SUBSCRIPTION_CLOSED: _DataTrackErrorCode.ValueType # 5 + DATA_TRACK_ERROR_CODE_CANCELLED: _DataTrackErrorCode.ValueType # 6 + DATA_TRACK_ERROR_CODE_PROTOCOL_ERROR: _DataTrackErrorCode.ValueType # 7 + DATA_TRACK_ERROR_CODE_INTERNAL: _DataTrackErrorCode.ValueType # 8 + +class DataTrackErrorCode(_DataTrackErrorCode, metaclass=_DataTrackErrorCodeEnumTypeWrapper): ... + +DATA_TRACK_ERROR_CODE_UNKNOWN: DataTrackErrorCode.ValueType # 0 +DATA_TRACK_ERROR_CODE_INVALID_HANDLE: DataTrackErrorCode.ValueType # 1 +DATA_TRACK_ERROR_CODE_DUPLICATE_TRACK_NAME: DataTrackErrorCode.ValueType # 2 +DATA_TRACK_ERROR_CODE_TRACK_UNPUBLISHED: DataTrackErrorCode.ValueType # 3 +DATA_TRACK_ERROR_CODE_BUFFER_FULL: DataTrackErrorCode.ValueType # 4 +DATA_TRACK_ERROR_CODE_SUBSCRIPTION_CLOSED: DataTrackErrorCode.ValueType # 5 +DATA_TRACK_ERROR_CODE_CANCELLED: DataTrackErrorCode.ValueType # 6 +DATA_TRACK_ERROR_CODE_PROTOCOL_ERROR: DataTrackErrorCode.ValueType # 7 +DATA_TRACK_ERROR_CODE_INTERNAL: DataTrackErrorCode.ValueType # 8 +global___DataTrackErrorCode = DataTrackErrorCode + +class _PublishDataTrackErrorCode: + ValueType = typing.NewType("ValueType", builtins.int) + V: typing_extensions.TypeAlias = ValueType + +class _PublishDataTrackErrorCodeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_PublishDataTrackErrorCode.ValueType], builtins.type): + DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor + PUBLISH_DATA_TRACK_ERROR_CODE_UNKNOWN: _PublishDataTrackErrorCode.ValueType # 0 + PUBLISH_DATA_TRACK_ERROR_CODE_INVALID_HANDLE: _PublishDataTrackErrorCode.ValueType # 1 + PUBLISH_DATA_TRACK_ERROR_CODE_DUPLICATE_NAME: _PublishDataTrackErrorCode.ValueType # 2 + PUBLISH_DATA_TRACK_ERROR_CODE_TIMEOUT: _PublishDataTrackErrorCode.ValueType # 3 + PUBLISH_DATA_TRACK_ERROR_CODE_DISCONNECTED: _PublishDataTrackErrorCode.ValueType # 4 + PUBLISH_DATA_TRACK_ERROR_CODE_NOT_ALLOWED: _PublishDataTrackErrorCode.ValueType # 5 + PUBLISH_DATA_TRACK_ERROR_CODE_INVALID_NAME: _PublishDataTrackErrorCode.ValueType # 6 + PUBLISH_DATA_TRACK_ERROR_CODE_LIMIT_REACHED: _PublishDataTrackErrorCode.ValueType # 7 + PUBLISH_DATA_TRACK_ERROR_CODE_PROTOCOL_ERROR: _PublishDataTrackErrorCode.ValueType # 8 + PUBLISH_DATA_TRACK_ERROR_CODE_INTERNAL: _PublishDataTrackErrorCode.ValueType # 9 + +class PublishDataTrackErrorCode(_PublishDataTrackErrorCode, metaclass=_PublishDataTrackErrorCodeEnumTypeWrapper): ... + +PUBLISH_DATA_TRACK_ERROR_CODE_UNKNOWN: PublishDataTrackErrorCode.ValueType # 0 +PUBLISH_DATA_TRACK_ERROR_CODE_INVALID_HANDLE: PublishDataTrackErrorCode.ValueType # 1 +PUBLISH_DATA_TRACK_ERROR_CODE_DUPLICATE_NAME: PublishDataTrackErrorCode.ValueType # 2 +PUBLISH_DATA_TRACK_ERROR_CODE_TIMEOUT: PublishDataTrackErrorCode.ValueType # 3 +PUBLISH_DATA_TRACK_ERROR_CODE_DISCONNECTED: PublishDataTrackErrorCode.ValueType # 4 +PUBLISH_DATA_TRACK_ERROR_CODE_NOT_ALLOWED: PublishDataTrackErrorCode.ValueType # 5 +PUBLISH_DATA_TRACK_ERROR_CODE_INVALID_NAME: PublishDataTrackErrorCode.ValueType # 6 +PUBLISH_DATA_TRACK_ERROR_CODE_LIMIT_REACHED: PublishDataTrackErrorCode.ValueType # 7 +PUBLISH_DATA_TRACK_ERROR_CODE_PROTOCOL_ERROR: PublishDataTrackErrorCode.ValueType # 8 +PUBLISH_DATA_TRACK_ERROR_CODE_INTERNAL: PublishDataTrackErrorCode.ValueType # 9 +global___PublishDataTrackErrorCode = PublishDataTrackErrorCode + +class _LocalDataTrackTryPushErrorCode: + ValueType = typing.NewType("ValueType", builtins.int) + V: typing_extensions.TypeAlias = ValueType + +class _LocalDataTrackTryPushErrorCodeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_LocalDataTrackTryPushErrorCode.ValueType], builtins.type): + DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor + LOCAL_DATA_TRACK_TRY_PUSH_ERROR_CODE_UNKNOWN: _LocalDataTrackTryPushErrorCode.ValueType # 0 + LOCAL_DATA_TRACK_TRY_PUSH_ERROR_CODE_INVALID_HANDLE: _LocalDataTrackTryPushErrorCode.ValueType # 1 + LOCAL_DATA_TRACK_TRY_PUSH_ERROR_CODE_TRACK_UNPUBLISHED: _LocalDataTrackTryPushErrorCode.ValueType # 2 + LOCAL_DATA_TRACK_TRY_PUSH_ERROR_CODE_QUEUE_FULL: _LocalDataTrackTryPushErrorCode.ValueType # 3 + LOCAL_DATA_TRACK_TRY_PUSH_ERROR_CODE_INTERNAL: _LocalDataTrackTryPushErrorCode.ValueType # 4 + +class LocalDataTrackTryPushErrorCode(_LocalDataTrackTryPushErrorCode, metaclass=_LocalDataTrackTryPushErrorCodeEnumTypeWrapper): ... + +LOCAL_DATA_TRACK_TRY_PUSH_ERROR_CODE_UNKNOWN: LocalDataTrackTryPushErrorCode.ValueType # 0 +LOCAL_DATA_TRACK_TRY_PUSH_ERROR_CODE_INVALID_HANDLE: LocalDataTrackTryPushErrorCode.ValueType # 1 +LOCAL_DATA_TRACK_TRY_PUSH_ERROR_CODE_TRACK_UNPUBLISHED: LocalDataTrackTryPushErrorCode.ValueType # 2 +LOCAL_DATA_TRACK_TRY_PUSH_ERROR_CODE_QUEUE_FULL: LocalDataTrackTryPushErrorCode.ValueType # 3 +LOCAL_DATA_TRACK_TRY_PUSH_ERROR_CODE_INTERNAL: LocalDataTrackTryPushErrorCode.ValueType # 4 +global___LocalDataTrackTryPushErrorCode = LocalDataTrackTryPushErrorCode + +class _SubscribeDataTrackErrorCode: + ValueType = typing.NewType("ValueType", builtins.int) + V: typing_extensions.TypeAlias = ValueType + +class _SubscribeDataTrackErrorCodeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_SubscribeDataTrackErrorCode.ValueType], builtins.type): + DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor + SUBSCRIBE_DATA_TRACK_ERROR_CODE_UNKNOWN: _SubscribeDataTrackErrorCode.ValueType # 0 + SUBSCRIBE_DATA_TRACK_ERROR_CODE_INVALID_HANDLE: _SubscribeDataTrackErrorCode.ValueType # 1 + SUBSCRIBE_DATA_TRACK_ERROR_CODE_UNPUBLISHED: _SubscribeDataTrackErrorCode.ValueType # 2 + SUBSCRIBE_DATA_TRACK_ERROR_CODE_TIMEOUT: _SubscribeDataTrackErrorCode.ValueType # 3 + SUBSCRIBE_DATA_TRACK_ERROR_CODE_DISCONNECTED: _SubscribeDataTrackErrorCode.ValueType # 4 + SUBSCRIBE_DATA_TRACK_ERROR_CODE_PROTOCOL_ERROR: _SubscribeDataTrackErrorCode.ValueType # 5 + SUBSCRIBE_DATA_TRACK_ERROR_CODE_INTERNAL: _SubscribeDataTrackErrorCode.ValueType # 6 + +class SubscribeDataTrackErrorCode(_SubscribeDataTrackErrorCode, metaclass=_SubscribeDataTrackErrorCodeEnumTypeWrapper): ... + +SUBSCRIBE_DATA_TRACK_ERROR_CODE_UNKNOWN: SubscribeDataTrackErrorCode.ValueType # 0 +SUBSCRIBE_DATA_TRACK_ERROR_CODE_INVALID_HANDLE: SubscribeDataTrackErrorCode.ValueType # 1 +SUBSCRIBE_DATA_TRACK_ERROR_CODE_UNPUBLISHED: SubscribeDataTrackErrorCode.ValueType # 2 +SUBSCRIBE_DATA_TRACK_ERROR_CODE_TIMEOUT: SubscribeDataTrackErrorCode.ValueType # 3 +SUBSCRIBE_DATA_TRACK_ERROR_CODE_DISCONNECTED: SubscribeDataTrackErrorCode.ValueType # 4 +SUBSCRIBE_DATA_TRACK_ERROR_CODE_PROTOCOL_ERROR: SubscribeDataTrackErrorCode.ValueType # 5 +SUBSCRIBE_DATA_TRACK_ERROR_CODE_INTERNAL: SubscribeDataTrackErrorCode.ValueType # 6 +global___SubscribeDataTrackErrorCode = SubscribeDataTrackErrorCode + +@typing.final +class DataTrackInfo(google.protobuf.message.Message): + """MARK: - Common + + Information about a published data track. + """ + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + NAME_FIELD_NUMBER: builtins.int + SID_FIELD_NUMBER: builtins.int + USES_E2EE_FIELD_NUMBER: builtins.int + name: builtins.str + """Name of the track assigned by the publisher.""" + sid: builtins.str + """SFU-assigned track identifier.""" + uses_e2ee: builtins.bool + """Whether or not frames sent on the track use end-to-end encryption.""" + def __init__( + self, + *, + name: builtins.str | None = ..., + sid: builtins.str | None = ..., + uses_e2ee: builtins.bool | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["name", b"name", "sid", b"sid", "uses_e2ee", b"uses_e2ee"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["name", b"name", "sid", b"sid", "uses_e2ee", b"uses_e2ee"]) -> None: ... + +global___DataTrackInfo = DataTrackInfo + +@typing.final +class DataTrackFrame(google.protobuf.message.Message): + """A frame published on a data track.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + PAYLOAD_FIELD_NUMBER: builtins.int + USER_TIMESTAMP_FIELD_NUMBER: builtins.int + payload: builtins.bytes + user_timestamp: builtins.int + def __init__( + self, + *, + payload: builtins.bytes | None = ..., + user_timestamp: builtins.int | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["payload", b"payload", "user_timestamp", b"user_timestamp"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["payload", b"payload", "user_timestamp", b"user_timestamp"]) -> None: ... + +global___DataTrackFrame = DataTrackFrame + +@typing.final +class DataTrackError(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + CODE_FIELD_NUMBER: builtins.int + MESSAGE_FIELD_NUMBER: builtins.int + code: global___DataTrackErrorCode.ValueType + message: builtins.str + def __init__( + self, + *, + code: global___DataTrackErrorCode.ValueType | None = ..., + message: builtins.str | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["code", b"code", "message", b"message"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["code", b"code", "message", b"message"]) -> None: ... + +global___DataTrackError = DataTrackError + +@typing.final +class PublishDataTrackError(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + CODE_FIELD_NUMBER: builtins.int + MESSAGE_FIELD_NUMBER: builtins.int + code: global___PublishDataTrackErrorCode.ValueType + message: builtins.str + def __init__( + self, + *, + code: global___PublishDataTrackErrorCode.ValueType | None = ..., + message: builtins.str | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["code", b"code", "message", b"message"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["code", b"code", "message", b"message"]) -> None: ... + +global___PublishDataTrackError = PublishDataTrackError + +@typing.final +class LocalDataTrackTryPushError(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + CODE_FIELD_NUMBER: builtins.int + MESSAGE_FIELD_NUMBER: builtins.int + code: global___LocalDataTrackTryPushErrorCode.ValueType + message: builtins.str + def __init__( + self, + *, + code: global___LocalDataTrackTryPushErrorCode.ValueType | None = ..., + message: builtins.str | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["code", b"code", "message", b"message"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["code", b"code", "message", b"message"]) -> None: ... + +global___LocalDataTrackTryPushError = LocalDataTrackTryPushError + +@typing.final +class SubscribeDataTrackError(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + CODE_FIELD_NUMBER: builtins.int + MESSAGE_FIELD_NUMBER: builtins.int + code: global___SubscribeDataTrackErrorCode.ValueType + message: builtins.str + def __init__( + self, + *, + code: global___SubscribeDataTrackErrorCode.ValueType | None = ..., + message: builtins.str | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["code", b"code", "message", b"message"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["code", b"code", "message", b"message"]) -> None: ... + +global___SubscribeDataTrackError = SubscribeDataTrackError + +@typing.final +class DataTrackOptions(google.protobuf.message.Message): + """MARK: - Local + + Options for publishing a data track. + """ + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + NAME_FIELD_NUMBER: builtins.int + name: builtins.str + """Track name used to identify the track to other participants. + + Must not be empty and must be unique per publisher. + """ + def __init__( + self, + *, + name: builtins.str | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["name", b"name"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["name", b"name"]) -> None: ... + +global___DataTrackOptions = DataTrackOptions + +@typing.final +class PublishDataTrackRequest(google.protobuf.message.Message): + """Publish a data track""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + LOCAL_PARTICIPANT_HANDLE_FIELD_NUMBER: builtins.int + OPTIONS_FIELD_NUMBER: builtins.int + REQUEST_ASYNC_ID_FIELD_NUMBER: builtins.int + local_participant_handle: builtins.int + request_async_id: builtins.int + @property + def options(self) -> global___DataTrackOptions: ... + def __init__( + self, + *, + local_participant_handle: builtins.int | None = ..., + options: global___DataTrackOptions | None = ..., + request_async_id: builtins.int | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["local_participant_handle", b"local_participant_handle", "options", b"options", "request_async_id", b"request_async_id"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["local_participant_handle", b"local_participant_handle", "options", b"options", "request_async_id", b"request_async_id"]) -> None: ... + +global___PublishDataTrackRequest = PublishDataTrackRequest + +@typing.final +class PublishDataTrackResponse(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + ASYNC_ID_FIELD_NUMBER: builtins.int + async_id: builtins.int + def __init__( + self, + *, + async_id: builtins.int | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["async_id", b"async_id"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["async_id", b"async_id"]) -> None: ... + +global___PublishDataTrackResponse = PublishDataTrackResponse + +@typing.final +class PublishDataTrackCallback(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + ASYNC_ID_FIELD_NUMBER: builtins.int + TRACK_FIELD_NUMBER: builtins.int + ERROR_FIELD_NUMBER: builtins.int + async_id: builtins.int + @property + def track(self) -> global___OwnedLocalDataTrack: ... + @property + def error(self) -> global___PublishDataTrackError: ... + def __init__( + self, + *, + async_id: builtins.int | None = ..., + track: global___OwnedLocalDataTrack | None = ..., + error: global___PublishDataTrackError | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["async_id", b"async_id", "error", b"error", "result", b"result", "track", b"track"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["async_id", b"async_id", "error", b"error", "result", b"result", "track", b"track"]) -> None: ... + def WhichOneof(self, oneof_group: typing.Literal["result", b"result"]) -> typing.Literal["track", "error"] | None: ... + +global___PublishDataTrackCallback = PublishDataTrackCallback + +@typing.final +class OwnedLocalDataTrack(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + HANDLE_FIELD_NUMBER: builtins.int + INFO_FIELD_NUMBER: builtins.int + @property + def handle(self) -> handle_pb2.FfiOwnedHandle: ... + @property + def info(self) -> global___DataTrackInfo: ... + def __init__( + self, + *, + handle: handle_pb2.FfiOwnedHandle | None = ..., + info: global___DataTrackInfo | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["handle", b"handle", "info", b"info"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["handle", b"handle", "info", b"info"]) -> None: ... + +global___OwnedLocalDataTrack = OwnedLocalDataTrack + +@typing.final +class LocalDataTrackTryPushRequest(google.protobuf.message.Message): + """Try pushing a frame to subscribers of the track.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TRACK_HANDLE_FIELD_NUMBER: builtins.int + FRAME_FIELD_NUMBER: builtins.int + track_handle: builtins.int + @property + def frame(self) -> global___DataTrackFrame: ... + def __init__( + self, + *, + track_handle: builtins.int | None = ..., + frame: global___DataTrackFrame | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["frame", b"frame", "track_handle", b"track_handle"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["frame", b"frame", "track_handle", b"track_handle"]) -> None: ... + +global___LocalDataTrackTryPushRequest = LocalDataTrackTryPushRequest + +@typing.final +class LocalDataTrackTryPushResponse(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + ERROR_FIELD_NUMBER: builtins.int + @property + def error(self) -> global___LocalDataTrackTryPushError: ... + def __init__( + self, + *, + error: global___LocalDataTrackTryPushError | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["error", b"error"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["error", b"error"]) -> None: ... + +global___LocalDataTrackTryPushResponse = LocalDataTrackTryPushResponse + +@typing.final +class LocalDataTrackIsPublishedRequest(google.protobuf.message.Message): + """Checks if the track is still published.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TRACK_HANDLE_FIELD_NUMBER: builtins.int + track_handle: builtins.int + def __init__( + self, + *, + track_handle: builtins.int | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["track_handle", b"track_handle"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["track_handle", b"track_handle"]) -> None: ... + +global___LocalDataTrackIsPublishedRequest = LocalDataTrackIsPublishedRequest + +@typing.final +class LocalDataTrackIsPublishedResponse(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + IS_PUBLISHED_FIELD_NUMBER: builtins.int + is_published: builtins.bool + def __init__( + self, + *, + is_published: builtins.bool | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["is_published", b"is_published"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["is_published", b"is_published"]) -> None: ... + +global___LocalDataTrackIsPublishedResponse = LocalDataTrackIsPublishedResponse + +@typing.final +class LocalDataTrackUnpublishRequest(google.protobuf.message.Message): + """Unpublishes the track.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TRACK_HANDLE_FIELD_NUMBER: builtins.int + track_handle: builtins.int + def __init__( + self, + *, + track_handle: builtins.int | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["track_handle", b"track_handle"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["track_handle", b"track_handle"]) -> None: ... + +global___LocalDataTrackUnpublishRequest = LocalDataTrackUnpublishRequest + +@typing.final +class LocalDataTrackUnpublishResponse(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + def __init__( + self, + ) -> None: ... + +global___LocalDataTrackUnpublishResponse = LocalDataTrackUnpublishResponse + +@typing.final +class OwnedRemoteDataTrack(google.protobuf.message.Message): + """MARK: - Remote""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + HANDLE_FIELD_NUMBER: builtins.int + INFO_FIELD_NUMBER: builtins.int + PUBLISHER_IDENTITY_FIELD_NUMBER: builtins.int + publisher_identity: builtins.str + """Identity of the remote participant who published the track.""" + @property + def handle(self) -> handle_pb2.FfiOwnedHandle: ... + @property + def info(self) -> global___DataTrackInfo: ... + def __init__( + self, + *, + handle: handle_pb2.FfiOwnedHandle | None = ..., + info: global___DataTrackInfo | None = ..., + publisher_identity: builtins.str | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["handle", b"handle", "info", b"info", "publisher_identity", b"publisher_identity"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["handle", b"handle", "info", b"info", "publisher_identity", b"publisher_identity"]) -> None: ... + +global___OwnedRemoteDataTrack = OwnedRemoteDataTrack + +@typing.final +class OwnedDataTrackStream(google.protobuf.message.Message): + """Handle to an active data track subscription. + + Dropping the handle will unsubscribe from the track. + """ + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + HANDLE_FIELD_NUMBER: builtins.int + @property + def handle(self) -> handle_pb2.FfiOwnedHandle: ... + def __init__( + self, + *, + handle: handle_pb2.FfiOwnedHandle | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["handle", b"handle"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["handle", b"handle"]) -> None: ... + +global___OwnedDataTrackStream = OwnedDataTrackStream + +@typing.final +class DataTrackSubscribeOptions(google.protobuf.message.Message): + """Reserved for future subscription options.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + BUFFER_SIZE_FIELD_NUMBER: builtins.int + buffer_size: builtins.int + """Maximum number of frames to buffer internally.""" + def __init__( + self, + *, + buffer_size: builtins.int | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["buffer_size", b"buffer_size"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["buffer_size", b"buffer_size"]) -> None: ... + +global___DataTrackSubscribeOptions = DataTrackSubscribeOptions + +@typing.final +class RemoteDataTrackIsPublishedRequest(google.protobuf.message.Message): + """Checks if the track is still published.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TRACK_HANDLE_FIELD_NUMBER: builtins.int + track_handle: builtins.int + def __init__( + self, + *, + track_handle: builtins.int | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["track_handle", b"track_handle"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["track_handle", b"track_handle"]) -> None: ... + +global___RemoteDataTrackIsPublishedRequest = RemoteDataTrackIsPublishedRequest + +@typing.final +class RemoteDataTrackIsPublishedResponse(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + IS_PUBLISHED_FIELD_NUMBER: builtins.int + is_published: builtins.bool + def __init__( + self, + *, + is_published: builtins.bool | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["is_published", b"is_published"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["is_published", b"is_published"]) -> None: ... + +global___RemoteDataTrackIsPublishedResponse = RemoteDataTrackIsPublishedResponse + +@typing.final +class SubscribeDataTrackRequest(google.protobuf.message.Message): + """Subscribe to a data track.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TRACK_HANDLE_FIELD_NUMBER: builtins.int + OPTIONS_FIELD_NUMBER: builtins.int + track_handle: builtins.int + @property + def options(self) -> global___DataTrackSubscribeOptions: ... + def __init__( + self, + *, + track_handle: builtins.int | None = ..., + options: global___DataTrackSubscribeOptions | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["options", b"options", "track_handle", b"track_handle"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["options", b"options", "track_handle", b"track_handle"]) -> None: ... + +global___SubscribeDataTrackRequest = SubscribeDataTrackRequest + +@typing.final +class SubscribeDataTrackResponse(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + STREAM_FIELD_NUMBER: builtins.int + @property + def stream(self) -> global___OwnedDataTrackStream: ... + def __init__( + self, + *, + stream: global___OwnedDataTrackStream | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["stream", b"stream"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["stream", b"stream"]) -> None: ... + +global___SubscribeDataTrackResponse = SubscribeDataTrackResponse + +@typing.final +class DataTrackStreamReadRequest(google.protobuf.message.Message): + """Signal readiness to handle the next frame. + + This allows the client to put backpressure on the internal receive buffer. + Sending this request will cause the next frame to be sent via `DataTrackStreamFrameReceived` + once one is available. + """ + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + STREAM_HANDLE_FIELD_NUMBER: builtins.int + stream_handle: builtins.int + def __init__( + self, + *, + stream_handle: builtins.int | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["stream_handle", b"stream_handle"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["stream_handle", b"stream_handle"]) -> None: ... + +global___DataTrackStreamReadRequest = DataTrackStreamReadRequest + +@typing.final +class DataTrackStreamReadResponse(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + def __init__( + self, + ) -> None: ... + +global___DataTrackStreamReadResponse = DataTrackStreamReadResponse + +@typing.final +class DataTrackStreamEvent(google.protobuf.message.Message): + """Event emitted on an active stream.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + STREAM_HANDLE_FIELD_NUMBER: builtins.int + FRAME_RECEIVED_FIELD_NUMBER: builtins.int + EOS_FIELD_NUMBER: builtins.int + stream_handle: builtins.int + @property + def frame_received(self) -> global___DataTrackStreamFrameReceived: ... + @property + def eos(self) -> global___DataTrackStreamEOS: ... + def __init__( + self, + *, + stream_handle: builtins.int | None = ..., + frame_received: global___DataTrackStreamFrameReceived | None = ..., + eos: global___DataTrackStreamEOS | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["detail", b"detail", "eos", b"eos", "frame_received", b"frame_received", "stream_handle", b"stream_handle"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["detail", b"detail", "eos", b"eos", "frame_received", b"frame_received", "stream_handle", b"stream_handle"]) -> None: ... + def WhichOneof(self, oneof_group: typing.Literal["detail", b"detail"]) -> typing.Literal["frame_received", "eos"] | None: ... + +global___DataTrackStreamEvent = DataTrackStreamEvent + +@typing.final +class DataTrackStreamFrameReceived(google.protobuf.message.Message): + """A frame was received.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + FRAME_FIELD_NUMBER: builtins.int + @property + def frame(self) -> global___DataTrackFrame: ... + def __init__( + self, + *, + frame: global___DataTrackFrame | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["frame", b"frame"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["frame", b"frame"]) -> None: ... + +global___DataTrackStreamFrameReceived = DataTrackStreamFrameReceived + +@typing.final +class DataTrackStreamEOS(google.protobuf.message.Message): + """Stream has ended.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + ERROR_FIELD_NUMBER: builtins.int + error: builtins.str + """If the track could not be subscribed to, a message describing the error. + Absent if the stream ended normally. + """ + def __init__( + self, + *, + error: builtins.str | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["error", b"error"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["error", b"error"]) -> None: ... + +global___DataTrackStreamEOS = DataTrackStreamEOS diff --git a/livekit-rtc/livekit/rtc/_proto/ffi_pb2.py b/livekit-rtc/livekit/rtc/_proto/ffi_pb2.py index a48d684f..02c5dd28 100644 --- a/livekit-rtc/livekit/rtc/_proto/ffi_pb2.py +++ b/livekit-rtc/livekit/rtc/_proto/ffi_pb2.py @@ -20,9 +20,10 @@ from . import audio_frame_pb2 as audio__frame__pb2 from . import rpc_pb2 as rpc__pb2 from . import data_stream_pb2 as data__stream__pb2 +from . import data_track_pb2 as data__track__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\tffi.proto\x12\rlivekit.proto\x1a\ne2ee.proto\x1a\x0btrack.proto\x1a\x17track_publication.proto\x1a\nroom.proto\x1a\x11video_frame.proto\x1a\x11\x61udio_frame.proto\x1a\trpc.proto\x1a\x11\x64\x61ta_stream.proto\"\xe6%\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@\n\x10local_track_mute\x18\x11 \x01(\x0b\x32$.livekit.proto.LocalTrackMuteRequestH\x00\x12\x46\n\x13\x65nable_remote_track\x18\x12 \x01(\x0b\x32\'.livekit.proto.EnableRemoteTrackRequestH\x00\x12\x33\n\tget_stats\x18\x13 \x01(\x0b\x32\x1e.livekit.proto.GetStatsRequestH\x00\x12\x63\n\"set_track_subscription_permissions\x18\x30 \x01(\x0b\x32\x35.livekit.proto.SetTrackSubscriptionPermissionsRequestH\x00\x12@\n\x10new_video_stream\x18\x14 \x01(\x0b\x32$.livekit.proto.NewVideoStreamRequestH\x00\x12@\n\x10new_video_source\x18\x15 \x01(\x0b\x32$.livekit.proto.NewVideoSourceRequestH\x00\x12\x46\n\x13\x63\x61pture_video_frame\x18\x16 \x01(\x0b\x32\'.livekit.proto.CaptureVideoFrameRequestH\x00\x12;\n\rvideo_convert\x18\x17 \x01(\x0b\x32\".livekit.proto.VideoConvertRequestH\x00\x12Y\n\x1dvideo_stream_from_participant\x18\x18 \x01(\x0b\x32\x30.livekit.proto.VideoStreamFromParticipantRequestH\x00\x12@\n\x10new_audio_stream\x18\x19 \x01(\x0b\x32$.livekit.proto.NewAudioStreamRequestH\x00\x12@\n\x10new_audio_source\x18\x1a \x01(\x0b\x32$.livekit.proto.NewAudioSourceRequestH\x00\x12\x46\n\x13\x63\x61pture_audio_frame\x18\x1b \x01(\x0b\x32\'.livekit.proto.CaptureAudioFrameRequestH\x00\x12\x44\n\x12\x63lear_audio_buffer\x18\x1c \x01(\x0b\x32&.livekit.proto.ClearAudioBufferRequestH\x00\x12\x46\n\x13new_audio_resampler\x18\x1d \x01(\x0b\x32\'.livekit.proto.NewAudioResamplerRequestH\x00\x12\x44\n\x12remix_and_resample\x18\x1e \x01(\x0b\x32&.livekit.proto.RemixAndResampleRequestH\x00\x12*\n\x04\x65\x32\x65\x65\x18\x1f \x01(\x0b\x32\x1a.livekit.proto.E2eeRequestH\x00\x12Y\n\x1d\x61udio_stream_from_participant\x18 \x01(\x0b\x32\x30.livekit.proto.AudioStreamFromParticipantRequestH\x00\x12\x42\n\x11new_sox_resampler\x18! \x01(\x0b\x32%.livekit.proto.NewSoxResamplerRequestH\x00\x12\x44\n\x12push_sox_resampler\x18\" \x01(\x0b\x32&.livekit.proto.PushSoxResamplerRequestH\x00\x12\x46\n\x13\x66lush_sox_resampler\x18# \x01(\x0b\x32\'.livekit.proto.FlushSoxResamplerRequestH\x00\x12\x42\n\x11send_chat_message\x18$ \x01(\x0b\x32%.livekit.proto.SendChatMessageRequestH\x00\x12\x42\n\x11\x65\x64it_chat_message\x18% \x01(\x0b\x32%.livekit.proto.EditChatMessageRequestH\x00\x12\x37\n\x0bperform_rpc\x18& \x01(\x0b\x32 .livekit.proto.PerformRpcRequestH\x00\x12\x46\n\x13register_rpc_method\x18\' \x01(\x0b\x32\'.livekit.proto.RegisterRpcMethodRequestH\x00\x12J\n\x15unregister_rpc_method\x18( \x01(\x0b\x32).livekit.proto.UnregisterRpcMethodRequestH\x00\x12[\n\x1erpc_method_invocation_response\x18) \x01(\x0b\x32\x31.livekit.proto.RpcMethodInvocationResponseRequestH\x00\x12]\n\x1f\x65nable_remote_track_publication\x18* \x01(\x0b\x32\x32.livekit.proto.EnableRemoteTrackPublicationRequestH\x00\x12p\n)update_remote_track_publication_dimension\x18+ \x01(\x0b\x32;.livekit.proto.UpdateRemoteTrackPublicationDimensionRequestH\x00\x12\x44\n\x12send_stream_header\x18, \x01(\x0b\x32&.livekit.proto.SendStreamHeaderRequestH\x00\x12\x42\n\x11send_stream_chunk\x18- \x01(\x0b\x32%.livekit.proto.SendStreamChunkRequestH\x00\x12\x46\n\x13send_stream_trailer\x18. \x01(\x0b\x32\'.livekit.proto.SendStreamTrailerRequestH\x00\x12x\n.set_data_channel_buffered_amount_low_threshold\x18/ \x01(\x0b\x32>.livekit.proto.SetDataChannelBufferedAmountLowThresholdRequestH\x00\x12O\n\x18load_audio_filter_plugin\x18\x31 \x01(\x0b\x32+.livekit.proto.LoadAudioFilterPluginRequestH\x00\x12/\n\x07new_apm\x18\x32 \x01(\x0b\x32\x1c.livekit.proto.NewApmRequestH\x00\x12\x44\n\x12\x61pm_process_stream\x18\x33 \x01(\x0b\x32&.livekit.proto.ApmProcessStreamRequestH\x00\x12S\n\x1a\x61pm_process_reverse_stream\x18\x34 \x01(\x0b\x32-.livekit.proto.ApmProcessReverseStreamRequestH\x00\x12G\n\x14\x61pm_set_stream_delay\x18\x35 \x01(\x0b\x32\'.livekit.proto.ApmSetStreamDelayRequestH\x00\x12V\n\x15\x62yte_read_incremental\x18\x36 \x01(\x0b\x32\x35.livekit.proto.ByteStreamReaderReadIncrementalRequestH\x00\x12\x46\n\rbyte_read_all\x18\x37 \x01(\x0b\x32-.livekit.proto.ByteStreamReaderReadAllRequestH\x00\x12O\n\x12\x62yte_write_to_file\x18\x38 \x01(\x0b\x32\x31.livekit.proto.ByteStreamReaderWriteToFileRequestH\x00\x12V\n\x15text_read_incremental\x18\x39 \x01(\x0b\x32\x35.livekit.proto.TextStreamReaderReadIncrementalRequestH\x00\x12\x46\n\rtext_read_all\x18: \x01(\x0b\x32-.livekit.proto.TextStreamReaderReadAllRequestH\x00\x12\x39\n\tsend_file\x18; \x01(\x0b\x32$.livekit.proto.StreamSendFileRequestH\x00\x12\x39\n\tsend_text\x18< \x01(\x0b\x32$.livekit.proto.StreamSendTextRequestH\x00\x12@\n\x10\x62yte_stream_open\x18= \x01(\x0b\x32$.livekit.proto.ByteStreamOpenRequestH\x00\x12H\n\x11\x62yte_stream_write\x18> \x01(\x0b\x32+.livekit.proto.ByteStreamWriterWriteRequestH\x00\x12H\n\x11\x62yte_stream_close\x18? \x01(\x0b\x32+.livekit.proto.ByteStreamWriterCloseRequestH\x00\x12@\n\x10text_stream_open\x18@ \x01(\x0b\x32$.livekit.proto.TextStreamOpenRequestH\x00\x12H\n\x11text_stream_write\x18\x41 \x01(\x0b\x32+.livekit.proto.TextStreamWriterWriteRequestH\x00\x12H\n\x11text_stream_close\x18\x42 \x01(\x0b\x32+.livekit.proto.TextStreamWriterCloseRequestH\x00\x12;\n\nsend_bytes\x18\x43 \x01(\x0b\x32%.livekit.proto.StreamSendBytesRequestH\x00\x12\x66\n$set_remote_track_publication_quality\x18\x44 \x01(\x0b\x32\x36.livekit.proto.SetRemoteTrackPublicationQualityRequestH\x00\x42\t\n\x07message\"\xe5%\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\x41\n\x10local_track_mute\x18\x11 \x01(\x0b\x32%.livekit.proto.LocalTrackMuteResponseH\x00\x12G\n\x13\x65nable_remote_track\x18\x12 \x01(\x0b\x32(.livekit.proto.EnableRemoteTrackResponseH\x00\x12\x34\n\tget_stats\x18\x13 \x01(\x0b\x32\x1f.livekit.proto.GetStatsResponseH\x00\x12\x64\n\"set_track_subscription_permissions\x18/ \x01(\x0b\x32\x36.livekit.proto.SetTrackSubscriptionPermissionsResponseH\x00\x12\x41\n\x10new_video_stream\x18\x14 \x01(\x0b\x32%.livekit.proto.NewVideoStreamResponseH\x00\x12\x41\n\x10new_video_source\x18\x15 \x01(\x0b\x32%.livekit.proto.NewVideoSourceResponseH\x00\x12G\n\x13\x63\x61pture_video_frame\x18\x16 \x01(\x0b\x32(.livekit.proto.CaptureVideoFrameResponseH\x00\x12<\n\rvideo_convert\x18\x17 \x01(\x0b\x32#.livekit.proto.VideoConvertResponseH\x00\x12Z\n\x1dvideo_stream_from_participant\x18\x18 \x01(\x0b\x32\x31.livekit.proto.VideoStreamFromParticipantResponseH\x00\x12\x41\n\x10new_audio_stream\x18\x19 \x01(\x0b\x32%.livekit.proto.NewAudioStreamResponseH\x00\x12\x41\n\x10new_audio_source\x18\x1a \x01(\x0b\x32%.livekit.proto.NewAudioSourceResponseH\x00\x12G\n\x13\x63\x61pture_audio_frame\x18\x1b \x01(\x0b\x32(.livekit.proto.CaptureAudioFrameResponseH\x00\x12\x45\n\x12\x63lear_audio_buffer\x18\x1c \x01(\x0b\x32\'.livekit.proto.ClearAudioBufferResponseH\x00\x12G\n\x13new_audio_resampler\x18\x1d \x01(\x0b\x32(.livekit.proto.NewAudioResamplerResponseH\x00\x12\x45\n\x12remix_and_resample\x18\x1e \x01(\x0b\x32\'.livekit.proto.RemixAndResampleResponseH\x00\x12Z\n\x1d\x61udio_stream_from_participant\x18\x1f \x01(\x0b\x32\x31.livekit.proto.AudioStreamFromParticipantResponseH\x00\x12+\n\x04\x65\x32\x65\x65\x18 \x01(\x0b\x32\x1b.livekit.proto.E2eeResponseH\x00\x12\x43\n\x11new_sox_resampler\x18! \x01(\x0b\x32&.livekit.proto.NewSoxResamplerResponseH\x00\x12\x45\n\x12push_sox_resampler\x18\" \x01(\x0b\x32\'.livekit.proto.PushSoxResamplerResponseH\x00\x12G\n\x13\x66lush_sox_resampler\x18# \x01(\x0b\x32(.livekit.proto.FlushSoxResamplerResponseH\x00\x12\x43\n\x11send_chat_message\x18$ \x01(\x0b\x32&.livekit.proto.SendChatMessageResponseH\x00\x12\x38\n\x0bperform_rpc\x18% \x01(\x0b\x32!.livekit.proto.PerformRpcResponseH\x00\x12G\n\x13register_rpc_method\x18& \x01(\x0b\x32(.livekit.proto.RegisterRpcMethodResponseH\x00\x12K\n\x15unregister_rpc_method\x18\' \x01(\x0b\x32*.livekit.proto.UnregisterRpcMethodResponseH\x00\x12\\\n\x1erpc_method_invocation_response\x18( \x01(\x0b\x32\x32.livekit.proto.RpcMethodInvocationResponseResponseH\x00\x12^\n\x1f\x65nable_remote_track_publication\x18) \x01(\x0b\x32\x33.livekit.proto.EnableRemoteTrackPublicationResponseH\x00\x12q\n)update_remote_track_publication_dimension\x18* \x01(\x0b\x32<.livekit.proto.UpdateRemoteTrackPublicationDimensionResponseH\x00\x12\x45\n\x12send_stream_header\x18+ \x01(\x0b\x32\'.livekit.proto.SendStreamHeaderResponseH\x00\x12\x43\n\x11send_stream_chunk\x18, \x01(\x0b\x32&.livekit.proto.SendStreamChunkResponseH\x00\x12G\n\x13send_stream_trailer\x18- \x01(\x0b\x32(.livekit.proto.SendStreamTrailerResponseH\x00\x12y\n.set_data_channel_buffered_amount_low_threshold\x18. \x01(\x0b\x32?.livekit.proto.SetDataChannelBufferedAmountLowThresholdResponseH\x00\x12P\n\x18load_audio_filter_plugin\x18\x30 \x01(\x0b\x32,.livekit.proto.LoadAudioFilterPluginResponseH\x00\x12\x30\n\x07new_apm\x18\x31 \x01(\x0b\x32\x1d.livekit.proto.NewApmResponseH\x00\x12\x45\n\x12\x61pm_process_stream\x18\x32 \x01(\x0b\x32\'.livekit.proto.ApmProcessStreamResponseH\x00\x12T\n\x1a\x61pm_process_reverse_stream\x18\x33 \x01(\x0b\x32..livekit.proto.ApmProcessReverseStreamResponseH\x00\x12H\n\x14\x61pm_set_stream_delay\x18\x34 \x01(\x0b\x32(.livekit.proto.ApmSetStreamDelayResponseH\x00\x12W\n\x15\x62yte_read_incremental\x18\x35 \x01(\x0b\x32\x36.livekit.proto.ByteStreamReaderReadIncrementalResponseH\x00\x12G\n\rbyte_read_all\x18\x36 \x01(\x0b\x32..livekit.proto.ByteStreamReaderReadAllResponseH\x00\x12P\n\x12\x62yte_write_to_file\x18\x37 \x01(\x0b\x32\x32.livekit.proto.ByteStreamReaderWriteToFileResponseH\x00\x12W\n\x15text_read_incremental\x18\x38 \x01(\x0b\x32\x36.livekit.proto.TextStreamReaderReadIncrementalResponseH\x00\x12G\n\rtext_read_all\x18\x39 \x01(\x0b\x32..livekit.proto.TextStreamReaderReadAllResponseH\x00\x12:\n\tsend_file\x18: \x01(\x0b\x32%.livekit.proto.StreamSendFileResponseH\x00\x12:\n\tsend_text\x18; \x01(\x0b\x32%.livekit.proto.StreamSendTextResponseH\x00\x12\x41\n\x10\x62yte_stream_open\x18< \x01(\x0b\x32%.livekit.proto.ByteStreamOpenResponseH\x00\x12I\n\x11\x62yte_stream_write\x18= \x01(\x0b\x32,.livekit.proto.ByteStreamWriterWriteResponseH\x00\x12I\n\x11\x62yte_stream_close\x18> \x01(\x0b\x32,.livekit.proto.ByteStreamWriterCloseResponseH\x00\x12\x41\n\x10text_stream_open\x18? \x01(\x0b\x32%.livekit.proto.TextStreamOpenResponseH\x00\x12I\n\x11text_stream_write\x18@ \x01(\x0b\x32,.livekit.proto.TextStreamWriterWriteResponseH\x00\x12I\n\x11text_stream_close\x18\x41 \x01(\x0b\x32,.livekit.proto.TextStreamWriterCloseResponseH\x00\x12<\n\nsend_bytes\x18\x42 \x01(\x0b\x32&.livekit.proto.StreamSendBytesResponseH\x00\x12g\n$set_remote_track_publication_quality\x18\x43 \x01(\x0b\x32\x37.livekit.proto.SetRemoteTrackPublicationQualityResponseH\x00\x42\t\n\x07message\"\x85\x15\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\x12>\n\x0c\x63hat_message\x18\x16 \x01(\x0b\x32&.livekit.proto.SendChatMessageCallbackH\x00\x12\x38\n\x0bperform_rpc\x18\x17 \x01(\x0b\x32!.livekit.proto.PerformRpcCallbackH\x00\x12H\n\x15rpc_method_invocation\x18\x18 \x01(\x0b\x32\'.livekit.proto.RpcMethodInvocationEventH\x00\x12\x45\n\x12send_stream_header\x18\x19 \x01(\x0b\x32\'.livekit.proto.SendStreamHeaderCallbackH\x00\x12\x43\n\x11send_stream_chunk\x18\x1a \x01(\x0b\x32&.livekit.proto.SendStreamChunkCallbackH\x00\x12G\n\x13send_stream_trailer\x18\x1b \x01(\x0b\x32(.livekit.proto.SendStreamTrailerCallbackH\x00\x12H\n\x18\x62yte_stream_reader_event\x18\x1c \x01(\x0b\x32$.livekit.proto.ByteStreamReaderEventH\x00\x12U\n\x1b\x62yte_stream_reader_read_all\x18\x1d \x01(\x0b\x32..livekit.proto.ByteStreamReaderReadAllCallbackH\x00\x12^\n byte_stream_reader_write_to_file\x18\x1e \x01(\x0b\x32\x32.livekit.proto.ByteStreamReaderWriteToFileCallbackH\x00\x12\x41\n\x10\x62yte_stream_open\x18\x1f \x01(\x0b\x32%.livekit.proto.ByteStreamOpenCallbackH\x00\x12P\n\x18\x62yte_stream_writer_write\x18 \x01(\x0b\x32,.livekit.proto.ByteStreamWriterWriteCallbackH\x00\x12P\n\x18\x62yte_stream_writer_close\x18! \x01(\x0b\x32,.livekit.proto.ByteStreamWriterCloseCallbackH\x00\x12:\n\tsend_file\x18\" \x01(\x0b\x32%.livekit.proto.StreamSendFileCallbackH\x00\x12H\n\x18text_stream_reader_event\x18# \x01(\x0b\x32$.livekit.proto.TextStreamReaderEventH\x00\x12U\n\x1btext_stream_reader_read_all\x18$ \x01(\x0b\x32..livekit.proto.TextStreamReaderReadAllCallbackH\x00\x12\x41\n\x10text_stream_open\x18% \x01(\x0b\x32%.livekit.proto.TextStreamOpenCallbackH\x00\x12P\n\x18text_stream_writer_write\x18& \x01(\x0b\x32,.livekit.proto.TextStreamWriterWriteCallbackH\x00\x12P\n\x18text_stream_writer_close\x18\' \x01(\x0b\x32,.livekit.proto.TextStreamWriterCloseCallbackH\x00\x12:\n\tsend_text\x18( \x01(\x0b\x32%.livekit.proto.StreamSendTextCallbackH\x00\x12<\n\nsend_bytes\x18) \x01(\x0b\x32&.livekit.proto.StreamSendBytesCallbackH\x00\x42\t\n\x07message\"\x1f\n\x0e\x44isposeRequest\x12\r\n\x05\x61sync\x18\x01 \x02(\x08\"#\n\x0f\x44isposeResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x01(\x04\"#\n\x0f\x44isposeCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"\x85\x01\n\tLogRecord\x12&\n\x05level\x18\x01 \x02(\x0e\x32\x17.livekit.proto.LogLevel\x12\x0e\n\x06target\x18\x02 \x02(\t\x12\x13\n\x0bmodule_path\x18\x03 \x01(\t\x12\x0c\n\x04\x66ile\x18\x04 \x01(\t\x12\x0c\n\x04line\x18\x05 \x01(\r\x12\x0f\n\x07message\x18\x06 \x02(\t\"5\n\x08LogBatch\x12)\n\x07records\x18\x01 \x03(\x0b\x32\x18.livekit.proto.LogRecord\"\x18\n\x05Panic\x12\x0f\n\x07message\x18\x01 \x02(\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.Proto') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\tffi.proto\x12\rlivekit.proto\x1a\ne2ee.proto\x1a\x0btrack.proto\x1a\x17track_publication.proto\x1a\nroom.proto\x1a\x11video_frame.proto\x1a\x11\x61udio_frame.proto\x1a\trpc.proto\x1a\x11\x64\x61ta_stream.proto\x1a\x10\x64\x61ta_track.proto\"\xa0*\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@\n\x10local_track_mute\x18\x11 \x01(\x0b\x32$.livekit.proto.LocalTrackMuteRequestH\x00\x12\x46\n\x13\x65nable_remote_track\x18\x12 \x01(\x0b\x32\'.livekit.proto.EnableRemoteTrackRequestH\x00\x12\x33\n\tget_stats\x18\x13 \x01(\x0b\x32\x1e.livekit.proto.GetStatsRequestH\x00\x12\x63\n\"set_track_subscription_permissions\x18\x30 \x01(\x0b\x32\x35.livekit.proto.SetTrackSubscriptionPermissionsRequestH\x00\x12@\n\x10new_video_stream\x18\x14 \x01(\x0b\x32$.livekit.proto.NewVideoStreamRequestH\x00\x12@\n\x10new_video_source\x18\x15 \x01(\x0b\x32$.livekit.proto.NewVideoSourceRequestH\x00\x12\x46\n\x13\x63\x61pture_video_frame\x18\x16 \x01(\x0b\x32\'.livekit.proto.CaptureVideoFrameRequestH\x00\x12;\n\rvideo_convert\x18\x17 \x01(\x0b\x32\".livekit.proto.VideoConvertRequestH\x00\x12Y\n\x1dvideo_stream_from_participant\x18\x18 \x01(\x0b\x32\x30.livekit.proto.VideoStreamFromParticipantRequestH\x00\x12@\n\x10new_audio_stream\x18\x19 \x01(\x0b\x32$.livekit.proto.NewAudioStreamRequestH\x00\x12@\n\x10new_audio_source\x18\x1a \x01(\x0b\x32$.livekit.proto.NewAudioSourceRequestH\x00\x12\x46\n\x13\x63\x61pture_audio_frame\x18\x1b \x01(\x0b\x32\'.livekit.proto.CaptureAudioFrameRequestH\x00\x12\x44\n\x12\x63lear_audio_buffer\x18\x1c \x01(\x0b\x32&.livekit.proto.ClearAudioBufferRequestH\x00\x12\x46\n\x13new_audio_resampler\x18\x1d \x01(\x0b\x32\'.livekit.proto.NewAudioResamplerRequestH\x00\x12\x44\n\x12remix_and_resample\x18\x1e \x01(\x0b\x32&.livekit.proto.RemixAndResampleRequestH\x00\x12*\n\x04\x65\x32\x65\x65\x18\x1f \x01(\x0b\x32\x1a.livekit.proto.E2eeRequestH\x00\x12Y\n\x1d\x61udio_stream_from_participant\x18 \x01(\x0b\x32\x30.livekit.proto.AudioStreamFromParticipantRequestH\x00\x12\x42\n\x11new_sox_resampler\x18! \x01(\x0b\x32%.livekit.proto.NewSoxResamplerRequestH\x00\x12\x44\n\x12push_sox_resampler\x18\" \x01(\x0b\x32&.livekit.proto.PushSoxResamplerRequestH\x00\x12\x46\n\x13\x66lush_sox_resampler\x18# \x01(\x0b\x32\'.livekit.proto.FlushSoxResamplerRequestH\x00\x12\x42\n\x11send_chat_message\x18$ \x01(\x0b\x32%.livekit.proto.SendChatMessageRequestH\x00\x12\x42\n\x11\x65\x64it_chat_message\x18% \x01(\x0b\x32%.livekit.proto.EditChatMessageRequestH\x00\x12\x37\n\x0bperform_rpc\x18& \x01(\x0b\x32 .livekit.proto.PerformRpcRequestH\x00\x12\x46\n\x13register_rpc_method\x18\' \x01(\x0b\x32\'.livekit.proto.RegisterRpcMethodRequestH\x00\x12J\n\x15unregister_rpc_method\x18( \x01(\x0b\x32).livekit.proto.UnregisterRpcMethodRequestH\x00\x12[\n\x1erpc_method_invocation_response\x18) \x01(\x0b\x32\x31.livekit.proto.RpcMethodInvocationResponseRequestH\x00\x12]\n\x1f\x65nable_remote_track_publication\x18* \x01(\x0b\x32\x32.livekit.proto.EnableRemoteTrackPublicationRequestH\x00\x12p\n)update_remote_track_publication_dimension\x18+ \x01(\x0b\x32;.livekit.proto.UpdateRemoteTrackPublicationDimensionRequestH\x00\x12\x44\n\x12send_stream_header\x18, \x01(\x0b\x32&.livekit.proto.SendStreamHeaderRequestH\x00\x12\x42\n\x11send_stream_chunk\x18- \x01(\x0b\x32%.livekit.proto.SendStreamChunkRequestH\x00\x12\x46\n\x13send_stream_trailer\x18. \x01(\x0b\x32\'.livekit.proto.SendStreamTrailerRequestH\x00\x12x\n.set_data_channel_buffered_amount_low_threshold\x18/ \x01(\x0b\x32>.livekit.proto.SetDataChannelBufferedAmountLowThresholdRequestH\x00\x12O\n\x18load_audio_filter_plugin\x18\x31 \x01(\x0b\x32+.livekit.proto.LoadAudioFilterPluginRequestH\x00\x12/\n\x07new_apm\x18\x32 \x01(\x0b\x32\x1c.livekit.proto.NewApmRequestH\x00\x12\x44\n\x12\x61pm_process_stream\x18\x33 \x01(\x0b\x32&.livekit.proto.ApmProcessStreamRequestH\x00\x12S\n\x1a\x61pm_process_reverse_stream\x18\x34 \x01(\x0b\x32-.livekit.proto.ApmProcessReverseStreamRequestH\x00\x12G\n\x14\x61pm_set_stream_delay\x18\x35 \x01(\x0b\x32\'.livekit.proto.ApmSetStreamDelayRequestH\x00\x12V\n\x15\x62yte_read_incremental\x18\x36 \x01(\x0b\x32\x35.livekit.proto.ByteStreamReaderReadIncrementalRequestH\x00\x12\x46\n\rbyte_read_all\x18\x37 \x01(\x0b\x32-.livekit.proto.ByteStreamReaderReadAllRequestH\x00\x12O\n\x12\x62yte_write_to_file\x18\x38 \x01(\x0b\x32\x31.livekit.proto.ByteStreamReaderWriteToFileRequestH\x00\x12V\n\x15text_read_incremental\x18\x39 \x01(\x0b\x32\x35.livekit.proto.TextStreamReaderReadIncrementalRequestH\x00\x12\x46\n\rtext_read_all\x18: \x01(\x0b\x32-.livekit.proto.TextStreamReaderReadAllRequestH\x00\x12\x39\n\tsend_file\x18; \x01(\x0b\x32$.livekit.proto.StreamSendFileRequestH\x00\x12\x39\n\tsend_text\x18< \x01(\x0b\x32$.livekit.proto.StreamSendTextRequestH\x00\x12@\n\x10\x62yte_stream_open\x18= \x01(\x0b\x32$.livekit.proto.ByteStreamOpenRequestH\x00\x12H\n\x11\x62yte_stream_write\x18> \x01(\x0b\x32+.livekit.proto.ByteStreamWriterWriteRequestH\x00\x12H\n\x11\x62yte_stream_close\x18? \x01(\x0b\x32+.livekit.proto.ByteStreamWriterCloseRequestH\x00\x12@\n\x10text_stream_open\x18@ \x01(\x0b\x32$.livekit.proto.TextStreamOpenRequestH\x00\x12H\n\x11text_stream_write\x18\x41 \x01(\x0b\x32+.livekit.proto.TextStreamWriterWriteRequestH\x00\x12H\n\x11text_stream_close\x18\x42 \x01(\x0b\x32+.livekit.proto.TextStreamWriterCloseRequestH\x00\x12;\n\nsend_bytes\x18\x43 \x01(\x0b\x32%.livekit.proto.StreamSendBytesRequestH\x00\x12\x66\n$set_remote_track_publication_quality\x18\x44 \x01(\x0b\x32\x36.livekit.proto.SetRemoteTrackPublicationQualityRequestH\x00\x12\x44\n\x12publish_data_track\x18\x45 \x01(\x0b\x32&.livekit.proto.PublishDataTrackRequestH\x00\x12P\n\x19local_data_track_try_push\x18\x46 \x01(\x0b\x32+.livekit.proto.LocalDataTrackTryPushRequestH\x00\x12S\n\x1alocal_data_track_unpublish\x18G \x01(\x0b\x32-.livekit.proto.LocalDataTrackUnpublishRequestH\x00\x12X\n\x1dlocal_data_track_is_published\x18H \x01(\x0b\x32/.livekit.proto.LocalDataTrackIsPublishedRequestH\x00\x12H\n\x14subscribe_data_track\x18I \x01(\x0b\x32(.livekit.proto.SubscribeDataTrackRequestH\x00\x12Z\n\x1eremote_data_track_is_published\x18J \x01(\x0b\x32\x30.livekit.proto.RemoteDataTrackIsPublishedRequestH\x00\x12K\n\x16\x64\x61ta_track_stream_read\x18K \x01(\x0b\x32).livekit.proto.DataTrackStreamReadRequestH\x00\x42\t\n\x07message\"\xa6*\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\x41\n\x10local_track_mute\x18\x11 \x01(\x0b\x32%.livekit.proto.LocalTrackMuteResponseH\x00\x12G\n\x13\x65nable_remote_track\x18\x12 \x01(\x0b\x32(.livekit.proto.EnableRemoteTrackResponseH\x00\x12\x34\n\tget_stats\x18\x13 \x01(\x0b\x32\x1f.livekit.proto.GetStatsResponseH\x00\x12\x64\n\"set_track_subscription_permissions\x18/ \x01(\x0b\x32\x36.livekit.proto.SetTrackSubscriptionPermissionsResponseH\x00\x12\x41\n\x10new_video_stream\x18\x14 \x01(\x0b\x32%.livekit.proto.NewVideoStreamResponseH\x00\x12\x41\n\x10new_video_source\x18\x15 \x01(\x0b\x32%.livekit.proto.NewVideoSourceResponseH\x00\x12G\n\x13\x63\x61pture_video_frame\x18\x16 \x01(\x0b\x32(.livekit.proto.CaptureVideoFrameResponseH\x00\x12<\n\rvideo_convert\x18\x17 \x01(\x0b\x32#.livekit.proto.VideoConvertResponseH\x00\x12Z\n\x1dvideo_stream_from_participant\x18\x18 \x01(\x0b\x32\x31.livekit.proto.VideoStreamFromParticipantResponseH\x00\x12\x41\n\x10new_audio_stream\x18\x19 \x01(\x0b\x32%.livekit.proto.NewAudioStreamResponseH\x00\x12\x41\n\x10new_audio_source\x18\x1a \x01(\x0b\x32%.livekit.proto.NewAudioSourceResponseH\x00\x12G\n\x13\x63\x61pture_audio_frame\x18\x1b \x01(\x0b\x32(.livekit.proto.CaptureAudioFrameResponseH\x00\x12\x45\n\x12\x63lear_audio_buffer\x18\x1c \x01(\x0b\x32\'.livekit.proto.ClearAudioBufferResponseH\x00\x12G\n\x13new_audio_resampler\x18\x1d \x01(\x0b\x32(.livekit.proto.NewAudioResamplerResponseH\x00\x12\x45\n\x12remix_and_resample\x18\x1e \x01(\x0b\x32\'.livekit.proto.RemixAndResampleResponseH\x00\x12Z\n\x1d\x61udio_stream_from_participant\x18\x1f \x01(\x0b\x32\x31.livekit.proto.AudioStreamFromParticipantResponseH\x00\x12+\n\x04\x65\x32\x65\x65\x18 \x01(\x0b\x32\x1b.livekit.proto.E2eeResponseH\x00\x12\x43\n\x11new_sox_resampler\x18! \x01(\x0b\x32&.livekit.proto.NewSoxResamplerResponseH\x00\x12\x45\n\x12push_sox_resampler\x18\" \x01(\x0b\x32\'.livekit.proto.PushSoxResamplerResponseH\x00\x12G\n\x13\x66lush_sox_resampler\x18# \x01(\x0b\x32(.livekit.proto.FlushSoxResamplerResponseH\x00\x12\x43\n\x11send_chat_message\x18$ \x01(\x0b\x32&.livekit.proto.SendChatMessageResponseH\x00\x12\x38\n\x0bperform_rpc\x18% \x01(\x0b\x32!.livekit.proto.PerformRpcResponseH\x00\x12G\n\x13register_rpc_method\x18& \x01(\x0b\x32(.livekit.proto.RegisterRpcMethodResponseH\x00\x12K\n\x15unregister_rpc_method\x18\' \x01(\x0b\x32*.livekit.proto.UnregisterRpcMethodResponseH\x00\x12\\\n\x1erpc_method_invocation_response\x18( \x01(\x0b\x32\x32.livekit.proto.RpcMethodInvocationResponseResponseH\x00\x12^\n\x1f\x65nable_remote_track_publication\x18) \x01(\x0b\x32\x33.livekit.proto.EnableRemoteTrackPublicationResponseH\x00\x12q\n)update_remote_track_publication_dimension\x18* \x01(\x0b\x32<.livekit.proto.UpdateRemoteTrackPublicationDimensionResponseH\x00\x12\x45\n\x12send_stream_header\x18+ \x01(\x0b\x32\'.livekit.proto.SendStreamHeaderResponseH\x00\x12\x43\n\x11send_stream_chunk\x18, \x01(\x0b\x32&.livekit.proto.SendStreamChunkResponseH\x00\x12G\n\x13send_stream_trailer\x18- \x01(\x0b\x32(.livekit.proto.SendStreamTrailerResponseH\x00\x12y\n.set_data_channel_buffered_amount_low_threshold\x18. \x01(\x0b\x32?.livekit.proto.SetDataChannelBufferedAmountLowThresholdResponseH\x00\x12P\n\x18load_audio_filter_plugin\x18\x30 \x01(\x0b\x32,.livekit.proto.LoadAudioFilterPluginResponseH\x00\x12\x30\n\x07new_apm\x18\x31 \x01(\x0b\x32\x1d.livekit.proto.NewApmResponseH\x00\x12\x45\n\x12\x61pm_process_stream\x18\x32 \x01(\x0b\x32\'.livekit.proto.ApmProcessStreamResponseH\x00\x12T\n\x1a\x61pm_process_reverse_stream\x18\x33 \x01(\x0b\x32..livekit.proto.ApmProcessReverseStreamResponseH\x00\x12H\n\x14\x61pm_set_stream_delay\x18\x34 \x01(\x0b\x32(.livekit.proto.ApmSetStreamDelayResponseH\x00\x12W\n\x15\x62yte_read_incremental\x18\x35 \x01(\x0b\x32\x36.livekit.proto.ByteStreamReaderReadIncrementalResponseH\x00\x12G\n\rbyte_read_all\x18\x36 \x01(\x0b\x32..livekit.proto.ByteStreamReaderReadAllResponseH\x00\x12P\n\x12\x62yte_write_to_file\x18\x37 \x01(\x0b\x32\x32.livekit.proto.ByteStreamReaderWriteToFileResponseH\x00\x12W\n\x15text_read_incremental\x18\x38 \x01(\x0b\x32\x36.livekit.proto.TextStreamReaderReadIncrementalResponseH\x00\x12G\n\rtext_read_all\x18\x39 \x01(\x0b\x32..livekit.proto.TextStreamReaderReadAllResponseH\x00\x12:\n\tsend_file\x18: \x01(\x0b\x32%.livekit.proto.StreamSendFileResponseH\x00\x12:\n\tsend_text\x18; \x01(\x0b\x32%.livekit.proto.StreamSendTextResponseH\x00\x12\x41\n\x10\x62yte_stream_open\x18< \x01(\x0b\x32%.livekit.proto.ByteStreamOpenResponseH\x00\x12I\n\x11\x62yte_stream_write\x18= \x01(\x0b\x32,.livekit.proto.ByteStreamWriterWriteResponseH\x00\x12I\n\x11\x62yte_stream_close\x18> \x01(\x0b\x32,.livekit.proto.ByteStreamWriterCloseResponseH\x00\x12\x41\n\x10text_stream_open\x18? \x01(\x0b\x32%.livekit.proto.TextStreamOpenResponseH\x00\x12I\n\x11text_stream_write\x18@ \x01(\x0b\x32,.livekit.proto.TextStreamWriterWriteResponseH\x00\x12I\n\x11text_stream_close\x18\x41 \x01(\x0b\x32,.livekit.proto.TextStreamWriterCloseResponseH\x00\x12<\n\nsend_bytes\x18\x42 \x01(\x0b\x32&.livekit.proto.StreamSendBytesResponseH\x00\x12g\n$set_remote_track_publication_quality\x18\x43 \x01(\x0b\x32\x37.livekit.proto.SetRemoteTrackPublicationQualityResponseH\x00\x12\x45\n\x12publish_data_track\x18\x44 \x01(\x0b\x32\'.livekit.proto.PublishDataTrackResponseH\x00\x12Q\n\x19local_data_track_try_push\x18\x45 \x01(\x0b\x32,.livekit.proto.LocalDataTrackTryPushResponseH\x00\x12T\n\x1alocal_data_track_unpublish\x18\x46 \x01(\x0b\x32..livekit.proto.LocalDataTrackUnpublishResponseH\x00\x12Y\n\x1dlocal_data_track_is_published\x18G \x01(\x0b\x32\x30.livekit.proto.LocalDataTrackIsPublishedResponseH\x00\x12I\n\x14subscribe_data_track\x18H \x01(\x0b\x32).livekit.proto.SubscribeDataTrackResponseH\x00\x12[\n\x1eremote_data_track_is_published\x18I \x01(\x0b\x32\x31.livekit.proto.RemoteDataTrackIsPublishedResponseH\x00\x12L\n\x16\x64\x61ta_track_stream_read\x18J \x01(\x0b\x32*.livekit.proto.DataTrackStreamReadResponseH\x00\x42\t\n\x07message\"\x94\x16\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\x12>\n\x0c\x63hat_message\x18\x16 \x01(\x0b\x32&.livekit.proto.SendChatMessageCallbackH\x00\x12\x38\n\x0bperform_rpc\x18\x17 \x01(\x0b\x32!.livekit.proto.PerformRpcCallbackH\x00\x12H\n\x15rpc_method_invocation\x18\x18 \x01(\x0b\x32\'.livekit.proto.RpcMethodInvocationEventH\x00\x12\x45\n\x12send_stream_header\x18\x19 \x01(\x0b\x32\'.livekit.proto.SendStreamHeaderCallbackH\x00\x12\x43\n\x11send_stream_chunk\x18\x1a \x01(\x0b\x32&.livekit.proto.SendStreamChunkCallbackH\x00\x12G\n\x13send_stream_trailer\x18\x1b \x01(\x0b\x32(.livekit.proto.SendStreamTrailerCallbackH\x00\x12H\n\x18\x62yte_stream_reader_event\x18\x1c \x01(\x0b\x32$.livekit.proto.ByteStreamReaderEventH\x00\x12U\n\x1b\x62yte_stream_reader_read_all\x18\x1d \x01(\x0b\x32..livekit.proto.ByteStreamReaderReadAllCallbackH\x00\x12^\n byte_stream_reader_write_to_file\x18\x1e \x01(\x0b\x32\x32.livekit.proto.ByteStreamReaderWriteToFileCallbackH\x00\x12\x41\n\x10\x62yte_stream_open\x18\x1f \x01(\x0b\x32%.livekit.proto.ByteStreamOpenCallbackH\x00\x12P\n\x18\x62yte_stream_writer_write\x18 \x01(\x0b\x32,.livekit.proto.ByteStreamWriterWriteCallbackH\x00\x12P\n\x18\x62yte_stream_writer_close\x18! \x01(\x0b\x32,.livekit.proto.ByteStreamWriterCloseCallbackH\x00\x12:\n\tsend_file\x18\" \x01(\x0b\x32%.livekit.proto.StreamSendFileCallbackH\x00\x12H\n\x18text_stream_reader_event\x18# \x01(\x0b\x32$.livekit.proto.TextStreamReaderEventH\x00\x12U\n\x1btext_stream_reader_read_all\x18$ \x01(\x0b\x32..livekit.proto.TextStreamReaderReadAllCallbackH\x00\x12\x41\n\x10text_stream_open\x18% \x01(\x0b\x32%.livekit.proto.TextStreamOpenCallbackH\x00\x12P\n\x18text_stream_writer_write\x18& \x01(\x0b\x32,.livekit.proto.TextStreamWriterWriteCallbackH\x00\x12P\n\x18text_stream_writer_close\x18\' \x01(\x0b\x32,.livekit.proto.TextStreamWriterCloseCallbackH\x00\x12:\n\tsend_text\x18( \x01(\x0b\x32%.livekit.proto.StreamSendTextCallbackH\x00\x12<\n\nsend_bytes\x18) \x01(\x0b\x32&.livekit.proto.StreamSendBytesCallbackH\x00\x12\x45\n\x12publish_data_track\x18* \x01(\x0b\x32\'.livekit.proto.PublishDataTrackCallbackH\x00\x12\x46\n\x17\x64\x61ta_track_stream_event\x18+ \x01(\x0b\x32#.livekit.proto.DataTrackStreamEventH\x00\x42\t\n\x07message\"\x1f\n\x0e\x44isposeRequest\x12\r\n\x05\x61sync\x18\x01 \x02(\x08\"#\n\x0f\x44isposeResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x01(\x04\"#\n\x0f\x44isposeCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"\x85\x01\n\tLogRecord\x12&\n\x05level\x18\x01 \x02(\x0e\x32\x17.livekit.proto.LogLevel\x12\x0e\n\x06target\x18\x02 \x02(\t\x12\x13\n\x0bmodule_path\x18\x03 \x01(\t\x12\x0c\n\x04\x66ile\x18\x04 \x01(\t\x12\x0c\n\x04line\x18\x05 \x01(\r\x12\x0f\n\x07message\x18\x06 \x02(\t\"5\n\x08LogBatch\x12)\n\x07records\x18\x01 \x03(\x0b\x32\x18.livekit.proto.LogRecord\"\x18\n\x05Panic\x12\x0f\n\x07message\x18\x01 \x02(\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.Proto') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -30,24 +31,24 @@ if _descriptor._USE_C_DESCRIPTORS == False: _globals['DESCRIPTOR']._options = None _globals['DESCRIPTOR']._serialized_options = b'\252\002\rLiveKit.Proto' - _globals['_LOGLEVEL']._serialized_start=12859 - _globals['_LOGLEVEL']._serialized_end=12942 - _globals['_FFIREQUEST']._serialized_start=159 - _globals['_FFIREQUEST']._serialized_end=4997 - _globals['_FFIRESPONSE']._serialized_start=5000 - _globals['_FFIRESPONSE']._serialized_end=9837 - _globals['_FFIEVENT']._serialized_start=9840 - _globals['_FFIEVENT']._serialized_end=12533 - _globals['_DISPOSEREQUEST']._serialized_start=12535 - _globals['_DISPOSEREQUEST']._serialized_end=12566 - _globals['_DISPOSERESPONSE']._serialized_start=12568 - _globals['_DISPOSERESPONSE']._serialized_end=12603 - _globals['_DISPOSECALLBACK']._serialized_start=12605 - _globals['_DISPOSECALLBACK']._serialized_end=12640 - _globals['_LOGRECORD']._serialized_start=12643 - _globals['_LOGRECORD']._serialized_end=12776 - _globals['_LOGBATCH']._serialized_start=12778 - _globals['_LOGBATCH']._serialized_end=12831 - _globals['_PANIC']._serialized_start=12833 - _globals['_PANIC']._serialized_end=12857 + _globals['_LOGLEVEL']._serialized_start=14167 + _globals['_LOGLEVEL']._serialized_end=14250 + _globals['_FFIREQUEST']._serialized_start=177 + _globals['_FFIREQUEST']._serialized_end=5585 + _globals['_FFIRESPONSE']._serialized_start=5588 + _globals['_FFIRESPONSE']._serialized_end=11002 + _globals['_FFIEVENT']._serialized_start=11005 + _globals['_FFIEVENT']._serialized_end=13841 + _globals['_DISPOSEREQUEST']._serialized_start=13843 + _globals['_DISPOSEREQUEST']._serialized_end=13874 + _globals['_DISPOSERESPONSE']._serialized_start=13876 + _globals['_DISPOSERESPONSE']._serialized_end=13911 + _globals['_DISPOSECALLBACK']._serialized_start=13913 + _globals['_DISPOSECALLBACK']._serialized_end=13948 + _globals['_LOGRECORD']._serialized_start=13951 + _globals['_LOGRECORD']._serialized_end=14084 + _globals['_LOGBATCH']._serialized_start=14086 + _globals['_LOGBATCH']._serialized_end=14139 + _globals['_PANIC']._serialized_start=14141 + _globals['_PANIC']._serialized_end=14165 # @@protoc_insertion_point(module_scope) diff --git a/livekit-rtc/livekit/rtc/_proto/ffi_pb2.pyi b/livekit-rtc/livekit/rtc/_proto/ffi_pb2.pyi index e9ab7705..3d71bcf0 100644 --- a/livekit-rtc/livekit/rtc/_proto/ffi_pb2.pyi +++ b/livekit-rtc/livekit/rtc/_proto/ffi_pb2.pyi @@ -20,6 +20,7 @@ from . import audio_frame_pb2 import builtins import collections.abc from . import data_stream_pb2 +from . import data_track_pb2 from . import e2ee_pb2 import google.protobuf.descriptor import google.protobuf.internal.containers @@ -162,6 +163,13 @@ class FfiRequest(google.protobuf.message.Message): TEXT_STREAM_CLOSE_FIELD_NUMBER: builtins.int SEND_BYTES_FIELD_NUMBER: builtins.int SET_REMOTE_TRACK_PUBLICATION_QUALITY_FIELD_NUMBER: builtins.int + PUBLISH_DATA_TRACK_FIELD_NUMBER: builtins.int + LOCAL_DATA_TRACK_TRY_PUSH_FIELD_NUMBER: builtins.int + LOCAL_DATA_TRACK_UNPUBLISH_FIELD_NUMBER: builtins.int + LOCAL_DATA_TRACK_IS_PUBLISHED_FIELD_NUMBER: builtins.int + SUBSCRIBE_DATA_TRACK_FIELD_NUMBER: builtins.int + REMOTE_DATA_TRACK_IS_PUBLISHED_FIELD_NUMBER: builtins.int + DATA_TRACK_STREAM_READ_FIELD_NUMBER: builtins.int @property def dispose(self) -> global___DisposeRequest: ... @property @@ -316,6 +324,24 @@ class FfiRequest(google.protobuf.message.Message): def send_bytes(self) -> data_stream_pb2.StreamSendBytesRequest: ... @property def set_remote_track_publication_quality(self) -> track_publication_pb2.SetRemoteTrackPublicationQualityRequest: ... + @property + def publish_data_track(self) -> data_track_pb2.PublishDataTrackRequest: + """Data Track (local)""" + + @property + def local_data_track_try_push(self) -> data_track_pb2.LocalDataTrackTryPushRequest: ... + @property + def local_data_track_unpublish(self) -> data_track_pb2.LocalDataTrackUnpublishRequest: ... + @property + def local_data_track_is_published(self) -> data_track_pb2.LocalDataTrackIsPublishedRequest: ... + @property + def subscribe_data_track(self) -> data_track_pb2.SubscribeDataTrackRequest: + """Data Track (remote)""" + + @property + def remote_data_track_is_published(self) -> data_track_pb2.RemoteDataTrackIsPublishedRequest: ... + @property + def data_track_stream_read(self) -> data_track_pb2.DataTrackStreamReadRequest: ... def __init__( self, *, @@ -386,10 +412,17 @@ class FfiRequest(google.protobuf.message.Message): text_stream_close: data_stream_pb2.TextStreamWriterCloseRequest | None = ..., send_bytes: data_stream_pb2.StreamSendBytesRequest | None = ..., set_remote_track_publication_quality: track_publication_pb2.SetRemoteTrackPublicationQualityRequest | None = ..., + publish_data_track: data_track_pb2.PublishDataTrackRequest | None = ..., + local_data_track_try_push: data_track_pb2.LocalDataTrackTryPushRequest | None = ..., + local_data_track_unpublish: data_track_pb2.LocalDataTrackUnpublishRequest | None = ..., + local_data_track_is_published: data_track_pb2.LocalDataTrackIsPublishedRequest | None = ..., + subscribe_data_track: data_track_pb2.SubscribeDataTrackRequest | None = ..., + remote_data_track_is_published: data_track_pb2.RemoteDataTrackIsPublishedRequest | None = ..., + data_track_stream_read: data_track_pb2.DataTrackStreamReadRequest | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["apm_process_reverse_stream", b"apm_process_reverse_stream", "apm_process_stream", b"apm_process_stream", "apm_set_stream_delay", b"apm_set_stream_delay", "audio_stream_from_participant", b"audio_stream_from_participant", "byte_read_all", b"byte_read_all", "byte_read_incremental", b"byte_read_incremental", "byte_stream_close", b"byte_stream_close", "byte_stream_open", b"byte_stream_open", "byte_stream_write", b"byte_stream_write", "byte_write_to_file", b"byte_write_to_file", "capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "clear_audio_buffer", b"clear_audio_buffer", "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", "edit_chat_message", b"edit_chat_message", "enable_remote_track", b"enable_remote_track", "enable_remote_track_publication", b"enable_remote_track_publication", "flush_sox_resampler", b"flush_sox_resampler", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "load_audio_filter_plugin", b"load_audio_filter_plugin", "local_track_mute", b"local_track_mute", "message", b"message", "new_apm", b"new_apm", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_sox_resampler", b"new_sox_resampler", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "perform_rpc", b"perform_rpc", "publish_data", b"publish_data", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "push_sox_resampler", b"push_sox_resampler", "register_rpc_method", b"register_rpc_method", "remix_and_resample", b"remix_and_resample", "rpc_method_invocation_response", b"rpc_method_invocation_response", "send_bytes", b"send_bytes", "send_chat_message", b"send_chat_message", "send_file", b"send_file", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "send_text", b"send_text", "set_data_channel_buffered_amount_low_threshold", b"set_data_channel_buffered_amount_low_threshold", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_remote_track_publication_quality", b"set_remote_track_publication_quality", "set_subscribed", b"set_subscribed", "set_track_subscription_permissions", b"set_track_subscription_permissions", "text_read_all", b"text_read_all", "text_read_incremental", b"text_read_incremental", "text_stream_close", b"text_stream_close", "text_stream_open", b"text_stream_open", "text_stream_write", b"text_stream_write", "unpublish_track", b"unpublish_track", "unregister_rpc_method", b"unregister_rpc_method", "update_remote_track_publication_dimension", b"update_remote_track_publication_dimension", "video_convert", b"video_convert", "video_stream_from_participant", b"video_stream_from_participant"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["apm_process_reverse_stream", b"apm_process_reverse_stream", "apm_process_stream", b"apm_process_stream", "apm_set_stream_delay", b"apm_set_stream_delay", "audio_stream_from_participant", b"audio_stream_from_participant", "byte_read_all", b"byte_read_all", "byte_read_incremental", b"byte_read_incremental", "byte_stream_close", b"byte_stream_close", "byte_stream_open", b"byte_stream_open", "byte_stream_write", b"byte_stream_write", "byte_write_to_file", b"byte_write_to_file", "capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "clear_audio_buffer", b"clear_audio_buffer", "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", "edit_chat_message", b"edit_chat_message", "enable_remote_track", b"enable_remote_track", "enable_remote_track_publication", b"enable_remote_track_publication", "flush_sox_resampler", b"flush_sox_resampler", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "load_audio_filter_plugin", b"load_audio_filter_plugin", "local_track_mute", b"local_track_mute", "message", b"message", "new_apm", b"new_apm", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_sox_resampler", b"new_sox_resampler", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "perform_rpc", b"perform_rpc", "publish_data", b"publish_data", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "push_sox_resampler", b"push_sox_resampler", "register_rpc_method", b"register_rpc_method", "remix_and_resample", b"remix_and_resample", "rpc_method_invocation_response", b"rpc_method_invocation_response", "send_bytes", b"send_bytes", "send_chat_message", b"send_chat_message", "send_file", b"send_file", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "send_text", b"send_text", "set_data_channel_buffered_amount_low_threshold", b"set_data_channel_buffered_amount_low_threshold", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_remote_track_publication_quality", b"set_remote_track_publication_quality", "set_subscribed", b"set_subscribed", "set_track_subscription_permissions", b"set_track_subscription_permissions", "text_read_all", b"text_read_all", "text_read_incremental", b"text_read_incremental", "text_stream_close", b"text_stream_close", "text_stream_open", b"text_stream_open", "text_stream_write", b"text_stream_write", "unpublish_track", b"unpublish_track", "unregister_rpc_method", b"unregister_rpc_method", "update_remote_track_publication_dimension", b"update_remote_track_publication_dimension", "video_convert", b"video_convert", "video_stream_from_participant", b"video_stream_from_participant"]) -> None: ... - def WhichOneof(self, oneof_group: typing.Literal["message", b"message"]) -> typing.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", "local_track_mute", "enable_remote_track", "get_stats", "set_track_subscription_permissions", "new_video_stream", "new_video_source", "capture_video_frame", "video_convert", "video_stream_from_participant", "new_audio_stream", "new_audio_source", "capture_audio_frame", "clear_audio_buffer", "new_audio_resampler", "remix_and_resample", "e2ee", "audio_stream_from_participant", "new_sox_resampler", "push_sox_resampler", "flush_sox_resampler", "send_chat_message", "edit_chat_message", "perform_rpc", "register_rpc_method", "unregister_rpc_method", "rpc_method_invocation_response", "enable_remote_track_publication", "update_remote_track_publication_dimension", "send_stream_header", "send_stream_chunk", "send_stream_trailer", "set_data_channel_buffered_amount_low_threshold", "load_audio_filter_plugin", "new_apm", "apm_process_stream", "apm_process_reverse_stream", "apm_set_stream_delay", "byte_read_incremental", "byte_read_all", "byte_write_to_file", "text_read_incremental", "text_read_all", "send_file", "send_text", "byte_stream_open", "byte_stream_write", "byte_stream_close", "text_stream_open", "text_stream_write", "text_stream_close", "send_bytes", "set_remote_track_publication_quality"] | None: ... + def HasField(self, field_name: typing.Literal["apm_process_reverse_stream", b"apm_process_reverse_stream", "apm_process_stream", b"apm_process_stream", "apm_set_stream_delay", b"apm_set_stream_delay", "audio_stream_from_participant", b"audio_stream_from_participant", "byte_read_all", b"byte_read_all", "byte_read_incremental", b"byte_read_incremental", "byte_stream_close", b"byte_stream_close", "byte_stream_open", b"byte_stream_open", "byte_stream_write", b"byte_stream_write", "byte_write_to_file", b"byte_write_to_file", "capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "clear_audio_buffer", b"clear_audio_buffer", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "data_track_stream_read", b"data_track_stream_read", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "edit_chat_message", b"edit_chat_message", "enable_remote_track", b"enable_remote_track", "enable_remote_track_publication", b"enable_remote_track_publication", "flush_sox_resampler", b"flush_sox_resampler", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "load_audio_filter_plugin", b"load_audio_filter_plugin", "local_data_track_is_published", b"local_data_track_is_published", "local_data_track_try_push", b"local_data_track_try_push", "local_data_track_unpublish", b"local_data_track_unpublish", "local_track_mute", b"local_track_mute", "message", b"message", "new_apm", b"new_apm", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_sox_resampler", b"new_sox_resampler", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "perform_rpc", b"perform_rpc", "publish_data", b"publish_data", "publish_data_track", b"publish_data_track", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "push_sox_resampler", b"push_sox_resampler", "register_rpc_method", b"register_rpc_method", "remix_and_resample", b"remix_and_resample", "remote_data_track_is_published", b"remote_data_track_is_published", "rpc_method_invocation_response", b"rpc_method_invocation_response", "send_bytes", b"send_bytes", "send_chat_message", b"send_chat_message", "send_file", b"send_file", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "send_text", b"send_text", "set_data_channel_buffered_amount_low_threshold", b"set_data_channel_buffered_amount_low_threshold", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_remote_track_publication_quality", b"set_remote_track_publication_quality", "set_subscribed", b"set_subscribed", "set_track_subscription_permissions", b"set_track_subscription_permissions", "subscribe_data_track", b"subscribe_data_track", "text_read_all", b"text_read_all", "text_read_incremental", b"text_read_incremental", "text_stream_close", b"text_stream_close", "text_stream_open", b"text_stream_open", "text_stream_write", b"text_stream_write", "unpublish_track", b"unpublish_track", "unregister_rpc_method", b"unregister_rpc_method", "update_remote_track_publication_dimension", b"update_remote_track_publication_dimension", "video_convert", b"video_convert", "video_stream_from_participant", b"video_stream_from_participant"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["apm_process_reverse_stream", b"apm_process_reverse_stream", "apm_process_stream", b"apm_process_stream", "apm_set_stream_delay", b"apm_set_stream_delay", "audio_stream_from_participant", b"audio_stream_from_participant", "byte_read_all", b"byte_read_all", "byte_read_incremental", b"byte_read_incremental", "byte_stream_close", b"byte_stream_close", "byte_stream_open", b"byte_stream_open", "byte_stream_write", b"byte_stream_write", "byte_write_to_file", b"byte_write_to_file", "capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "clear_audio_buffer", b"clear_audio_buffer", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "data_track_stream_read", b"data_track_stream_read", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "edit_chat_message", b"edit_chat_message", "enable_remote_track", b"enable_remote_track", "enable_remote_track_publication", b"enable_remote_track_publication", "flush_sox_resampler", b"flush_sox_resampler", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "load_audio_filter_plugin", b"load_audio_filter_plugin", "local_data_track_is_published", b"local_data_track_is_published", "local_data_track_try_push", b"local_data_track_try_push", "local_data_track_unpublish", b"local_data_track_unpublish", "local_track_mute", b"local_track_mute", "message", b"message", "new_apm", b"new_apm", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_sox_resampler", b"new_sox_resampler", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "perform_rpc", b"perform_rpc", "publish_data", b"publish_data", "publish_data_track", b"publish_data_track", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "push_sox_resampler", b"push_sox_resampler", "register_rpc_method", b"register_rpc_method", "remix_and_resample", b"remix_and_resample", "remote_data_track_is_published", b"remote_data_track_is_published", "rpc_method_invocation_response", b"rpc_method_invocation_response", "send_bytes", b"send_bytes", "send_chat_message", b"send_chat_message", "send_file", b"send_file", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "send_text", b"send_text", "set_data_channel_buffered_amount_low_threshold", b"set_data_channel_buffered_amount_low_threshold", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_remote_track_publication_quality", b"set_remote_track_publication_quality", "set_subscribed", b"set_subscribed", "set_track_subscription_permissions", b"set_track_subscription_permissions", "subscribe_data_track", b"subscribe_data_track", "text_read_all", b"text_read_all", "text_read_incremental", b"text_read_incremental", "text_stream_close", b"text_stream_close", "text_stream_open", b"text_stream_open", "text_stream_write", b"text_stream_write", "unpublish_track", b"unpublish_track", "unregister_rpc_method", b"unregister_rpc_method", "update_remote_track_publication_dimension", b"update_remote_track_publication_dimension", "video_convert", b"video_convert", "video_stream_from_participant", b"video_stream_from_participant"]) -> None: ... + def WhichOneof(self, oneof_group: typing.Literal["message", b"message"]) -> typing.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", "local_track_mute", "enable_remote_track", "get_stats", "set_track_subscription_permissions", "new_video_stream", "new_video_source", "capture_video_frame", "video_convert", "video_stream_from_participant", "new_audio_stream", "new_audio_source", "capture_audio_frame", "clear_audio_buffer", "new_audio_resampler", "remix_and_resample", "e2ee", "audio_stream_from_participant", "new_sox_resampler", "push_sox_resampler", "flush_sox_resampler", "send_chat_message", "edit_chat_message", "perform_rpc", "register_rpc_method", "unregister_rpc_method", "rpc_method_invocation_response", "enable_remote_track_publication", "update_remote_track_publication_dimension", "send_stream_header", "send_stream_chunk", "send_stream_trailer", "set_data_channel_buffered_amount_low_threshold", "load_audio_filter_plugin", "new_apm", "apm_process_stream", "apm_process_reverse_stream", "apm_set_stream_delay", "byte_read_incremental", "byte_read_all", "byte_write_to_file", "text_read_incremental", "text_read_all", "send_file", "send_text", "byte_stream_open", "byte_stream_write", "byte_stream_close", "text_stream_open", "text_stream_write", "text_stream_close", "send_bytes", "set_remote_track_publication_quality", "publish_data_track", "local_data_track_try_push", "local_data_track_unpublish", "local_data_track_is_published", "subscribe_data_track", "remote_data_track_is_published", "data_track_stream_read"] | None: ... global___FfiRequest = FfiRequest @@ -465,6 +498,13 @@ class FfiResponse(google.protobuf.message.Message): TEXT_STREAM_CLOSE_FIELD_NUMBER: builtins.int SEND_BYTES_FIELD_NUMBER: builtins.int SET_REMOTE_TRACK_PUBLICATION_QUALITY_FIELD_NUMBER: builtins.int + PUBLISH_DATA_TRACK_FIELD_NUMBER: builtins.int + LOCAL_DATA_TRACK_TRY_PUSH_FIELD_NUMBER: builtins.int + LOCAL_DATA_TRACK_UNPUBLISH_FIELD_NUMBER: builtins.int + LOCAL_DATA_TRACK_IS_PUBLISHED_FIELD_NUMBER: builtins.int + SUBSCRIBE_DATA_TRACK_FIELD_NUMBER: builtins.int + REMOTE_DATA_TRACK_IS_PUBLISHED_FIELD_NUMBER: builtins.int + DATA_TRACK_STREAM_READ_FIELD_NUMBER: builtins.int @property def dispose(self) -> global___DisposeResponse: ... @property @@ -617,6 +657,24 @@ class FfiResponse(google.protobuf.message.Message): def send_bytes(self) -> data_stream_pb2.StreamSendBytesResponse: ... @property def set_remote_track_publication_quality(self) -> track_publication_pb2.SetRemoteTrackPublicationQualityResponse: ... + @property + def publish_data_track(self) -> data_track_pb2.PublishDataTrackResponse: + """Data Track (local)""" + + @property + def local_data_track_try_push(self) -> data_track_pb2.LocalDataTrackTryPushResponse: ... + @property + def local_data_track_unpublish(self) -> data_track_pb2.LocalDataTrackUnpublishResponse: ... + @property + def local_data_track_is_published(self) -> data_track_pb2.LocalDataTrackIsPublishedResponse: ... + @property + def subscribe_data_track(self) -> data_track_pb2.SubscribeDataTrackResponse: + """Data Track (remote)""" + + @property + def remote_data_track_is_published(self) -> data_track_pb2.RemoteDataTrackIsPublishedResponse: ... + @property + def data_track_stream_read(self) -> data_track_pb2.DataTrackStreamReadResponse: ... def __init__( self, *, @@ -686,10 +744,17 @@ class FfiResponse(google.protobuf.message.Message): text_stream_close: data_stream_pb2.TextStreamWriterCloseResponse | None = ..., send_bytes: data_stream_pb2.StreamSendBytesResponse | None = ..., set_remote_track_publication_quality: track_publication_pb2.SetRemoteTrackPublicationQualityResponse | None = ..., + publish_data_track: data_track_pb2.PublishDataTrackResponse | None = ..., + local_data_track_try_push: data_track_pb2.LocalDataTrackTryPushResponse | None = ..., + local_data_track_unpublish: data_track_pb2.LocalDataTrackUnpublishResponse | None = ..., + local_data_track_is_published: data_track_pb2.LocalDataTrackIsPublishedResponse | None = ..., + subscribe_data_track: data_track_pb2.SubscribeDataTrackResponse | None = ..., + remote_data_track_is_published: data_track_pb2.RemoteDataTrackIsPublishedResponse | None = ..., + data_track_stream_read: data_track_pb2.DataTrackStreamReadResponse | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["apm_process_reverse_stream", b"apm_process_reverse_stream", "apm_process_stream", b"apm_process_stream", "apm_set_stream_delay", b"apm_set_stream_delay", "audio_stream_from_participant", b"audio_stream_from_participant", "byte_read_all", b"byte_read_all", "byte_read_incremental", b"byte_read_incremental", "byte_stream_close", b"byte_stream_close", "byte_stream_open", b"byte_stream_open", "byte_stream_write", b"byte_stream_write", "byte_write_to_file", b"byte_write_to_file", "capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "clear_audio_buffer", b"clear_audio_buffer", "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", "enable_remote_track", b"enable_remote_track", "enable_remote_track_publication", b"enable_remote_track_publication", "flush_sox_resampler", b"flush_sox_resampler", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "load_audio_filter_plugin", b"load_audio_filter_plugin", "local_track_mute", b"local_track_mute", "message", b"message", "new_apm", b"new_apm", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_sox_resampler", b"new_sox_resampler", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "perform_rpc", b"perform_rpc", "publish_data", b"publish_data", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "push_sox_resampler", b"push_sox_resampler", "register_rpc_method", b"register_rpc_method", "remix_and_resample", b"remix_and_resample", "rpc_method_invocation_response", b"rpc_method_invocation_response", "send_bytes", b"send_bytes", "send_chat_message", b"send_chat_message", "send_file", b"send_file", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "send_text", b"send_text", "set_data_channel_buffered_amount_low_threshold", b"set_data_channel_buffered_amount_low_threshold", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_remote_track_publication_quality", b"set_remote_track_publication_quality", "set_subscribed", b"set_subscribed", "set_track_subscription_permissions", b"set_track_subscription_permissions", "text_read_all", b"text_read_all", "text_read_incremental", b"text_read_incremental", "text_stream_close", b"text_stream_close", "text_stream_open", b"text_stream_open", "text_stream_write", b"text_stream_write", "unpublish_track", b"unpublish_track", "unregister_rpc_method", b"unregister_rpc_method", "update_remote_track_publication_dimension", b"update_remote_track_publication_dimension", "video_convert", b"video_convert", "video_stream_from_participant", b"video_stream_from_participant"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["apm_process_reverse_stream", b"apm_process_reverse_stream", "apm_process_stream", b"apm_process_stream", "apm_set_stream_delay", b"apm_set_stream_delay", "audio_stream_from_participant", b"audio_stream_from_participant", "byte_read_all", b"byte_read_all", "byte_read_incremental", b"byte_read_incremental", "byte_stream_close", b"byte_stream_close", "byte_stream_open", b"byte_stream_open", "byte_stream_write", b"byte_stream_write", "byte_write_to_file", b"byte_write_to_file", "capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "clear_audio_buffer", b"clear_audio_buffer", "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", "enable_remote_track", b"enable_remote_track", "enable_remote_track_publication", b"enable_remote_track_publication", "flush_sox_resampler", b"flush_sox_resampler", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "load_audio_filter_plugin", b"load_audio_filter_plugin", "local_track_mute", b"local_track_mute", "message", b"message", "new_apm", b"new_apm", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_sox_resampler", b"new_sox_resampler", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "perform_rpc", b"perform_rpc", "publish_data", b"publish_data", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "push_sox_resampler", b"push_sox_resampler", "register_rpc_method", b"register_rpc_method", "remix_and_resample", b"remix_and_resample", "rpc_method_invocation_response", b"rpc_method_invocation_response", "send_bytes", b"send_bytes", "send_chat_message", b"send_chat_message", "send_file", b"send_file", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "send_text", b"send_text", "set_data_channel_buffered_amount_low_threshold", b"set_data_channel_buffered_amount_low_threshold", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_remote_track_publication_quality", b"set_remote_track_publication_quality", "set_subscribed", b"set_subscribed", "set_track_subscription_permissions", b"set_track_subscription_permissions", "text_read_all", b"text_read_all", "text_read_incremental", b"text_read_incremental", "text_stream_close", b"text_stream_close", "text_stream_open", b"text_stream_open", "text_stream_write", b"text_stream_write", "unpublish_track", b"unpublish_track", "unregister_rpc_method", b"unregister_rpc_method", "update_remote_track_publication_dimension", b"update_remote_track_publication_dimension", "video_convert", b"video_convert", "video_stream_from_participant", b"video_stream_from_participant"]) -> None: ... - def WhichOneof(self, oneof_group: typing.Literal["message", b"message"]) -> typing.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", "local_track_mute", "enable_remote_track", "get_stats", "set_track_subscription_permissions", "new_video_stream", "new_video_source", "capture_video_frame", "video_convert", "video_stream_from_participant", "new_audio_stream", "new_audio_source", "capture_audio_frame", "clear_audio_buffer", "new_audio_resampler", "remix_and_resample", "audio_stream_from_participant", "e2ee", "new_sox_resampler", "push_sox_resampler", "flush_sox_resampler", "send_chat_message", "perform_rpc", "register_rpc_method", "unregister_rpc_method", "rpc_method_invocation_response", "enable_remote_track_publication", "update_remote_track_publication_dimension", "send_stream_header", "send_stream_chunk", "send_stream_trailer", "set_data_channel_buffered_amount_low_threshold", "load_audio_filter_plugin", "new_apm", "apm_process_stream", "apm_process_reverse_stream", "apm_set_stream_delay", "byte_read_incremental", "byte_read_all", "byte_write_to_file", "text_read_incremental", "text_read_all", "send_file", "send_text", "byte_stream_open", "byte_stream_write", "byte_stream_close", "text_stream_open", "text_stream_write", "text_stream_close", "send_bytes", "set_remote_track_publication_quality"] | None: ... + def HasField(self, field_name: typing.Literal["apm_process_reverse_stream", b"apm_process_reverse_stream", "apm_process_stream", b"apm_process_stream", "apm_set_stream_delay", b"apm_set_stream_delay", "audio_stream_from_participant", b"audio_stream_from_participant", "byte_read_all", b"byte_read_all", "byte_read_incremental", b"byte_read_incremental", "byte_stream_close", b"byte_stream_close", "byte_stream_open", b"byte_stream_open", "byte_stream_write", b"byte_stream_write", "byte_write_to_file", b"byte_write_to_file", "capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "clear_audio_buffer", b"clear_audio_buffer", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "data_track_stream_read", b"data_track_stream_read", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "enable_remote_track", b"enable_remote_track", "enable_remote_track_publication", b"enable_remote_track_publication", "flush_sox_resampler", b"flush_sox_resampler", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "load_audio_filter_plugin", b"load_audio_filter_plugin", "local_data_track_is_published", b"local_data_track_is_published", "local_data_track_try_push", b"local_data_track_try_push", "local_data_track_unpublish", b"local_data_track_unpublish", "local_track_mute", b"local_track_mute", "message", b"message", "new_apm", b"new_apm", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_sox_resampler", b"new_sox_resampler", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "perform_rpc", b"perform_rpc", "publish_data", b"publish_data", "publish_data_track", b"publish_data_track", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "push_sox_resampler", b"push_sox_resampler", "register_rpc_method", b"register_rpc_method", "remix_and_resample", b"remix_and_resample", "remote_data_track_is_published", b"remote_data_track_is_published", "rpc_method_invocation_response", b"rpc_method_invocation_response", "send_bytes", b"send_bytes", "send_chat_message", b"send_chat_message", "send_file", b"send_file", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "send_text", b"send_text", "set_data_channel_buffered_amount_low_threshold", b"set_data_channel_buffered_amount_low_threshold", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_remote_track_publication_quality", b"set_remote_track_publication_quality", "set_subscribed", b"set_subscribed", "set_track_subscription_permissions", b"set_track_subscription_permissions", "subscribe_data_track", b"subscribe_data_track", "text_read_all", b"text_read_all", "text_read_incremental", b"text_read_incremental", "text_stream_close", b"text_stream_close", "text_stream_open", b"text_stream_open", "text_stream_write", b"text_stream_write", "unpublish_track", b"unpublish_track", "unregister_rpc_method", b"unregister_rpc_method", "update_remote_track_publication_dimension", b"update_remote_track_publication_dimension", "video_convert", b"video_convert", "video_stream_from_participant", b"video_stream_from_participant"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["apm_process_reverse_stream", b"apm_process_reverse_stream", "apm_process_stream", b"apm_process_stream", "apm_set_stream_delay", b"apm_set_stream_delay", "audio_stream_from_participant", b"audio_stream_from_participant", "byte_read_all", b"byte_read_all", "byte_read_incremental", b"byte_read_incremental", "byte_stream_close", b"byte_stream_close", "byte_stream_open", b"byte_stream_open", "byte_stream_write", b"byte_stream_write", "byte_write_to_file", b"byte_write_to_file", "capture_audio_frame", b"capture_audio_frame", "capture_video_frame", b"capture_video_frame", "clear_audio_buffer", b"clear_audio_buffer", "connect", b"connect", "create_audio_track", b"create_audio_track", "create_video_track", b"create_video_track", "data_track_stream_read", b"data_track_stream_read", "disconnect", b"disconnect", "dispose", b"dispose", "e2ee", b"e2ee", "enable_remote_track", b"enable_remote_track", "enable_remote_track_publication", b"enable_remote_track_publication", "flush_sox_resampler", b"flush_sox_resampler", "get_session_stats", b"get_session_stats", "get_stats", b"get_stats", "load_audio_filter_plugin", b"load_audio_filter_plugin", "local_data_track_is_published", b"local_data_track_is_published", "local_data_track_try_push", b"local_data_track_try_push", "local_data_track_unpublish", b"local_data_track_unpublish", "local_track_mute", b"local_track_mute", "message", b"message", "new_apm", b"new_apm", "new_audio_resampler", b"new_audio_resampler", "new_audio_source", b"new_audio_source", "new_audio_stream", b"new_audio_stream", "new_sox_resampler", b"new_sox_resampler", "new_video_source", b"new_video_source", "new_video_stream", b"new_video_stream", "perform_rpc", b"perform_rpc", "publish_data", b"publish_data", "publish_data_track", b"publish_data_track", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "push_sox_resampler", b"push_sox_resampler", "register_rpc_method", b"register_rpc_method", "remix_and_resample", b"remix_and_resample", "remote_data_track_is_published", b"remote_data_track_is_published", "rpc_method_invocation_response", b"rpc_method_invocation_response", "send_bytes", b"send_bytes", "send_chat_message", b"send_chat_message", "send_file", b"send_file", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "send_text", b"send_text", "set_data_channel_buffered_amount_low_threshold", b"set_data_channel_buffered_amount_low_threshold", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "set_remote_track_publication_quality", b"set_remote_track_publication_quality", "set_subscribed", b"set_subscribed", "set_track_subscription_permissions", b"set_track_subscription_permissions", "subscribe_data_track", b"subscribe_data_track", "text_read_all", b"text_read_all", "text_read_incremental", b"text_read_incremental", "text_stream_close", b"text_stream_close", "text_stream_open", b"text_stream_open", "text_stream_write", b"text_stream_write", "unpublish_track", b"unpublish_track", "unregister_rpc_method", b"unregister_rpc_method", "update_remote_track_publication_dimension", b"update_remote_track_publication_dimension", "video_convert", b"video_convert", "video_stream_from_participant", b"video_stream_from_participant"]) -> None: ... + def WhichOneof(self, oneof_group: typing.Literal["message", b"message"]) -> typing.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", "local_track_mute", "enable_remote_track", "get_stats", "set_track_subscription_permissions", "new_video_stream", "new_video_source", "capture_video_frame", "video_convert", "video_stream_from_participant", "new_audio_stream", "new_audio_source", "capture_audio_frame", "clear_audio_buffer", "new_audio_resampler", "remix_and_resample", "audio_stream_from_participant", "e2ee", "new_sox_resampler", "push_sox_resampler", "flush_sox_resampler", "send_chat_message", "perform_rpc", "register_rpc_method", "unregister_rpc_method", "rpc_method_invocation_response", "enable_remote_track_publication", "update_remote_track_publication_dimension", "send_stream_header", "send_stream_chunk", "send_stream_trailer", "set_data_channel_buffered_amount_low_threshold", "load_audio_filter_plugin", "new_apm", "apm_process_stream", "apm_process_reverse_stream", "apm_set_stream_delay", "byte_read_incremental", "byte_read_all", "byte_write_to_file", "text_read_incremental", "text_read_all", "send_file", "send_text", "byte_stream_open", "byte_stream_write", "byte_stream_close", "text_stream_open", "text_stream_write", "text_stream_close", "send_bytes", "set_remote_track_publication_quality", "publish_data_track", "local_data_track_try_push", "local_data_track_unpublish", "local_data_track_is_published", "subscribe_data_track", "remote_data_track_is_published", "data_track_stream_read"] | None: ... global___FfiResponse = FfiResponse @@ -742,6 +807,8 @@ class FfiEvent(google.protobuf.message.Message): TEXT_STREAM_WRITER_CLOSE_FIELD_NUMBER: builtins.int SEND_TEXT_FIELD_NUMBER: builtins.int SEND_BYTES_FIELD_NUMBER: builtins.int + PUBLISH_DATA_TRACK_FIELD_NUMBER: builtins.int + DATA_TRACK_STREAM_EVENT_FIELD_NUMBER: builtins.int @property def room_event(self) -> room_pb2.RoomEvent: ... @property @@ -826,6 +893,14 @@ class FfiEvent(google.protobuf.message.Message): def send_text(self) -> data_stream_pb2.StreamSendTextCallback: ... @property def send_bytes(self) -> data_stream_pb2.StreamSendBytesCallback: ... + @property + def publish_data_track(self) -> data_track_pb2.PublishDataTrackCallback: + """Data Track (local)""" + + @property + def data_track_stream_event(self) -> data_track_pb2.DataTrackStreamEvent: + """Data Track (remote)""" + def __init__( self, *, @@ -869,10 +944,12 @@ class FfiEvent(google.protobuf.message.Message): text_stream_writer_close: data_stream_pb2.TextStreamWriterCloseCallback | None = ..., send_text: data_stream_pb2.StreamSendTextCallback | None = ..., send_bytes: data_stream_pb2.StreamSendBytesCallback | None = ..., + publish_data_track: data_track_pb2.PublishDataTrackCallback | None = ..., + data_track_stream_event: data_track_pb2.DataTrackStreamEvent | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["audio_stream_event", b"audio_stream_event", "byte_stream_open", b"byte_stream_open", "byte_stream_reader_event", b"byte_stream_reader_event", "byte_stream_reader_read_all", b"byte_stream_reader_read_all", "byte_stream_reader_write_to_file", b"byte_stream_reader_write_to_file", "byte_stream_writer_close", b"byte_stream_writer_close", "byte_stream_writer_write", b"byte_stream_writer_write", "capture_audio_frame", b"capture_audio_frame", "chat_message", b"chat_message", "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", "perform_rpc", b"perform_rpc", "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", "rpc_method_invocation", b"rpc_method_invocation", "send_bytes", b"send_bytes", "send_file", b"send_file", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "send_text", b"send_text", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "text_stream_open", b"text_stream_open", "text_stream_reader_event", b"text_stream_reader_event", "text_stream_reader_read_all", b"text_stream_reader_read_all", "text_stream_writer_close", b"text_stream_writer_close", "text_stream_writer_write", b"text_stream_writer_write", "track_event", b"track_event", "unpublish_track", b"unpublish_track", "video_stream_event", b"video_stream_event"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["audio_stream_event", b"audio_stream_event", "byte_stream_open", b"byte_stream_open", "byte_stream_reader_event", b"byte_stream_reader_event", "byte_stream_reader_read_all", b"byte_stream_reader_read_all", "byte_stream_reader_write_to_file", b"byte_stream_reader_write_to_file", "byte_stream_writer_close", b"byte_stream_writer_close", "byte_stream_writer_write", b"byte_stream_writer_write", "capture_audio_frame", b"capture_audio_frame", "chat_message", b"chat_message", "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", "perform_rpc", b"perform_rpc", "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", "rpc_method_invocation", b"rpc_method_invocation", "send_bytes", b"send_bytes", "send_file", b"send_file", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "send_text", b"send_text", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "text_stream_open", b"text_stream_open", "text_stream_reader_event", b"text_stream_reader_event", "text_stream_reader_read_all", b"text_stream_reader_read_all", "text_stream_writer_close", b"text_stream_writer_close", "text_stream_writer_write", b"text_stream_writer_write", "track_event", b"track_event", "unpublish_track", b"unpublish_track", "video_stream_event", b"video_stream_event"]) -> None: ... - def WhichOneof(self, oneof_group: typing.Literal["message", b"message"]) -> typing.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", "chat_message", "perform_rpc", "rpc_method_invocation", "send_stream_header", "send_stream_chunk", "send_stream_trailer", "byte_stream_reader_event", "byte_stream_reader_read_all", "byte_stream_reader_write_to_file", "byte_stream_open", "byte_stream_writer_write", "byte_stream_writer_close", "send_file", "text_stream_reader_event", "text_stream_reader_read_all", "text_stream_open", "text_stream_writer_write", "text_stream_writer_close", "send_text", "send_bytes"] | None: ... + def HasField(self, field_name: typing.Literal["audio_stream_event", b"audio_stream_event", "byte_stream_open", b"byte_stream_open", "byte_stream_reader_event", b"byte_stream_reader_event", "byte_stream_reader_read_all", b"byte_stream_reader_read_all", "byte_stream_reader_write_to_file", b"byte_stream_reader_write_to_file", "byte_stream_writer_close", b"byte_stream_writer_close", "byte_stream_writer_write", b"byte_stream_writer_write", "capture_audio_frame", b"capture_audio_frame", "chat_message", b"chat_message", "connect", b"connect", "data_track_stream_event", b"data_track_stream_event", "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", "perform_rpc", b"perform_rpc", "publish_data", b"publish_data", "publish_data_track", b"publish_data_track", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "room_event", b"room_event", "rpc_method_invocation", b"rpc_method_invocation", "send_bytes", b"send_bytes", "send_file", b"send_file", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "send_text", b"send_text", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "text_stream_open", b"text_stream_open", "text_stream_reader_event", b"text_stream_reader_event", "text_stream_reader_read_all", b"text_stream_reader_read_all", "text_stream_writer_close", b"text_stream_writer_close", "text_stream_writer_write", b"text_stream_writer_write", "track_event", b"track_event", "unpublish_track", b"unpublish_track", "video_stream_event", b"video_stream_event"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["audio_stream_event", b"audio_stream_event", "byte_stream_open", b"byte_stream_open", "byte_stream_reader_event", b"byte_stream_reader_event", "byte_stream_reader_read_all", b"byte_stream_reader_read_all", "byte_stream_reader_write_to_file", b"byte_stream_reader_write_to_file", "byte_stream_writer_close", b"byte_stream_writer_close", "byte_stream_writer_write", b"byte_stream_writer_write", "capture_audio_frame", b"capture_audio_frame", "chat_message", b"chat_message", "connect", b"connect", "data_track_stream_event", b"data_track_stream_event", "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", "perform_rpc", b"perform_rpc", "publish_data", b"publish_data", "publish_data_track", b"publish_data_track", "publish_sip_dtmf", b"publish_sip_dtmf", "publish_track", b"publish_track", "publish_transcription", b"publish_transcription", "room_event", b"room_event", "rpc_method_invocation", b"rpc_method_invocation", "send_bytes", b"send_bytes", "send_file", b"send_file", "send_stream_chunk", b"send_stream_chunk", "send_stream_header", b"send_stream_header", "send_stream_trailer", b"send_stream_trailer", "send_text", b"send_text", "set_local_attributes", b"set_local_attributes", "set_local_metadata", b"set_local_metadata", "set_local_name", b"set_local_name", "text_stream_open", b"text_stream_open", "text_stream_reader_event", b"text_stream_reader_event", "text_stream_reader_read_all", b"text_stream_reader_read_all", "text_stream_writer_close", b"text_stream_writer_close", "text_stream_writer_write", b"text_stream_writer_write", "track_event", b"track_event", "unpublish_track", b"unpublish_track", "video_stream_event", b"video_stream_event"]) -> None: ... + def WhichOneof(self, oneof_group: typing.Literal["message", b"message"]) -> typing.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", "chat_message", "perform_rpc", "rpc_method_invocation", "send_stream_header", "send_stream_chunk", "send_stream_trailer", "byte_stream_reader_event", "byte_stream_reader_read_all", "byte_stream_reader_write_to_file", "byte_stream_open", "byte_stream_writer_write", "byte_stream_writer_close", "send_file", "text_stream_reader_event", "text_stream_reader_read_all", "text_stream_open", "text_stream_writer_write", "text_stream_writer_close", "send_text", "send_bytes", "publish_data_track", "data_track_stream_event"] | None: ... global___FfiEvent = FfiEvent diff --git a/livekit-rtc/livekit/rtc/_proto/participant_pb2.py b/livekit-rtc/livekit/rtc/_proto/participant_pb2.py index 4b45e523..f4943934 100644 --- a/livekit-rtc/livekit/rtc/_proto/participant_pb2.py +++ b/livekit-rtc/livekit/rtc/_proto/participant_pb2.py @@ -16,7 +16,7 @@ from . import track_pb2 as track__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11participant.proto\x12\rlivekit.proto\x1a\x0chandle.proto\x1a\x0btrack.proto\"\xa7\x03\n\x0fParticipantInfo\x12\x0b\n\x03sid\x18\x01 \x02(\t\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x10\n\x08identity\x18\x03 \x02(\t\x12\x10\n\x08metadata\x18\x04 \x02(\t\x12\x42\n\nattributes\x18\x05 \x03(\x0b\x32..livekit.proto.ParticipantInfo.AttributesEntry\x12,\n\x04kind\x18\x06 \x02(\x0e\x32\x1e.livekit.proto.ParticipantKind\x12:\n\x11\x64isconnect_reason\x18\x07 \x02(\x0e\x32\x1f.livekit.proto.DisconnectReason\x12:\n\x0ckind_details\x18\x08 \x03(\x0e\x32$.livekit.proto.ParticipantKindDetail\x12\x38\n\npermission\x18\t \x01(\x0b\x32$.livekit.proto.ParticipantPermission\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 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12,\n\x04info\x18\x02 \x02(\x0b\x32\x1e.livekit.proto.ParticipantInfo\"\x84\x02\n\x15ParticipantPermission\x12\x15\n\rcan_subscribe\x18\x01 \x02(\x08\x12\x13\n\x0b\x63\x61n_publish\x18\x02 \x02(\x08\x12\x18\n\x10\x63\x61n_publish_data\x18\x03 \x02(\x08\x12\x37\n\x13\x63\x61n_publish_sources\x18\t \x03(\x0e\x32\x1a.livekit.proto.TrackSource\x12\x0e\n\x06hidden\x18\x07 \x02(\x08\x12\x1b\n\x13\x63\x61n_update_metadata\x18\n \x02(\x08\x12\x1d\n\x15\x63\x61n_subscribe_metrics\x18\x0c \x02(\x08\x12 \n\x18\x63\x61n_manage_agent_session\x18\r \x02(\x08*\xde\x01\n\x0fParticipantKind\x12\x1d\n\x19PARTICIPANT_KIND_STANDARD\x10\x00\x12\x1c\n\x18PARTICIPANT_KIND_INGRESS\x10\x01\x12\x1b\n\x17PARTICIPANT_KIND_EGRESS\x10\x02\x12\x18\n\x14PARTICIPANT_KIND_SIP\x10\x03\x12\x1a\n\x16PARTICIPANT_KIND_AGENT\x10\x04\x12\x1e\n\x1aPARTICIPANT_KIND_CONNECTOR\x10\x05\x12\x1b\n\x17PARTICIPANT_KIND_BRIDGE\x10\x06*\xee\x01\n\x15ParticipantKindDetail\x12\'\n#PARTICIPANT_KIND_DETAIL_CLOUD_AGENT\x10\x00\x12%\n!PARTICIPANT_KIND_DETAIL_FORWARDED\x10\x01\x12.\n*PARTICIPANT_KIND_DETAIL_CONNECTOR_WHATSAPP\x10\x02\x12,\n(PARTICIPANT_KIND_DETAIL_CONNECTOR_TWILIO\x10\x03\x12\'\n#PARTICIPANT_KIND_DETAIL_BRIDGE_RTSP\x10\x04*\xe8\x02\n\x10\x44isconnectReason\x12\x12\n\x0eUNKNOWN_REASON\x10\x00\x12\x14\n\x10\x43LIENT_INITIATED\x10\x01\x12\x16\n\x12\x44UPLICATE_IDENTITY\x10\x02\x12\x13\n\x0fSERVER_SHUTDOWN\x10\x03\x12\x17\n\x13PARTICIPANT_REMOVED\x10\x04\x12\x10\n\x0cROOM_DELETED\x10\x05\x12\x12\n\x0eSTATE_MISMATCH\x10\x06\x12\x10\n\x0cJOIN_FAILURE\x10\x07\x12\r\n\tMIGRATION\x10\x08\x12\x10\n\x0cSIGNAL_CLOSE\x10\t\x12\x0f\n\x0bROOM_CLOSED\x10\n\x12\x14\n\x10USER_UNAVAILABLE\x10\x0b\x12\x11\n\rUSER_REJECTED\x10\x0c\x12\x15\n\x11SIP_TRUNK_FAILURE\x10\r\x12\x16\n\x12\x43ONNECTION_TIMEOUT\x10\x0e\x12\x11\n\rMEDIA_FAILURE\x10\x0f\x12\x0f\n\x0b\x41GENT_ERROR\x10\x10\x42\x10\xaa\x02\rLiveKit.Proto') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11participant.proto\x12\rlivekit.proto\x1a\x0chandle.proto\x1a\x0btrack.proto\"\xea\x03\n\x0fParticipantInfo\x12\x0b\n\x03sid\x18\x01 \x02(\t\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x10\n\x08identity\x18\x03 \x02(\t\x12.\n\x05state\x18\x04 \x02(\x0e\x32\x1f.livekit.proto.ParticipantState\x12\x10\n\x08metadata\x18\x05 \x02(\t\x12\x42\n\nattributes\x18\x06 \x03(\x0b\x32..livekit.proto.ParticipantInfo.AttributesEntry\x12,\n\x04kind\x18\x07 \x02(\x0e\x32\x1e.livekit.proto.ParticipantKind\x12:\n\x11\x64isconnect_reason\x18\x08 \x02(\x0e\x32\x1f.livekit.proto.DisconnectReason\x12\x11\n\tjoined_at\x18\t \x02(\x03\x12:\n\x0ckind_details\x18\n \x03(\x0e\x32$.livekit.proto.ParticipantKindDetail\x12\x38\n\npermission\x18\x0b \x01(\x0b\x32$.livekit.proto.ParticipantPermission\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 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12,\n\x04info\x18\x02 \x02(\x0b\x32\x1e.livekit.proto.ParticipantInfo\"\x84\x02\n\x15ParticipantPermission\x12\x15\n\rcan_subscribe\x18\x01 \x02(\x08\x12\x13\n\x0b\x63\x61n_publish\x18\x02 \x02(\x08\x12\x18\n\x10\x63\x61n_publish_data\x18\x03 \x02(\x08\x12\x37\n\x13\x63\x61n_publish_sources\x18\t \x03(\x0e\x32\x1a.livekit.proto.TrackSource\x12\x0e\n\x06hidden\x18\x07 \x02(\x08\x12\x1b\n\x13\x63\x61n_update_metadata\x18\n \x02(\x08\x12\x1d\n\x15\x63\x61n_subscribe_metrics\x18\x0c \x02(\x08\x12 \n\x18\x63\x61n_manage_agent_session\x18\r \x02(\x08*\x91\x01\n\x10ParticipantState\x12\x1d\n\x19PARTICIPANT_STATE_JOINING\x10\x00\x12\x1c\n\x18PARTICIPANT_STATE_JOINED\x10\x01\x12\x1c\n\x18PARTICIPANT_STATE_ACTIVE\x10\x02\x12\"\n\x1ePARTICIPANT_STATE_DISCONNECTED\x10\x03*\xde\x01\n\x0fParticipantKind\x12\x1d\n\x19PARTICIPANT_KIND_STANDARD\x10\x00\x12\x1c\n\x18PARTICIPANT_KIND_INGRESS\x10\x01\x12\x1b\n\x17PARTICIPANT_KIND_EGRESS\x10\x02\x12\x18\n\x14PARTICIPANT_KIND_SIP\x10\x03\x12\x1a\n\x16PARTICIPANT_KIND_AGENT\x10\x04\x12\x1e\n\x1aPARTICIPANT_KIND_CONNECTOR\x10\x05\x12\x1b\n\x17PARTICIPANT_KIND_BRIDGE\x10\x06*\xee\x01\n\x15ParticipantKindDetail\x12\'\n#PARTICIPANT_KIND_DETAIL_CLOUD_AGENT\x10\x00\x12%\n!PARTICIPANT_KIND_DETAIL_FORWARDED\x10\x01\x12.\n*PARTICIPANT_KIND_DETAIL_CONNECTOR_WHATSAPP\x10\x02\x12,\n(PARTICIPANT_KIND_DETAIL_CONNECTOR_TWILIO\x10\x03\x12\'\n#PARTICIPANT_KIND_DETAIL_BRIDGE_RTSP\x10\x04*\xe8\x02\n\x10\x44isconnectReason\x12\x12\n\x0eUNKNOWN_REASON\x10\x00\x12\x14\n\x10\x43LIENT_INITIATED\x10\x01\x12\x16\n\x12\x44UPLICATE_IDENTITY\x10\x02\x12\x13\n\x0fSERVER_SHUTDOWN\x10\x03\x12\x17\n\x13PARTICIPANT_REMOVED\x10\x04\x12\x10\n\x0cROOM_DELETED\x10\x05\x12\x12\n\x0eSTATE_MISMATCH\x10\x06\x12\x10\n\x0cJOIN_FAILURE\x10\x07\x12\r\n\tMIGRATION\x10\x08\x12\x10\n\x0cSIGNAL_CLOSE\x10\t\x12\x0f\n\x0bROOM_CLOSED\x10\n\x12\x14\n\x10USER_UNAVAILABLE\x10\x0b\x12\x11\n\rUSER_REJECTED\x10\x0c\x12\x15\n\x11SIP_TRUNK_FAILURE\x10\r\x12\x16\n\x12\x43ONNECTION_TIMEOUT\x10\x0e\x12\x11\n\rMEDIA_FAILURE\x10\x0f\x12\x0f\n\x0b\x41GENT_ERROR\x10\x10\x42\x10\xaa\x02\rLiveKit.Proto') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -26,18 +26,20 @@ _globals['DESCRIPTOR']._serialized_options = b'\252\002\rLiveKit.Proto' _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._options = None _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_PARTICIPANTKIND']._serialized_start=866 - _globals['_PARTICIPANTKIND']._serialized_end=1088 - _globals['_PARTICIPANTKINDDETAIL']._serialized_start=1091 - _globals['_PARTICIPANTKINDDETAIL']._serialized_end=1329 - _globals['_DISCONNECTREASON']._serialized_start=1332 - _globals['_DISCONNECTREASON']._serialized_end=1692 + _globals['_PARTICIPANTSTATE']._serialized_start=933 + _globals['_PARTICIPANTSTATE']._serialized_end=1078 + _globals['_PARTICIPANTKIND']._serialized_start=1081 + _globals['_PARTICIPANTKIND']._serialized_end=1303 + _globals['_PARTICIPANTKINDDETAIL']._serialized_start=1306 + _globals['_PARTICIPANTKINDDETAIL']._serialized_end=1544 + _globals['_DISCONNECTREASON']._serialized_start=1547 + _globals['_DISCONNECTREASON']._serialized_end=1907 _globals['_PARTICIPANTINFO']._serialized_start=64 - _globals['_PARTICIPANTINFO']._serialized_end=487 - _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_start=438 - _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_end=487 - _globals['_OWNEDPARTICIPANT']._serialized_start=489 - _globals['_OWNEDPARTICIPANT']._serialized_end=600 - _globals['_PARTICIPANTPERMISSION']._serialized_start=603 - _globals['_PARTICIPANTPERMISSION']._serialized_end=863 + _globals['_PARTICIPANTINFO']._serialized_end=554 + _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_start=505 + _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_end=554 + _globals['_OWNEDPARTICIPANT']._serialized_start=556 + _globals['_OWNEDPARTICIPANT']._serialized_end=667 + _globals['_PARTICIPANTPERMISSION']._serialized_start=670 + _globals['_PARTICIPANTPERMISSION']._serialized_end=930 # @@protoc_insertion_point(module_scope) diff --git a/livekit-rtc/livekit/rtc/_proto/participant_pb2.pyi b/livekit-rtc/livekit/rtc/_proto/participant_pb2.pyi index 137c0c63..4c84d2c6 100644 --- a/livekit-rtc/livekit/rtc/_proto/participant_pb2.pyi +++ b/livekit-rtc/livekit/rtc/_proto/participant_pb2.pyi @@ -34,6 +34,25 @@ else: DESCRIPTOR: google.protobuf.descriptor.FileDescriptor +class _ParticipantState: + ValueType = typing.NewType("ValueType", builtins.int) + V: typing_extensions.TypeAlias = ValueType + +class _ParticipantStateEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_ParticipantState.ValueType], builtins.type): + DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor + PARTICIPANT_STATE_JOINING: _ParticipantState.ValueType # 0 + PARTICIPANT_STATE_JOINED: _ParticipantState.ValueType # 1 + PARTICIPANT_STATE_ACTIVE: _ParticipantState.ValueType # 2 + PARTICIPANT_STATE_DISCONNECTED: _ParticipantState.ValueType # 3 + +class ParticipantState(_ParticipantState, metaclass=_ParticipantStateEnumTypeWrapper): ... + +PARTICIPANT_STATE_JOINING: ParticipantState.ValueType # 0 +PARTICIPANT_STATE_JOINED: ParticipantState.ValueType # 1 +PARTICIPANT_STATE_ACTIVE: ParticipantState.ValueType # 2 +PARTICIPANT_STATE_DISCONNECTED: ParticipantState.ValueType # 3 +global___ParticipantState = ParticipantState + class _ParticipantKind: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType @@ -175,18 +194,23 @@ class ParticipantInfo(google.protobuf.message.Message): SID_FIELD_NUMBER: builtins.int NAME_FIELD_NUMBER: builtins.int IDENTITY_FIELD_NUMBER: builtins.int + STATE_FIELD_NUMBER: builtins.int METADATA_FIELD_NUMBER: builtins.int ATTRIBUTES_FIELD_NUMBER: builtins.int KIND_FIELD_NUMBER: builtins.int DISCONNECT_REASON_FIELD_NUMBER: builtins.int + JOINED_AT_FIELD_NUMBER: builtins.int KIND_DETAILS_FIELD_NUMBER: builtins.int PERMISSION_FIELD_NUMBER: builtins.int sid: builtins.str name: builtins.str identity: builtins.str + state: global___ParticipantState.ValueType metadata: builtins.str kind: global___ParticipantKind.ValueType disconnect_reason: global___DisconnectReason.ValueType + joined_at: builtins.int + """ms timestamp of when the participant joined the room, maps to joined_at_ms in livekit_models""" @property def attributes(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: ... @property @@ -199,15 +223,17 @@ class ParticipantInfo(google.protobuf.message.Message): sid: builtins.str | None = ..., name: builtins.str | None = ..., identity: builtins.str | None = ..., + state: global___ParticipantState.ValueType | None = ..., metadata: builtins.str | None = ..., attributes: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., kind: global___ParticipantKind.ValueType | None = ..., disconnect_reason: global___DisconnectReason.ValueType | None = ..., + joined_at: builtins.int | None = ..., kind_details: collections.abc.Iterable[global___ParticipantKindDetail.ValueType] | None = ..., permission: global___ParticipantPermission | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["disconnect_reason", b"disconnect_reason", "identity", b"identity", "kind", b"kind", "metadata", b"metadata", "name", b"name", "permission", b"permission", "sid", b"sid"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["attributes", b"attributes", "disconnect_reason", b"disconnect_reason", "identity", b"identity", "kind", b"kind", "kind_details", b"kind_details", "metadata", b"metadata", "name", b"name", "permission", b"permission", "sid", b"sid"]) -> None: ... + def HasField(self, field_name: typing.Literal["disconnect_reason", b"disconnect_reason", "identity", b"identity", "joined_at", b"joined_at", "kind", b"kind", "metadata", b"metadata", "name", b"name", "permission", b"permission", "sid", b"sid", "state", b"state"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["attributes", b"attributes", "disconnect_reason", b"disconnect_reason", "identity", b"identity", "joined_at", b"joined_at", "kind", b"kind", "kind_details", b"kind_details", "metadata", b"metadata", "name", b"name", "permission", b"permission", "sid", b"sid", "state", b"state"]) -> None: ... global___ParticipantInfo = ParticipantInfo diff --git a/livekit-rtc/livekit/rtc/_proto/room_pb2.py b/livekit-rtc/livekit/rtc/_proto/room_pb2.py index dc580c98..45de6224 100644 --- a/livekit-rtc/livekit/rtc/_proto/room_pb2.py +++ b/livekit-rtc/livekit/rtc/_proto/room_pb2.py @@ -19,9 +19,10 @@ from . import video_frame_pb2 as video__frame__pb2 from . import stats_pb2 as stats__pb2 from . import data_stream_pb2 as data__stream__pb2 +from . import data_track_pb2 as data__track__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nroom.proto\x12\rlivekit.proto\x1a\ne2ee.proto\x1a\x0chandle.proto\x1a\x11participant.proto\x1a\x0btrack.proto\x1a\x11video_frame.proto\x1a\x0bstats.proto\x1a\x11\x64\x61ta_stream.proto\"s\n\x0e\x43onnectRequest\x12\x0b\n\x03url\x18\x01 \x02(\t\x12\r\n\x05token\x18\x02 \x02(\t\x12+\n\x07options\x18\x03 \x02(\x0b\x32\x1a.livekit.proto.RoomOptions\x12\x18\n\x10request_async_id\x18\x04 \x01(\x04\"#\n\x0f\x43onnectResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"\xbf\x03\n\x0f\x43onnectCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\x0f\n\x05\x65rror\x18\x02 \x01(\tH\x00\x12\x37\n\x06result\x18\x03 \x01(\x0b\x32%.livekit.proto.ConnectCallback.ResultH\x00\x1a\x89\x01\n\x15ParticipantWithTracks\x12\x34\n\x0bparticipant\x18\x01 \x02(\x0b\x32\x1f.livekit.proto.OwnedParticipant\x12:\n\x0cpublications\x18\x02 \x03(\x0b\x32$.livekit.proto.OwnedTrackPublication\x1a\xb8\x01\n\x06Result\x12&\n\x04room\x18\x01 \x02(\x0b\x32\x18.livekit.proto.OwnedRoom\x12:\n\x11local_participant\x18\x02 \x02(\x0b\x32\x1f.livekit.proto.OwnedParticipant\x12J\n\x0cparticipants\x18\x03 \x03(\x0b\x32\x34.livekit.proto.ConnectCallback.ParticipantWithTracksB\t\n\x07message\"s\n\x11\x44isconnectRequest\x12\x13\n\x0broom_handle\x18\x01 \x02(\x04\x12\x18\n\x10request_async_id\x18\x02 \x01(\x04\x12/\n\x06reason\x18\x03 \x01(\x0e\x32\x1f.livekit.proto.DisconnectReason\"&\n\x12\x44isconnectResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"&\n\x12\x44isconnectCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"\x9c\x01\n\x13PublishTrackRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x14\n\x0ctrack_handle\x18\x02 \x02(\x04\x12\x33\n\x07options\x18\x03 \x02(\x0b\x32\".livekit.proto.TrackPublishOptions\x12\x18\n\x10request_async_id\x18\x04 \x01(\x04\"(\n\x14PublishTrackResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"\x81\x01\n\x14PublishTrackCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\x0f\n\x05\x65rror\x18\x02 \x01(\tH\x00\x12;\n\x0bpublication\x18\x03 \x01(\x0b\x32$.livekit.proto.OwnedTrackPublicationH\x00\x42\t\n\x07message\"\x81\x01\n\x15UnpublishTrackRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x11\n\ttrack_sid\x18\x02 \x02(\t\x12\x19\n\x11stop_on_unpublish\x18\x03 \x02(\x08\x12\x18\n\x10request_async_id\x18\x04 \x01(\x04\"*\n\x16UnpublishTrackResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"9\n\x16UnpublishTrackCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\xd3\x01\n\x12PublishDataRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x10\n\x08\x64\x61ta_ptr\x18\x02 \x02(\x04\x12\x10\n\x08\x64\x61ta_len\x18\x03 \x02(\x04\x12\x10\n\x08reliable\x18\x04 \x02(\x08\x12\x1c\n\x10\x64\x65stination_sids\x18\x05 \x03(\tB\x02\x18\x01\x12\r\n\x05topic\x18\x06 \x01(\t\x12\x1e\n\x16\x64\x65stination_identities\x18\x07 \x03(\t\x12\x18\n\x10request_async_id\x18\x08 \x01(\x04\"\'\n\x13PublishDataResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"6\n\x13PublishDataCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\xc0\x01\n\x1bPublishTranscriptionRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x1c\n\x14participant_identity\x18\x02 \x02(\t\x12\x10\n\x08track_id\x18\x03 \x02(\t\x12\x35\n\x08segments\x18\x04 \x03(\x0b\x32#.livekit.proto.TranscriptionSegment\x12\x18\n\x10request_async_id\x18\x05 \x01(\x04\"0\n\x1cPublishTranscriptionResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"?\n\x1cPublishTranscriptionCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x90\x01\n\x15PublishSipDtmfRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x0c\n\x04\x63ode\x18\x02 \x02(\r\x12\r\n\x05\x64igit\x18\x03 \x02(\t\x12\x1e\n\x16\x64\x65stination_identities\x18\x04 \x03(\t\x12\x18\n\x10request_async_id\x18\x05 \x01(\x04\"*\n\x16PublishSipDtmfResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"9\n\x16PublishSipDtmfCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"g\n\x17SetLocalMetadataRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x10\n\x08metadata\x18\x02 \x02(\t\x12\x18\n\x10request_async_id\x18\x03 \x01(\x04\",\n\x18SetLocalMetadataResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\";\n\x18SetLocalMetadataCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x9e\x01\n\x16SendChatMessageRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x0f\n\x07message\x18\x02 \x02(\t\x12\x1e\n\x16\x64\x65stination_identities\x18\x03 \x03(\t\x12\x17\n\x0fsender_identity\x18\x04 \x01(\t\x12\x18\n\x10request_async_id\x18\x05 \x01(\x04\"\xd6\x01\n\x16\x45\x64itChatMessageRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x11\n\tedit_text\x18\x02 \x02(\t\x12\x34\n\x10original_message\x18\x03 \x02(\x0b\x32\x1a.livekit.proto.ChatMessage\x12\x1e\n\x16\x64\x65stination_identities\x18\x04 \x03(\t\x12\x17\n\x0fsender_identity\x18\x05 \x01(\t\x12\x18\n\x10request_async_id\x18\x06 \x01(\x04\"+\n\x17SendChatMessageResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"{\n\x17SendChatMessageCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\x0f\n\x05\x65rror\x18\x02 \x01(\tH\x00\x12\x32\n\x0c\x63hat_message\x18\x03 \x01(\x0b\x32\x1a.livekit.proto.ChatMessageH\x00\x42\t\n\x07message\"\x8b\x01\n\x19SetLocalAttributesRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x32\n\nattributes\x18\x02 \x03(\x0b\x32\x1e.livekit.proto.AttributesEntry\x12\x18\n\x10request_async_id\x18\x03 \x01(\x04\"-\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x02(\t\x12\r\n\x05value\x18\x02 \x02(\t\".\n\x1aSetLocalAttributesResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"=\n\x1aSetLocalAttributesCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"_\n\x13SetLocalNameRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x18\n\x10request_async_id\x18\x03 \x01(\x04\"(\n\x14SetLocalNameResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"7\n\x14SetLocalNameCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"E\n\x14SetSubscribedRequest\x12\x11\n\tsubscribe\x18\x01 \x02(\x08\x12\x1a\n\x12publication_handle\x18\x02 \x02(\x04\"\x17\n\x15SetSubscribedResponse\"G\n\x16GetSessionStatsRequest\x12\x13\n\x0broom_handle\x18\x01 \x02(\x04\x12\x18\n\x10request_async_id\x18\x02 \x01(\x04\"+\n\x17GetSessionStatsResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"\xf7\x01\n\x17GetSessionStatsCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\x0f\n\x05\x65rror\x18\x02 \x01(\tH\x00\x12?\n\x06result\x18\x03 \x01(\x0b\x32-.livekit.proto.GetSessionStatsCallback.ResultH\x00\x1am\n\x06Result\x12\x30\n\x0fpublisher_stats\x18\x01 \x03(\x0b\x32\x17.livekit.proto.RtcStats\x12\x31\n\x10subscriber_stats\x18\x02 \x03(\x0b\x32\x17.livekit.proto.RtcStatsB\t\n\x07message\";\n\rVideoEncoding\x12\x13\n\x0bmax_bitrate\x18\x01 \x02(\x04\x12\x15\n\rmax_framerate\x18\x02 \x02(\x01\"$\n\rAudioEncoding\x12\x13\n\x0bmax_bitrate\x18\x01 \x02(\x04\"\xb5\x02\n\x13TrackPublishOptions\x12\x34\n\x0evideo_encoding\x18\x01 \x01(\x0b\x32\x1c.livekit.proto.VideoEncoding\x12\x34\n\x0e\x61udio_encoding\x18\x02 \x01(\x0b\x32\x1c.livekit.proto.AudioEncoding\x12.\n\x0bvideo_codec\x18\x03 \x01(\x0e\x32\x19.livekit.proto.VideoCodec\x12\x0b\n\x03\x64tx\x18\x04 \x01(\x08\x12\x0b\n\x03red\x18\x05 \x01(\x08\x12\x11\n\tsimulcast\x18\x06 \x01(\x08\x12*\n\x06source\x18\x07 \x01(\x0e\x32\x1a.livekit.proto.TrackSource\x12\x0e\n\x06stream\x18\x08 \x01(\t\x12\x19\n\x11preconnect_buffer\x18\t \x01(\x08\"=\n\tIceServer\x12\x0c\n\x04urls\x18\x01 \x03(\t\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x10\n\x08password\x18\x03 \x01(\t\"\xc4\x01\n\tRtcConfig\x12;\n\x12ice_transport_type\x18\x01 \x01(\x0e\x32\x1f.livekit.proto.IceTransportType\x12K\n\x1a\x63ontinual_gathering_policy\x18\x02 \x01(\x0e\x32\'.livekit.proto.ContinualGatheringPolicy\x12-\n\x0bice_servers\x18\x03 \x03(\x0b\x32\x18.livekit.proto.IceServer\"\xae\x02\n\x0bRoomOptions\x12\x16\n\x0e\x61uto_subscribe\x18\x01 \x01(\x08\x12\x17\n\x0f\x61\x64\x61ptive_stream\x18\x02 \x01(\x08\x12\x10\n\x08\x64ynacast\x18\x03 \x01(\x08\x12,\n\x04\x65\x32\x65\x65\x18\x04 \x01(\x0b\x32\x1a.livekit.proto.E2eeOptionsB\x02\x18\x01\x12,\n\nrtc_config\x18\x05 \x01(\x0b\x32\x18.livekit.proto.RtcConfig\x12\x14\n\x0cjoin_retries\x18\x06 \x01(\r\x12.\n\nencryption\x18\x07 \x01(\x0b\x32\x1a.livekit.proto.E2eeOptions\x12\x1e\n\x16single_peer_connection\x18\x08 \x01(\x08\x12\x1a\n\x12\x63onnect_timeout_ms\x18\t \x01(\x04\"w\n\x14TranscriptionSegment\x12\n\n\x02id\x18\x01 \x02(\t\x12\x0c\n\x04text\x18\x02 \x02(\t\x12\x12\n\nstart_time\x18\x03 \x02(\x04\x12\x10\n\x08\x65nd_time\x18\x04 \x02(\x04\x12\r\n\x05\x66inal\x18\x05 \x02(\x08\x12\x10\n\x08language\x18\x06 \x02(\t\"0\n\nBufferInfo\x12\x10\n\x08\x64\x61ta_ptr\x18\x01 \x02(\x04\x12\x10\n\x08\x64\x61ta_len\x18\x02 \x02(\x04\"e\n\x0bOwnedBuffer\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12\'\n\x04\x64\x61ta\x18\x02 \x02(\x0b\x32\x19.livekit.proto.BufferInfo\"\xbb\x15\n\tRoomEvent\x12\x13\n\x0broom_handle\x18\x01 \x02(\x04\x12\x44\n\x15participant_connected\x18\x02 \x01(\x0b\x32#.livekit.proto.ParticipantConnectedH\x00\x12J\n\x18participant_disconnected\x18\x03 \x01(\x0b\x32&.livekit.proto.ParticipantDisconnectedH\x00\x12\x43\n\x15local_track_published\x18\x04 \x01(\x0b\x32\".livekit.proto.LocalTrackPublishedH\x00\x12G\n\x17local_track_unpublished\x18\x05 \x01(\x0b\x32$.livekit.proto.LocalTrackUnpublishedH\x00\x12\x45\n\x16local_track_subscribed\x18\x06 \x01(\x0b\x32#.livekit.proto.LocalTrackSubscribedH\x00\x12\x38\n\x0ftrack_published\x18\x07 \x01(\x0b\x32\x1d.livekit.proto.TrackPublishedH\x00\x12<\n\x11track_unpublished\x18\x08 \x01(\x0b\x32\x1f.livekit.proto.TrackUnpublishedH\x00\x12:\n\x10track_subscribed\x18\t \x01(\x0b\x32\x1e.livekit.proto.TrackSubscribedH\x00\x12>\n\x12track_unsubscribed\x18\n \x01(\x0b\x32 .livekit.proto.TrackUnsubscribedH\x00\x12K\n\x19track_subscription_failed\x18\x0b \x01(\x0b\x32&.livekit.proto.TrackSubscriptionFailedH\x00\x12\x30\n\x0btrack_muted\x18\x0c \x01(\x0b\x32\x19.livekit.proto.TrackMutedH\x00\x12\x34\n\rtrack_unmuted\x18\r \x01(\x0b\x32\x1b.livekit.proto.TrackUnmutedH\x00\x12G\n\x17\x61\x63tive_speakers_changed\x18\x0e \x01(\x0b\x32$.livekit.proto.ActiveSpeakersChangedH\x00\x12\x43\n\x15room_metadata_changed\x18\x0f \x01(\x0b\x32\".livekit.proto.RoomMetadataChangedH\x00\x12\x39\n\x10room_sid_changed\x18\x10 \x01(\x0b\x32\x1d.livekit.proto.RoomSidChangedH\x00\x12Q\n\x1cparticipant_metadata_changed\x18\x11 \x01(\x0b\x32).livekit.proto.ParticipantMetadataChangedH\x00\x12I\n\x18participant_name_changed\x18\x12 \x01(\x0b\x32%.livekit.proto.ParticipantNameChangedH\x00\x12U\n\x1eparticipant_attributes_changed\x18\x13 \x01(\x0b\x32+.livekit.proto.ParticipantAttributesChangedH\x00\x12M\n\x1a\x63onnection_quality_changed\x18\x14 \x01(\x0b\x32\'.livekit.proto.ConnectionQualityChangedH\x00\x12I\n\x18\x63onnection_state_changed\x18\x15 \x01(\x0b\x32%.livekit.proto.ConnectionStateChangedH\x00\x12\x33\n\x0c\x64isconnected\x18\x16 \x01(\x0b\x32\x1b.livekit.proto.DisconnectedH\x00\x12\x33\n\x0creconnecting\x18\x17 \x01(\x0b\x32\x1b.livekit.proto.ReconnectingH\x00\x12\x31\n\x0breconnected\x18\x18 \x01(\x0b\x32\x1a.livekit.proto.ReconnectedH\x00\x12=\n\x12\x65\x32\x65\x65_state_changed\x18\x19 \x01(\x0b\x32\x1f.livekit.proto.E2eeStateChangedH\x00\x12%\n\x03\x65os\x18\x1a \x01(\x0b\x32\x16.livekit.proto.RoomEOSH\x00\x12\x41\n\x14\x64\x61ta_packet_received\x18\x1b \x01(\x0b\x32!.livekit.proto.DataPacketReceivedH\x00\x12\x46\n\x16transcription_received\x18\x1c \x01(\x0b\x32$.livekit.proto.TranscriptionReceivedH\x00\x12:\n\x0c\x63hat_message\x18\x1d \x01(\x0b\x32\".livekit.proto.ChatMessageReceivedH\x00\x12I\n\x16stream_header_received\x18\x1e \x01(\x0b\x32\'.livekit.proto.DataStreamHeaderReceivedH\x00\x12G\n\x15stream_chunk_received\x18\x1f \x01(\x0b\x32&.livekit.proto.DataStreamChunkReceivedH\x00\x12K\n\x17stream_trailer_received\x18 \x01(\x0b\x32(.livekit.proto.DataStreamTrailerReceivedH\x00\x12i\n\"data_channel_low_threshold_changed\x18! \x01(\x0b\x32;.livekit.proto.DataChannelBufferedAmountLowThresholdChangedH\x00\x12=\n\x12\x62yte_stream_opened\x18\" \x01(\x0b\x32\x1f.livekit.proto.ByteStreamOpenedH\x00\x12=\n\x12text_stream_opened\x18# \x01(\x0b\x32\x1f.livekit.proto.TextStreamOpenedH\x00\x12/\n\x0croom_updated\x18$ \x01(\x0b\x32\x17.livekit.proto.RoomInfoH\x00\x12(\n\x05moved\x18% \x01(\x0b\x32\x17.livekit.proto.RoomInfoH\x00\x12\x42\n\x14participants_updated\x18& \x01(\x0b\x32\".livekit.proto.ParticipantsUpdatedH\x00\x12\x62\n%participant_encryption_status_changed\x18\' \x01(\x0b\x32\x31.livekit.proto.ParticipantEncryptionStatusChangedH\x00\x12U\n\x1eparticipant_permission_changed\x18) \x01(\x0b\x32+.livekit.proto.ParticipantPermissionChangedH\x00\x12\x38\n\x0ftoken_refreshed\x18( \x01(\x0b\x32\x1d.livekit.proto.TokenRefreshedH\x00\x42\t\n\x07message\"\xc9\x02\n\x08RoomInfo\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x10\n\x08metadata\x18\x03 \x02(\t\x12.\n&lossy_dc_buffered_amount_low_threshold\x18\x04 \x02(\x04\x12\x31\n)reliable_dc_buffered_amount_low_threshold\x18\x05 \x02(\x04\x12\x15\n\rempty_timeout\x18\x06 \x02(\r\x12\x19\n\x11\x64\x65parture_timeout\x18\x07 \x02(\r\x12\x18\n\x10max_participants\x18\x08 \x02(\r\x12\x15\n\rcreation_time\x18\t \x02(\x03\x12\x18\n\x10num_participants\x18\n \x02(\r\x12\x16\n\x0enum_publishers\x18\x0b \x02(\r\x12\x18\n\x10\x61\x63tive_recording\x18\x0c \x02(\x08\"a\n\tOwnedRoom\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12%\n\x04info\x18\x02 \x02(\x0b\x32\x17.livekit.proto.RoomInfo\"K\n\x13ParticipantsUpdated\x12\x34\n\x0cparticipants\x18\x01 \x03(\x0b\x32\x1e.livekit.proto.ParticipantInfo\"E\n\x14ParticipantConnected\x12-\n\x04info\x18\x01 \x02(\x0b\x32\x1f.livekit.proto.OwnedParticipant\"s\n\x17ParticipantDisconnected\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12:\n\x11\x64isconnect_reason\x18\x02 \x02(\x0e\x32\x1f.livekit.proto.DisconnectReason\"(\n\x13LocalTrackPublished\x12\x11\n\ttrack_sid\x18\x01 \x02(\t\"0\n\x15LocalTrackUnpublished\x12\x17\n\x0fpublication_sid\x18\x01 \x02(\t\")\n\x14LocalTrackSubscribed\x12\x11\n\ttrack_sid\x18\x02 \x02(\t\"i\n\x0eTrackPublished\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x39\n\x0bpublication\x18\x02 \x02(\x0b\x32$.livekit.proto.OwnedTrackPublication\"I\n\x10TrackUnpublished\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x17\n\x0fpublication_sid\x18\x02 \x02(\t\"Y\n\x0fTrackSubscribed\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12(\n\x05track\x18\x02 \x02(\x0b\x32\x19.livekit.proto.OwnedTrack\"D\n\x11TrackUnsubscribed\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x11\n\ttrack_sid\x18\x02 \x02(\t\"Y\n\x17TrackSubscriptionFailed\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x11\n\ttrack_sid\x18\x02 \x02(\t\x12\r\n\x05\x65rror\x18\x03 \x02(\t\"=\n\nTrackMuted\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x11\n\ttrack_sid\x18\x02 \x02(\t\"?\n\x0cTrackUnmuted\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x11\n\ttrack_sid\x18\x02 \x02(\t\"_\n\x10\x45\x32\x65\x65StateChanged\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12-\n\x05state\x18\x02 \x02(\x0e\x32\x1e.livekit.proto.EncryptionState\"7\n\x15\x41\x63tiveSpeakersChanged\x12\x1e\n\x16participant_identities\x18\x01 \x03(\t\"\'\n\x13RoomMetadataChanged\x12\x10\n\x08metadata\x18\x01 \x02(\t\"\x1d\n\x0eRoomSidChanged\x12\x0b\n\x03sid\x18\x01 \x02(\t\"L\n\x1aParticipantMetadataChanged\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x10\n\x08metadata\x18\x02 \x02(\t\"\xac\x01\n\x1cParticipantAttributesChanged\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x32\n\nattributes\x18\x02 \x03(\x0b\x32\x1e.livekit.proto.AttributesEntry\x12:\n\x12\x63hanged_attributes\x18\x03 \x03(\x0b\x32\x1e.livekit.proto.AttributesEntry\"X\n\"ParticipantEncryptionStatusChanged\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x14\n\x0cis_encrypted\x18\x02 \x02(\x08\"D\n\x16ParticipantNameChanged\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x0c\n\x04name\x18\x02 \x02(\t\"v\n\x1cParticipantPermissionChanged\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x38\n\npermission\x18\x02 \x01(\x0b\x32$.livekit.proto.ParticipantPermission\"k\n\x18\x43onnectionQualityChanged\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x31\n\x07quality\x18\x02 \x02(\x0e\x32 .livekit.proto.ConnectionQuality\"E\n\nUserPacket\x12(\n\x04\x64\x61ta\x18\x01 \x02(\x0b\x32\x1a.livekit.proto.OwnedBuffer\x12\r\n\x05topic\x18\x02 \x01(\t\"y\n\x0b\x43hatMessage\x12\n\n\x02id\x18\x01 \x02(\t\x12\x11\n\ttimestamp\x18\x02 \x02(\x03\x12\x0f\n\x07message\x18\x03 \x02(\t\x12\x16\n\x0e\x65\x64it_timestamp\x18\x04 \x01(\x03\x12\x0f\n\x07\x64\x65leted\x18\x05 \x01(\x08\x12\x11\n\tgenerated\x18\x06 \x01(\x08\"`\n\x13\x43hatMessageReceived\x12+\n\x07message\x18\x01 \x02(\x0b\x32\x1a.livekit.proto.ChatMessage\x12\x1c\n\x14participant_identity\x18\x02 \x02(\t\"&\n\x07SipDTMF\x12\x0c\n\x04\x63ode\x18\x01 \x02(\r\x12\r\n\x05\x64igit\x18\x02 \x01(\t\"\xbf\x01\n\x12\x44\x61taPacketReceived\x12+\n\x04kind\x18\x01 \x02(\x0e\x32\x1d.livekit.proto.DataPacketKind\x12\x1c\n\x14participant_identity\x18\x02 \x02(\t\x12)\n\x04user\x18\x04 \x01(\x0b\x32\x19.livekit.proto.UserPacketH\x00\x12*\n\x08sip_dtmf\x18\x05 \x01(\x0b\x32\x16.livekit.proto.SipDTMFH\x00\x42\x07\n\x05value\"\x7f\n\x15TranscriptionReceived\x12\x1c\n\x14participant_identity\x18\x01 \x01(\t\x12\x11\n\ttrack_sid\x18\x02 \x01(\t\x12\x35\n\x08segments\x18\x03 \x03(\x0b\x32#.livekit.proto.TranscriptionSegment\"G\n\x16\x43onnectionStateChanged\x12-\n\x05state\x18\x01 \x02(\x0e\x32\x1e.livekit.proto.ConnectionState\"\x0b\n\tConnected\"?\n\x0c\x44isconnected\x12/\n\x06reason\x18\x01 \x02(\x0e\x32\x1f.livekit.proto.DisconnectReason\"\x0e\n\x0cReconnecting\"\r\n\x0bReconnected\"\x1f\n\x0eTokenRefreshed\x12\r\n\x05token\x18\x01 \x02(\t\"\t\n\x07RoomEOS\"\x8e\x07\n\nDataStream\x1a\xaa\x01\n\nTextHeader\x12?\n\x0eoperation_type\x18\x01 \x02(\x0e\x32\'.livekit.proto.DataStream.OperationType\x12\x0f\n\x07version\x18\x02 \x01(\x05\x12\x1a\n\x12reply_to_stream_id\x18\x03 \x01(\t\x12\x1b\n\x13\x61ttached_stream_ids\x18\x04 \x03(\t\x12\x11\n\tgenerated\x18\x05 \x01(\x08\x1a\x1a\n\nByteHeader\x12\x0c\n\x04name\x18\x01 \x02(\t\x1a\xeb\x02\n\x06Header\x12\x11\n\tstream_id\x18\x01 \x02(\t\x12\x11\n\ttimestamp\x18\x02 \x02(\x03\x12\x11\n\tmime_type\x18\x03 \x02(\t\x12\r\n\x05topic\x18\x04 \x02(\t\x12\x14\n\x0ctotal_length\x18\x05 \x01(\x04\x12\x44\n\nattributes\x18\x06 \x03(\x0b\x32\x30.livekit.proto.DataStream.Header.AttributesEntry\x12;\n\x0btext_header\x18\x07 \x01(\x0b\x32$.livekit.proto.DataStream.TextHeaderH\x00\x12;\n\x0b\x62yte_header\x18\x08 \x01(\x0b\x32$.livekit.proto.DataStream.ByteHeaderH\x00\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x10\n\x0e\x63ontent_header\x1a]\n\x05\x43hunk\x12\x11\n\tstream_id\x18\x01 \x02(\t\x12\x13\n\x0b\x63hunk_index\x18\x02 \x02(\x04\x12\x0f\n\x07\x63ontent\x18\x03 \x02(\x0c\x12\x0f\n\x07version\x18\x04 \x01(\x05\x12\n\n\x02iv\x18\x05 \x01(\x0c\x1a\xa6\x01\n\x07Trailer\x12\x11\n\tstream_id\x18\x01 \x02(\t\x12\x0e\n\x06reason\x18\x02 \x02(\t\x12\x45\n\nattributes\x18\x03 \x03(\x0b\x32\x31.livekit.proto.DataStream.Trailer.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\"A\n\rOperationType\x12\n\n\x06\x43REATE\x10\x00\x12\n\n\x06UPDATE\x10\x01\x12\n\n\x06\x44\x45LETE\x10\x02\x12\x0c\n\x08REACTION\x10\x03\"j\n\x18\x44\x61taStreamHeaderReceived\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x30\n\x06header\x18\x02 \x02(\x0b\x32 .livekit.proto.DataStream.Header\"g\n\x17\x44\x61taStreamChunkReceived\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12.\n\x05\x63hunk\x18\x02 \x02(\x0b\x32\x1f.livekit.proto.DataStream.Chunk\"m\n\x19\x44\x61taStreamTrailerReceived\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x32\n\x07trailer\x18\x02 \x02(\x0b\x32!.livekit.proto.DataStream.Trailer\"\xc0\x01\n\x17SendStreamHeaderRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x30\n\x06header\x18\x02 \x02(\x0b\x32 .livekit.proto.DataStream.Header\x12\x1e\n\x16\x64\x65stination_identities\x18\x03 \x03(\t\x12\x17\n\x0fsender_identity\x18\x04 \x02(\t\x12\x18\n\x10request_async_id\x18\x05 \x01(\x04\"\xbd\x01\n\x16SendStreamChunkRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12.\n\x05\x63hunk\x18\x02 \x02(\x0b\x32\x1f.livekit.proto.DataStream.Chunk\x12\x1e\n\x16\x64\x65stination_identities\x18\x03 \x03(\t\x12\x17\n\x0fsender_identity\x18\x04 \x02(\t\x12\x18\n\x10request_async_id\x18\x05 \x01(\x04\"\xc3\x01\n\x18SendStreamTrailerRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x32\n\x07trailer\x18\x02 \x02(\x0b\x32!.livekit.proto.DataStream.Trailer\x12\x1e\n\x16\x64\x65stination_identities\x18\x03 \x03(\t\x12\x17\n\x0fsender_identity\x18\x04 \x02(\t\x12\x18\n\x10request_async_id\x18\x05 \x01(\x04\",\n\x18SendStreamHeaderResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"+\n\x17SendStreamChunkResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"-\n\x19SendStreamTrailerResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\";\n\x18SendStreamHeaderCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\":\n\x17SendStreamChunkCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"<\n\x19SendStreamTrailerCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x93\x01\n/SetDataChannelBufferedAmountLowThresholdRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x11\n\tthreshold\x18\x02 \x02(\x04\x12+\n\x04kind\x18\x03 \x02(\x0e\x32\x1d.livekit.proto.DataPacketKind\"2\n0SetDataChannelBufferedAmountLowThresholdResponse\"n\n,DataChannelBufferedAmountLowThresholdChanged\x12+\n\x04kind\x18\x01 \x02(\x0e\x32\x1d.livekit.proto.DataPacketKind\x12\x11\n\tthreshold\x18\x02 \x02(\x04\"f\n\x10\x42yteStreamOpened\x12\x34\n\x06reader\x18\x01 \x02(\x0b\x32$.livekit.proto.OwnedByteStreamReader\x12\x1c\n\x14participant_identity\x18\x02 \x02(\t\"f\n\x10TextStreamOpened\x12\x34\n\x06reader\x18\x01 \x02(\x0b\x32$.livekit.proto.OwnedTextStreamReader\x12\x1c\n\x14participant_identity\x18\x02 \x02(\t*P\n\x10IceTransportType\x12\x13\n\x0fTRANSPORT_RELAY\x10\x00\x12\x14\n\x10TRANSPORT_NOHOST\x10\x01\x12\x11\n\rTRANSPORT_ALL\x10\x02*C\n\x18\x43ontinualGatheringPolicy\x12\x0f\n\x0bGATHER_ONCE\x10\x00\x12\x16\n\x12GATHER_CONTINUALLY\x10\x01*`\n\x11\x43onnectionQuality\x12\x10\n\x0cQUALITY_POOR\x10\x00\x12\x10\n\x0cQUALITY_GOOD\x10\x01\x12\x15\n\x11QUALITY_EXCELLENT\x10\x02\x12\x10\n\x0cQUALITY_LOST\x10\x03*S\n\x0f\x43onnectionState\x12\x15\n\x11\x43ONN_DISCONNECTED\x10\x00\x12\x12\n\x0e\x43ONN_CONNECTED\x10\x01\x12\x15\n\x11\x43ONN_RECONNECTING\x10\x02*3\n\x0e\x44\x61taPacketKind\x12\x0e\n\nKIND_LOSSY\x10\x00\x12\x11\n\rKIND_RELIABLE\x10\x01\x42\x10\xaa\x02\rLiveKit.Proto') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nroom.proto\x12\rlivekit.proto\x1a\ne2ee.proto\x1a\x0chandle.proto\x1a\x11participant.proto\x1a\x0btrack.proto\x1a\x11video_frame.proto\x1a\x0bstats.proto\x1a\x11\x64\x61ta_stream.proto\x1a\x10\x64\x61ta_track.proto\"s\n\x0e\x43onnectRequest\x12\x0b\n\x03url\x18\x01 \x02(\t\x12\r\n\x05token\x18\x02 \x02(\t\x12+\n\x07options\x18\x03 \x02(\x0b\x32\x1a.livekit.proto.RoomOptions\x12\x18\n\x10request_async_id\x18\x04 \x01(\x04\"#\n\x0f\x43onnectResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"\xbf\x03\n\x0f\x43onnectCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\x0f\n\x05\x65rror\x18\x02 \x01(\tH\x00\x12\x37\n\x06result\x18\x03 \x01(\x0b\x32%.livekit.proto.ConnectCallback.ResultH\x00\x1a\x89\x01\n\x15ParticipantWithTracks\x12\x34\n\x0bparticipant\x18\x01 \x02(\x0b\x32\x1f.livekit.proto.OwnedParticipant\x12:\n\x0cpublications\x18\x02 \x03(\x0b\x32$.livekit.proto.OwnedTrackPublication\x1a\xb8\x01\n\x06Result\x12&\n\x04room\x18\x01 \x02(\x0b\x32\x18.livekit.proto.OwnedRoom\x12:\n\x11local_participant\x18\x02 \x02(\x0b\x32\x1f.livekit.proto.OwnedParticipant\x12J\n\x0cparticipants\x18\x03 \x03(\x0b\x32\x34.livekit.proto.ConnectCallback.ParticipantWithTracksB\t\n\x07message\"s\n\x11\x44isconnectRequest\x12\x13\n\x0broom_handle\x18\x01 \x02(\x04\x12\x18\n\x10request_async_id\x18\x02 \x01(\x04\x12/\n\x06reason\x18\x03 \x01(\x0e\x32\x1f.livekit.proto.DisconnectReason\"&\n\x12\x44isconnectResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"&\n\x12\x44isconnectCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"\x9c\x01\n\x13PublishTrackRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x14\n\x0ctrack_handle\x18\x02 \x02(\x04\x12\x33\n\x07options\x18\x03 \x02(\x0b\x32\".livekit.proto.TrackPublishOptions\x12\x18\n\x10request_async_id\x18\x04 \x01(\x04\"(\n\x14PublishTrackResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"\x81\x01\n\x14PublishTrackCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\x0f\n\x05\x65rror\x18\x02 \x01(\tH\x00\x12;\n\x0bpublication\x18\x03 \x01(\x0b\x32$.livekit.proto.OwnedTrackPublicationH\x00\x42\t\n\x07message\"\x81\x01\n\x15UnpublishTrackRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x11\n\ttrack_sid\x18\x02 \x02(\t\x12\x19\n\x11stop_on_unpublish\x18\x03 \x02(\x08\x12\x18\n\x10request_async_id\x18\x04 \x01(\x04\"*\n\x16UnpublishTrackResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"9\n\x16UnpublishTrackCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\xd3\x01\n\x12PublishDataRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x10\n\x08\x64\x61ta_ptr\x18\x02 \x02(\x04\x12\x10\n\x08\x64\x61ta_len\x18\x03 \x02(\x04\x12\x10\n\x08reliable\x18\x04 \x02(\x08\x12\x1c\n\x10\x64\x65stination_sids\x18\x05 \x03(\tB\x02\x18\x01\x12\r\n\x05topic\x18\x06 \x01(\t\x12\x1e\n\x16\x64\x65stination_identities\x18\x07 \x03(\t\x12\x18\n\x10request_async_id\x18\x08 \x01(\x04\"\'\n\x13PublishDataResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"6\n\x13PublishDataCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\xc0\x01\n\x1bPublishTranscriptionRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x1c\n\x14participant_identity\x18\x02 \x02(\t\x12\x10\n\x08track_id\x18\x03 \x02(\t\x12\x35\n\x08segments\x18\x04 \x03(\x0b\x32#.livekit.proto.TranscriptionSegment\x12\x18\n\x10request_async_id\x18\x05 \x01(\x04\"0\n\x1cPublishTranscriptionResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"?\n\x1cPublishTranscriptionCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x90\x01\n\x15PublishSipDtmfRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x0c\n\x04\x63ode\x18\x02 \x02(\r\x12\r\n\x05\x64igit\x18\x03 \x02(\t\x12\x1e\n\x16\x64\x65stination_identities\x18\x04 \x03(\t\x12\x18\n\x10request_async_id\x18\x05 \x01(\x04\"*\n\x16PublishSipDtmfResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"9\n\x16PublishSipDtmfCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"g\n\x17SetLocalMetadataRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x10\n\x08metadata\x18\x02 \x02(\t\x12\x18\n\x10request_async_id\x18\x03 \x01(\x04\",\n\x18SetLocalMetadataResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\";\n\x18SetLocalMetadataCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x9e\x01\n\x16SendChatMessageRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x0f\n\x07message\x18\x02 \x02(\t\x12\x1e\n\x16\x64\x65stination_identities\x18\x03 \x03(\t\x12\x17\n\x0fsender_identity\x18\x04 \x01(\t\x12\x18\n\x10request_async_id\x18\x05 \x01(\x04\"\xd6\x01\n\x16\x45\x64itChatMessageRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x11\n\tedit_text\x18\x02 \x02(\t\x12\x34\n\x10original_message\x18\x03 \x02(\x0b\x32\x1a.livekit.proto.ChatMessage\x12\x1e\n\x16\x64\x65stination_identities\x18\x04 \x03(\t\x12\x17\n\x0fsender_identity\x18\x05 \x01(\t\x12\x18\n\x10request_async_id\x18\x06 \x01(\x04\"+\n\x17SendChatMessageResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"{\n\x17SendChatMessageCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\x0f\n\x05\x65rror\x18\x02 \x01(\tH\x00\x12\x32\n\x0c\x63hat_message\x18\x03 \x01(\x0b\x32\x1a.livekit.proto.ChatMessageH\x00\x42\t\n\x07message\"\x8b\x01\n\x19SetLocalAttributesRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x32\n\nattributes\x18\x02 \x03(\x0b\x32\x1e.livekit.proto.AttributesEntry\x12\x18\n\x10request_async_id\x18\x03 \x01(\x04\"-\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x02(\t\x12\r\n\x05value\x18\x02 \x02(\t\".\n\x1aSetLocalAttributesResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"=\n\x1aSetLocalAttributesCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"_\n\x13SetLocalNameRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x18\n\x10request_async_id\x18\x03 \x01(\x04\"(\n\x14SetLocalNameResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"7\n\x14SetLocalNameCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"E\n\x14SetSubscribedRequest\x12\x11\n\tsubscribe\x18\x01 \x02(\x08\x12\x1a\n\x12publication_handle\x18\x02 \x02(\x04\"\x17\n\x15SetSubscribedResponse\"G\n\x16GetSessionStatsRequest\x12\x13\n\x0broom_handle\x18\x01 \x02(\x04\x12\x18\n\x10request_async_id\x18\x02 \x01(\x04\"+\n\x17GetSessionStatsResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"\xf7\x01\n\x17GetSessionStatsCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\x0f\n\x05\x65rror\x18\x02 \x01(\tH\x00\x12?\n\x06result\x18\x03 \x01(\x0b\x32-.livekit.proto.GetSessionStatsCallback.ResultH\x00\x1am\n\x06Result\x12\x30\n\x0fpublisher_stats\x18\x01 \x03(\x0b\x32\x17.livekit.proto.RtcStats\x12\x31\n\x10subscriber_stats\x18\x02 \x03(\x0b\x32\x17.livekit.proto.RtcStatsB\t\n\x07message\";\n\rVideoEncoding\x12\x13\n\x0bmax_bitrate\x18\x01 \x02(\x04\x12\x15\n\rmax_framerate\x18\x02 \x02(\x01\"$\n\rAudioEncoding\x12\x13\n\x0bmax_bitrate\x18\x01 \x02(\x04\"\xb5\x02\n\x13TrackPublishOptions\x12\x34\n\x0evideo_encoding\x18\x01 \x01(\x0b\x32\x1c.livekit.proto.VideoEncoding\x12\x34\n\x0e\x61udio_encoding\x18\x02 \x01(\x0b\x32\x1c.livekit.proto.AudioEncoding\x12.\n\x0bvideo_codec\x18\x03 \x01(\x0e\x32\x19.livekit.proto.VideoCodec\x12\x0b\n\x03\x64tx\x18\x04 \x01(\x08\x12\x0b\n\x03red\x18\x05 \x01(\x08\x12\x11\n\tsimulcast\x18\x06 \x01(\x08\x12*\n\x06source\x18\x07 \x01(\x0e\x32\x1a.livekit.proto.TrackSource\x12\x0e\n\x06stream\x18\x08 \x01(\t\x12\x19\n\x11preconnect_buffer\x18\t \x01(\x08\"=\n\tIceServer\x12\x0c\n\x04urls\x18\x01 \x03(\t\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x10\n\x08password\x18\x03 \x01(\t\"\xc4\x01\n\tRtcConfig\x12;\n\x12ice_transport_type\x18\x01 \x01(\x0e\x32\x1f.livekit.proto.IceTransportType\x12K\n\x1a\x63ontinual_gathering_policy\x18\x02 \x01(\x0e\x32\'.livekit.proto.ContinualGatheringPolicy\x12-\n\x0bice_servers\x18\x03 \x03(\x0b\x32\x18.livekit.proto.IceServer\"\xae\x02\n\x0bRoomOptions\x12\x16\n\x0e\x61uto_subscribe\x18\x01 \x01(\x08\x12\x17\n\x0f\x61\x64\x61ptive_stream\x18\x02 \x01(\x08\x12\x10\n\x08\x64ynacast\x18\x03 \x01(\x08\x12,\n\x04\x65\x32\x65\x65\x18\x04 \x01(\x0b\x32\x1a.livekit.proto.E2eeOptionsB\x02\x18\x01\x12,\n\nrtc_config\x18\x05 \x01(\x0b\x32\x18.livekit.proto.RtcConfig\x12\x14\n\x0cjoin_retries\x18\x06 \x01(\r\x12.\n\nencryption\x18\x07 \x01(\x0b\x32\x1a.livekit.proto.E2eeOptions\x12\x1e\n\x16single_peer_connection\x18\x08 \x01(\x08\x12\x1a\n\x12\x63onnect_timeout_ms\x18\t \x01(\x04\"w\n\x14TranscriptionSegment\x12\n\n\x02id\x18\x01 \x02(\t\x12\x0c\n\x04text\x18\x02 \x02(\t\x12\x12\n\nstart_time\x18\x03 \x02(\x04\x12\x10\n\x08\x65nd_time\x18\x04 \x02(\x04\x12\r\n\x05\x66inal\x18\x05 \x02(\x08\x12\x10\n\x08language\x18\x06 \x02(\t\"0\n\nBufferInfo\x12\x10\n\x08\x64\x61ta_ptr\x18\x01 \x02(\x04\x12\x10\n\x08\x64\x61ta_len\x18\x02 \x02(\x04\"e\n\x0bOwnedBuffer\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12\'\n\x04\x64\x61ta\x18\x02 \x02(\x0b\x32\x19.livekit.proto.BufferInfo\"\x85\x17\n\tRoomEvent\x12\x13\n\x0broom_handle\x18\x01 \x02(\x04\x12\x44\n\x15participant_connected\x18\x02 \x01(\x0b\x32#.livekit.proto.ParticipantConnectedH\x00\x12J\n\x18participant_disconnected\x18\x03 \x01(\x0b\x32&.livekit.proto.ParticipantDisconnectedH\x00\x12\x43\n\x15local_track_published\x18\x04 \x01(\x0b\x32\".livekit.proto.LocalTrackPublishedH\x00\x12G\n\x17local_track_unpublished\x18\x05 \x01(\x0b\x32$.livekit.proto.LocalTrackUnpublishedH\x00\x12\x45\n\x16local_track_subscribed\x18\x06 \x01(\x0b\x32#.livekit.proto.LocalTrackSubscribedH\x00\x12\x38\n\x0ftrack_published\x18\x07 \x01(\x0b\x32\x1d.livekit.proto.TrackPublishedH\x00\x12<\n\x11track_unpublished\x18\x08 \x01(\x0b\x32\x1f.livekit.proto.TrackUnpublishedH\x00\x12:\n\x10track_subscribed\x18\t \x01(\x0b\x32\x1e.livekit.proto.TrackSubscribedH\x00\x12>\n\x12track_unsubscribed\x18\n \x01(\x0b\x32 .livekit.proto.TrackUnsubscribedH\x00\x12K\n\x19track_subscription_failed\x18\x0b \x01(\x0b\x32&.livekit.proto.TrackSubscriptionFailedH\x00\x12\x30\n\x0btrack_muted\x18\x0c \x01(\x0b\x32\x19.livekit.proto.TrackMutedH\x00\x12\x34\n\rtrack_unmuted\x18\r \x01(\x0b\x32\x1b.livekit.proto.TrackUnmutedH\x00\x12G\n\x17\x61\x63tive_speakers_changed\x18\x0e \x01(\x0b\x32$.livekit.proto.ActiveSpeakersChangedH\x00\x12\x43\n\x15room_metadata_changed\x18\x0f \x01(\x0b\x32\".livekit.proto.RoomMetadataChangedH\x00\x12\x39\n\x10room_sid_changed\x18\x10 \x01(\x0b\x32\x1d.livekit.proto.RoomSidChangedH\x00\x12Q\n\x1cparticipant_metadata_changed\x18\x11 \x01(\x0b\x32).livekit.proto.ParticipantMetadataChangedH\x00\x12I\n\x18participant_name_changed\x18\x12 \x01(\x0b\x32%.livekit.proto.ParticipantNameChangedH\x00\x12U\n\x1eparticipant_attributes_changed\x18\x13 \x01(\x0b\x32+.livekit.proto.ParticipantAttributesChangedH\x00\x12M\n\x1a\x63onnection_quality_changed\x18\x14 \x01(\x0b\x32\'.livekit.proto.ConnectionQualityChangedH\x00\x12I\n\x18\x63onnection_state_changed\x18\x15 \x01(\x0b\x32%.livekit.proto.ConnectionStateChangedH\x00\x12\x33\n\x0c\x64isconnected\x18\x16 \x01(\x0b\x32\x1b.livekit.proto.DisconnectedH\x00\x12\x33\n\x0creconnecting\x18\x17 \x01(\x0b\x32\x1b.livekit.proto.ReconnectingH\x00\x12\x31\n\x0breconnected\x18\x18 \x01(\x0b\x32\x1a.livekit.proto.ReconnectedH\x00\x12=\n\x12\x65\x32\x65\x65_state_changed\x18\x19 \x01(\x0b\x32\x1f.livekit.proto.E2eeStateChangedH\x00\x12%\n\x03\x65os\x18\x1a \x01(\x0b\x32\x16.livekit.proto.RoomEOSH\x00\x12\x41\n\x14\x64\x61ta_packet_received\x18\x1b \x01(\x0b\x32!.livekit.proto.DataPacketReceivedH\x00\x12\x46\n\x16transcription_received\x18\x1c \x01(\x0b\x32$.livekit.proto.TranscriptionReceivedH\x00\x12:\n\x0c\x63hat_message\x18\x1d \x01(\x0b\x32\".livekit.proto.ChatMessageReceivedH\x00\x12I\n\x16stream_header_received\x18\x1e \x01(\x0b\x32\'.livekit.proto.DataStreamHeaderReceivedH\x00\x12G\n\x15stream_chunk_received\x18\x1f \x01(\x0b\x32&.livekit.proto.DataStreamChunkReceivedH\x00\x12K\n\x17stream_trailer_received\x18 \x01(\x0b\x32(.livekit.proto.DataStreamTrailerReceivedH\x00\x12i\n\"data_channel_low_threshold_changed\x18! \x01(\x0b\x32;.livekit.proto.DataChannelBufferedAmountLowThresholdChangedH\x00\x12=\n\x12\x62yte_stream_opened\x18\" \x01(\x0b\x32\x1f.livekit.proto.ByteStreamOpenedH\x00\x12=\n\x12text_stream_opened\x18# \x01(\x0b\x32\x1f.livekit.proto.TextStreamOpenedH\x00\x12/\n\x0croom_updated\x18$ \x01(\x0b\x32\x17.livekit.proto.RoomInfoH\x00\x12(\n\x05moved\x18% \x01(\x0b\x32\x17.livekit.proto.RoomInfoH\x00\x12\x42\n\x14participants_updated\x18& \x01(\x0b\x32\".livekit.proto.ParticipantsUpdatedH\x00\x12\x62\n%participant_encryption_status_changed\x18\' \x01(\x0b\x32\x31.livekit.proto.ParticipantEncryptionStatusChangedH\x00\x12U\n\x1eparticipant_permission_changed\x18) \x01(\x0b\x32+.livekit.proto.ParticipantPermissionChangedH\x00\x12\x38\n\x0ftoken_refreshed\x18( \x01(\x0b\x32\x1d.livekit.proto.TokenRefreshedH\x00\x12>\n\x12participant_active\x18* \x01(\x0b\x32 .livekit.proto.ParticipantActiveH\x00\x12\x41\n\x14\x64\x61ta_track_published\x18+ \x01(\x0b\x32!.livekit.proto.DataTrackPublishedH\x00\x12\x45\n\x16\x64\x61ta_track_unpublished\x18, \x01(\x0b\x32#.livekit.proto.DataTrackUnpublishedH\x00\x42\t\n\x07message\"\xc9\x02\n\x08RoomInfo\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x10\n\x08metadata\x18\x03 \x02(\t\x12.\n&lossy_dc_buffered_amount_low_threshold\x18\x04 \x02(\x04\x12\x31\n)reliable_dc_buffered_amount_low_threshold\x18\x05 \x02(\x04\x12\x15\n\rempty_timeout\x18\x06 \x02(\r\x12\x19\n\x11\x64\x65parture_timeout\x18\x07 \x02(\r\x12\x18\n\x10max_participants\x18\x08 \x02(\r\x12\x15\n\rcreation_time\x18\t \x02(\x03\x12\x18\n\x10num_participants\x18\n \x02(\r\x12\x16\n\x0enum_publishers\x18\x0b \x02(\r\x12\x18\n\x10\x61\x63tive_recording\x18\x0c \x02(\x08\"a\n\tOwnedRoom\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12%\n\x04info\x18\x02 \x02(\x0b\x32\x17.livekit.proto.RoomInfo\"K\n\x13ParticipantsUpdated\x12\x34\n\x0cparticipants\x18\x01 \x03(\x0b\x32\x1e.livekit.proto.ParticipantInfo\"E\n\x14ParticipantConnected\x12-\n\x04info\x18\x01 \x02(\x0b\x32\x1f.livekit.proto.OwnedParticipant\"1\n\x11ParticipantActive\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\"s\n\x17ParticipantDisconnected\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12:\n\x11\x64isconnect_reason\x18\x02 \x02(\x0e\x32\x1f.livekit.proto.DisconnectReason\"(\n\x13LocalTrackPublished\x12\x11\n\ttrack_sid\x18\x01 \x02(\t\"0\n\x15LocalTrackUnpublished\x12\x17\n\x0fpublication_sid\x18\x01 \x02(\t\")\n\x14LocalTrackSubscribed\x12\x11\n\ttrack_sid\x18\x02 \x02(\t\"i\n\x0eTrackPublished\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x39\n\x0bpublication\x18\x02 \x02(\x0b\x32$.livekit.proto.OwnedTrackPublication\"I\n\x10TrackUnpublished\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x17\n\x0fpublication_sid\x18\x02 \x02(\t\"Y\n\x0fTrackSubscribed\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12(\n\x05track\x18\x02 \x02(\x0b\x32\x19.livekit.proto.OwnedTrack\"D\n\x11TrackUnsubscribed\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x11\n\ttrack_sid\x18\x02 \x02(\t\"Y\n\x17TrackSubscriptionFailed\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x11\n\ttrack_sid\x18\x02 \x02(\t\x12\r\n\x05\x65rror\x18\x03 \x02(\t\"=\n\nTrackMuted\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x11\n\ttrack_sid\x18\x02 \x02(\t\"?\n\x0cTrackUnmuted\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x11\n\ttrack_sid\x18\x02 \x02(\t\"_\n\x10\x45\x32\x65\x65StateChanged\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12-\n\x05state\x18\x02 \x02(\x0e\x32\x1e.livekit.proto.EncryptionState\"7\n\x15\x41\x63tiveSpeakersChanged\x12\x1e\n\x16participant_identities\x18\x01 \x03(\t\"\'\n\x13RoomMetadataChanged\x12\x10\n\x08metadata\x18\x01 \x02(\t\"\x1d\n\x0eRoomSidChanged\x12\x0b\n\x03sid\x18\x01 \x02(\t\"L\n\x1aParticipantMetadataChanged\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x10\n\x08metadata\x18\x02 \x02(\t\"\xac\x01\n\x1cParticipantAttributesChanged\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x32\n\nattributes\x18\x02 \x03(\x0b\x32\x1e.livekit.proto.AttributesEntry\x12:\n\x12\x63hanged_attributes\x18\x03 \x03(\x0b\x32\x1e.livekit.proto.AttributesEntry\"X\n\"ParticipantEncryptionStatusChanged\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x14\n\x0cis_encrypted\x18\x02 \x02(\x08\"D\n\x16ParticipantNameChanged\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x0c\n\x04name\x18\x02 \x02(\t\"v\n\x1cParticipantPermissionChanged\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x38\n\npermission\x18\x02 \x01(\x0b\x32$.livekit.proto.ParticipantPermission\"k\n\x18\x43onnectionQualityChanged\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x31\n\x07quality\x18\x02 \x02(\x0e\x32 .livekit.proto.ConnectionQuality\"E\n\nUserPacket\x12(\n\x04\x64\x61ta\x18\x01 \x02(\x0b\x32\x1a.livekit.proto.OwnedBuffer\x12\r\n\x05topic\x18\x02 \x01(\t\"y\n\x0b\x43hatMessage\x12\n\n\x02id\x18\x01 \x02(\t\x12\x11\n\ttimestamp\x18\x02 \x02(\x03\x12\x0f\n\x07message\x18\x03 \x02(\t\x12\x16\n\x0e\x65\x64it_timestamp\x18\x04 \x01(\x03\x12\x0f\n\x07\x64\x65leted\x18\x05 \x01(\x08\x12\x11\n\tgenerated\x18\x06 \x01(\x08\"`\n\x13\x43hatMessageReceived\x12+\n\x07message\x18\x01 \x02(\x0b\x32\x1a.livekit.proto.ChatMessage\x12\x1c\n\x14participant_identity\x18\x02 \x02(\t\"&\n\x07SipDTMF\x12\x0c\n\x04\x63ode\x18\x01 \x02(\r\x12\r\n\x05\x64igit\x18\x02 \x01(\t\"\xbf\x01\n\x12\x44\x61taPacketReceived\x12+\n\x04kind\x18\x01 \x02(\x0e\x32\x1d.livekit.proto.DataPacketKind\x12\x1c\n\x14participant_identity\x18\x02 \x02(\t\x12)\n\x04user\x18\x04 \x01(\x0b\x32\x19.livekit.proto.UserPacketH\x00\x12*\n\x08sip_dtmf\x18\x05 \x01(\x0b\x32\x16.livekit.proto.SipDTMFH\x00\x42\x07\n\x05value\"\x7f\n\x15TranscriptionReceived\x12\x1c\n\x14participant_identity\x18\x01 \x01(\t\x12\x11\n\ttrack_sid\x18\x02 \x01(\t\x12\x35\n\x08segments\x18\x03 \x03(\x0b\x32#.livekit.proto.TranscriptionSegment\"G\n\x16\x43onnectionStateChanged\x12-\n\x05state\x18\x01 \x02(\x0e\x32\x1e.livekit.proto.ConnectionState\"\x0b\n\tConnected\"?\n\x0c\x44isconnected\x12/\n\x06reason\x18\x01 \x02(\x0e\x32\x1f.livekit.proto.DisconnectReason\"\x0e\n\x0cReconnecting\"\r\n\x0bReconnected\"\x1f\n\x0eTokenRefreshed\x12\r\n\x05token\x18\x01 \x02(\t\"\t\n\x07RoomEOS\"\x8e\x07\n\nDataStream\x1a\xaa\x01\n\nTextHeader\x12?\n\x0eoperation_type\x18\x01 \x02(\x0e\x32\'.livekit.proto.DataStream.OperationType\x12\x0f\n\x07version\x18\x02 \x01(\x05\x12\x1a\n\x12reply_to_stream_id\x18\x03 \x01(\t\x12\x1b\n\x13\x61ttached_stream_ids\x18\x04 \x03(\t\x12\x11\n\tgenerated\x18\x05 \x01(\x08\x1a\x1a\n\nByteHeader\x12\x0c\n\x04name\x18\x01 \x02(\t\x1a\xeb\x02\n\x06Header\x12\x11\n\tstream_id\x18\x01 \x02(\t\x12\x11\n\ttimestamp\x18\x02 \x02(\x03\x12\x11\n\tmime_type\x18\x03 \x02(\t\x12\r\n\x05topic\x18\x04 \x02(\t\x12\x14\n\x0ctotal_length\x18\x05 \x01(\x04\x12\x44\n\nattributes\x18\x06 \x03(\x0b\x32\x30.livekit.proto.DataStream.Header.AttributesEntry\x12;\n\x0btext_header\x18\x07 \x01(\x0b\x32$.livekit.proto.DataStream.TextHeaderH\x00\x12;\n\x0b\x62yte_header\x18\x08 \x01(\x0b\x32$.livekit.proto.DataStream.ByteHeaderH\x00\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x10\n\x0e\x63ontent_header\x1a]\n\x05\x43hunk\x12\x11\n\tstream_id\x18\x01 \x02(\t\x12\x13\n\x0b\x63hunk_index\x18\x02 \x02(\x04\x12\x0f\n\x07\x63ontent\x18\x03 \x02(\x0c\x12\x0f\n\x07version\x18\x04 \x01(\x05\x12\n\n\x02iv\x18\x05 \x01(\x0c\x1a\xa6\x01\n\x07Trailer\x12\x11\n\tstream_id\x18\x01 \x02(\t\x12\x0e\n\x06reason\x18\x02 \x02(\t\x12\x45\n\nattributes\x18\x03 \x03(\x0b\x32\x31.livekit.proto.DataStream.Trailer.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\"A\n\rOperationType\x12\n\n\x06\x43REATE\x10\x00\x12\n\n\x06UPDATE\x10\x01\x12\n\n\x06\x44\x45LETE\x10\x02\x12\x0c\n\x08REACTION\x10\x03\"j\n\x18\x44\x61taStreamHeaderReceived\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x30\n\x06header\x18\x02 \x02(\x0b\x32 .livekit.proto.DataStream.Header\"g\n\x17\x44\x61taStreamChunkReceived\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12.\n\x05\x63hunk\x18\x02 \x02(\x0b\x32\x1f.livekit.proto.DataStream.Chunk\"m\n\x19\x44\x61taStreamTrailerReceived\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x32\n\x07trailer\x18\x02 \x02(\x0b\x32!.livekit.proto.DataStream.Trailer\"\xc0\x01\n\x17SendStreamHeaderRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x30\n\x06header\x18\x02 \x02(\x0b\x32 .livekit.proto.DataStream.Header\x12\x1e\n\x16\x64\x65stination_identities\x18\x03 \x03(\t\x12\x17\n\x0fsender_identity\x18\x04 \x02(\t\x12\x18\n\x10request_async_id\x18\x05 \x01(\x04\"\xbd\x01\n\x16SendStreamChunkRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12.\n\x05\x63hunk\x18\x02 \x02(\x0b\x32\x1f.livekit.proto.DataStream.Chunk\x12\x1e\n\x16\x64\x65stination_identities\x18\x03 \x03(\t\x12\x17\n\x0fsender_identity\x18\x04 \x02(\t\x12\x18\n\x10request_async_id\x18\x05 \x01(\x04\"\xc3\x01\n\x18SendStreamTrailerRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x32\n\x07trailer\x18\x02 \x02(\x0b\x32!.livekit.proto.DataStream.Trailer\x12\x1e\n\x16\x64\x65stination_identities\x18\x03 \x03(\t\x12\x17\n\x0fsender_identity\x18\x04 \x02(\t\x12\x18\n\x10request_async_id\x18\x05 \x01(\x04\",\n\x18SendStreamHeaderResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"+\n\x17SendStreamChunkResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"-\n\x19SendStreamTrailerResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\";\n\x18SendStreamHeaderCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\":\n\x17SendStreamChunkCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"<\n\x19SendStreamTrailerCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x93\x01\n/SetDataChannelBufferedAmountLowThresholdRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12\x11\n\tthreshold\x18\x02 \x02(\x04\x12+\n\x04kind\x18\x03 \x02(\x0e\x32\x1d.livekit.proto.DataPacketKind\"2\n0SetDataChannelBufferedAmountLowThresholdResponse\"n\n,DataChannelBufferedAmountLowThresholdChanged\x12+\n\x04kind\x18\x01 \x02(\x0e\x32\x1d.livekit.proto.DataPacketKind\x12\x11\n\tthreshold\x18\x02 \x02(\x04\"f\n\x10\x42yteStreamOpened\x12\x34\n\x06reader\x18\x01 \x02(\x0b\x32$.livekit.proto.OwnedByteStreamReader\x12\x1c\n\x14participant_identity\x18\x02 \x02(\t\"f\n\x10TextStreamOpened\x12\x34\n\x06reader\x18\x01 \x02(\x0b\x32$.livekit.proto.OwnedTextStreamReader\x12\x1c\n\x14participant_identity\x18\x02 \x02(\t\"H\n\x12\x44\x61taTrackPublished\x12\x32\n\x05track\x18\x01 \x02(\x0b\x32#.livekit.proto.OwnedRemoteDataTrack\"#\n\x14\x44\x61taTrackUnpublished\x12\x0b\n\x03sid\x18\x01 \x02(\t*P\n\x10IceTransportType\x12\x13\n\x0fTRANSPORT_RELAY\x10\x00\x12\x14\n\x10TRANSPORT_NOHOST\x10\x01\x12\x11\n\rTRANSPORT_ALL\x10\x02*C\n\x18\x43ontinualGatheringPolicy\x12\x0f\n\x0bGATHER_ONCE\x10\x00\x12\x16\n\x12GATHER_CONTINUALLY\x10\x01*`\n\x11\x43onnectionQuality\x12\x10\n\x0cQUALITY_POOR\x10\x00\x12\x10\n\x0cQUALITY_GOOD\x10\x01\x12\x15\n\x11QUALITY_EXCELLENT\x10\x02\x12\x10\n\x0cQUALITY_LOST\x10\x03*S\n\x0f\x43onnectionState\x12\x15\n\x11\x43ONN_DISCONNECTED\x10\x00\x12\x12\n\x0e\x43ONN_CONNECTED\x10\x01\x12\x15\n\x11\x43ONN_RECONNECTING\x10\x02*3\n\x0e\x44\x61taPacketKind\x12\x0e\n\nKIND_LOSSY\x10\x00\x12\x11\n\rKIND_RELIABLE\x10\x01\x42\x10\xaa\x02\rLiveKit.Proto') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -37,248 +38,254 @@ _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._serialized_options = b'8\001' _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._options = None _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_ICETRANSPORTTYPE']._serialized_start=13907 - _globals['_ICETRANSPORTTYPE']._serialized_end=13987 - _globals['_CONTINUALGATHERINGPOLICY']._serialized_start=13989 - _globals['_CONTINUALGATHERINGPOLICY']._serialized_end=14056 - _globals['_CONNECTIONQUALITY']._serialized_start=14058 - _globals['_CONNECTIONQUALITY']._serialized_end=14154 - _globals['_CONNECTIONSTATE']._serialized_start=14156 - _globals['_CONNECTIONSTATE']._serialized_end=14239 - _globals['_DATAPACKETKIND']._serialized_start=14241 - _globals['_DATAPACKETKIND']._serialized_end=14292 - _globals['_CONNECTREQUEST']._serialized_start=138 - _globals['_CONNECTREQUEST']._serialized_end=253 - _globals['_CONNECTRESPONSE']._serialized_start=255 - _globals['_CONNECTRESPONSE']._serialized_end=290 - _globals['_CONNECTCALLBACK']._serialized_start=293 - _globals['_CONNECTCALLBACK']._serialized_end=740 - _globals['_CONNECTCALLBACK_PARTICIPANTWITHTRACKS']._serialized_start=405 - _globals['_CONNECTCALLBACK_PARTICIPANTWITHTRACKS']._serialized_end=542 - _globals['_CONNECTCALLBACK_RESULT']._serialized_start=545 - _globals['_CONNECTCALLBACK_RESULT']._serialized_end=729 - _globals['_DISCONNECTREQUEST']._serialized_start=742 - _globals['_DISCONNECTREQUEST']._serialized_end=857 - _globals['_DISCONNECTRESPONSE']._serialized_start=859 - _globals['_DISCONNECTRESPONSE']._serialized_end=897 - _globals['_DISCONNECTCALLBACK']._serialized_start=899 - _globals['_DISCONNECTCALLBACK']._serialized_end=937 - _globals['_PUBLISHTRACKREQUEST']._serialized_start=940 - _globals['_PUBLISHTRACKREQUEST']._serialized_end=1096 - _globals['_PUBLISHTRACKRESPONSE']._serialized_start=1098 - _globals['_PUBLISHTRACKRESPONSE']._serialized_end=1138 - _globals['_PUBLISHTRACKCALLBACK']._serialized_start=1141 - _globals['_PUBLISHTRACKCALLBACK']._serialized_end=1270 - _globals['_UNPUBLISHTRACKREQUEST']._serialized_start=1273 - _globals['_UNPUBLISHTRACKREQUEST']._serialized_end=1402 - _globals['_UNPUBLISHTRACKRESPONSE']._serialized_start=1404 - _globals['_UNPUBLISHTRACKRESPONSE']._serialized_end=1446 - _globals['_UNPUBLISHTRACKCALLBACK']._serialized_start=1448 - _globals['_UNPUBLISHTRACKCALLBACK']._serialized_end=1505 - _globals['_PUBLISHDATAREQUEST']._serialized_start=1508 - _globals['_PUBLISHDATAREQUEST']._serialized_end=1719 - _globals['_PUBLISHDATARESPONSE']._serialized_start=1721 - _globals['_PUBLISHDATARESPONSE']._serialized_end=1760 - _globals['_PUBLISHDATACALLBACK']._serialized_start=1762 - _globals['_PUBLISHDATACALLBACK']._serialized_end=1816 - _globals['_PUBLISHTRANSCRIPTIONREQUEST']._serialized_start=1819 - _globals['_PUBLISHTRANSCRIPTIONREQUEST']._serialized_end=2011 - _globals['_PUBLISHTRANSCRIPTIONRESPONSE']._serialized_start=2013 - _globals['_PUBLISHTRANSCRIPTIONRESPONSE']._serialized_end=2061 - _globals['_PUBLISHTRANSCRIPTIONCALLBACK']._serialized_start=2063 - _globals['_PUBLISHTRANSCRIPTIONCALLBACK']._serialized_end=2126 - _globals['_PUBLISHSIPDTMFREQUEST']._serialized_start=2129 - _globals['_PUBLISHSIPDTMFREQUEST']._serialized_end=2273 - _globals['_PUBLISHSIPDTMFRESPONSE']._serialized_start=2275 - _globals['_PUBLISHSIPDTMFRESPONSE']._serialized_end=2317 - _globals['_PUBLISHSIPDTMFCALLBACK']._serialized_start=2319 - _globals['_PUBLISHSIPDTMFCALLBACK']._serialized_end=2376 - _globals['_SETLOCALMETADATAREQUEST']._serialized_start=2378 - _globals['_SETLOCALMETADATAREQUEST']._serialized_end=2481 - _globals['_SETLOCALMETADATARESPONSE']._serialized_start=2483 - _globals['_SETLOCALMETADATARESPONSE']._serialized_end=2527 - _globals['_SETLOCALMETADATACALLBACK']._serialized_start=2529 - _globals['_SETLOCALMETADATACALLBACK']._serialized_end=2588 - _globals['_SENDCHATMESSAGEREQUEST']._serialized_start=2591 - _globals['_SENDCHATMESSAGEREQUEST']._serialized_end=2749 - _globals['_EDITCHATMESSAGEREQUEST']._serialized_start=2752 - _globals['_EDITCHATMESSAGEREQUEST']._serialized_end=2966 - _globals['_SENDCHATMESSAGERESPONSE']._serialized_start=2968 - _globals['_SENDCHATMESSAGERESPONSE']._serialized_end=3011 - _globals['_SENDCHATMESSAGECALLBACK']._serialized_start=3013 - _globals['_SENDCHATMESSAGECALLBACK']._serialized_end=3136 - _globals['_SETLOCALATTRIBUTESREQUEST']._serialized_start=3139 - _globals['_SETLOCALATTRIBUTESREQUEST']._serialized_end=3278 - _globals['_ATTRIBUTESENTRY']._serialized_start=3280 - _globals['_ATTRIBUTESENTRY']._serialized_end=3325 - _globals['_SETLOCALATTRIBUTESRESPONSE']._serialized_start=3327 - _globals['_SETLOCALATTRIBUTESRESPONSE']._serialized_end=3373 - _globals['_SETLOCALATTRIBUTESCALLBACK']._serialized_start=3375 - _globals['_SETLOCALATTRIBUTESCALLBACK']._serialized_end=3436 - _globals['_SETLOCALNAMEREQUEST']._serialized_start=3438 - _globals['_SETLOCALNAMEREQUEST']._serialized_end=3533 - _globals['_SETLOCALNAMERESPONSE']._serialized_start=3535 - _globals['_SETLOCALNAMERESPONSE']._serialized_end=3575 - _globals['_SETLOCALNAMECALLBACK']._serialized_start=3577 - _globals['_SETLOCALNAMECALLBACK']._serialized_end=3632 - _globals['_SETSUBSCRIBEDREQUEST']._serialized_start=3634 - _globals['_SETSUBSCRIBEDREQUEST']._serialized_end=3703 - _globals['_SETSUBSCRIBEDRESPONSE']._serialized_start=3705 - _globals['_SETSUBSCRIBEDRESPONSE']._serialized_end=3728 - _globals['_GETSESSIONSTATSREQUEST']._serialized_start=3730 - _globals['_GETSESSIONSTATSREQUEST']._serialized_end=3801 - _globals['_GETSESSIONSTATSRESPONSE']._serialized_start=3803 - _globals['_GETSESSIONSTATSRESPONSE']._serialized_end=3846 - _globals['_GETSESSIONSTATSCALLBACK']._serialized_start=3849 - _globals['_GETSESSIONSTATSCALLBACK']._serialized_end=4096 - _globals['_GETSESSIONSTATSCALLBACK_RESULT']._serialized_start=3976 - _globals['_GETSESSIONSTATSCALLBACK_RESULT']._serialized_end=4085 - _globals['_VIDEOENCODING']._serialized_start=4098 - _globals['_VIDEOENCODING']._serialized_end=4157 - _globals['_AUDIOENCODING']._serialized_start=4159 - _globals['_AUDIOENCODING']._serialized_end=4195 - _globals['_TRACKPUBLISHOPTIONS']._serialized_start=4198 - _globals['_TRACKPUBLISHOPTIONS']._serialized_end=4507 - _globals['_ICESERVER']._serialized_start=4509 - _globals['_ICESERVER']._serialized_end=4570 - _globals['_RTCCONFIG']._serialized_start=4573 - _globals['_RTCCONFIG']._serialized_end=4769 - _globals['_ROOMOPTIONS']._serialized_start=4772 - _globals['_ROOMOPTIONS']._serialized_end=5074 - _globals['_TRANSCRIPTIONSEGMENT']._serialized_start=5076 - _globals['_TRANSCRIPTIONSEGMENT']._serialized_end=5195 - _globals['_BUFFERINFO']._serialized_start=5197 - _globals['_BUFFERINFO']._serialized_end=5245 - _globals['_OWNEDBUFFER']._serialized_start=5247 - _globals['_OWNEDBUFFER']._serialized_end=5348 - _globals['_ROOMEVENT']._serialized_start=5351 - _globals['_ROOMEVENT']._serialized_end=8098 - _globals['_ROOMINFO']._serialized_start=8101 - _globals['_ROOMINFO']._serialized_end=8430 - _globals['_OWNEDROOM']._serialized_start=8432 - _globals['_OWNEDROOM']._serialized_end=8529 - _globals['_PARTICIPANTSUPDATED']._serialized_start=8531 - _globals['_PARTICIPANTSUPDATED']._serialized_end=8606 - _globals['_PARTICIPANTCONNECTED']._serialized_start=8608 - _globals['_PARTICIPANTCONNECTED']._serialized_end=8677 - _globals['_PARTICIPANTDISCONNECTED']._serialized_start=8679 - _globals['_PARTICIPANTDISCONNECTED']._serialized_end=8794 - _globals['_LOCALTRACKPUBLISHED']._serialized_start=8796 - _globals['_LOCALTRACKPUBLISHED']._serialized_end=8836 - _globals['_LOCALTRACKUNPUBLISHED']._serialized_start=8838 - _globals['_LOCALTRACKUNPUBLISHED']._serialized_end=8886 - _globals['_LOCALTRACKSUBSCRIBED']._serialized_start=8888 - _globals['_LOCALTRACKSUBSCRIBED']._serialized_end=8929 - _globals['_TRACKPUBLISHED']._serialized_start=8931 - _globals['_TRACKPUBLISHED']._serialized_end=9036 - _globals['_TRACKUNPUBLISHED']._serialized_start=9038 - _globals['_TRACKUNPUBLISHED']._serialized_end=9111 - _globals['_TRACKSUBSCRIBED']._serialized_start=9113 - _globals['_TRACKSUBSCRIBED']._serialized_end=9202 - _globals['_TRACKUNSUBSCRIBED']._serialized_start=9204 - _globals['_TRACKUNSUBSCRIBED']._serialized_end=9272 - _globals['_TRACKSUBSCRIPTIONFAILED']._serialized_start=9274 - _globals['_TRACKSUBSCRIPTIONFAILED']._serialized_end=9363 - _globals['_TRACKMUTED']._serialized_start=9365 - _globals['_TRACKMUTED']._serialized_end=9426 - _globals['_TRACKUNMUTED']._serialized_start=9428 - _globals['_TRACKUNMUTED']._serialized_end=9491 - _globals['_E2EESTATECHANGED']._serialized_start=9493 - _globals['_E2EESTATECHANGED']._serialized_end=9588 - _globals['_ACTIVESPEAKERSCHANGED']._serialized_start=9590 - _globals['_ACTIVESPEAKERSCHANGED']._serialized_end=9645 - _globals['_ROOMMETADATACHANGED']._serialized_start=9647 - _globals['_ROOMMETADATACHANGED']._serialized_end=9686 - _globals['_ROOMSIDCHANGED']._serialized_start=9688 - _globals['_ROOMSIDCHANGED']._serialized_end=9717 - _globals['_PARTICIPANTMETADATACHANGED']._serialized_start=9719 - _globals['_PARTICIPANTMETADATACHANGED']._serialized_end=9795 - _globals['_PARTICIPANTATTRIBUTESCHANGED']._serialized_start=9798 - _globals['_PARTICIPANTATTRIBUTESCHANGED']._serialized_end=9970 - _globals['_PARTICIPANTENCRYPTIONSTATUSCHANGED']._serialized_start=9972 - _globals['_PARTICIPANTENCRYPTIONSTATUSCHANGED']._serialized_end=10060 - _globals['_PARTICIPANTNAMECHANGED']._serialized_start=10062 - _globals['_PARTICIPANTNAMECHANGED']._serialized_end=10130 - _globals['_PARTICIPANTPERMISSIONCHANGED']._serialized_start=10132 - _globals['_PARTICIPANTPERMISSIONCHANGED']._serialized_end=10250 - _globals['_CONNECTIONQUALITYCHANGED']._serialized_start=10252 - _globals['_CONNECTIONQUALITYCHANGED']._serialized_end=10359 - _globals['_USERPACKET']._serialized_start=10361 - _globals['_USERPACKET']._serialized_end=10430 - _globals['_CHATMESSAGE']._serialized_start=10432 - _globals['_CHATMESSAGE']._serialized_end=10553 - _globals['_CHATMESSAGERECEIVED']._serialized_start=10555 - _globals['_CHATMESSAGERECEIVED']._serialized_end=10651 - _globals['_SIPDTMF']._serialized_start=10653 - _globals['_SIPDTMF']._serialized_end=10691 - _globals['_DATAPACKETRECEIVED']._serialized_start=10694 - _globals['_DATAPACKETRECEIVED']._serialized_end=10885 - _globals['_TRANSCRIPTIONRECEIVED']._serialized_start=10887 - _globals['_TRANSCRIPTIONRECEIVED']._serialized_end=11014 - _globals['_CONNECTIONSTATECHANGED']._serialized_start=11016 - _globals['_CONNECTIONSTATECHANGED']._serialized_end=11087 - _globals['_CONNECTED']._serialized_start=11089 - _globals['_CONNECTED']._serialized_end=11100 - _globals['_DISCONNECTED']._serialized_start=11102 - _globals['_DISCONNECTED']._serialized_end=11165 - _globals['_RECONNECTING']._serialized_start=11167 - _globals['_RECONNECTING']._serialized_end=11181 - _globals['_RECONNECTED']._serialized_start=11183 - _globals['_RECONNECTED']._serialized_end=11196 - _globals['_TOKENREFRESHED']._serialized_start=11198 - _globals['_TOKENREFRESHED']._serialized_end=11229 - _globals['_ROOMEOS']._serialized_start=11231 - _globals['_ROOMEOS']._serialized_end=11240 - _globals['_DATASTREAM']._serialized_start=11243 - _globals['_DATASTREAM']._serialized_end=12153 - _globals['_DATASTREAM_TEXTHEADER']._serialized_start=11258 - _globals['_DATASTREAM_TEXTHEADER']._serialized_end=11428 - _globals['_DATASTREAM_BYTEHEADER']._serialized_start=11430 - _globals['_DATASTREAM_BYTEHEADER']._serialized_end=11456 - _globals['_DATASTREAM_HEADER']._serialized_start=11459 - _globals['_DATASTREAM_HEADER']._serialized_end=11822 - _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._serialized_start=11755 - _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._serialized_end=11804 - _globals['_DATASTREAM_CHUNK']._serialized_start=11824 - _globals['_DATASTREAM_CHUNK']._serialized_end=11917 - _globals['_DATASTREAM_TRAILER']._serialized_start=11920 - _globals['_DATASTREAM_TRAILER']._serialized_end=12086 - _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._serialized_start=11755 - _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._serialized_end=11804 - _globals['_DATASTREAM_OPERATIONTYPE']._serialized_start=12088 - _globals['_DATASTREAM_OPERATIONTYPE']._serialized_end=12153 - _globals['_DATASTREAMHEADERRECEIVED']._serialized_start=12155 - _globals['_DATASTREAMHEADERRECEIVED']._serialized_end=12261 - _globals['_DATASTREAMCHUNKRECEIVED']._serialized_start=12263 - _globals['_DATASTREAMCHUNKRECEIVED']._serialized_end=12366 - _globals['_DATASTREAMTRAILERRECEIVED']._serialized_start=12368 - _globals['_DATASTREAMTRAILERRECEIVED']._serialized_end=12477 - _globals['_SENDSTREAMHEADERREQUEST']._serialized_start=12480 - _globals['_SENDSTREAMHEADERREQUEST']._serialized_end=12672 - _globals['_SENDSTREAMCHUNKREQUEST']._serialized_start=12675 - _globals['_SENDSTREAMCHUNKREQUEST']._serialized_end=12864 - _globals['_SENDSTREAMTRAILERREQUEST']._serialized_start=12867 - _globals['_SENDSTREAMTRAILERREQUEST']._serialized_end=13062 - _globals['_SENDSTREAMHEADERRESPONSE']._serialized_start=13064 - _globals['_SENDSTREAMHEADERRESPONSE']._serialized_end=13108 - _globals['_SENDSTREAMCHUNKRESPONSE']._serialized_start=13110 - _globals['_SENDSTREAMCHUNKRESPONSE']._serialized_end=13153 - _globals['_SENDSTREAMTRAILERRESPONSE']._serialized_start=13155 - _globals['_SENDSTREAMTRAILERRESPONSE']._serialized_end=13200 - _globals['_SENDSTREAMHEADERCALLBACK']._serialized_start=13202 - _globals['_SENDSTREAMHEADERCALLBACK']._serialized_end=13261 - _globals['_SENDSTREAMCHUNKCALLBACK']._serialized_start=13263 - _globals['_SENDSTREAMCHUNKCALLBACK']._serialized_end=13321 - _globals['_SENDSTREAMTRAILERCALLBACK']._serialized_start=13323 - _globals['_SENDSTREAMTRAILERCALLBACK']._serialized_end=13383 - _globals['_SETDATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDREQUEST']._serialized_start=13386 - _globals['_SETDATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDREQUEST']._serialized_end=13533 - _globals['_SETDATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDRESPONSE']._serialized_start=13535 - _globals['_SETDATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDRESPONSE']._serialized_end=13585 - _globals['_DATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDCHANGED']._serialized_start=13587 - _globals['_DATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDCHANGED']._serialized_end=13697 - _globals['_BYTESTREAMOPENED']._serialized_start=13699 - _globals['_BYTESTREAMOPENED']._serialized_end=13801 - _globals['_TEXTSTREAMOPENED']._serialized_start=13803 - _globals['_TEXTSTREAMOPENED']._serialized_end=13905 + _globals['_ICETRANSPORTTYPE']._serialized_start=14289 + _globals['_ICETRANSPORTTYPE']._serialized_end=14369 + _globals['_CONTINUALGATHERINGPOLICY']._serialized_start=14371 + _globals['_CONTINUALGATHERINGPOLICY']._serialized_end=14438 + _globals['_CONNECTIONQUALITY']._serialized_start=14440 + _globals['_CONNECTIONQUALITY']._serialized_end=14536 + _globals['_CONNECTIONSTATE']._serialized_start=14538 + _globals['_CONNECTIONSTATE']._serialized_end=14621 + _globals['_DATAPACKETKIND']._serialized_start=14623 + _globals['_DATAPACKETKIND']._serialized_end=14674 + _globals['_CONNECTREQUEST']._serialized_start=156 + _globals['_CONNECTREQUEST']._serialized_end=271 + _globals['_CONNECTRESPONSE']._serialized_start=273 + _globals['_CONNECTRESPONSE']._serialized_end=308 + _globals['_CONNECTCALLBACK']._serialized_start=311 + _globals['_CONNECTCALLBACK']._serialized_end=758 + _globals['_CONNECTCALLBACK_PARTICIPANTWITHTRACKS']._serialized_start=423 + _globals['_CONNECTCALLBACK_PARTICIPANTWITHTRACKS']._serialized_end=560 + _globals['_CONNECTCALLBACK_RESULT']._serialized_start=563 + _globals['_CONNECTCALLBACK_RESULT']._serialized_end=747 + _globals['_DISCONNECTREQUEST']._serialized_start=760 + _globals['_DISCONNECTREQUEST']._serialized_end=875 + _globals['_DISCONNECTRESPONSE']._serialized_start=877 + _globals['_DISCONNECTRESPONSE']._serialized_end=915 + _globals['_DISCONNECTCALLBACK']._serialized_start=917 + _globals['_DISCONNECTCALLBACK']._serialized_end=955 + _globals['_PUBLISHTRACKREQUEST']._serialized_start=958 + _globals['_PUBLISHTRACKREQUEST']._serialized_end=1114 + _globals['_PUBLISHTRACKRESPONSE']._serialized_start=1116 + _globals['_PUBLISHTRACKRESPONSE']._serialized_end=1156 + _globals['_PUBLISHTRACKCALLBACK']._serialized_start=1159 + _globals['_PUBLISHTRACKCALLBACK']._serialized_end=1288 + _globals['_UNPUBLISHTRACKREQUEST']._serialized_start=1291 + _globals['_UNPUBLISHTRACKREQUEST']._serialized_end=1420 + _globals['_UNPUBLISHTRACKRESPONSE']._serialized_start=1422 + _globals['_UNPUBLISHTRACKRESPONSE']._serialized_end=1464 + _globals['_UNPUBLISHTRACKCALLBACK']._serialized_start=1466 + _globals['_UNPUBLISHTRACKCALLBACK']._serialized_end=1523 + _globals['_PUBLISHDATAREQUEST']._serialized_start=1526 + _globals['_PUBLISHDATAREQUEST']._serialized_end=1737 + _globals['_PUBLISHDATARESPONSE']._serialized_start=1739 + _globals['_PUBLISHDATARESPONSE']._serialized_end=1778 + _globals['_PUBLISHDATACALLBACK']._serialized_start=1780 + _globals['_PUBLISHDATACALLBACK']._serialized_end=1834 + _globals['_PUBLISHTRANSCRIPTIONREQUEST']._serialized_start=1837 + _globals['_PUBLISHTRANSCRIPTIONREQUEST']._serialized_end=2029 + _globals['_PUBLISHTRANSCRIPTIONRESPONSE']._serialized_start=2031 + _globals['_PUBLISHTRANSCRIPTIONRESPONSE']._serialized_end=2079 + _globals['_PUBLISHTRANSCRIPTIONCALLBACK']._serialized_start=2081 + _globals['_PUBLISHTRANSCRIPTIONCALLBACK']._serialized_end=2144 + _globals['_PUBLISHSIPDTMFREQUEST']._serialized_start=2147 + _globals['_PUBLISHSIPDTMFREQUEST']._serialized_end=2291 + _globals['_PUBLISHSIPDTMFRESPONSE']._serialized_start=2293 + _globals['_PUBLISHSIPDTMFRESPONSE']._serialized_end=2335 + _globals['_PUBLISHSIPDTMFCALLBACK']._serialized_start=2337 + _globals['_PUBLISHSIPDTMFCALLBACK']._serialized_end=2394 + _globals['_SETLOCALMETADATAREQUEST']._serialized_start=2396 + _globals['_SETLOCALMETADATAREQUEST']._serialized_end=2499 + _globals['_SETLOCALMETADATARESPONSE']._serialized_start=2501 + _globals['_SETLOCALMETADATARESPONSE']._serialized_end=2545 + _globals['_SETLOCALMETADATACALLBACK']._serialized_start=2547 + _globals['_SETLOCALMETADATACALLBACK']._serialized_end=2606 + _globals['_SENDCHATMESSAGEREQUEST']._serialized_start=2609 + _globals['_SENDCHATMESSAGEREQUEST']._serialized_end=2767 + _globals['_EDITCHATMESSAGEREQUEST']._serialized_start=2770 + _globals['_EDITCHATMESSAGEREQUEST']._serialized_end=2984 + _globals['_SENDCHATMESSAGERESPONSE']._serialized_start=2986 + _globals['_SENDCHATMESSAGERESPONSE']._serialized_end=3029 + _globals['_SENDCHATMESSAGECALLBACK']._serialized_start=3031 + _globals['_SENDCHATMESSAGECALLBACK']._serialized_end=3154 + _globals['_SETLOCALATTRIBUTESREQUEST']._serialized_start=3157 + _globals['_SETLOCALATTRIBUTESREQUEST']._serialized_end=3296 + _globals['_ATTRIBUTESENTRY']._serialized_start=3298 + _globals['_ATTRIBUTESENTRY']._serialized_end=3343 + _globals['_SETLOCALATTRIBUTESRESPONSE']._serialized_start=3345 + _globals['_SETLOCALATTRIBUTESRESPONSE']._serialized_end=3391 + _globals['_SETLOCALATTRIBUTESCALLBACK']._serialized_start=3393 + _globals['_SETLOCALATTRIBUTESCALLBACK']._serialized_end=3454 + _globals['_SETLOCALNAMEREQUEST']._serialized_start=3456 + _globals['_SETLOCALNAMEREQUEST']._serialized_end=3551 + _globals['_SETLOCALNAMERESPONSE']._serialized_start=3553 + _globals['_SETLOCALNAMERESPONSE']._serialized_end=3593 + _globals['_SETLOCALNAMECALLBACK']._serialized_start=3595 + _globals['_SETLOCALNAMECALLBACK']._serialized_end=3650 + _globals['_SETSUBSCRIBEDREQUEST']._serialized_start=3652 + _globals['_SETSUBSCRIBEDREQUEST']._serialized_end=3721 + _globals['_SETSUBSCRIBEDRESPONSE']._serialized_start=3723 + _globals['_SETSUBSCRIBEDRESPONSE']._serialized_end=3746 + _globals['_GETSESSIONSTATSREQUEST']._serialized_start=3748 + _globals['_GETSESSIONSTATSREQUEST']._serialized_end=3819 + _globals['_GETSESSIONSTATSRESPONSE']._serialized_start=3821 + _globals['_GETSESSIONSTATSRESPONSE']._serialized_end=3864 + _globals['_GETSESSIONSTATSCALLBACK']._serialized_start=3867 + _globals['_GETSESSIONSTATSCALLBACK']._serialized_end=4114 + _globals['_GETSESSIONSTATSCALLBACK_RESULT']._serialized_start=3994 + _globals['_GETSESSIONSTATSCALLBACK_RESULT']._serialized_end=4103 + _globals['_VIDEOENCODING']._serialized_start=4116 + _globals['_VIDEOENCODING']._serialized_end=4175 + _globals['_AUDIOENCODING']._serialized_start=4177 + _globals['_AUDIOENCODING']._serialized_end=4213 + _globals['_TRACKPUBLISHOPTIONS']._serialized_start=4216 + _globals['_TRACKPUBLISHOPTIONS']._serialized_end=4525 + _globals['_ICESERVER']._serialized_start=4527 + _globals['_ICESERVER']._serialized_end=4588 + _globals['_RTCCONFIG']._serialized_start=4591 + _globals['_RTCCONFIG']._serialized_end=4787 + _globals['_ROOMOPTIONS']._serialized_start=4790 + _globals['_ROOMOPTIONS']._serialized_end=5092 + _globals['_TRANSCRIPTIONSEGMENT']._serialized_start=5094 + _globals['_TRANSCRIPTIONSEGMENT']._serialized_end=5213 + _globals['_BUFFERINFO']._serialized_start=5215 + _globals['_BUFFERINFO']._serialized_end=5263 + _globals['_OWNEDBUFFER']._serialized_start=5265 + _globals['_OWNEDBUFFER']._serialized_end=5366 + _globals['_ROOMEVENT']._serialized_start=5369 + _globals['_ROOMEVENT']._serialized_end=8318 + _globals['_ROOMINFO']._serialized_start=8321 + _globals['_ROOMINFO']._serialized_end=8650 + _globals['_OWNEDROOM']._serialized_start=8652 + _globals['_OWNEDROOM']._serialized_end=8749 + _globals['_PARTICIPANTSUPDATED']._serialized_start=8751 + _globals['_PARTICIPANTSUPDATED']._serialized_end=8826 + _globals['_PARTICIPANTCONNECTED']._serialized_start=8828 + _globals['_PARTICIPANTCONNECTED']._serialized_end=8897 + _globals['_PARTICIPANTACTIVE']._serialized_start=8899 + _globals['_PARTICIPANTACTIVE']._serialized_end=8948 + _globals['_PARTICIPANTDISCONNECTED']._serialized_start=8950 + _globals['_PARTICIPANTDISCONNECTED']._serialized_end=9065 + _globals['_LOCALTRACKPUBLISHED']._serialized_start=9067 + _globals['_LOCALTRACKPUBLISHED']._serialized_end=9107 + _globals['_LOCALTRACKUNPUBLISHED']._serialized_start=9109 + _globals['_LOCALTRACKUNPUBLISHED']._serialized_end=9157 + _globals['_LOCALTRACKSUBSCRIBED']._serialized_start=9159 + _globals['_LOCALTRACKSUBSCRIBED']._serialized_end=9200 + _globals['_TRACKPUBLISHED']._serialized_start=9202 + _globals['_TRACKPUBLISHED']._serialized_end=9307 + _globals['_TRACKUNPUBLISHED']._serialized_start=9309 + _globals['_TRACKUNPUBLISHED']._serialized_end=9382 + _globals['_TRACKSUBSCRIBED']._serialized_start=9384 + _globals['_TRACKSUBSCRIBED']._serialized_end=9473 + _globals['_TRACKUNSUBSCRIBED']._serialized_start=9475 + _globals['_TRACKUNSUBSCRIBED']._serialized_end=9543 + _globals['_TRACKSUBSCRIPTIONFAILED']._serialized_start=9545 + _globals['_TRACKSUBSCRIPTIONFAILED']._serialized_end=9634 + _globals['_TRACKMUTED']._serialized_start=9636 + _globals['_TRACKMUTED']._serialized_end=9697 + _globals['_TRACKUNMUTED']._serialized_start=9699 + _globals['_TRACKUNMUTED']._serialized_end=9762 + _globals['_E2EESTATECHANGED']._serialized_start=9764 + _globals['_E2EESTATECHANGED']._serialized_end=9859 + _globals['_ACTIVESPEAKERSCHANGED']._serialized_start=9861 + _globals['_ACTIVESPEAKERSCHANGED']._serialized_end=9916 + _globals['_ROOMMETADATACHANGED']._serialized_start=9918 + _globals['_ROOMMETADATACHANGED']._serialized_end=9957 + _globals['_ROOMSIDCHANGED']._serialized_start=9959 + _globals['_ROOMSIDCHANGED']._serialized_end=9988 + _globals['_PARTICIPANTMETADATACHANGED']._serialized_start=9990 + _globals['_PARTICIPANTMETADATACHANGED']._serialized_end=10066 + _globals['_PARTICIPANTATTRIBUTESCHANGED']._serialized_start=10069 + _globals['_PARTICIPANTATTRIBUTESCHANGED']._serialized_end=10241 + _globals['_PARTICIPANTENCRYPTIONSTATUSCHANGED']._serialized_start=10243 + _globals['_PARTICIPANTENCRYPTIONSTATUSCHANGED']._serialized_end=10331 + _globals['_PARTICIPANTNAMECHANGED']._serialized_start=10333 + _globals['_PARTICIPANTNAMECHANGED']._serialized_end=10401 + _globals['_PARTICIPANTPERMISSIONCHANGED']._serialized_start=10403 + _globals['_PARTICIPANTPERMISSIONCHANGED']._serialized_end=10521 + _globals['_CONNECTIONQUALITYCHANGED']._serialized_start=10523 + _globals['_CONNECTIONQUALITYCHANGED']._serialized_end=10630 + _globals['_USERPACKET']._serialized_start=10632 + _globals['_USERPACKET']._serialized_end=10701 + _globals['_CHATMESSAGE']._serialized_start=10703 + _globals['_CHATMESSAGE']._serialized_end=10824 + _globals['_CHATMESSAGERECEIVED']._serialized_start=10826 + _globals['_CHATMESSAGERECEIVED']._serialized_end=10922 + _globals['_SIPDTMF']._serialized_start=10924 + _globals['_SIPDTMF']._serialized_end=10962 + _globals['_DATAPACKETRECEIVED']._serialized_start=10965 + _globals['_DATAPACKETRECEIVED']._serialized_end=11156 + _globals['_TRANSCRIPTIONRECEIVED']._serialized_start=11158 + _globals['_TRANSCRIPTIONRECEIVED']._serialized_end=11285 + _globals['_CONNECTIONSTATECHANGED']._serialized_start=11287 + _globals['_CONNECTIONSTATECHANGED']._serialized_end=11358 + _globals['_CONNECTED']._serialized_start=11360 + _globals['_CONNECTED']._serialized_end=11371 + _globals['_DISCONNECTED']._serialized_start=11373 + _globals['_DISCONNECTED']._serialized_end=11436 + _globals['_RECONNECTING']._serialized_start=11438 + _globals['_RECONNECTING']._serialized_end=11452 + _globals['_RECONNECTED']._serialized_start=11454 + _globals['_RECONNECTED']._serialized_end=11467 + _globals['_TOKENREFRESHED']._serialized_start=11469 + _globals['_TOKENREFRESHED']._serialized_end=11500 + _globals['_ROOMEOS']._serialized_start=11502 + _globals['_ROOMEOS']._serialized_end=11511 + _globals['_DATASTREAM']._serialized_start=11514 + _globals['_DATASTREAM']._serialized_end=12424 + _globals['_DATASTREAM_TEXTHEADER']._serialized_start=11529 + _globals['_DATASTREAM_TEXTHEADER']._serialized_end=11699 + _globals['_DATASTREAM_BYTEHEADER']._serialized_start=11701 + _globals['_DATASTREAM_BYTEHEADER']._serialized_end=11727 + _globals['_DATASTREAM_HEADER']._serialized_start=11730 + _globals['_DATASTREAM_HEADER']._serialized_end=12093 + _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._serialized_start=12026 + _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._serialized_end=12075 + _globals['_DATASTREAM_CHUNK']._serialized_start=12095 + _globals['_DATASTREAM_CHUNK']._serialized_end=12188 + _globals['_DATASTREAM_TRAILER']._serialized_start=12191 + _globals['_DATASTREAM_TRAILER']._serialized_end=12357 + _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._serialized_start=12026 + _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._serialized_end=12075 + _globals['_DATASTREAM_OPERATIONTYPE']._serialized_start=12359 + _globals['_DATASTREAM_OPERATIONTYPE']._serialized_end=12424 + _globals['_DATASTREAMHEADERRECEIVED']._serialized_start=12426 + _globals['_DATASTREAMHEADERRECEIVED']._serialized_end=12532 + _globals['_DATASTREAMCHUNKRECEIVED']._serialized_start=12534 + _globals['_DATASTREAMCHUNKRECEIVED']._serialized_end=12637 + _globals['_DATASTREAMTRAILERRECEIVED']._serialized_start=12639 + _globals['_DATASTREAMTRAILERRECEIVED']._serialized_end=12748 + _globals['_SENDSTREAMHEADERREQUEST']._serialized_start=12751 + _globals['_SENDSTREAMHEADERREQUEST']._serialized_end=12943 + _globals['_SENDSTREAMCHUNKREQUEST']._serialized_start=12946 + _globals['_SENDSTREAMCHUNKREQUEST']._serialized_end=13135 + _globals['_SENDSTREAMTRAILERREQUEST']._serialized_start=13138 + _globals['_SENDSTREAMTRAILERREQUEST']._serialized_end=13333 + _globals['_SENDSTREAMHEADERRESPONSE']._serialized_start=13335 + _globals['_SENDSTREAMHEADERRESPONSE']._serialized_end=13379 + _globals['_SENDSTREAMCHUNKRESPONSE']._serialized_start=13381 + _globals['_SENDSTREAMCHUNKRESPONSE']._serialized_end=13424 + _globals['_SENDSTREAMTRAILERRESPONSE']._serialized_start=13426 + _globals['_SENDSTREAMTRAILERRESPONSE']._serialized_end=13471 + _globals['_SENDSTREAMHEADERCALLBACK']._serialized_start=13473 + _globals['_SENDSTREAMHEADERCALLBACK']._serialized_end=13532 + _globals['_SENDSTREAMCHUNKCALLBACK']._serialized_start=13534 + _globals['_SENDSTREAMCHUNKCALLBACK']._serialized_end=13592 + _globals['_SENDSTREAMTRAILERCALLBACK']._serialized_start=13594 + _globals['_SENDSTREAMTRAILERCALLBACK']._serialized_end=13654 + _globals['_SETDATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDREQUEST']._serialized_start=13657 + _globals['_SETDATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDREQUEST']._serialized_end=13804 + _globals['_SETDATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDRESPONSE']._serialized_start=13806 + _globals['_SETDATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDRESPONSE']._serialized_end=13856 + _globals['_DATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDCHANGED']._serialized_start=13858 + _globals['_DATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDCHANGED']._serialized_end=13968 + _globals['_BYTESTREAMOPENED']._serialized_start=13970 + _globals['_BYTESTREAMOPENED']._serialized_end=14072 + _globals['_TEXTSTREAMOPENED']._serialized_start=14074 + _globals['_TEXTSTREAMOPENED']._serialized_end=14176 + _globals['_DATATRACKPUBLISHED']._serialized_start=14178 + _globals['_DATATRACKPUBLISHED']._serialized_end=14250 + _globals['_DATATRACKUNPUBLISHED']._serialized_start=14252 + _globals['_DATATRACKUNPUBLISHED']._serialized_end=14287 # @@protoc_insertion_point(module_scope) diff --git a/livekit-rtc/livekit/rtc/_proto/room_pb2.pyi b/livekit-rtc/livekit/rtc/_proto/room_pb2.pyi index ce9cb5e4..25b9160e 100644 --- a/livekit-rtc/livekit/rtc/_proto/room_pb2.pyi +++ b/livekit-rtc/livekit/rtc/_proto/room_pb2.pyi @@ -19,6 +19,7 @@ limitations under the License. import builtins import collections.abc from . import data_stream_pb2 +from . import data_track_pb2 from . import e2ee_pb2 import google.protobuf.descriptor import google.protobuf.internal.containers @@ -1334,6 +1335,9 @@ class RoomEvent(google.protobuf.message.Message): PARTICIPANT_ENCRYPTION_STATUS_CHANGED_FIELD_NUMBER: builtins.int PARTICIPANT_PERMISSION_CHANGED_FIELD_NUMBER: builtins.int TOKEN_REFRESHED_FIELD_NUMBER: builtins.int + PARTICIPANT_ACTIVE_FIELD_NUMBER: builtins.int + DATA_TRACK_PUBLISHED_FIELD_NUMBER: builtins.int + DATA_TRACK_UNPUBLISHED_FIELD_NUMBER: builtins.int room_handle: builtins.int @property def participant_connected(self) -> global___ParticipantConnected: ... @@ -1429,6 +1433,12 @@ class RoomEvent(google.protobuf.message.Message): def participant_permission_changed(self) -> global___ParticipantPermissionChanged: ... @property def token_refreshed(self) -> global___TokenRefreshed: ... + @property + def participant_active(self) -> global___ParticipantActive: ... + @property + def data_track_published(self) -> global___DataTrackPublished: ... + @property + def data_track_unpublished(self) -> global___DataTrackUnpublished: ... def __init__( self, *, @@ -1473,10 +1483,13 @@ class RoomEvent(google.protobuf.message.Message): participant_encryption_status_changed: global___ParticipantEncryptionStatusChanged | None = ..., participant_permission_changed: global___ParticipantPermissionChanged | None = ..., token_refreshed: global___TokenRefreshed | None = ..., + participant_active: global___ParticipantActive | None = ..., + data_track_published: global___DataTrackPublished | None = ..., + data_track_unpublished: global___DataTrackUnpublished | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["active_speakers_changed", b"active_speakers_changed", "byte_stream_opened", b"byte_stream_opened", "chat_message", b"chat_message", "connection_quality_changed", b"connection_quality_changed", "connection_state_changed", b"connection_state_changed", "data_channel_low_threshold_changed", b"data_channel_low_threshold_changed", "data_packet_received", b"data_packet_received", "disconnected", b"disconnected", "e2ee_state_changed", b"e2ee_state_changed", "eos", b"eos", "local_track_published", b"local_track_published", "local_track_subscribed", b"local_track_subscribed", "local_track_unpublished", b"local_track_unpublished", "message", b"message", "moved", b"moved", "participant_attributes_changed", b"participant_attributes_changed", "participant_connected", b"participant_connected", "participant_disconnected", b"participant_disconnected", "participant_encryption_status_changed", b"participant_encryption_status_changed", "participant_metadata_changed", b"participant_metadata_changed", "participant_name_changed", b"participant_name_changed", "participant_permission_changed", b"participant_permission_changed", "participants_updated", b"participants_updated", "reconnected", b"reconnected", "reconnecting", b"reconnecting", "room_handle", b"room_handle", "room_metadata_changed", b"room_metadata_changed", "room_sid_changed", b"room_sid_changed", "room_updated", b"room_updated", "stream_chunk_received", b"stream_chunk_received", "stream_header_received", b"stream_header_received", "stream_trailer_received", b"stream_trailer_received", "text_stream_opened", b"text_stream_opened", "token_refreshed", b"token_refreshed", "track_muted", b"track_muted", "track_published", b"track_published", "track_subscribed", b"track_subscribed", "track_subscription_failed", b"track_subscription_failed", "track_unmuted", b"track_unmuted", "track_unpublished", b"track_unpublished", "track_unsubscribed", b"track_unsubscribed", "transcription_received", b"transcription_received"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["active_speakers_changed", b"active_speakers_changed", "byte_stream_opened", b"byte_stream_opened", "chat_message", b"chat_message", "connection_quality_changed", b"connection_quality_changed", "connection_state_changed", b"connection_state_changed", "data_channel_low_threshold_changed", b"data_channel_low_threshold_changed", "data_packet_received", b"data_packet_received", "disconnected", b"disconnected", "e2ee_state_changed", b"e2ee_state_changed", "eos", b"eos", "local_track_published", b"local_track_published", "local_track_subscribed", b"local_track_subscribed", "local_track_unpublished", b"local_track_unpublished", "message", b"message", "moved", b"moved", "participant_attributes_changed", b"participant_attributes_changed", "participant_connected", b"participant_connected", "participant_disconnected", b"participant_disconnected", "participant_encryption_status_changed", b"participant_encryption_status_changed", "participant_metadata_changed", b"participant_metadata_changed", "participant_name_changed", b"participant_name_changed", "participant_permission_changed", b"participant_permission_changed", "participants_updated", b"participants_updated", "reconnected", b"reconnected", "reconnecting", b"reconnecting", "room_handle", b"room_handle", "room_metadata_changed", b"room_metadata_changed", "room_sid_changed", b"room_sid_changed", "room_updated", b"room_updated", "stream_chunk_received", b"stream_chunk_received", "stream_header_received", b"stream_header_received", "stream_trailer_received", b"stream_trailer_received", "text_stream_opened", b"text_stream_opened", "token_refreshed", b"token_refreshed", "track_muted", b"track_muted", "track_published", b"track_published", "track_subscribed", b"track_subscribed", "track_subscription_failed", b"track_subscription_failed", "track_unmuted", b"track_unmuted", "track_unpublished", b"track_unpublished", "track_unsubscribed", b"track_unsubscribed", "transcription_received", b"transcription_received"]) -> None: ... - def WhichOneof(self, oneof_group: typing.Literal["message", b"message"]) -> typing.Literal["participant_connected", "participant_disconnected", "local_track_published", "local_track_unpublished", "local_track_subscribed", "track_published", "track_unpublished", "track_subscribed", "track_unsubscribed", "track_subscription_failed", "track_muted", "track_unmuted", "active_speakers_changed", "room_metadata_changed", "room_sid_changed", "participant_metadata_changed", "participant_name_changed", "participant_attributes_changed", "connection_quality_changed", "connection_state_changed", "disconnected", "reconnecting", "reconnected", "e2ee_state_changed", "eos", "data_packet_received", "transcription_received", "chat_message", "stream_header_received", "stream_chunk_received", "stream_trailer_received", "data_channel_low_threshold_changed", "byte_stream_opened", "text_stream_opened", "room_updated", "moved", "participants_updated", "participant_encryption_status_changed", "participant_permission_changed", "token_refreshed"] | None: ... + def HasField(self, field_name: typing.Literal["active_speakers_changed", b"active_speakers_changed", "byte_stream_opened", b"byte_stream_opened", "chat_message", b"chat_message", "connection_quality_changed", b"connection_quality_changed", "connection_state_changed", b"connection_state_changed", "data_channel_low_threshold_changed", b"data_channel_low_threshold_changed", "data_packet_received", b"data_packet_received", "data_track_published", b"data_track_published", "data_track_unpublished", b"data_track_unpublished", "disconnected", b"disconnected", "e2ee_state_changed", b"e2ee_state_changed", "eos", b"eos", "local_track_published", b"local_track_published", "local_track_subscribed", b"local_track_subscribed", "local_track_unpublished", b"local_track_unpublished", "message", b"message", "moved", b"moved", "participant_active", b"participant_active", "participant_attributes_changed", b"participant_attributes_changed", "participant_connected", b"participant_connected", "participant_disconnected", b"participant_disconnected", "participant_encryption_status_changed", b"participant_encryption_status_changed", "participant_metadata_changed", b"participant_metadata_changed", "participant_name_changed", b"participant_name_changed", "participant_permission_changed", b"participant_permission_changed", "participants_updated", b"participants_updated", "reconnected", b"reconnected", "reconnecting", b"reconnecting", "room_handle", b"room_handle", "room_metadata_changed", b"room_metadata_changed", "room_sid_changed", b"room_sid_changed", "room_updated", b"room_updated", "stream_chunk_received", b"stream_chunk_received", "stream_header_received", b"stream_header_received", "stream_trailer_received", b"stream_trailer_received", "text_stream_opened", b"text_stream_opened", "token_refreshed", b"token_refreshed", "track_muted", b"track_muted", "track_published", b"track_published", "track_subscribed", b"track_subscribed", "track_subscription_failed", b"track_subscription_failed", "track_unmuted", b"track_unmuted", "track_unpublished", b"track_unpublished", "track_unsubscribed", b"track_unsubscribed", "transcription_received", b"transcription_received"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["active_speakers_changed", b"active_speakers_changed", "byte_stream_opened", b"byte_stream_opened", "chat_message", b"chat_message", "connection_quality_changed", b"connection_quality_changed", "connection_state_changed", b"connection_state_changed", "data_channel_low_threshold_changed", b"data_channel_low_threshold_changed", "data_packet_received", b"data_packet_received", "data_track_published", b"data_track_published", "data_track_unpublished", b"data_track_unpublished", "disconnected", b"disconnected", "e2ee_state_changed", b"e2ee_state_changed", "eos", b"eos", "local_track_published", b"local_track_published", "local_track_subscribed", b"local_track_subscribed", "local_track_unpublished", b"local_track_unpublished", "message", b"message", "moved", b"moved", "participant_active", b"participant_active", "participant_attributes_changed", b"participant_attributes_changed", "participant_connected", b"participant_connected", "participant_disconnected", b"participant_disconnected", "participant_encryption_status_changed", b"participant_encryption_status_changed", "participant_metadata_changed", b"participant_metadata_changed", "participant_name_changed", b"participant_name_changed", "participant_permission_changed", b"participant_permission_changed", "participants_updated", b"participants_updated", "reconnected", b"reconnected", "reconnecting", b"reconnecting", "room_handle", b"room_handle", "room_metadata_changed", b"room_metadata_changed", "room_sid_changed", b"room_sid_changed", "room_updated", b"room_updated", "stream_chunk_received", b"stream_chunk_received", "stream_header_received", b"stream_header_received", "stream_trailer_received", b"stream_trailer_received", "text_stream_opened", b"text_stream_opened", "token_refreshed", b"token_refreshed", "track_muted", b"track_muted", "track_published", b"track_published", "track_subscribed", b"track_subscribed", "track_subscription_failed", b"track_subscription_failed", "track_unmuted", b"track_unmuted", "track_unpublished", b"track_unpublished", "track_unsubscribed", b"track_unsubscribed", "transcription_received", b"transcription_received"]) -> None: ... + def WhichOneof(self, oneof_group: typing.Literal["message", b"message"]) -> typing.Literal["participant_connected", "participant_disconnected", "local_track_published", "local_track_unpublished", "local_track_subscribed", "track_published", "track_unpublished", "track_subscribed", "track_unsubscribed", "track_subscription_failed", "track_muted", "track_unmuted", "active_speakers_changed", "room_metadata_changed", "room_sid_changed", "participant_metadata_changed", "participant_name_changed", "participant_attributes_changed", "connection_quality_changed", "connection_state_changed", "disconnected", "reconnecting", "reconnected", "e2ee_state_changed", "eos", "data_packet_received", "transcription_received", "chat_message", "stream_header_received", "stream_chunk_received", "stream_trailer_received", "data_channel_low_threshold_changed", "byte_stream_opened", "text_stream_opened", "room_updated", "moved", "participants_updated", "participant_encryption_status_changed", "participant_permission_changed", "token_refreshed", "participant_active", "data_track_published", "data_track_unpublished"] | None: ... global___RoomEvent = RoomEvent @@ -1583,6 +1596,22 @@ class ParticipantConnected(google.protobuf.message.Message): global___ParticipantConnected = ParticipantConnected +@typing.final +class ParticipantActive(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + PARTICIPANT_IDENTITY_FIELD_NUMBER: builtins.int + participant_identity: builtins.str + def __init__( + self, + *, + participant_identity: builtins.str | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["participant_identity", b"participant_identity"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["participant_identity", b"participant_identity"]) -> None: ... + +global___ParticipantActive = ParticipantActive + @typing.final class ParticipantDisconnected(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -2773,3 +2802,41 @@ class TextStreamOpened(google.protobuf.message.Message): def ClearField(self, field_name: typing.Literal["participant_identity", b"participant_identity", "reader", b"reader"]) -> None: ... global___TextStreamOpened = TextStreamOpened + +@typing.final +class DataTrackPublished(google.protobuf.message.Message): + """A remote participant published a data track.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + TRACK_FIELD_NUMBER: builtins.int + @property + def track(self) -> data_track_pb2.OwnedRemoteDataTrack: ... + def __init__( + self, + *, + track: data_track_pb2.OwnedRemoteDataTrack | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["track", b"track"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["track", b"track"]) -> None: ... + +global___DataTrackPublished = DataTrackPublished + +@typing.final +class DataTrackUnpublished(google.protobuf.message.Message): + """A remote participant unpublished a data track.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + SID_FIELD_NUMBER: builtins.int + sid: builtins.str + """SID of the track that was unpublished.""" + def __init__( + self, + *, + sid: builtins.str | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["sid", b"sid"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["sid", b"sid"]) -> None: ... + +global___DataTrackUnpublished = DataTrackUnpublished diff --git a/livekit-rtc/livekit/rtc/_proto/video_frame_pb2.py b/livekit-rtc/livekit/rtc/_proto/video_frame_pb2.py index 409da31e..4fdd812a 100644 --- a/livekit-rtc/livekit/rtc/_proto/video_frame_pb2.py +++ b/livekit-rtc/livekit/rtc/_proto/video_frame_pb2.py @@ -16,7 +16,7 @@ from . import track_pb2 as track__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11video_frame.proto\x12\rlivekit.proto\x1a\x0chandle.proto\x1a\x0btrack.proto\"\xa5\x01\n\x15NewVideoStreamRequest\x12\x14\n\x0ctrack_handle\x18\x01 \x02(\x04\x12,\n\x04type\x18\x02 \x02(\x0e\x32\x1e.livekit.proto.VideoStreamType\x12.\n\x06\x66ormat\x18\x03 \x01(\x0e\x32\x1e.livekit.proto.VideoBufferType\x12\x18\n\x10normalize_stride\x18\x04 \x01(\x08\"I\n\x16NewVideoStreamResponse\x12/\n\x06stream\x18\x01 \x02(\x0b\x32\x1f.livekit.proto.OwnedVideoStream\"\xe9\x01\n!VideoStreamFromParticipantRequest\x12\x1a\n\x12participant_handle\x18\x01 \x02(\x04\x12,\n\x04type\x18\x02 \x02(\x0e\x32\x1e.livekit.proto.VideoStreamType\x12\x30\n\x0ctrack_source\x18\x03 \x02(\x0e\x32\x1a.livekit.proto.TrackSource\x12.\n\x06\x66ormat\x18\x04 \x01(\x0e\x32\x1e.livekit.proto.VideoBufferType\x12\x18\n\x10normalize_stride\x18\x05 \x01(\x08\"U\n\"VideoStreamFromParticipantResponse\x12/\n\x06stream\x18\x01 \x02(\x0b\x32\x1f.livekit.proto.OwnedVideoStream\"\x96\x01\n\x15NewVideoSourceRequest\x12,\n\x04type\x18\x01 \x02(\x0e\x32\x1e.livekit.proto.VideoSourceType\x12\x38\n\nresolution\x18\x02 \x02(\x0b\x32$.livekit.proto.VideoSourceResolution\x12\x15\n\ris_screencast\x18\x03 \x01(\x08\"I\n\x16NewVideoSourceResponse\x12/\n\x06source\x18\x01 \x02(\x0b\x32\x1f.livekit.proto.OwnedVideoSource\"\xa7\x01\n\x18\x43\x61ptureVideoFrameRequest\x12\x15\n\rsource_handle\x18\x01 \x02(\x04\x12.\n\x06\x62uffer\x18\x02 \x02(\x0b\x32\x1e.livekit.proto.VideoBufferInfo\x12\x14\n\x0ctimestamp_us\x18\x03 \x02(\x03\x12.\n\x08rotation\x18\x04 \x02(\x0e\x32\x1c.livekit.proto.VideoRotation\"\x1b\n\x19\x43\x61ptureVideoFrameResponse\"\x87\x01\n\x13VideoConvertRequest\x12\x0e\n\x06\x66lip_y\x18\x01 \x01(\x08\x12.\n\x06\x62uffer\x18\x02 \x02(\x0b\x32\x1e.livekit.proto.VideoBufferInfo\x12\x30\n\x08\x64st_type\x18\x03 \x02(\x0e\x32\x1e.livekit.proto.VideoBufferType\"e\n\x14VideoConvertResponse\x12\x0f\n\x05\x65rror\x18\x01 \x01(\tH\x00\x12\x31\n\x06\x62uffer\x18\x02 \x01(\x0b\x32\x1f.livekit.proto.OwnedVideoBufferH\x00\x42\t\n\x07message\"D\n\x0fVideoResolution\x12\r\n\x05width\x18\x01 \x02(\r\x12\x0e\n\x06height\x18\x02 \x02(\r\x12\x12\n\nframe_rate\x18\x03 \x02(\x01\"\x83\x02\n\x0fVideoBufferInfo\x12,\n\x04type\x18\x01 \x02(\x0e\x32\x1e.livekit.proto.VideoBufferType\x12\r\n\x05width\x18\x02 \x02(\r\x12\x0e\n\x06height\x18\x03 \x02(\r\x12\x10\n\x08\x64\x61ta_ptr\x18\x04 \x02(\x04\x12\x0e\n\x06stride\x18\x06 \x01(\r\x12@\n\ncomponents\x18\x07 \x03(\x0b\x32,.livekit.proto.VideoBufferInfo.ComponentInfo\x1a?\n\rComponentInfo\x12\x10\n\x08\x64\x61ta_ptr\x18\x01 \x02(\x04\x12\x0e\n\x06stride\x18\x02 \x02(\r\x12\x0c\n\x04size\x18\x03 \x02(\r\"o\n\x10OwnedVideoBuffer\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12,\n\x04info\x18\x02 \x02(\x0b\x32\x1e.livekit.proto.VideoBufferInfo\"?\n\x0fVideoStreamInfo\x12,\n\x04type\x18\x01 \x02(\x0e\x32\x1e.livekit.proto.VideoStreamType\"o\n\x10OwnedVideoStream\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12,\n\x04info\x18\x02 \x02(\x0b\x32\x1e.livekit.proto.VideoStreamInfo\"\x9f\x01\n\x10VideoStreamEvent\x12\x15\n\rstream_handle\x18\x01 \x02(\x04\x12;\n\x0e\x66rame_received\x18\x02 \x01(\x0b\x32!.livekit.proto.VideoFrameReceivedH\x00\x12,\n\x03\x65os\x18\x03 \x01(\x0b\x32\x1d.livekit.proto.VideoStreamEOSH\x00\x42\t\n\x07message\"\x8b\x01\n\x12VideoFrameReceived\x12/\n\x06\x62uffer\x18\x01 \x02(\x0b\x32\x1f.livekit.proto.OwnedVideoBuffer\x12\x14\n\x0ctimestamp_us\x18\x02 \x02(\x03\x12.\n\x08rotation\x18\x03 \x02(\x0e\x32\x1c.livekit.proto.VideoRotation\"\x10\n\x0eVideoStreamEOS\"6\n\x15VideoSourceResolution\x12\r\n\x05width\x18\x01 \x02(\r\x12\x0e\n\x06height\x18\x02 \x02(\r\"?\n\x0fVideoSourceInfo\x12,\n\x04type\x18\x01 \x02(\x0e\x32\x1e.livekit.proto.VideoSourceType\"o\n\x10OwnedVideoSource\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12,\n\x04info\x18\x02 \x02(\x0b\x32\x1e.livekit.proto.VideoSourceInfo*;\n\nVideoCodec\x12\x07\n\x03VP8\x10\x00\x12\x08\n\x04H264\x10\x01\x12\x07\n\x03\x41V1\x10\x02\x12\x07\n\x03VP9\x10\x03\x12\x08\n\x04H265\x10\x04*l\n\rVideoRotation\x12\x14\n\x10VIDEO_ROTATION_0\x10\x00\x12\x15\n\x11VIDEO_ROTATION_90\x10\x01\x12\x16\n\x12VIDEO_ROTATION_180\x10\x02\x12\x16\n\x12VIDEO_ROTATION_270\x10\x03*\x81\x01\n\x0fVideoBufferType\x12\x08\n\x04RGBA\x10\x00\x12\x08\n\x04\x41\x42GR\x10\x01\x12\x08\n\x04\x41RGB\x10\x02\x12\x08\n\x04\x42GRA\x10\x03\x12\t\n\x05RGB24\x10\x04\x12\x08\n\x04I420\x10\x05\x12\t\n\x05I420A\x10\x06\x12\x08\n\x04I422\x10\x07\x12\x08\n\x04I444\x10\x08\x12\x08\n\x04I010\x10\t\x12\x08\n\x04NV12\x10\n*Y\n\x0fVideoStreamType\x12\x17\n\x13VIDEO_STREAM_NATIVE\x10\x00\x12\x16\n\x12VIDEO_STREAM_WEBGL\x10\x01\x12\x15\n\x11VIDEO_STREAM_HTML\x10\x02**\n\x0fVideoSourceType\x12\x17\n\x13VIDEO_SOURCE_NATIVE\x10\x00\x42\x10\xaa\x02\rLiveKit.Proto') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11video_frame.proto\x12\rlivekit.proto\x1a\x0chandle.proto\x1a\x0btrack.proto\"\xc0\x01\n\x15NewVideoStreamRequest\x12\x14\n\x0ctrack_handle\x18\x01 \x02(\x04\x12,\n\x04type\x18\x02 \x02(\x0e\x32\x1e.livekit.proto.VideoStreamType\x12.\n\x06\x66ormat\x18\x03 \x01(\x0e\x32\x1e.livekit.proto.VideoBufferType\x12\x18\n\x10normalize_stride\x18\x04 \x01(\x08\x12\x19\n\x11queue_size_frames\x18\x05 \x01(\r\"I\n\x16NewVideoStreamResponse\x12/\n\x06stream\x18\x01 \x02(\x0b\x32\x1f.livekit.proto.OwnedVideoStream\"\x84\x02\n!VideoStreamFromParticipantRequest\x12\x1a\n\x12participant_handle\x18\x01 \x02(\x04\x12,\n\x04type\x18\x02 \x02(\x0e\x32\x1e.livekit.proto.VideoStreamType\x12\x30\n\x0ctrack_source\x18\x03 \x02(\x0e\x32\x1a.livekit.proto.TrackSource\x12.\n\x06\x66ormat\x18\x04 \x01(\x0e\x32\x1e.livekit.proto.VideoBufferType\x12\x18\n\x10normalize_stride\x18\x05 \x01(\x08\x12\x19\n\x11queue_size_frames\x18\x06 \x01(\r\"U\n\"VideoStreamFromParticipantResponse\x12/\n\x06stream\x18\x01 \x02(\x0b\x32\x1f.livekit.proto.OwnedVideoStream\"\x96\x01\n\x15NewVideoSourceRequest\x12,\n\x04type\x18\x01 \x02(\x0e\x32\x1e.livekit.proto.VideoSourceType\x12\x38\n\nresolution\x18\x02 \x02(\x0b\x32$.livekit.proto.VideoSourceResolution\x12\x15\n\ris_screencast\x18\x03 \x01(\x08\"I\n\x16NewVideoSourceResponse\x12/\n\x06source\x18\x01 \x02(\x0b\x32\x1f.livekit.proto.OwnedVideoSource\"\xa7\x01\n\x18\x43\x61ptureVideoFrameRequest\x12\x15\n\rsource_handle\x18\x01 \x02(\x04\x12.\n\x06\x62uffer\x18\x02 \x02(\x0b\x32\x1e.livekit.proto.VideoBufferInfo\x12\x14\n\x0ctimestamp_us\x18\x03 \x02(\x03\x12.\n\x08rotation\x18\x04 \x02(\x0e\x32\x1c.livekit.proto.VideoRotation\"\x1b\n\x19\x43\x61ptureVideoFrameResponse\"\x87\x01\n\x13VideoConvertRequest\x12\x0e\n\x06\x66lip_y\x18\x01 \x01(\x08\x12.\n\x06\x62uffer\x18\x02 \x02(\x0b\x32\x1e.livekit.proto.VideoBufferInfo\x12\x30\n\x08\x64st_type\x18\x03 \x02(\x0e\x32\x1e.livekit.proto.VideoBufferType\"e\n\x14VideoConvertResponse\x12\x0f\n\x05\x65rror\x18\x01 \x01(\tH\x00\x12\x31\n\x06\x62uffer\x18\x02 \x01(\x0b\x32\x1f.livekit.proto.OwnedVideoBufferH\x00\x42\t\n\x07message\"D\n\x0fVideoResolution\x12\r\n\x05width\x18\x01 \x02(\r\x12\x0e\n\x06height\x18\x02 \x02(\r\x12\x12\n\nframe_rate\x18\x03 \x02(\x01\"\x83\x02\n\x0fVideoBufferInfo\x12,\n\x04type\x18\x01 \x02(\x0e\x32\x1e.livekit.proto.VideoBufferType\x12\r\n\x05width\x18\x02 \x02(\r\x12\x0e\n\x06height\x18\x03 \x02(\r\x12\x10\n\x08\x64\x61ta_ptr\x18\x04 \x02(\x04\x12\x0e\n\x06stride\x18\x06 \x01(\r\x12@\n\ncomponents\x18\x07 \x03(\x0b\x32,.livekit.proto.VideoBufferInfo.ComponentInfo\x1a?\n\rComponentInfo\x12\x10\n\x08\x64\x61ta_ptr\x18\x01 \x02(\x04\x12\x0e\n\x06stride\x18\x02 \x02(\r\x12\x0c\n\x04size\x18\x03 \x02(\r\"o\n\x10OwnedVideoBuffer\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12,\n\x04info\x18\x02 \x02(\x0b\x32\x1e.livekit.proto.VideoBufferInfo\"?\n\x0fVideoStreamInfo\x12,\n\x04type\x18\x01 \x02(\x0e\x32\x1e.livekit.proto.VideoStreamType\"o\n\x10OwnedVideoStream\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12,\n\x04info\x18\x02 \x02(\x0b\x32\x1e.livekit.proto.VideoStreamInfo\"\x9f\x01\n\x10VideoStreamEvent\x12\x15\n\rstream_handle\x18\x01 \x02(\x04\x12;\n\x0e\x66rame_received\x18\x02 \x01(\x0b\x32!.livekit.proto.VideoFrameReceivedH\x00\x12,\n\x03\x65os\x18\x03 \x01(\x0b\x32\x1d.livekit.proto.VideoStreamEOSH\x00\x42\t\n\x07message\"\x8b\x01\n\x12VideoFrameReceived\x12/\n\x06\x62uffer\x18\x01 \x02(\x0b\x32\x1f.livekit.proto.OwnedVideoBuffer\x12\x14\n\x0ctimestamp_us\x18\x02 \x02(\x03\x12.\n\x08rotation\x18\x03 \x02(\x0e\x32\x1c.livekit.proto.VideoRotation\"\x10\n\x0eVideoStreamEOS\"6\n\x15VideoSourceResolution\x12\r\n\x05width\x18\x01 \x02(\r\x12\x0e\n\x06height\x18\x02 \x02(\r\"?\n\x0fVideoSourceInfo\x12,\n\x04type\x18\x01 \x02(\x0e\x32\x1e.livekit.proto.VideoSourceType\"o\n\x10OwnedVideoSource\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12,\n\x04info\x18\x02 \x02(\x0b\x32\x1e.livekit.proto.VideoSourceInfo*;\n\nVideoCodec\x12\x07\n\x03VP8\x10\x00\x12\x08\n\x04H264\x10\x01\x12\x07\n\x03\x41V1\x10\x02\x12\x07\n\x03VP9\x10\x03\x12\x08\n\x04H265\x10\x04*l\n\rVideoRotation\x12\x14\n\x10VIDEO_ROTATION_0\x10\x00\x12\x15\n\x11VIDEO_ROTATION_90\x10\x01\x12\x16\n\x12VIDEO_ROTATION_180\x10\x02\x12\x16\n\x12VIDEO_ROTATION_270\x10\x03*\x81\x01\n\x0fVideoBufferType\x12\x08\n\x04RGBA\x10\x00\x12\x08\n\x04\x41\x42GR\x10\x01\x12\x08\n\x04\x41RGB\x10\x02\x12\x08\n\x04\x42GRA\x10\x03\x12\t\n\x05RGB24\x10\x04\x12\x08\n\x04I420\x10\x05\x12\t\n\x05I420A\x10\x06\x12\x08\n\x04I422\x10\x07\x12\x08\n\x04I444\x10\x08\x12\x08\n\x04I010\x10\t\x12\x08\n\x04NV12\x10\n*Y\n\x0fVideoStreamType\x12\x17\n\x13VIDEO_STREAM_NATIVE\x10\x00\x12\x16\n\x12VIDEO_STREAM_WEBGL\x10\x01\x12\x15\n\x11VIDEO_STREAM_HTML\x10\x02**\n\x0fVideoSourceType\x12\x17\n\x13VIDEO_SOURCE_NATIVE\x10\x00\x42\x10\xaa\x02\rLiveKit.Proto') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -24,58 +24,58 @@ if _descriptor._USE_C_DESCRIPTORS == False: _globals['DESCRIPTOR']._options = None _globals['DESCRIPTOR']._serialized_options = b'\252\002\rLiveKit.Proto' - _globals['_VIDEOCODEC']._serialized_start=2476 - _globals['_VIDEOCODEC']._serialized_end=2535 - _globals['_VIDEOROTATION']._serialized_start=2537 - _globals['_VIDEOROTATION']._serialized_end=2645 - _globals['_VIDEOBUFFERTYPE']._serialized_start=2648 - _globals['_VIDEOBUFFERTYPE']._serialized_end=2777 - _globals['_VIDEOSTREAMTYPE']._serialized_start=2779 - _globals['_VIDEOSTREAMTYPE']._serialized_end=2868 - _globals['_VIDEOSOURCETYPE']._serialized_start=2870 - _globals['_VIDEOSOURCETYPE']._serialized_end=2912 + _globals['_VIDEOCODEC']._serialized_start=2530 + _globals['_VIDEOCODEC']._serialized_end=2589 + _globals['_VIDEOROTATION']._serialized_start=2591 + _globals['_VIDEOROTATION']._serialized_end=2699 + _globals['_VIDEOBUFFERTYPE']._serialized_start=2702 + _globals['_VIDEOBUFFERTYPE']._serialized_end=2831 + _globals['_VIDEOSTREAMTYPE']._serialized_start=2833 + _globals['_VIDEOSTREAMTYPE']._serialized_end=2922 + _globals['_VIDEOSOURCETYPE']._serialized_start=2924 + _globals['_VIDEOSOURCETYPE']._serialized_end=2966 _globals['_NEWVIDEOSTREAMREQUEST']._serialized_start=64 - _globals['_NEWVIDEOSTREAMREQUEST']._serialized_end=229 - _globals['_NEWVIDEOSTREAMRESPONSE']._serialized_start=231 - _globals['_NEWVIDEOSTREAMRESPONSE']._serialized_end=304 - _globals['_VIDEOSTREAMFROMPARTICIPANTREQUEST']._serialized_start=307 - _globals['_VIDEOSTREAMFROMPARTICIPANTREQUEST']._serialized_end=540 - _globals['_VIDEOSTREAMFROMPARTICIPANTRESPONSE']._serialized_start=542 - _globals['_VIDEOSTREAMFROMPARTICIPANTRESPONSE']._serialized_end=627 - _globals['_NEWVIDEOSOURCEREQUEST']._serialized_start=630 - _globals['_NEWVIDEOSOURCEREQUEST']._serialized_end=780 - _globals['_NEWVIDEOSOURCERESPONSE']._serialized_start=782 - _globals['_NEWVIDEOSOURCERESPONSE']._serialized_end=855 - _globals['_CAPTUREVIDEOFRAMEREQUEST']._serialized_start=858 - _globals['_CAPTUREVIDEOFRAMEREQUEST']._serialized_end=1025 - _globals['_CAPTUREVIDEOFRAMERESPONSE']._serialized_start=1027 - _globals['_CAPTUREVIDEOFRAMERESPONSE']._serialized_end=1054 - _globals['_VIDEOCONVERTREQUEST']._serialized_start=1057 - _globals['_VIDEOCONVERTREQUEST']._serialized_end=1192 - _globals['_VIDEOCONVERTRESPONSE']._serialized_start=1194 - _globals['_VIDEOCONVERTRESPONSE']._serialized_end=1295 - _globals['_VIDEORESOLUTION']._serialized_start=1297 - _globals['_VIDEORESOLUTION']._serialized_end=1365 - _globals['_VIDEOBUFFERINFO']._serialized_start=1368 - _globals['_VIDEOBUFFERINFO']._serialized_end=1627 - _globals['_VIDEOBUFFERINFO_COMPONENTINFO']._serialized_start=1564 - _globals['_VIDEOBUFFERINFO_COMPONENTINFO']._serialized_end=1627 - _globals['_OWNEDVIDEOBUFFER']._serialized_start=1629 - _globals['_OWNEDVIDEOBUFFER']._serialized_end=1740 - _globals['_VIDEOSTREAMINFO']._serialized_start=1742 - _globals['_VIDEOSTREAMINFO']._serialized_end=1805 - _globals['_OWNEDVIDEOSTREAM']._serialized_start=1807 - _globals['_OWNEDVIDEOSTREAM']._serialized_end=1918 - _globals['_VIDEOSTREAMEVENT']._serialized_start=1921 - _globals['_VIDEOSTREAMEVENT']._serialized_end=2080 - _globals['_VIDEOFRAMERECEIVED']._serialized_start=2083 - _globals['_VIDEOFRAMERECEIVED']._serialized_end=2222 - _globals['_VIDEOSTREAMEOS']._serialized_start=2224 - _globals['_VIDEOSTREAMEOS']._serialized_end=2240 - _globals['_VIDEOSOURCERESOLUTION']._serialized_start=2242 - _globals['_VIDEOSOURCERESOLUTION']._serialized_end=2296 - _globals['_VIDEOSOURCEINFO']._serialized_start=2298 - _globals['_VIDEOSOURCEINFO']._serialized_end=2361 - _globals['_OWNEDVIDEOSOURCE']._serialized_start=2363 - _globals['_OWNEDVIDEOSOURCE']._serialized_end=2474 + _globals['_NEWVIDEOSTREAMREQUEST']._serialized_end=256 + _globals['_NEWVIDEOSTREAMRESPONSE']._serialized_start=258 + _globals['_NEWVIDEOSTREAMRESPONSE']._serialized_end=331 + _globals['_VIDEOSTREAMFROMPARTICIPANTREQUEST']._serialized_start=334 + _globals['_VIDEOSTREAMFROMPARTICIPANTREQUEST']._serialized_end=594 + _globals['_VIDEOSTREAMFROMPARTICIPANTRESPONSE']._serialized_start=596 + _globals['_VIDEOSTREAMFROMPARTICIPANTRESPONSE']._serialized_end=681 + _globals['_NEWVIDEOSOURCEREQUEST']._serialized_start=684 + _globals['_NEWVIDEOSOURCEREQUEST']._serialized_end=834 + _globals['_NEWVIDEOSOURCERESPONSE']._serialized_start=836 + _globals['_NEWVIDEOSOURCERESPONSE']._serialized_end=909 + _globals['_CAPTUREVIDEOFRAMEREQUEST']._serialized_start=912 + _globals['_CAPTUREVIDEOFRAMEREQUEST']._serialized_end=1079 + _globals['_CAPTUREVIDEOFRAMERESPONSE']._serialized_start=1081 + _globals['_CAPTUREVIDEOFRAMERESPONSE']._serialized_end=1108 + _globals['_VIDEOCONVERTREQUEST']._serialized_start=1111 + _globals['_VIDEOCONVERTREQUEST']._serialized_end=1246 + _globals['_VIDEOCONVERTRESPONSE']._serialized_start=1248 + _globals['_VIDEOCONVERTRESPONSE']._serialized_end=1349 + _globals['_VIDEORESOLUTION']._serialized_start=1351 + _globals['_VIDEORESOLUTION']._serialized_end=1419 + _globals['_VIDEOBUFFERINFO']._serialized_start=1422 + _globals['_VIDEOBUFFERINFO']._serialized_end=1681 + _globals['_VIDEOBUFFERINFO_COMPONENTINFO']._serialized_start=1618 + _globals['_VIDEOBUFFERINFO_COMPONENTINFO']._serialized_end=1681 + _globals['_OWNEDVIDEOBUFFER']._serialized_start=1683 + _globals['_OWNEDVIDEOBUFFER']._serialized_end=1794 + _globals['_VIDEOSTREAMINFO']._serialized_start=1796 + _globals['_VIDEOSTREAMINFO']._serialized_end=1859 + _globals['_OWNEDVIDEOSTREAM']._serialized_start=1861 + _globals['_OWNEDVIDEOSTREAM']._serialized_end=1972 + _globals['_VIDEOSTREAMEVENT']._serialized_start=1975 + _globals['_VIDEOSTREAMEVENT']._serialized_end=2134 + _globals['_VIDEOFRAMERECEIVED']._serialized_start=2137 + _globals['_VIDEOFRAMERECEIVED']._serialized_end=2276 + _globals['_VIDEOSTREAMEOS']._serialized_start=2278 + _globals['_VIDEOSTREAMEOS']._serialized_end=2294 + _globals['_VIDEOSOURCERESOLUTION']._serialized_start=2296 + _globals['_VIDEOSOURCERESOLUTION']._serialized_end=2350 + _globals['_VIDEOSOURCEINFO']._serialized_start=2352 + _globals['_VIDEOSOURCEINFO']._serialized_end=2415 + _globals['_OWNEDVIDEOSOURCE']._serialized_start=2417 + _globals['_OWNEDVIDEOSOURCE']._serialized_end=2528 # @@protoc_insertion_point(module_scope) diff --git a/livekit-rtc/livekit/rtc/_proto/video_frame_pb2.pyi b/livekit-rtc/livekit/rtc/_proto/video_frame_pb2.pyi index 01d30938..3a5ca1d9 100644 --- a/livekit-rtc/livekit/rtc/_proto/video_frame_pb2.pyi +++ b/livekit-rtc/livekit/rtc/_proto/video_frame_pb2.pyi @@ -155,12 +155,23 @@ class NewVideoStreamRequest(google.protobuf.message.Message): TYPE_FIELD_NUMBER: builtins.int FORMAT_FIELD_NUMBER: builtins.int NORMALIZE_STRIDE_FIELD_NUMBER: builtins.int + QUEUE_SIZE_FRAMES_FIELD_NUMBER: builtins.int track_handle: builtins.int type: global___VideoStreamType.ValueType format: global___VideoBufferType.ValueType """Get the frame on a specific format""" normalize_stride: builtins.bool """if true, stride will be set to width/chroma_width""" + queue_size_frames: builtins.int + """Maximum number of queued WebRTC sink frames on the receive path. Omit this + field to use the default bounded queue size of 1 frame. Set it to 0 to + request unbounded buffering. + + If your application consumes both audio and video, keep the queue sizing + strategy coordinated across both streams. Using a much larger queue, or + unbounded buffering, for only one of them can increase end-to-end latency + for that stream and cause audio/video drift. + """ def __init__( self, *, @@ -168,9 +179,10 @@ class NewVideoStreamRequest(google.protobuf.message.Message): type: global___VideoStreamType.ValueType | None = ..., format: global___VideoBufferType.ValueType | None = ..., normalize_stride: builtins.bool | None = ..., + queue_size_frames: builtins.int | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["format", b"format", "normalize_stride", b"normalize_stride", "track_handle", b"track_handle", "type", b"type"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["format", b"format", "normalize_stride", b"normalize_stride", "track_handle", b"track_handle", "type", b"type"]) -> None: ... + def HasField(self, field_name: typing.Literal["format", b"format", "normalize_stride", b"normalize_stride", "queue_size_frames", b"queue_size_frames", "track_handle", b"track_handle", "type", b"type"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["format", b"format", "normalize_stride", b"normalize_stride", "queue_size_frames", b"queue_size_frames", "track_handle", b"track_handle", "type", b"type"]) -> None: ... global___NewVideoStreamRequest = NewVideoStreamRequest @@ -202,11 +214,22 @@ class VideoStreamFromParticipantRequest(google.protobuf.message.Message): TRACK_SOURCE_FIELD_NUMBER: builtins.int FORMAT_FIELD_NUMBER: builtins.int NORMALIZE_STRIDE_FIELD_NUMBER: builtins.int + QUEUE_SIZE_FRAMES_FIELD_NUMBER: builtins.int participant_handle: builtins.int type: global___VideoStreamType.ValueType track_source: track_pb2.TrackSource.ValueType format: global___VideoBufferType.ValueType normalize_stride: builtins.bool + queue_size_frames: builtins.int + """Maximum number of queued WebRTC sink frames on the receive path. Omit this + field to use the default bounded queue size of 1 frame. Set it to 0 to + request unbounded buffering. + + If your application consumes both audio and video, keep the queue sizing + strategy coordinated across both streams. Using a much larger queue, or + unbounded buffering, for only one of them can increase end-to-end latency + for that stream and cause audio/video drift. + """ def __init__( self, *, @@ -215,9 +238,10 @@ class VideoStreamFromParticipantRequest(google.protobuf.message.Message): track_source: track_pb2.TrackSource.ValueType | None = ..., format: global___VideoBufferType.ValueType | None = ..., normalize_stride: builtins.bool | None = ..., + queue_size_frames: builtins.int | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["format", b"format", "normalize_stride", b"normalize_stride", "participant_handle", b"participant_handle", "track_source", b"track_source", "type", b"type"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["format", b"format", "normalize_stride", b"normalize_stride", "participant_handle", b"participant_handle", "track_source", b"track_source", "type", b"type"]) -> None: ... + def HasField(self, field_name: typing.Literal["format", b"format", "normalize_stride", b"normalize_stride", "participant_handle", b"participant_handle", "queue_size_frames", b"queue_size_frames", "track_source", b"track_source", "type", b"type"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["format", b"format", "normalize_stride", b"normalize_stride", "participant_handle", b"participant_handle", "queue_size_frames", b"queue_size_frames", "track_source", b"track_source", "type", b"type"]) -> None: ... global___VideoStreamFromParticipantRequest = VideoStreamFromParticipantRequest diff --git a/livekit-rtc/livekit/rtc/data_track.py b/livekit-rtc/livekit/rtc/data_track.py new file mode 100644 index 00000000..2fb26b71 --- /dev/null +++ b/livekit-rtc/livekit/rtc/data_track.py @@ -0,0 +1,273 @@ +# Copyright 2023 LiveKit, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from dataclasses import dataclass +from typing import AsyncIterator, Optional + +from ._ffi_client import FfiClient, FfiHandle +from ._proto import ffi_pb2 as proto_ffi +from ._proto import data_track_pb2 as proto_data_track + + +class SubscribeDataTrackError(Exception): + """An error that can occur when subscribing to a data track.""" + + def __init__(self, message: str) -> None: + self.message = message + + +class PushFrameError(Exception): + """Frame could not be pushed to a data track. + + Pushing a frame can fail for several reasons: + + - The track has been unpublished by the local participant or SFU + - The room is no longer connected + - Frames are being pushed too fast + """ + + def __init__(self, message: str) -> None: + self.message = message + + +@dataclass +class DataTrackInfo: + """Information about a published data track.""" + + sid: str + """Unique track identifier assigned by the SFU. + + This identifier may change if a reconnect occurs. Use ``name`` if a + stable identifier is needed. + """ + + name: str + """Name of the track assigned by the publisher.""" + + uses_e2ee: bool + """Whether or not frames sent on the track use end-to-end encryption.""" + + +@dataclass +class DataTrackFrame: + """A frame published on a data track, consisting of a payload and optional metadata.""" + + payload: bytes + """The frame's payload.""" + + user_timestamp: Optional[int] = None + """The frame's user timestamp, if one is associated.""" + + +class LocalDataTrack: + """Data track published by the local participant.""" + + def __init__(self, owned_info: proto_data_track.OwnedLocalDataTrack) -> None: + self._info = DataTrackInfo( + sid=owned_info.info.sid, + name=owned_info.info.name, + uses_e2ee=owned_info.info.uses_e2ee, + ) + self._ffi_handle = FfiHandle(owned_info.handle.id) + + @property + def info(self) -> DataTrackInfo: + """Information about the data track.""" + return self._info + + def try_push(self, frame: DataTrackFrame) -> None: + """Try pushing a frame to subscribers of the track. + + See :class:`DataTrackFrame` for how to construct a frame and attach metadata. + + Args: + frame: The data track frame to send. + + Raises: + PushFrameError: If the push fails. + """ + proto_frame = proto_data_track.DataTrackFrame(payload=bytes(frame.payload)) + if frame.user_timestamp is not None: + proto_frame.user_timestamp = frame.user_timestamp + + req = proto_ffi.FfiRequest() + req.local_data_track_try_push.track_handle = self._ffi_handle.handle + req.local_data_track_try_push.frame.CopyFrom(proto_frame) + + resp = FfiClient.instance.request(req) + if resp.local_data_track_try_push.HasField("error"): + raise PushFrameError(resp.local_data_track_try_push.error.message) + + def is_published(self) -> bool: + """Whether or not the track is still published.""" + req = proto_ffi.FfiRequest() + req.local_data_track_is_published.track_handle = self._ffi_handle.handle + + resp = FfiClient.instance.request(req) + return resp.local_data_track_is_published.is_published + + async def unpublish(self) -> None: + """Unpublishes the track.""" + req = proto_ffi.FfiRequest() + req.local_data_track_unpublish.track_handle = self._ffi_handle.handle + FfiClient.instance.request(req) + + def __repr__(self) -> str: + return f"rtc.LocalDataTrack(sid={self._info.sid}, name={self._info.name})" + + +class RemoteDataTrack: + """Data track published by a remote participant.""" + + def __init__(self, owned_info: proto_data_track.OwnedRemoteDataTrack) -> None: + self._info = DataTrackInfo( + sid=owned_info.info.sid, + name=owned_info.info.name, + uses_e2ee=owned_info.info.uses_e2ee, + ) + self._ffi_handle = FfiHandle(owned_info.handle.id) + self._publisher_identity = owned_info.publisher_identity + + @property + def info(self) -> DataTrackInfo: + """Information about the data track.""" + return self._info + + @property + def publisher_identity(self) -> str: + """Identity of the participant who published the track.""" + return self._publisher_identity + + def subscribe(self, *, buffer_size: Optional[int] = None) -> DataTrackStream: + """Subscribes to the data track to receive frames. + + Args: + buffer_size: Maximum number of received frames to buffer internally. + When ``None``, the default buffer size is used. + Zero is not a valid buffer size; if a value of zero is provided, it will be clamped to one. + + Returns a :class:`DataTrackStream` that yields + :class:`DataTrackFrame` instances as they arrive. If the + subscription encounters an error, it is raised as + :class:`SubscribeDataTrackError` when iteration ends. + """ + opts = proto_data_track.DataTrackSubscribeOptions() + if buffer_size is not None: + opts.buffer_size = buffer_size + + req = proto_ffi.FfiRequest() + req.subscribe_data_track.track_handle = self._ffi_handle.handle + req.subscribe_data_track.options.CopyFrom(opts) + + resp = FfiClient.instance.request(req) + return DataTrackStream(resp.subscribe_data_track.stream) + + def is_published(self) -> bool: + """Whether or not the track is still published.""" + req = proto_ffi.FfiRequest() + req.remote_data_track_is_published.track_handle = self._ffi_handle.handle + + resp = FfiClient.instance.request(req) + return resp.remote_data_track_is_published.is_published + + def __repr__(self) -> str: + return ( + f"rtc.RemoteDataTrack(sid={self._info.sid}, name={self._info.name}, " + f"publisher_identity={self._publisher_identity})" + ) + + +class DataTrackStream: + """An active subscription to a remote data track. + + Use as an async iterator to receive frames:: + + stream = remote_track.subscribe() + async for frame in stream: + process(frame.payload) + + Dropping or closing the stream unsubscribes from the track. + + If subscribing to the track fails, :class:`SubscribeDataTrackError` + is raised when iteration ends instead of a normal ``StopAsyncIteration``. + """ + + def __init__(self, owned_info: proto_data_track.OwnedDataTrackStream) -> None: + self._ffi_handle = FfiHandle(owned_info.handle.id) + handle_id = owned_info.handle.id + + self._queue = FfiClient.instance.queue.subscribe( + filter_fn=lambda e: ( + e.WhichOneof("message") == "data_track_stream_event" + and e.data_track_stream_event.stream_handle == handle_id + ), + ) + self._closed = False + + async def read(self) -> Optional[DataTrackFrame]: + """Read a single frame, or ``None`` if the stream has ended.""" + try: + return await self.__anext__() + except StopAsyncIteration: + return None + + def __aiter__(self) -> AsyncIterator[DataTrackFrame]: + return self + + async def __anext__(self) -> DataTrackFrame: + if self._closed: + raise StopAsyncIteration + + self._send_read_request() + event: proto_ffi.FfiEvent = await self._queue.get() + stream_event = event.data_track_stream_event + detail = stream_event.WhichOneof("detail") + + if detail == "frame_received": + proto_frame = stream_event.frame_received.frame + user_ts: Optional[int] = None + if proto_frame.HasField("user_timestamp"): + user_ts = proto_frame.user_timestamp + return DataTrackFrame( + payload=proto_frame.payload, + user_timestamp=user_ts, + ) + elif detail == "eos": + self._close() + if stream_event.eos.HasField("error"): + raise SubscribeDataTrackError(stream_event.eos.error) + raise StopAsyncIteration + else: + self._close() + raise StopAsyncIteration + + def _send_read_request(self) -> None: + req = proto_ffi.FfiRequest() + req.data_track_stream_read.stream_handle = self._ffi_handle.handle + FfiClient.instance.request(req) + + def _close(self) -> None: + if not self._closed: + self._closed = True + FfiClient.instance.queue.unsubscribe(self._queue) + + def close(self) -> None: + """Explicitly close the subscription and unsubscribe.""" + self._close() + self._ffi_handle.dispose() + + async def aclose(self) -> None: + self.close() diff --git a/livekit-rtc/livekit/rtc/participant.py b/livekit-rtc/livekit/rtc/participant.py index d2794ace..f2cc206e 100644 --- a/livekit-rtc/livekit/rtc/participant.py +++ b/livekit-rtc/livekit/rtc/participant.py @@ -53,6 +53,8 @@ ByteStreamInfo, STREAM_CHUNK_SIZE, ) +from .data_track import LocalDataTrack +from ._proto import data_track_pb2 as proto_data_track class PublishTrackError(Exception): @@ -80,6 +82,11 @@ def __init__(self, message: str) -> None: self.message = message +class PublishDataTrackError(Exception): + def __init__(self, message: str) -> None: + self.message = message + + class Participant(ABC): def __init__(self, owned_info: proto_participant.OwnedParticipant) -> None: self._info = owned_info.info @@ -667,6 +674,44 @@ async def send_file( return writer.info + async def publish_data_track( + self, + *, + name: str, + ) -> LocalDataTrack: + """Publishes a data track. + + Args: + name: The track name used to identify the track to other participants. + Must not be empty and must be unique per publisher. + + Returns: + The published data track. Use :meth:`LocalDataTrack.try_push` to + send data frames on the track. + + Raises: + PublishDataTrackError: If there is an error publishing the data track. + """ + proto_opts = proto_data_track.DataTrackOptions(name=name) + + req = proto_ffi.FfiRequest() + req.publish_data_track.local_participant_handle = self._ffi_handle.handle + req.publish_data_track.options.CopyFrom(proto_opts) + + queue = FfiClient.instance.queue.subscribe() + try: + resp = FfiClient.instance.request(req) + cb: proto_ffi.FfiEvent = await queue.wait_for( + lambda e: e.publish_data_track.async_id == resp.publish_data_track.async_id + ) + finally: + FfiClient.instance.queue.unsubscribe(queue) + + if cb.publish_data_track.HasField("error"): + raise PublishDataTrackError(cb.publish_data_track.error.message) + + return LocalDataTrack(cb.publish_data_track.track) + async def publish_track( self, track: LocalTrack, options: TrackPublishOptions = TrackPublishOptions() ) -> LocalTrackPublication: diff --git a/livekit-rtc/livekit/rtc/room.py b/livekit-rtc/livekit/rtc/room.py index edc02be8..a815bcd2 100644 --- a/livekit-rtc/livekit/rtc/room.py +++ b/livekit-rtc/livekit/rtc/room.py @@ -43,6 +43,7 @@ TextStreamHandler, ByteStreamHandler, ) +from .data_track import RemoteDataTrack EventTypes = Literal[ @@ -78,6 +79,8 @@ "room_updated", "moved", "token_refreshed", + "data_track_published", + "data_track_unpublished", ] @@ -392,6 +395,10 @@ def on(self, event: EventTypes, callback: Optional[Callable] = None) -> Callable - Arguments: None - **"moved"**: Called when the participant has been moved to another room. - Arguments: None + - **"data_track_published"**: Called when a remote participant publishes a data track. + - Arguments: `track` (RemoteDataTrack) + - **"data_track_unpublished"**: Called when a remote participant unpublishes a data track. + - Arguments: `sid` (str) Example: ```python @@ -927,6 +934,13 @@ def _on_room_event(self, event: proto_room.RoomEvent): self._token = event.token_refreshed.token self.emit("token_refreshed") + elif which == "data_track_published": + remote_data_track = RemoteDataTrack(event.data_track_published.track) + self.emit("data_track_published", remote_data_track) + + elif which == "data_track_unpublished": + self.emit("data_track_unpublished", event.data_track_unpublished.sid) + def _handle_stream_header( self, header: proto_room.DataStream.Header, participant_identity: str ): diff --git a/livekit-rtc/rust-sdks b/livekit-rtc/rust-sdks index 20e442ed..07af4203 160000 --- a/livekit-rtc/rust-sdks +++ b/livekit-rtc/rust-sdks @@ -1 +1 @@ -Subproject commit 20e442edab8e91f399ca62e0f5d811ed0002a4b2 +Subproject commit 07af42030bf207fc6a9909addd8fbf068e868e25 diff --git a/tests/rtc/test_e2e.py b/tests/rtc/test_e2e.py index cd8497c3..6935d3c6 100644 --- a/tests/rtc/test_e2e.py +++ b/tests/rtc/test_e2e.py @@ -2,7 +2,7 @@ End-to-end tests for LiveKit RTC library. These tests verify core functionality of the LiveKit RTC library including: -- Publishing and subscribing to audio tracks +- Publishing and subscribing to audio & data tracks - Audio stream consumption and energy verification - Room lifecycle events (connect, disconnect, track publish/unpublish) - Connection state transitions @@ -20,6 +20,7 @@ import asyncio import os +import time import uuid from typing import Callable, TypeVar import numpy as np @@ -434,3 +435,96 @@ def on_state_changed(state: rtc.ConnectionState): finally: if room.isconnected(): await room.disconnect() + + +@pytest.mark.asyncio +@skip_if_no_credentials() +@pytest.mark.skipif( + os.getenv("RUN_DATA_TRACK_TESTS") != "1", + reason="SFU support requires data tracks support to be enabled via config; remove once this is no longer the case.", +) +async def test_data_track(): + """Test that a published data track delivers frames with correct payloads and timestamps.""" + FRAME_COUNT = 5 + PAYLOAD_SIZE = 64 + + TRACK_NAME = "test-track" + PUBLISHER_IDENTITY = "dt-publisher" + SUBSCRIBER_IDENTITY = "dt-subscriber" + + room_name = unique_room_name("test-data-track") + url = os.getenv("LIVEKIT_URL") + + publisher_room = rtc.Room() + subscriber_room = rtc.Room() + + publisher_token = create_token(PUBLISHER_IDENTITY, room_name) + subscriber_token = create_token(SUBSCRIBER_IDENTITY, room_name) + + remote_track_event = asyncio.Event() + remote_track = None + unpublished_event = asyncio.Event() + unpublished_sid = None + + @subscriber_room.on("data_track_published") + def on_data_track_published(track: rtc.RemoteDataTrack): + nonlocal remote_track + remote_track = track + remote_track_event.set() + + @subscriber_room.on("data_track_unpublished") + def on_data_track_unpublished(sid: str): + nonlocal unpublished_sid + unpublished_sid = sid + unpublished_event.set() + + try: + await subscriber_room.connect(url, subscriber_token) + await publisher_room.connect(url, publisher_token) + + local_track = await publisher_room.local_participant.publish_data_track(name=TRACK_NAME) + assert local_track.info.sid is not None + assert local_track.info.name == TRACK_NAME + assert local_track.is_published() + + await asyncio.wait_for(remote_track_event.wait(), timeout=10.0) + assert remote_track is not None + assert remote_track.info.name == TRACK_NAME + assert remote_track.publisher_identity == PUBLISHER_IDENTITY + assert remote_track.is_published() + + stream = remote_track.subscribe() + + async def push_frames(): + for i in range(FRAME_COUNT): + frame = rtc.DataTrackFrame( + payload=bytes([i] * PAYLOAD_SIZE), + user_timestamp=int(time.time() * 1000), + ) + local_track.try_push(frame) + await asyncio.sleep(0.1) + await local_track.unpublish() + + async def publish_and_receive(): + push_task = asyncio.create_task(push_frames()) + recv_count = 0 + async for frame in stream: + first_byte = frame.payload[0] + assert all(b == first_byte for b in frame.payload), "Payload bytes are not uniform" + assert len(frame.payload) == PAYLOAD_SIZE + assert frame.user_timestamp is not None + latency = (int(time.time() * 1000) - frame.user_timestamp) / 1000.0 + assert latency < 5.0, f"Timestamp latency too high: {latency}" + recv_count += 1 + await push_task + return recv_count + + recv_count = await asyncio.wait_for(publish_and_receive(), timeout=10.0) + assert recv_count > 0, "No frames were received" + + await asyncio.wait_for(unpublished_event.wait(), timeout=5.0) + assert unpublished_sid == local_track.info.sid + + finally: + await publisher_room.disconnect() + await subscriber_room.disconnect()