diff --git a/examples/local_video/publisher.py b/examples/local_video/publisher.py index 0486e380..0372eab7 100644 --- a/examples/local_video/publisher.py +++ b/examples/local_video/publisher.py @@ -6,6 +6,7 @@ import os import signal import time +from enum import Enum import numpy as np from livekit import api, rtc @@ -19,6 +20,13 @@ ) from exc +class FrameFormat(str, Enum): + """Frame format to use for publishing.""" + + RGBA = "rgba" + I420 = "i420" + + def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser( description="Publish a local camera track with optional frame metadata.", @@ -46,6 +54,13 @@ def parse_args() -> argparse.Namespace: action="store_true", help="Attach a monotonically increasing FrameMetadata.frame_id", ) + parser.add_argument( + "--format", + type=FrameFormat, + default=FrameFormat.I420, + choices=list(FrameFormat), + help="Frame format: 'i420' (default, efficient) or 'rgba' (original behavior)", + ) return parser.parse_args() @@ -147,6 +162,14 @@ def _install_signal_handlers(stop_event: asyncio.Event) -> None: pass +def _bgr_to_i420(bgr: np.ndarray, width: int, height: int) -> bytes: + """Convert BGR image to I420 (YUV420p) format efficiently.""" + # OpenCV's COLOR_BGR2YUV_I420 outputs planar YUV420p (I420) + # Layout: Y plane (width*height), U plane (width/2 * height/2), V plane (width/2 * height/2) + yuv = cv2.cvtColor(bgr, cv2.COLOR_BGR2YUV_I420) + return yuv.tobytes() + + async def _capture_loop( args: argparse.Namespace, capture: cv2.VideoCapture, @@ -161,6 +184,9 @@ async def _capture_loop( frame_id = 1 submitted = 0 last_log_at = time.perf_counter() + use_i420 = args.format == FrameFormat.I420 + + logging.info("Using frame format: %s", args.format.value) while not stop_event.is_set(): ok, bgr = await asyncio.to_thread(capture.read) @@ -174,9 +200,17 @@ async def _capture_loop( user_timestamp = _unix_time_us() timestamp_us = (time.perf_counter_ns() - started_at_ns) // 1_000 - rgba = cv2.cvtColor(bgr, cv2.COLOR_BGR2RGBA) - rgba = np.ascontiguousarray(rgba) - frame = rtc.VideoFrame(width, height, rtc.VideoBufferType.RGBA, rgba.tobytes()) + + if use_i420: + # Direct BGR -> I420 conversion (single step, more efficient) + i420_data = _bgr_to_i420(bgr, width, height) + frame = rtc.VideoFrame(width, height, rtc.VideoBufferType.I420, i420_data) + else: + # Original path: BGR -> RGBA -> I420 (in FFI layer) + rgba = cv2.cvtColor(bgr, cv2.COLOR_BGR2RGBA) + rgba = np.ascontiguousarray(rgba) + frame = rtc.VideoFrame(width, height, rtc.VideoBufferType.RGBA, rgba.tobytes()) + metadata = _metadata_for_frame( args, user_timestamp=user_timestamp, @@ -191,7 +225,10 @@ async def _capture_loop( now = time.perf_counter() if now - last_log_at >= 2.0: logging.info( - "published %s frames at ~%.1f fps", submitted, submitted / (now - last_log_at) + "published %s frames at ~%.1f fps (format=%s)", + submitted, + submitted / (now - last_log_at), + args.format.value, ) submitted = 0 last_log_at = now diff --git a/livekit-rtc/livekit/rtc/__init__.py b/livekit-rtc/livekit/rtc/__init__.py index 3ced81cb..fabc1a5f 100644 --- a/livekit-rtc/livekit/rtc/__init__.py +++ b/livekit-rtc/livekit/rtc/__init__.py @@ -58,6 +58,7 @@ ) from .participant import ( ConnectionQuality, + DegradationPreference, LocalParticipant, Participant, RemoteParticipant, @@ -138,6 +139,7 @@ "ConnectionQuality", "ConnectionState", "DataPacketKind", + "DegradationPreference", "TrackPublishOptions", "IceTransportType", "ContinualGatheringPolicy", diff --git a/livekit-rtc/livekit/rtc/_proto/room_pb2.py b/livekit-rtc/livekit/rtc/_proto/room_pb2.py index 9625baee..3eb6ae15 100644 --- a/livekit-rtc/livekit/rtc/_proto/room_pb2.py +++ b/livekit-rtc/livekit/rtc/_proto/room_pb2.py @@ -22,7 +22,7 @@ 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\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\"\x7f\n\x17SimulateScenarioRequest\x12\x13\n\x0broom_handle\x18\x01 \x02(\x04\x12\x35\n\x08scenario\x18\x02 \x02(\x0e\x32#.livekit.proto.SimulateScenarioKind\x12\x18\n\x10request_async_id\x18\x03 \x01(\x04\",\n\x18SimulateScenarioResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\";\n\x18SimulateScenarioCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\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\"/\n\x18ReadyForRoomEventRequest\x12\x13\n\x0broom_handle\x18\x01 \x02(\x04\"\x1b\n\x19ReadyForRoomEventResponse\"\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\"\xd0\x03\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\x12\x44\n\x17\x66rame_metadata_features\x18\n \x03(\x0e\x32#.livekit.proto.FrameMetadataFeature\x12\x18\n\x10scalability_mode\x18\x0b \x01(\t\x12\x39\n\rvideo_encoder\x18\x0c \x01(\x0e\x32\".livekit.proto.VideoEncoderBackend\"=\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\"\xce\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\x12G\n\x17local_track_republished\x18- \x01(\x0b\x32$.livekit.proto.LocalTrackRepublishedH\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\x15LocalTrackRepublished\x12\x1a\n\x12publication_handle\x18\x01 \x02(\x04\x12\x14\n\x0cprevious_sid\x18\x02 \x02(\t\x12\x31\n\x04info\x18\x03 \x02(\x0b\x32#.livekit.proto.TrackPublicationInfo\")\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*\x90\x02\n\x14SimulateScenarioKind\x12\x1d\n\x19SIMULATE_SIGNAL_RECONNECT\x10\x00\x12\x14\n\x10SIMULATE_SPEAKER\x10\x01\x12\x19\n\x15SIMULATE_NODE_FAILURE\x10\x02\x12\x19\n\x15SIMULATE_SERVER_LEAVE\x10\x03\x12\x16\n\x12SIMULATE_MIGRATION\x10\x04\x12\x16\n\x12SIMULATE_FORCE_TCP\x10\x05\x12\x16\n\x12SIMULATE_FORCE_TLS\x10\x06\x12\x1b\n\x17SIMULATE_FULL_RECONNECT\x10\x07\x12(\n$SIMULATE_DISCONNECT_SIGNAL_ON_RESUME\x10\x08*\xc3\x01\n\x13VideoEncoderBackend\x12\x18\n\x14\x45NCODER_BACKEND_AUTO\x10\x00\x12\x1c\n\x18\x45NCODER_BACKEND_SOFTWARE\x10\x01\x12\x1c\n\x18\x45NCODER_BACKEND_HARDWARE\x10\x02\x12\x19\n\x15\x45NCODER_BACKEND_NVENC\x10\x03\x12\x19\n\x15\x45NCODER_BACKEND_VAAPI\x10\x04\x12 \n\x1c\x45NCODER_BACKEND_VIDEOTOOLBOX\x10\x05*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\"\x7f\n\x17SimulateScenarioRequest\x12\x13\n\x0broom_handle\x18\x01 \x02(\x04\x12\x35\n\x08scenario\x18\x02 \x02(\x0e\x32#.livekit.proto.SimulateScenarioKind\x12\x18\n\x10request_async_id\x18\x03 \x01(\x04\",\n\x18SimulateScenarioResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\";\n\x18SimulateScenarioCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\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\"/\n\x18ReadyForRoomEventRequest\x12\x13\n\x0broom_handle\x18\x01 \x02(\x04\"\x1b\n\x19ReadyForRoomEventResponse\"\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\"\x96\x04\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\x12\x44\n\x17\x66rame_metadata_features\x18\n \x03(\x0e\x32#.livekit.proto.FrameMetadataFeature\x12\x18\n\x10scalability_mode\x18\x0b \x01(\t\x12\x39\n\rvideo_encoder\x18\x0c \x01(\x0e\x32\".livekit.proto.VideoEncoderBackend\x12\x44\n\x16\x64\x65gradation_preference\x18\r \x01(\x0e\x32$.livekit.proto.DegradationPreference\"=\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\"\xce\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\x12G\n\x17local_track_republished\x18- \x01(\x0b\x32$.livekit.proto.LocalTrackRepublishedH\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\x15LocalTrackRepublished\x12\x1a\n\x12publication_handle\x18\x01 \x02(\x04\x12\x14\n\x0cprevious_sid\x18\x02 \x02(\t\x12\x31\n\x04info\x18\x03 \x02(\x0b\x32#.livekit.proto.TrackPublicationInfo\")\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*\x90\x02\n\x14SimulateScenarioKind\x12\x1d\n\x19SIMULATE_SIGNAL_RECONNECT\x10\x00\x12\x14\n\x10SIMULATE_SPEAKER\x10\x01\x12\x19\n\x15SIMULATE_NODE_FAILURE\x10\x02\x12\x19\n\x15SIMULATE_SERVER_LEAVE\x10\x03\x12\x16\n\x12SIMULATE_MIGRATION\x10\x04\x12\x16\n\x12SIMULATE_FORCE_TCP\x10\x05\x12\x16\n\x12SIMULATE_FORCE_TLS\x10\x06\x12\x1b\n\x17SIMULATE_FULL_RECONNECT\x10\x07\x12(\n$SIMULATE_DISCONNECT_SIGNAL_ON_RESUME\x10\x08*\xc3\x01\n\x13VideoEncoderBackend\x12\x18\n\x14\x45NCODER_BACKEND_AUTO\x10\x00\x12\x1c\n\x18\x45NCODER_BACKEND_SOFTWARE\x10\x01\x12\x1c\n\x18\x45NCODER_BACKEND_HARDWARE\x10\x02\x12\x19\n\x15\x45NCODER_BACKEND_NVENC\x10\x03\x12\x19\n\x15\x45NCODER_BACKEND_VAAPI\x10\x04\x12 \n\x1c\x45NCODER_BACKEND_VIDEOTOOLBOX\x10\x05*\xfe\x01\n\x15\x44\x65gradationPreference\x12#\n\x1f\x44\x45GRADATION_PREFERENCE_BALANCED\x10\x00\x12-\n)DEGRADATION_PREFERENCE_MAINTAIN_FRAMERATE\x10\x01\x12.\n*DEGRADATION_PREFERENCE_MAINTAIN_RESOLUTION\x10\x02\x12#\n\x1f\x44\x45GRADATION_PREFERENCE_DISABLED\x10\x03\x12<\n8DEGRADATION_PREFERENCE_MAINTAIN_FRAMERATE_AND_RESOLUTION\x10\x04*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) @@ -38,20 +38,22 @@ _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['_SIMULATESCENARIOKIND']._serialized_start=14958 - _globals['_SIMULATESCENARIOKIND']._serialized_end=15230 - _globals['_VIDEOENCODERBACKEND']._serialized_start=15233 - _globals['_VIDEOENCODERBACKEND']._serialized_end=15428 - _globals['_ICETRANSPORTTYPE']._serialized_start=15430 - _globals['_ICETRANSPORTTYPE']._serialized_end=15510 - _globals['_CONTINUALGATHERINGPOLICY']._serialized_start=15512 - _globals['_CONTINUALGATHERINGPOLICY']._serialized_end=15579 - _globals['_CONNECTIONQUALITY']._serialized_start=15581 - _globals['_CONNECTIONQUALITY']._serialized_end=15677 - _globals['_CONNECTIONSTATE']._serialized_start=15679 - _globals['_CONNECTIONSTATE']._serialized_end=15762 - _globals['_DATAPACKETKIND']._serialized_start=15764 - _globals['_DATAPACKETKIND']._serialized_end=15815 + _globals['_SIMULATESCENARIOKIND']._serialized_start=15028 + _globals['_SIMULATESCENARIOKIND']._serialized_end=15300 + _globals['_VIDEOENCODERBACKEND']._serialized_start=15303 + _globals['_VIDEOENCODERBACKEND']._serialized_end=15498 + _globals['_DEGRADATIONPREFERENCE']._serialized_start=15501 + _globals['_DEGRADATIONPREFERENCE']._serialized_end=15755 + _globals['_ICETRANSPORTTYPE']._serialized_start=15757 + _globals['_ICETRANSPORTTYPE']._serialized_end=15837 + _globals['_CONTINUALGATHERINGPOLICY']._serialized_start=15839 + _globals['_CONTINUALGATHERINGPOLICY']._serialized_end=15906 + _globals['_CONNECTIONQUALITY']._serialized_start=15908 + _globals['_CONNECTIONQUALITY']._serialized_end=16004 + _globals['_CONNECTIONSTATE']._serialized_start=16006 + _globals['_CONNECTIONSTATE']._serialized_end=16089 + _globals['_DATAPACKETKIND']._serialized_start=16091 + _globals['_DATAPACKETKIND']._serialized_end=16142 _globals['_CONNECTREQUEST']._serialized_start=156 _globals['_CONNECTREQUEST']._serialized_end=271 _globals['_CONNECTRESPONSE']._serialized_start=273 @@ -153,155 +155,155 @@ _globals['_AUDIOENCODING']._serialized_start=4491 _globals['_AUDIOENCODING']._serialized_end=4527 _globals['_TRACKPUBLISHOPTIONS']._serialized_start=4530 - _globals['_TRACKPUBLISHOPTIONS']._serialized_end=4994 - _globals['_ICESERVER']._serialized_start=4996 - _globals['_ICESERVER']._serialized_end=5057 - _globals['_RTCCONFIG']._serialized_start=5060 - _globals['_RTCCONFIG']._serialized_end=5256 - _globals['_ROOMOPTIONS']._serialized_start=5259 - _globals['_ROOMOPTIONS']._serialized_end=5561 - _globals['_TRANSCRIPTIONSEGMENT']._serialized_start=5563 - _globals['_TRANSCRIPTIONSEGMENT']._serialized_end=5682 - _globals['_BUFFERINFO']._serialized_start=5684 - _globals['_BUFFERINFO']._serialized_end=5732 - _globals['_OWNEDBUFFER']._serialized_start=5734 - _globals['_OWNEDBUFFER']._serialized_end=5835 - _globals['_ROOMEVENT']._serialized_start=5838 - _globals['_ROOMEVENT']._serialized_end=8860 - _globals['_ROOMINFO']._serialized_start=8863 - _globals['_ROOMINFO']._serialized_end=9192 - _globals['_OWNEDROOM']._serialized_start=9194 - _globals['_OWNEDROOM']._serialized_end=9291 - _globals['_PARTICIPANTSUPDATED']._serialized_start=9293 - _globals['_PARTICIPANTSUPDATED']._serialized_end=9368 - _globals['_PARTICIPANTCONNECTED']._serialized_start=9370 - _globals['_PARTICIPANTCONNECTED']._serialized_end=9439 - _globals['_PARTICIPANTACTIVE']._serialized_start=9441 - _globals['_PARTICIPANTACTIVE']._serialized_end=9490 - _globals['_PARTICIPANTDISCONNECTED']._serialized_start=9492 - _globals['_PARTICIPANTDISCONNECTED']._serialized_end=9607 - _globals['_LOCALTRACKPUBLISHED']._serialized_start=9609 - _globals['_LOCALTRACKPUBLISHED']._serialized_end=9649 - _globals['_LOCALTRACKUNPUBLISHED']._serialized_start=9651 - _globals['_LOCALTRACKUNPUBLISHED']._serialized_end=9699 - _globals['_LOCALTRACKREPUBLISHED']._serialized_start=9701 - _globals['_LOCALTRACKREPUBLISHED']._serialized_end=9825 - _globals['_LOCALTRACKSUBSCRIBED']._serialized_start=9827 - _globals['_LOCALTRACKSUBSCRIBED']._serialized_end=9868 - _globals['_TRACKPUBLISHED']._serialized_start=9870 - _globals['_TRACKPUBLISHED']._serialized_end=9975 - _globals['_TRACKUNPUBLISHED']._serialized_start=9977 - _globals['_TRACKUNPUBLISHED']._serialized_end=10050 - _globals['_TRACKSUBSCRIBED']._serialized_start=10052 - _globals['_TRACKSUBSCRIBED']._serialized_end=10141 - _globals['_TRACKUNSUBSCRIBED']._serialized_start=10143 - _globals['_TRACKUNSUBSCRIBED']._serialized_end=10211 - _globals['_TRACKSUBSCRIPTIONFAILED']._serialized_start=10213 - _globals['_TRACKSUBSCRIPTIONFAILED']._serialized_end=10302 - _globals['_TRACKMUTED']._serialized_start=10304 - _globals['_TRACKMUTED']._serialized_end=10365 - _globals['_TRACKUNMUTED']._serialized_start=10367 - _globals['_TRACKUNMUTED']._serialized_end=10430 - _globals['_E2EESTATECHANGED']._serialized_start=10432 - _globals['_E2EESTATECHANGED']._serialized_end=10527 - _globals['_ACTIVESPEAKERSCHANGED']._serialized_start=10529 - _globals['_ACTIVESPEAKERSCHANGED']._serialized_end=10584 - _globals['_ROOMMETADATACHANGED']._serialized_start=10586 - _globals['_ROOMMETADATACHANGED']._serialized_end=10625 - _globals['_ROOMSIDCHANGED']._serialized_start=10627 - _globals['_ROOMSIDCHANGED']._serialized_end=10656 - _globals['_PARTICIPANTMETADATACHANGED']._serialized_start=10658 - _globals['_PARTICIPANTMETADATACHANGED']._serialized_end=10734 - _globals['_PARTICIPANTATTRIBUTESCHANGED']._serialized_start=10737 - _globals['_PARTICIPANTATTRIBUTESCHANGED']._serialized_end=10909 - _globals['_PARTICIPANTENCRYPTIONSTATUSCHANGED']._serialized_start=10911 - _globals['_PARTICIPANTENCRYPTIONSTATUSCHANGED']._serialized_end=10999 - _globals['_PARTICIPANTNAMECHANGED']._serialized_start=11001 - _globals['_PARTICIPANTNAMECHANGED']._serialized_end=11069 - _globals['_PARTICIPANTPERMISSIONCHANGED']._serialized_start=11071 - _globals['_PARTICIPANTPERMISSIONCHANGED']._serialized_end=11189 - _globals['_CONNECTIONQUALITYCHANGED']._serialized_start=11191 - _globals['_CONNECTIONQUALITYCHANGED']._serialized_end=11298 - _globals['_USERPACKET']._serialized_start=11300 - _globals['_USERPACKET']._serialized_end=11369 - _globals['_CHATMESSAGE']._serialized_start=11371 - _globals['_CHATMESSAGE']._serialized_end=11492 - _globals['_CHATMESSAGERECEIVED']._serialized_start=11494 - _globals['_CHATMESSAGERECEIVED']._serialized_end=11590 - _globals['_SIPDTMF']._serialized_start=11592 - _globals['_SIPDTMF']._serialized_end=11630 - _globals['_DATAPACKETRECEIVED']._serialized_start=11633 - _globals['_DATAPACKETRECEIVED']._serialized_end=11824 - _globals['_TRANSCRIPTIONRECEIVED']._serialized_start=11826 - _globals['_TRANSCRIPTIONRECEIVED']._serialized_end=11953 - _globals['_CONNECTIONSTATECHANGED']._serialized_start=11955 - _globals['_CONNECTIONSTATECHANGED']._serialized_end=12026 - _globals['_CONNECTED']._serialized_start=12028 - _globals['_CONNECTED']._serialized_end=12039 - _globals['_DISCONNECTED']._serialized_start=12041 - _globals['_DISCONNECTED']._serialized_end=12104 - _globals['_RECONNECTING']._serialized_start=12106 - _globals['_RECONNECTING']._serialized_end=12120 - _globals['_RECONNECTED']._serialized_start=12122 - _globals['_RECONNECTED']._serialized_end=12135 - _globals['_TOKENREFRESHED']._serialized_start=12137 - _globals['_TOKENREFRESHED']._serialized_end=12168 - _globals['_ROOMEOS']._serialized_start=12170 - _globals['_ROOMEOS']._serialized_end=12179 - _globals['_DATASTREAM']._serialized_start=12182 - _globals['_DATASTREAM']._serialized_end=13092 - _globals['_DATASTREAM_TEXTHEADER']._serialized_start=12197 - _globals['_DATASTREAM_TEXTHEADER']._serialized_end=12367 - _globals['_DATASTREAM_BYTEHEADER']._serialized_start=12369 - _globals['_DATASTREAM_BYTEHEADER']._serialized_end=12395 - _globals['_DATASTREAM_HEADER']._serialized_start=12398 - _globals['_DATASTREAM_HEADER']._serialized_end=12761 - _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._serialized_start=12694 - _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._serialized_end=12743 - _globals['_DATASTREAM_CHUNK']._serialized_start=12763 - _globals['_DATASTREAM_CHUNK']._serialized_end=12856 - _globals['_DATASTREAM_TRAILER']._serialized_start=12859 - _globals['_DATASTREAM_TRAILER']._serialized_end=13025 - _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._serialized_start=12694 - _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._serialized_end=12743 - _globals['_DATASTREAM_OPERATIONTYPE']._serialized_start=13027 - _globals['_DATASTREAM_OPERATIONTYPE']._serialized_end=13092 - _globals['_DATASTREAMHEADERRECEIVED']._serialized_start=13094 - _globals['_DATASTREAMHEADERRECEIVED']._serialized_end=13200 - _globals['_DATASTREAMCHUNKRECEIVED']._serialized_start=13202 - _globals['_DATASTREAMCHUNKRECEIVED']._serialized_end=13305 - _globals['_DATASTREAMTRAILERRECEIVED']._serialized_start=13307 - _globals['_DATASTREAMTRAILERRECEIVED']._serialized_end=13416 - _globals['_SENDSTREAMHEADERREQUEST']._serialized_start=13419 - _globals['_SENDSTREAMHEADERREQUEST']._serialized_end=13611 - _globals['_SENDSTREAMCHUNKREQUEST']._serialized_start=13614 - _globals['_SENDSTREAMCHUNKREQUEST']._serialized_end=13803 - _globals['_SENDSTREAMTRAILERREQUEST']._serialized_start=13806 - _globals['_SENDSTREAMTRAILERREQUEST']._serialized_end=14001 - _globals['_SENDSTREAMHEADERRESPONSE']._serialized_start=14003 - _globals['_SENDSTREAMHEADERRESPONSE']._serialized_end=14047 - _globals['_SENDSTREAMCHUNKRESPONSE']._serialized_start=14049 - _globals['_SENDSTREAMCHUNKRESPONSE']._serialized_end=14092 - _globals['_SENDSTREAMTRAILERRESPONSE']._serialized_start=14094 - _globals['_SENDSTREAMTRAILERRESPONSE']._serialized_end=14139 - _globals['_SENDSTREAMHEADERCALLBACK']._serialized_start=14141 - _globals['_SENDSTREAMHEADERCALLBACK']._serialized_end=14200 - _globals['_SENDSTREAMCHUNKCALLBACK']._serialized_start=14202 - _globals['_SENDSTREAMCHUNKCALLBACK']._serialized_end=14260 - _globals['_SENDSTREAMTRAILERCALLBACK']._serialized_start=14262 - _globals['_SENDSTREAMTRAILERCALLBACK']._serialized_end=14322 - _globals['_SETDATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDREQUEST']._serialized_start=14325 - _globals['_SETDATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDREQUEST']._serialized_end=14472 - _globals['_SETDATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDRESPONSE']._serialized_start=14474 - _globals['_SETDATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDRESPONSE']._serialized_end=14524 - _globals['_DATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDCHANGED']._serialized_start=14526 - _globals['_DATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDCHANGED']._serialized_end=14636 - _globals['_BYTESTREAMOPENED']._serialized_start=14638 - _globals['_BYTESTREAMOPENED']._serialized_end=14740 - _globals['_TEXTSTREAMOPENED']._serialized_start=14742 - _globals['_TEXTSTREAMOPENED']._serialized_end=14844 - _globals['_DATATRACKPUBLISHED']._serialized_start=14846 - _globals['_DATATRACKPUBLISHED']._serialized_end=14918 - _globals['_DATATRACKUNPUBLISHED']._serialized_start=14920 - _globals['_DATATRACKUNPUBLISHED']._serialized_end=14955 + _globals['_TRACKPUBLISHOPTIONS']._serialized_end=5064 + _globals['_ICESERVER']._serialized_start=5066 + _globals['_ICESERVER']._serialized_end=5127 + _globals['_RTCCONFIG']._serialized_start=5130 + _globals['_RTCCONFIG']._serialized_end=5326 + _globals['_ROOMOPTIONS']._serialized_start=5329 + _globals['_ROOMOPTIONS']._serialized_end=5631 + _globals['_TRANSCRIPTIONSEGMENT']._serialized_start=5633 + _globals['_TRANSCRIPTIONSEGMENT']._serialized_end=5752 + _globals['_BUFFERINFO']._serialized_start=5754 + _globals['_BUFFERINFO']._serialized_end=5802 + _globals['_OWNEDBUFFER']._serialized_start=5804 + _globals['_OWNEDBUFFER']._serialized_end=5905 + _globals['_ROOMEVENT']._serialized_start=5908 + _globals['_ROOMEVENT']._serialized_end=8930 + _globals['_ROOMINFO']._serialized_start=8933 + _globals['_ROOMINFO']._serialized_end=9262 + _globals['_OWNEDROOM']._serialized_start=9264 + _globals['_OWNEDROOM']._serialized_end=9361 + _globals['_PARTICIPANTSUPDATED']._serialized_start=9363 + _globals['_PARTICIPANTSUPDATED']._serialized_end=9438 + _globals['_PARTICIPANTCONNECTED']._serialized_start=9440 + _globals['_PARTICIPANTCONNECTED']._serialized_end=9509 + _globals['_PARTICIPANTACTIVE']._serialized_start=9511 + _globals['_PARTICIPANTACTIVE']._serialized_end=9560 + _globals['_PARTICIPANTDISCONNECTED']._serialized_start=9562 + _globals['_PARTICIPANTDISCONNECTED']._serialized_end=9677 + _globals['_LOCALTRACKPUBLISHED']._serialized_start=9679 + _globals['_LOCALTRACKPUBLISHED']._serialized_end=9719 + _globals['_LOCALTRACKUNPUBLISHED']._serialized_start=9721 + _globals['_LOCALTRACKUNPUBLISHED']._serialized_end=9769 + _globals['_LOCALTRACKREPUBLISHED']._serialized_start=9771 + _globals['_LOCALTRACKREPUBLISHED']._serialized_end=9895 + _globals['_LOCALTRACKSUBSCRIBED']._serialized_start=9897 + _globals['_LOCALTRACKSUBSCRIBED']._serialized_end=9938 + _globals['_TRACKPUBLISHED']._serialized_start=9940 + _globals['_TRACKPUBLISHED']._serialized_end=10045 + _globals['_TRACKUNPUBLISHED']._serialized_start=10047 + _globals['_TRACKUNPUBLISHED']._serialized_end=10120 + _globals['_TRACKSUBSCRIBED']._serialized_start=10122 + _globals['_TRACKSUBSCRIBED']._serialized_end=10211 + _globals['_TRACKUNSUBSCRIBED']._serialized_start=10213 + _globals['_TRACKUNSUBSCRIBED']._serialized_end=10281 + _globals['_TRACKSUBSCRIPTIONFAILED']._serialized_start=10283 + _globals['_TRACKSUBSCRIPTIONFAILED']._serialized_end=10372 + _globals['_TRACKMUTED']._serialized_start=10374 + _globals['_TRACKMUTED']._serialized_end=10435 + _globals['_TRACKUNMUTED']._serialized_start=10437 + _globals['_TRACKUNMUTED']._serialized_end=10500 + _globals['_E2EESTATECHANGED']._serialized_start=10502 + _globals['_E2EESTATECHANGED']._serialized_end=10597 + _globals['_ACTIVESPEAKERSCHANGED']._serialized_start=10599 + _globals['_ACTIVESPEAKERSCHANGED']._serialized_end=10654 + _globals['_ROOMMETADATACHANGED']._serialized_start=10656 + _globals['_ROOMMETADATACHANGED']._serialized_end=10695 + _globals['_ROOMSIDCHANGED']._serialized_start=10697 + _globals['_ROOMSIDCHANGED']._serialized_end=10726 + _globals['_PARTICIPANTMETADATACHANGED']._serialized_start=10728 + _globals['_PARTICIPANTMETADATACHANGED']._serialized_end=10804 + _globals['_PARTICIPANTATTRIBUTESCHANGED']._serialized_start=10807 + _globals['_PARTICIPANTATTRIBUTESCHANGED']._serialized_end=10979 + _globals['_PARTICIPANTENCRYPTIONSTATUSCHANGED']._serialized_start=10981 + _globals['_PARTICIPANTENCRYPTIONSTATUSCHANGED']._serialized_end=11069 + _globals['_PARTICIPANTNAMECHANGED']._serialized_start=11071 + _globals['_PARTICIPANTNAMECHANGED']._serialized_end=11139 + _globals['_PARTICIPANTPERMISSIONCHANGED']._serialized_start=11141 + _globals['_PARTICIPANTPERMISSIONCHANGED']._serialized_end=11259 + _globals['_CONNECTIONQUALITYCHANGED']._serialized_start=11261 + _globals['_CONNECTIONQUALITYCHANGED']._serialized_end=11368 + _globals['_USERPACKET']._serialized_start=11370 + _globals['_USERPACKET']._serialized_end=11439 + _globals['_CHATMESSAGE']._serialized_start=11441 + _globals['_CHATMESSAGE']._serialized_end=11562 + _globals['_CHATMESSAGERECEIVED']._serialized_start=11564 + _globals['_CHATMESSAGERECEIVED']._serialized_end=11660 + _globals['_SIPDTMF']._serialized_start=11662 + _globals['_SIPDTMF']._serialized_end=11700 + _globals['_DATAPACKETRECEIVED']._serialized_start=11703 + _globals['_DATAPACKETRECEIVED']._serialized_end=11894 + _globals['_TRANSCRIPTIONRECEIVED']._serialized_start=11896 + _globals['_TRANSCRIPTIONRECEIVED']._serialized_end=12023 + _globals['_CONNECTIONSTATECHANGED']._serialized_start=12025 + _globals['_CONNECTIONSTATECHANGED']._serialized_end=12096 + _globals['_CONNECTED']._serialized_start=12098 + _globals['_CONNECTED']._serialized_end=12109 + _globals['_DISCONNECTED']._serialized_start=12111 + _globals['_DISCONNECTED']._serialized_end=12174 + _globals['_RECONNECTING']._serialized_start=12176 + _globals['_RECONNECTING']._serialized_end=12190 + _globals['_RECONNECTED']._serialized_start=12192 + _globals['_RECONNECTED']._serialized_end=12205 + _globals['_TOKENREFRESHED']._serialized_start=12207 + _globals['_TOKENREFRESHED']._serialized_end=12238 + _globals['_ROOMEOS']._serialized_start=12240 + _globals['_ROOMEOS']._serialized_end=12249 + _globals['_DATASTREAM']._serialized_start=12252 + _globals['_DATASTREAM']._serialized_end=13162 + _globals['_DATASTREAM_TEXTHEADER']._serialized_start=12267 + _globals['_DATASTREAM_TEXTHEADER']._serialized_end=12437 + _globals['_DATASTREAM_BYTEHEADER']._serialized_start=12439 + _globals['_DATASTREAM_BYTEHEADER']._serialized_end=12465 + _globals['_DATASTREAM_HEADER']._serialized_start=12468 + _globals['_DATASTREAM_HEADER']._serialized_end=12831 + _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._serialized_start=12764 + _globals['_DATASTREAM_HEADER_ATTRIBUTESENTRY']._serialized_end=12813 + _globals['_DATASTREAM_CHUNK']._serialized_start=12833 + _globals['_DATASTREAM_CHUNK']._serialized_end=12926 + _globals['_DATASTREAM_TRAILER']._serialized_start=12929 + _globals['_DATASTREAM_TRAILER']._serialized_end=13095 + _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._serialized_start=12764 + _globals['_DATASTREAM_TRAILER_ATTRIBUTESENTRY']._serialized_end=12813 + _globals['_DATASTREAM_OPERATIONTYPE']._serialized_start=13097 + _globals['_DATASTREAM_OPERATIONTYPE']._serialized_end=13162 + _globals['_DATASTREAMHEADERRECEIVED']._serialized_start=13164 + _globals['_DATASTREAMHEADERRECEIVED']._serialized_end=13270 + _globals['_DATASTREAMCHUNKRECEIVED']._serialized_start=13272 + _globals['_DATASTREAMCHUNKRECEIVED']._serialized_end=13375 + _globals['_DATASTREAMTRAILERRECEIVED']._serialized_start=13377 + _globals['_DATASTREAMTRAILERRECEIVED']._serialized_end=13486 + _globals['_SENDSTREAMHEADERREQUEST']._serialized_start=13489 + _globals['_SENDSTREAMHEADERREQUEST']._serialized_end=13681 + _globals['_SENDSTREAMCHUNKREQUEST']._serialized_start=13684 + _globals['_SENDSTREAMCHUNKREQUEST']._serialized_end=13873 + _globals['_SENDSTREAMTRAILERREQUEST']._serialized_start=13876 + _globals['_SENDSTREAMTRAILERREQUEST']._serialized_end=14071 + _globals['_SENDSTREAMHEADERRESPONSE']._serialized_start=14073 + _globals['_SENDSTREAMHEADERRESPONSE']._serialized_end=14117 + _globals['_SENDSTREAMCHUNKRESPONSE']._serialized_start=14119 + _globals['_SENDSTREAMCHUNKRESPONSE']._serialized_end=14162 + _globals['_SENDSTREAMTRAILERRESPONSE']._serialized_start=14164 + _globals['_SENDSTREAMTRAILERRESPONSE']._serialized_end=14209 + _globals['_SENDSTREAMHEADERCALLBACK']._serialized_start=14211 + _globals['_SENDSTREAMHEADERCALLBACK']._serialized_end=14270 + _globals['_SENDSTREAMCHUNKCALLBACK']._serialized_start=14272 + _globals['_SENDSTREAMCHUNKCALLBACK']._serialized_end=14330 + _globals['_SENDSTREAMTRAILERCALLBACK']._serialized_start=14332 + _globals['_SENDSTREAMTRAILERCALLBACK']._serialized_end=14392 + _globals['_SETDATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDREQUEST']._serialized_start=14395 + _globals['_SETDATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDREQUEST']._serialized_end=14542 + _globals['_SETDATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDRESPONSE']._serialized_start=14544 + _globals['_SETDATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDRESPONSE']._serialized_end=14594 + _globals['_DATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDCHANGED']._serialized_start=14596 + _globals['_DATACHANNELBUFFEREDAMOUNTLOWTHRESHOLDCHANGED']._serialized_end=14706 + _globals['_BYTESTREAMOPENED']._serialized_start=14708 + _globals['_BYTESTREAMOPENED']._serialized_end=14810 + _globals['_TEXTSTREAMOPENED']._serialized_start=14812 + _globals['_TEXTSTREAMOPENED']._serialized_end=14914 + _globals['_DATATRACKPUBLISHED']._serialized_start=14916 + _globals['_DATATRACKPUBLISHED']._serialized_end=14988 + _globals['_DATATRACKUNPUBLISHED']._serialized_start=14990 + _globals['_DATATRACKUNPUBLISHED']._serialized_end=15025 # @@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 0379d745..b20f9272 100644 --- a/livekit-rtc/livekit/rtc/_proto/room_pb2.pyi +++ b/livekit-rtc/livekit/rtc/_proto/room_pb2.pyi @@ -113,6 +113,46 @@ ENCODER_BACKEND_VAAPI: VideoEncoderBackend.ValueType # 4 ENCODER_BACKEND_VIDEOTOOLBOX: VideoEncoderBackend.ValueType # 5 global___VideoEncoderBackend = VideoEncoderBackend +class _DegradationPreference: + ValueType = typing.NewType("ValueType", builtins.int) + V: typing_extensions.TypeAlias = ValueType + +class _DegradationPreferenceEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_DegradationPreference.ValueType], builtins.type): + DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor + DEGRADATION_PREFERENCE_BALANCED: _DegradationPreference.ValueType # 0 + """Balance between framerate and resolution degradation.""" + DEGRADATION_PREFERENCE_MAINTAIN_FRAMERATE: _DegradationPreference.ValueType # 1 + """Degrade framerate to maintain resolution.""" + DEGRADATION_PREFERENCE_MAINTAIN_RESOLUTION: _DegradationPreference.ValueType # 2 + """Degrade resolution to maintain framerate (drop frames to keep clarity).""" + DEGRADATION_PREFERENCE_DISABLED: _DegradationPreference.ValueType # 3 + """Deprecated: Use MAINTAIN_FRAMERATE_AND_RESOLUTION instead. + Maintained for backwards compatibility, maps to MAINTAIN_FRAMERATE_AND_RESOLUTION. + """ + DEGRADATION_PREFERENCE_MAINTAIN_FRAMERATE_AND_RESOLUTION: _DegradationPreference.ValueType # 4 + """Maintain both framerate and resolution. Frames may be dropped before encoding + if necessary to avoid overusing network and encoder resources. + """ + +class DegradationPreference(_DegradationPreference, metaclass=_DegradationPreferenceEnumTypeWrapper): + """Controls how the encoder degrades quality when bandwidth is constrained.""" + +DEGRADATION_PREFERENCE_BALANCED: DegradationPreference.ValueType # 0 +"""Balance between framerate and resolution degradation.""" +DEGRADATION_PREFERENCE_MAINTAIN_FRAMERATE: DegradationPreference.ValueType # 1 +"""Degrade framerate to maintain resolution.""" +DEGRADATION_PREFERENCE_MAINTAIN_RESOLUTION: DegradationPreference.ValueType # 2 +"""Degrade resolution to maintain framerate (drop frames to keep clarity).""" +DEGRADATION_PREFERENCE_DISABLED: DegradationPreference.ValueType # 3 +"""Deprecated: Use MAINTAIN_FRAMERATE_AND_RESOLUTION instead. +Maintained for backwards compatibility, maps to MAINTAIN_FRAMERATE_AND_RESOLUTION. +""" +DEGRADATION_PREFERENCE_MAINTAIN_FRAMERATE_AND_RESOLUTION: DegradationPreference.ValueType # 4 +"""Maintain both framerate and resolution. Frames may be dropped before encoding +if necessary to avoid overusing network and encoder resources. +""" +global___DegradationPreference = DegradationPreference + class _IceTransportType: ValueType = typing.NewType("ValueType", builtins.int) V: typing_extensions.TypeAlias = ValueType @@ -1252,6 +1292,7 @@ class TrackPublishOptions(google.protobuf.message.Message): FRAME_METADATA_FEATURES_FIELD_NUMBER: builtins.int SCALABILITY_MODE_FIELD_NUMBER: builtins.int VIDEO_ENCODER_FIELD_NUMBER: builtins.int + DEGRADATION_PREFERENCE_FIELD_NUMBER: builtins.int video_codec: video_frame_pb2.VideoCodec.ValueType dtx: builtins.bool red: builtins.bool @@ -1266,6 +1307,10 @@ class TrackPublishOptions(google.protobuf.message.Message): """ video_encoder: global___VideoEncoderBackend.ValueType """Preferred encoder backend to use when publishing a video track.""" + degradation_preference: global___DegradationPreference.ValueType + """Controls how the encoder trades off between resolution and framerate + when bandwidth is constrained. Default is MAINTAIN_RESOLUTION. + """ @property def video_encoding(self) -> global___VideoEncoding: """encodings are optional""" @@ -1289,9 +1334,10 @@ class TrackPublishOptions(google.protobuf.message.Message): frame_metadata_features: collections.abc.Iterable[track_pb2.FrameMetadataFeature.ValueType] | None = ..., scalability_mode: builtins.str | None = ..., video_encoder: global___VideoEncoderBackend.ValueType | None = ..., + degradation_preference: global___DegradationPreference.ValueType | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["audio_encoding", b"audio_encoding", "dtx", b"dtx", "preconnect_buffer", b"preconnect_buffer", "red", b"red", "scalability_mode", b"scalability_mode", "simulcast", b"simulcast", "source", b"source", "stream", b"stream", "video_codec", b"video_codec", "video_encoder", b"video_encoder", "video_encoding", b"video_encoding"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["audio_encoding", b"audio_encoding", "dtx", b"dtx", "frame_metadata_features", b"frame_metadata_features", "preconnect_buffer", b"preconnect_buffer", "red", b"red", "scalability_mode", b"scalability_mode", "simulcast", b"simulcast", "source", b"source", "stream", b"stream", "video_codec", b"video_codec", "video_encoder", b"video_encoder", "video_encoding", b"video_encoding"]) -> None: ... + def HasField(self, field_name: typing.Literal["audio_encoding", b"audio_encoding", "degradation_preference", b"degradation_preference", "dtx", b"dtx", "preconnect_buffer", b"preconnect_buffer", "red", b"red", "scalability_mode", b"scalability_mode", "simulcast", b"simulcast", "source", b"source", "stream", b"stream", "video_codec", b"video_codec", "video_encoder", b"video_encoder", "video_encoding", b"video_encoding"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["audio_encoding", b"audio_encoding", "degradation_preference", b"degradation_preference", "dtx", b"dtx", "frame_metadata_features", b"frame_metadata_features", "preconnect_buffer", b"preconnect_buffer", "red", b"red", "scalability_mode", b"scalability_mode", "simulcast", b"simulcast", "source", b"source", "stream", b"stream", "video_codec", b"video_codec", "video_encoder", b"video_encoder", "video_encoding", b"video_encoding"]) -> None: ... global___TrackPublishOptions = TrackPublishOptions diff --git a/livekit-rtc/livekit/rtc/_proto/track_pb2.py b/livekit-rtc/livekit/rtc/_proto/track_pb2.py index 80d34a92..a58b0e42 100644 --- a/livekit-rtc/livekit/rtc/_proto/track_pb2.py +++ b/livekit-rtc/livekit/rtc/_proto/track_pb2.py @@ -17,7 +17,7 @@ from . import stats_pb2 as stats__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0btrack.proto\x12\rlivekit.proto\x1a\ne2ee.proto\x1a\x0chandle.proto\x1a\x0bstats.proto\">\n\x17\x43reateVideoTrackRequest\x12\x0c\n\x04name\x18\x01 \x02(\t\x12\x15\n\rsource_handle\x18\x02 \x02(\x04\"D\n\x18\x43reateVideoTrackResponse\x12(\n\x05track\x18\x01 \x02(\x0b\x32\x19.livekit.proto.OwnedTrack\">\n\x17\x43reateAudioTrackRequest\x12\x0c\n\x04name\x18\x01 \x02(\t\x12\x15\n\rsource_handle\x18\x02 \x02(\x04\"D\n\x18\x43reateAudioTrackResponse\x12(\n\x05track\x18\x01 \x02(\x0b\x32\x19.livekit.proto.OwnedTrack\"A\n\x0fGetStatsRequest\x12\x14\n\x0ctrack_handle\x18\x01 \x02(\x04\x12\x18\n\x10request_async_id\x18\x02 \x01(\x04\"$\n\x10GetStatsResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"[\n\x10GetStatsCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12&\n\x05stats\x18\x03 \x03(\x0b\x32\x17.livekit.proto.RtcStats\"\x0c\n\nTrackEvent\"\xa3\x03\n\x14TrackPublicationInfo\x12\x0b\n\x03sid\x18\x01 \x02(\t\x12\x0c\n\x04name\x18\x02 \x02(\t\x12&\n\x04kind\x18\x03 \x02(\x0e\x32\x18.livekit.proto.TrackKind\x12*\n\x06source\x18\x04 \x02(\x0e\x32\x1a.livekit.proto.TrackSource\x12\x13\n\x0bsimulcasted\x18\x05 \x02(\x08\x12\r\n\x05width\x18\x06 \x02(\r\x12\x0e\n\x06height\x18\x07 \x02(\r\x12\x11\n\tmime_type\x18\x08 \x02(\t\x12\r\n\x05muted\x18\t \x02(\x08\x12\x0e\n\x06remote\x18\n \x02(\x08\x12\x36\n\x0f\x65ncryption_type\x18\x0b \x02(\x0e\x32\x1d.livekit.proto.EncryptionType\x12\x38\n\x0e\x61udio_features\x18\x0c \x03(\x0e\x32 .livekit.proto.AudioTrackFeature\x12\x44\n\x17\x66rame_metadata_features\x18\r \x03(\x0e\x32#.livekit.proto.FrameMetadataFeature\"y\n\x15OwnedTrackPublication\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12\x31\n\x04info\x18\x02 \x02(\x0b\x32#.livekit.proto.TrackPublicationInfo\"\x9f\x01\n\tTrackInfo\x12\x0b\n\x03sid\x18\x01 \x02(\t\x12\x0c\n\x04name\x18\x02 \x02(\t\x12&\n\x04kind\x18\x03 \x02(\x0e\x32\x18.livekit.proto.TrackKind\x12\x30\n\x0cstream_state\x18\x04 \x02(\x0e\x32\x1a.livekit.proto.StreamState\x12\r\n\x05muted\x18\x05 \x02(\x08\x12\x0e\n\x06remote\x18\x06 \x02(\x08\"c\n\nOwnedTrack\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12&\n\x04info\x18\x02 \x02(\x0b\x32\x18.livekit.proto.TrackInfo\";\n\x15LocalTrackMuteRequest\x12\x14\n\x0ctrack_handle\x18\x01 \x02(\x04\x12\x0c\n\x04mute\x18\x02 \x02(\x08\"\'\n\x16LocalTrackMuteResponse\x12\r\n\x05muted\x18\x01 \x02(\x08\"A\n\x18\x45nableRemoteTrackRequest\x12\x14\n\x0ctrack_handle\x18\x01 \x02(\x04\x12\x0f\n\x07\x65nabled\x18\x02 \x02(\x08\",\n\x19\x45nableRemoteTrackResponse\x12\x0f\n\x07\x65nabled\x18\x01 \x02(\x08\"\xac\x01\n&SetTrackSubscriptionPermissionsRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12 \n\x18\x61ll_participants_allowed\x18\x02 \x02(\x08\x12>\n\x0bpermissions\x18\x03 \x03(\x0b\x32).livekit.proto.ParticipantTrackPermission\"i\n\x1aParticipantTrackPermission\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x11\n\tallow_all\x18\x02 \x01(\x08\x12\x1a\n\x12\x61llowed_track_sids\x18\x03 \x03(\t\")\n\'SetTrackSubscriptionPermissionsResponse*=\n\tTrackKind\x12\x10\n\x0cKIND_UNKNOWN\x10\x00\x12\x0e\n\nKIND_AUDIO\x10\x01\x12\x0e\n\nKIND_VIDEO\x10\x02*\x81\x01\n\x0bTrackSource\x12\x12\n\x0eSOURCE_UNKNOWN\x10\x00\x12\x11\n\rSOURCE_CAMERA\x10\x01\x12\x15\n\x11SOURCE_MICROPHONE\x10\x02\x12\x16\n\x12SOURCE_SCREENSHARE\x10\x03\x12\x1c\n\x18SOURCE_SCREENSHARE_AUDIO\x10\x04*D\n\x0bStreamState\x12\x11\n\rSTATE_UNKNOWN\x10\x00\x12\x10\n\x0cSTATE_ACTIVE\x10\x01\x12\x10\n\x0cSTATE_PAUSED\x10\x02*\xbd\x01\n\x11\x41udioTrackFeature\x12\r\n\tTF_STEREO\x10\x00\x12\r\n\tTF_NO_DTX\x10\x01\x12\x18\n\x14TF_AUTO_GAIN_CONTROL\x10\x02\x12\x18\n\x14TF_ECHO_CANCELLATION\x10\x03\x12\x18\n\x14TF_NOISE_SUPPRESSION\x10\x04\x12\"\n\x1eTF_ENHANCED_NOISE_CANCELLATION\x10\x05\x12\x18\n\x14TF_PRECONNECT_BUFFER\x10\x06*@\n\x14\x46rameMetadataFeature\x12\x16\n\x12\x46MF_USER_TIMESTAMP\x10\x00\x12\x10\n\x0c\x46MF_FRAME_ID\x10\x01\x42\x10\xaa\x02\rLiveKit.Proto') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0btrack.proto\x12\rlivekit.proto\x1a\ne2ee.proto\x1a\x0chandle.proto\x1a\x0bstats.proto\">\n\x17\x43reateVideoTrackRequest\x12\x0c\n\x04name\x18\x01 \x02(\t\x12\x15\n\rsource_handle\x18\x02 \x02(\x04\"D\n\x18\x43reateVideoTrackResponse\x12(\n\x05track\x18\x01 \x02(\x0b\x32\x19.livekit.proto.OwnedTrack\">\n\x17\x43reateAudioTrackRequest\x12\x0c\n\x04name\x18\x01 \x02(\t\x12\x15\n\rsource_handle\x18\x02 \x02(\x04\"D\n\x18\x43reateAudioTrackResponse\x12(\n\x05track\x18\x01 \x02(\x0b\x32\x19.livekit.proto.OwnedTrack\"A\n\x0fGetStatsRequest\x12\x14\n\x0ctrack_handle\x18\x01 \x02(\x04\x12\x18\n\x10request_async_id\x18\x02 \x01(\x04\"$\n\x10GetStatsResponse\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\"[\n\x10GetStatsCallback\x12\x10\n\x08\x61sync_id\x18\x01 \x02(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12&\n\x05stats\x18\x03 \x03(\x0b\x32\x17.livekit.proto.RtcStats\"\x0c\n\nTrackEvent\"\xa3\x03\n\x14TrackPublicationInfo\x12\x0b\n\x03sid\x18\x01 \x02(\t\x12\x0c\n\x04name\x18\x02 \x02(\t\x12&\n\x04kind\x18\x03 \x02(\x0e\x32\x18.livekit.proto.TrackKind\x12*\n\x06source\x18\x04 \x02(\x0e\x32\x1a.livekit.proto.TrackSource\x12\x13\n\x0bsimulcasted\x18\x05 \x02(\x08\x12\r\n\x05width\x18\x06 \x02(\r\x12\x0e\n\x06height\x18\x07 \x02(\r\x12\x11\n\tmime_type\x18\x08 \x02(\t\x12\r\n\x05muted\x18\t \x02(\x08\x12\x0e\n\x06remote\x18\n \x02(\x08\x12\x36\n\x0f\x65ncryption_type\x18\x0b \x02(\x0e\x32\x1d.livekit.proto.EncryptionType\x12\x38\n\x0e\x61udio_features\x18\x0c \x03(\x0e\x32 .livekit.proto.AudioTrackFeature\x12\x44\n\x17\x66rame_metadata_features\x18\r \x03(\x0e\x32#.livekit.proto.FrameMetadataFeature\"y\n\x15OwnedTrackPublication\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12\x31\n\x04info\x18\x02 \x02(\x0b\x32#.livekit.proto.TrackPublicationInfo\"\x9f\x01\n\tTrackInfo\x12\x0b\n\x03sid\x18\x01 \x02(\t\x12\x0c\n\x04name\x18\x02 \x02(\t\x12&\n\x04kind\x18\x03 \x02(\x0e\x32\x18.livekit.proto.TrackKind\x12\x30\n\x0cstream_state\x18\x04 \x02(\x0e\x32\x1a.livekit.proto.StreamState\x12\r\n\x05muted\x18\x05 \x02(\x08\x12\x0e\n\x06remote\x18\x06 \x02(\x08\"c\n\nOwnedTrack\x12-\n\x06handle\x18\x01 \x02(\x0b\x32\x1d.livekit.proto.FfiOwnedHandle\x12&\n\x04info\x18\x02 \x02(\x0b\x32\x18.livekit.proto.TrackInfo\";\n\x15LocalTrackMuteRequest\x12\x14\n\x0ctrack_handle\x18\x01 \x02(\x04\x12\x0c\n\x04mute\x18\x02 \x02(\x08\"\'\n\x16LocalTrackMuteResponse\x12\r\n\x05muted\x18\x01 \x02(\x08\"A\n\x18\x45nableRemoteTrackRequest\x12\x14\n\x0ctrack_handle\x18\x01 \x02(\x04\x12\x0f\n\x07\x65nabled\x18\x02 \x02(\x08\",\n\x19\x45nableRemoteTrackResponse\x12\x0f\n\x07\x65nabled\x18\x01 \x02(\x08\"\xac\x01\n&SetTrackSubscriptionPermissionsRequest\x12 \n\x18local_participant_handle\x18\x01 \x02(\x04\x12 \n\x18\x61ll_participants_allowed\x18\x02 \x02(\x08\x12>\n\x0bpermissions\x18\x03 \x03(\x0b\x32).livekit.proto.ParticipantTrackPermission\"i\n\x1aParticipantTrackPermission\x12\x1c\n\x14participant_identity\x18\x01 \x02(\t\x12\x11\n\tallow_all\x18\x02 \x01(\x08\x12\x1a\n\x12\x61llowed_track_sids\x18\x03 \x03(\t\")\n\'SetTrackSubscriptionPermissionsResponse*=\n\tTrackKind\x12\x10\n\x0cKIND_UNKNOWN\x10\x00\x12\x0e\n\nKIND_AUDIO\x10\x01\x12\x0e\n\nKIND_VIDEO\x10\x02*\x81\x01\n\x0bTrackSource\x12\x12\n\x0eSOURCE_UNKNOWN\x10\x00\x12\x11\n\rSOURCE_CAMERA\x10\x01\x12\x15\n\x11SOURCE_MICROPHONE\x10\x02\x12\x16\n\x12SOURCE_SCREENSHARE\x10\x03\x12\x1c\n\x18SOURCE_SCREENSHARE_AUDIO\x10\x04*D\n\x0bStreamState\x12\x11\n\rSTATE_UNKNOWN\x10\x00\x12\x10\n\x0cSTATE_ACTIVE\x10\x01\x12\x10\n\x0cSTATE_PAUSED\x10\x02*\xbd\x01\n\x11\x41udioTrackFeature\x12\r\n\tTF_STEREO\x10\x00\x12\r\n\tTF_NO_DTX\x10\x01\x12\x18\n\x14TF_AUTO_GAIN_CONTROL\x10\x02\x12\x18\n\x14TF_ECHO_CANCELLATION\x10\x03\x12\x18\n\x14TF_NOISE_SUPPRESSION\x10\x04\x12\"\n\x1eTF_ENHANCED_NOISE_CANCELLATION\x10\x05\x12\x18\n\x14TF_PRECONNECT_BUFFER\x10\x06*S\n\x14\x46rameMetadataFeature\x12\x16\n\x12\x46MF_USER_TIMESTAMP\x10\x00\x12\x10\n\x0c\x46MF_FRAME_ID\x10\x01\x12\x11\n\rFMF_USER_DATA\x10\x02\x42\x10\xaa\x02\rLiveKit.Proto') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -34,7 +34,7 @@ _globals['_AUDIOTRACKFEATURE']._serialized_start=2163 _globals['_AUDIOTRACKFEATURE']._serialized_end=2352 _globals['_FRAMEMETADATAFEATURE']._serialized_start=2354 - _globals['_FRAMEMETADATAFEATURE']._serialized_end=2418 + _globals['_FRAMEMETADATAFEATURE']._serialized_end=2437 _globals['_CREATEVIDEOTRACKREQUEST']._serialized_start=69 _globals['_CREATEVIDEOTRACKREQUEST']._serialized_end=131 _globals['_CREATEVIDEOTRACKRESPONSE']._serialized_start=133 diff --git a/livekit-rtc/livekit/rtc/_proto/track_pb2.pyi b/livekit-rtc/livekit/rtc/_proto/track_pb2.pyi index 1fe4a950..268b9a89 100644 --- a/livekit-rtc/livekit/rtc/_proto/track_pb2.pyi +++ b/livekit-rtc/livekit/rtc/_proto/track_pb2.pyi @@ -125,11 +125,13 @@ class _FrameMetadataFeatureEnumTypeWrapper(google.protobuf.internal.enum_type_wr DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor FMF_USER_TIMESTAMP: _FrameMetadataFeature.ValueType # 0 FMF_FRAME_ID: _FrameMetadataFeature.ValueType # 1 + FMF_USER_DATA: _FrameMetadataFeature.ValueType # 2 class FrameMetadataFeature(_FrameMetadataFeature, metaclass=_FrameMetadataFeatureEnumTypeWrapper): ... FMF_USER_TIMESTAMP: FrameMetadataFeature.ValueType # 0 FMF_FRAME_ID: FrameMetadataFeature.ValueType # 1 +FMF_USER_DATA: FrameMetadataFeature.ValueType # 2 global___FrameMetadataFeature = FrameMetadataFeature @typing.final diff --git a/livekit-rtc/livekit/rtc/_proto/video_frame_pb2.py b/livekit-rtc/livekit/rtc/_proto/video_frame_pb2.py index 6ff10dde..69ad2440 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\"\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\"\xd7\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\x12.\n\x08metadata\x18\x05 \x01(\x0b\x32\x1c.livekit.proto.FrameMetadata\"\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\"9\n\rFrameMetadata\x12\x16\n\x0euser_timestamp\x18\x01 \x01(\x04\x12\x10\n\x08\x66rame_id\x18\x02 \x01(\r\"?\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\"\xbb\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\x12.\n\x08metadata\x18\x04 \x01(\x0b\x32\x1c.livekit.proto.FrameMetadata\"\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\"\xd7\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\x12.\n\x08metadata\x18\x05 \x01(\x0b\x32\x1c.livekit.proto.FrameMetadata\"\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\"L\n\rFrameMetadata\x12\x16\n\x0euser_timestamp\x18\x01 \x01(\x04\x12\x10\n\x08\x66rame_id\x18\x02 \x01(\r\x12\x11\n\tuser_data\x18\x03 \x01(\x0c\"?\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\"\xbb\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\x12.\n\x08metadata\x18\x04 \x01(\x0b\x32\x1c.livekit.proto.FrameMetadata\"\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,16 +24,16 @@ if _descriptor._USE_C_DESCRIPTORS == False: _globals['DESCRIPTOR']._options = None _globals['DESCRIPTOR']._serialized_options = b'\252\002\rLiveKit.Proto' - _globals['_VIDEOCODEC']._serialized_start=2685 - _globals['_VIDEOCODEC']._serialized_end=2744 - _globals['_VIDEOROTATION']._serialized_start=2746 - _globals['_VIDEOROTATION']._serialized_end=2854 - _globals['_VIDEOBUFFERTYPE']._serialized_start=2857 - _globals['_VIDEOBUFFERTYPE']._serialized_end=2986 - _globals['_VIDEOSTREAMTYPE']._serialized_start=2988 - _globals['_VIDEOSTREAMTYPE']._serialized_end=3077 - _globals['_VIDEOSOURCETYPE']._serialized_start=3079 - _globals['_VIDEOSOURCETYPE']._serialized_end=3121 + _globals['_VIDEOCODEC']._serialized_start=2704 + _globals['_VIDEOCODEC']._serialized_end=2763 + _globals['_VIDEOROTATION']._serialized_start=2765 + _globals['_VIDEOROTATION']._serialized_end=2873 + _globals['_VIDEOBUFFERTYPE']._serialized_start=2876 + _globals['_VIDEOBUFFERTYPE']._serialized_end=3005 + _globals['_VIDEOSTREAMTYPE']._serialized_start=3007 + _globals['_VIDEOSTREAMTYPE']._serialized_end=3096 + _globals['_VIDEOSOURCETYPE']._serialized_start=3098 + _globals['_VIDEOSOURCETYPE']._serialized_end=3140 _globals['_NEWVIDEOSTREAMREQUEST']._serialized_start=64 _globals['_NEWVIDEOSTREAMREQUEST']._serialized_end=256 _globals['_NEWVIDEOSTREAMRESPONSE']._serialized_start=258 @@ -63,21 +63,21 @@ _globals['_OWNEDVIDEOBUFFER']._serialized_start=1731 _globals['_OWNEDVIDEOBUFFER']._serialized_end=1842 _globals['_FRAMEMETADATA']._serialized_start=1844 - _globals['_FRAMEMETADATA']._serialized_end=1901 - _globals['_VIDEOSTREAMINFO']._serialized_start=1903 - _globals['_VIDEOSTREAMINFO']._serialized_end=1966 - _globals['_OWNEDVIDEOSTREAM']._serialized_start=1968 - _globals['_OWNEDVIDEOSTREAM']._serialized_end=2079 - _globals['_VIDEOSTREAMEVENT']._serialized_start=2082 - _globals['_VIDEOSTREAMEVENT']._serialized_end=2241 - _globals['_VIDEOFRAMERECEIVED']._serialized_start=2244 - _globals['_VIDEOFRAMERECEIVED']._serialized_end=2431 - _globals['_VIDEOSTREAMEOS']._serialized_start=2433 - _globals['_VIDEOSTREAMEOS']._serialized_end=2449 - _globals['_VIDEOSOURCERESOLUTION']._serialized_start=2451 - _globals['_VIDEOSOURCERESOLUTION']._serialized_end=2505 - _globals['_VIDEOSOURCEINFO']._serialized_start=2507 - _globals['_VIDEOSOURCEINFO']._serialized_end=2570 - _globals['_OWNEDVIDEOSOURCE']._serialized_start=2572 - _globals['_OWNEDVIDEOSOURCE']._serialized_end=2683 + _globals['_FRAMEMETADATA']._serialized_end=1920 + _globals['_VIDEOSTREAMINFO']._serialized_start=1922 + _globals['_VIDEOSTREAMINFO']._serialized_end=1985 + _globals['_OWNEDVIDEOSTREAM']._serialized_start=1987 + _globals['_OWNEDVIDEOSTREAM']._serialized_end=2098 + _globals['_VIDEOSTREAMEVENT']._serialized_start=2101 + _globals['_VIDEOSTREAMEVENT']._serialized_end=2260 + _globals['_VIDEOFRAMERECEIVED']._serialized_start=2263 + _globals['_VIDEOFRAMERECEIVED']._serialized_end=2450 + _globals['_VIDEOSTREAMEOS']._serialized_start=2452 + _globals['_VIDEOSTREAMEOS']._serialized_end=2468 + _globals['_VIDEOSOURCERESOLUTION']._serialized_start=2470 + _globals['_VIDEOSOURCERESOLUTION']._serialized_end=2524 + _globals['_VIDEOSOURCEINFO']._serialized_start=2526 + _globals['_VIDEOSOURCEINFO']._serialized_end=2589 + _globals['_OWNEDVIDEOSOURCE']._serialized_start=2591 + _globals['_OWNEDVIDEOSOURCE']._serialized_end=2702 # @@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 e4df4b99..9327e799 100644 --- a/livekit-rtc/livekit/rtc/_proto/video_frame_pb2.pyi +++ b/livekit-rtc/livekit/rtc/_proto/video_frame_pb2.pyi @@ -503,16 +503,19 @@ class FrameMetadata(google.protobuf.message.Message): USER_TIMESTAMP_FIELD_NUMBER: builtins.int FRAME_ID_FIELD_NUMBER: builtins.int + USER_DATA_FIELD_NUMBER: builtins.int user_timestamp: builtins.int frame_id: builtins.int + user_data: builtins.bytes def __init__( self, *, user_timestamp: builtins.int | None = ..., frame_id: builtins.int | None = ..., + user_data: builtins.bytes | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["frame_id", b"frame_id", "user_timestamp", b"user_timestamp"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["frame_id", b"frame_id", "user_timestamp", b"user_timestamp"]) -> None: ... + def HasField(self, field_name: typing.Literal["frame_id", b"frame_id", "user_data", b"user_data", "user_timestamp", b"user_timestamp"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["frame_id", b"frame_id", "user_data", b"user_data", "user_timestamp", b"user_timestamp"]) -> None: ... global___FrameMetadata = FrameMetadata diff --git a/livekit-rtc/livekit/rtc/participant.py b/livekit-rtc/livekit/rtc/participant.py index 985c681c..2a53526e 100644 --- a/livekit-rtc/livekit/rtc/participant.py +++ b/livekit-rtc/livekit/rtc/participant.py @@ -32,6 +32,7 @@ ) from ._proto.room_pb2 import ( ConnectionQuality as ProtoConnectionQuality, + DegradationPreference as ProtoDegradationPreference, ) from ._proto.room_pb2 import ( TranscriptionSegment as ProtoTranscriptionSegment, @@ -104,6 +105,22 @@ class ConnectionQuality(enum.IntEnum): QUALITY_LOST = ProtoConnectionQuality.QUALITY_LOST +class DegradationPreference(enum.IntEnum): + """Controls how the encoder degrades quality when bandwidth is constrained.""" + + BALANCED = ProtoDegradationPreference.DEGRADATION_PREFERENCE_BALANCED + """Balance between framerate and resolution degradation.""" + MAINTAIN_FRAMERATE = ProtoDegradationPreference.DEGRADATION_PREFERENCE_MAINTAIN_FRAMERATE + """Degrade resolution to maintain framerate (prioritize smooth motion).""" + MAINTAIN_RESOLUTION = ProtoDegradationPreference.DEGRADATION_PREFERENCE_MAINTAIN_RESOLUTION + """Degrade framerate to maintain resolution (prioritize image clarity).""" + MAINTAIN_FRAMERATE_AND_RESOLUTION = ( + ProtoDegradationPreference.DEGRADATION_PREFERENCE_MAINTAIN_FRAMERATE_AND_RESOLUTION + ) + """Maintain both framerate and resolution. Frames may be dropped before encoding + if necessary to avoid overusing network and encoder resources.""" + + def _connection_quality_from_proto(value: int) -> ConnectionQuality: try: return ConnectionQuality(value) diff --git a/livekit-rtc/rust-sdks b/livekit-rtc/rust-sdks index 304214e3..dad794d4 160000 --- a/livekit-rtc/rust-sdks +++ b/livekit-rtc/rust-sdks @@ -1 +1 @@ -Subproject commit 304214e3c161a0ba036c729abf1e95a2863aa452 +Subproject commit dad794d414fda9e8c1de83af1c0f190506a15f8f