From e6d63cb3d0029458604efe9b1c912184eff7a512 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Tue, 12 Nov 2024 10:01:30 -0600 Subject: [PATCH 1/3] Agent dispatch APIs, ability to set room config in token (#303) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- examples/api.py | 6 +- livekit-api/livekit/api/__init__.py | 2 + livekit-api/livekit/api/_service.py | 8 +- livekit-api/livekit/api/access_token.py | 87 +++++--- .../livekit/api/agent_dispatch_service.py | 108 +++++++++ livekit-api/livekit/api/livekit_api.py | 8 + livekit-api/livekit/api/sip_service.py | 17 ++ livekit-api/livekit/api/webhook.py | 2 + livekit-api/setup.py | 2 +- livekit-api/tests/test_access_token.py | 42 ++++ livekit-protocol/generate_proto.sh | 5 +- livekit-protocol/livekit/protocol/__init__.py | 2 + livekit-protocol/livekit/protocol/agent.py | 4 +- .../livekit/protocol/agent_dispatch.py | 2 +- .../livekit/protocol/analytics.py | 53 ++--- .../livekit/protocol/analytics.pyi | 45 +++- livekit-protocol/livekit/protocol/egress.py | 70 +++--- livekit-protocol/livekit/protocol/egress.pyi | 8 +- livekit-protocol/livekit/protocol/ingress.py | 2 +- livekit-protocol/livekit/protocol/metrics.py | 36 +++ livekit-protocol/livekit/protocol/metrics.pyi | 107 +++++++++ livekit-protocol/livekit/protocol/models.py | 209 ++++++++++-------- livekit-protocol/livekit/protocol/models.pyi | 125 ++++++++++- livekit-protocol/livekit/protocol/room.py | 90 ++++---- livekit-protocol/livekit/protocol/room.pyi | 20 +- livekit-protocol/livekit/protocol/sip.py | 161 ++++++++------ livekit-protocol/livekit/protocol/sip.pyi | 174 ++++++++++++++- livekit-protocol/livekit/protocol/version.py | 2 +- livekit-protocol/livekit/protocol/webhook.py | 2 +- livekit-protocol/protocol | 2 +- 30 files changed, 1058 insertions(+), 343 deletions(-) create mode 100644 livekit-api/livekit/api/agent_dispatch_service.py create mode 100644 livekit-protocol/livekit/protocol/metrics.py create mode 100644 livekit-protocol/livekit/protocol/metrics.pyi diff --git a/examples/api.py b/examples/api.py index bdb6348a..f9e34265 100644 --- a/examples/api.py +++ b/examples/api.py @@ -3,8 +3,8 @@ async def main(): - # will automatically use the LIVEKIT_API_KEY and LIVEKIT_API_SECRET env vars - lkapi = api.LiveKitAPI("http://localhost:7880") + # will automatically use LIVEKIT_URL, LIVEKIT_API_KEY and LIVEKIT_API_SECRET env vars + lkapi = api.LiveKitAPI() room_info = await lkapi.room.create_room( api.CreateRoomRequest(name="my-room"), ) @@ -15,4 +15,4 @@ async def main(): if __name__ == "__main__": - asyncio.get_event_loop().run_until_complete(main()) + asyncio.run(main()) diff --git a/livekit-api/livekit/api/__init__.py b/livekit-api/livekit/api/__init__.py index 714ce134..0355cbb4 100644 --- a/livekit-api/livekit/api/__init__.py +++ b/livekit-api/livekit/api/__init__.py @@ -16,6 +16,8 @@ # flake8: noqa # re-export packages from protocol +from livekit.protocol.agent_dispatch import * +from livekit.protocol.agent import * from livekit.protocol.egress import * from livekit.protocol.ingress import * from livekit.protocol.models import * diff --git a/livekit-api/livekit/api/_service.py b/livekit-api/livekit/api/_service.py index 31527d00..2a1e0553 100644 --- a/livekit-api/livekit/api/_service.py +++ b/livekit-api/livekit/api/_service.py @@ -18,11 +18,13 @@ def __init__( self.api_secret = api_secret def _auth_header( - self, grants: VideoGrants, sip: SIPGrants | None = None + self, grants: VideoGrants | None, sip: SIPGrants | None = None ) -> Dict[str, str]: - tok = AccessToken(self.api_key, self.api_secret).with_grants(grants) + tok = AccessToken(self.api_key, self.api_secret) + if grants: + tok.with_grants(grants) if sip is not None: - tok = tok.with_sip_grants(sip) + tok.with_sip_grants(sip) token = tok.to_jwt() diff --git a/livekit-api/livekit/api/access_token.py b/livekit-api/livekit/api/access_token.py index 9668296a..dd8bd277 100644 --- a/livekit-api/livekit/api/access_token.py +++ b/livekit-api/livekit/api/access_token.py @@ -19,6 +19,9 @@ import os import jwt from typing import Optional, List, Literal +from google.protobuf.json_format import MessageToDict, ParseDict + +from livekit.protocol.room import RoomConfiguration DEFAULT_TTL = datetime.timedelta(hours=6) DEFAULT_LEEWAY = datetime.timedelta(minutes=1) @@ -27,13 +30,13 @@ @dataclasses.dataclass class VideoGrants: # actions on rooms - room_create: bool = False - room_list: bool = False - room_record: bool = False + room_create: Optional[bool] = None + room_list: Optional[bool] = None + room_record: Optional[bool] = None # actions on a particular room - room_admin: bool = False - room_join: bool = False + room_admin: Optional[bool] = None + room_join: Optional[bool] = None room: str = "" # permissions within a room @@ -44,23 +47,22 @@ class VideoGrants: # TrackSource types that a participant may publish. # When set, it supersedes CanPublish. Only sources explicitly set here can be # published - can_publish_sources: List[str] = dataclasses.field(default_factory=list) + can_publish_sources: Optional[List[str]] = None # by default, a participant is not allowed to update its own metadata - can_update_own_metadata: bool = False + can_update_own_metadata: Optional[bool] = None # actions on ingresses - ingress_admin: bool = False # applies to all ingress + ingress_admin: Optional[bool] = None # applies to all ingress # participant is not visible to other participants (useful when making bots) - hidden: bool = False + hidden: Optional[bool] = None - # indicates to the room that current participant is a recorder - recorder: bool = False + # [deprecated] indicates to the room that current participant is a recorder + recorder: Optional[bool] = None # indicates that the holder can register as an Agent framework worker - # it is also set on all participants that are joining as Agent - agent: bool = False + agent: Optional[bool] = None @dataclasses.dataclass @@ -75,12 +77,28 @@ class SIPGrants: class Claims: identity: str = "" name: str = "" - video: VideoGrants = dataclasses.field(default_factory=VideoGrants) - sip: SIPGrants = dataclasses.field(default_factory=SIPGrants) - attributes: dict[str, str] = dataclasses.field(default_factory=dict) - metadata: str = "" - sha256: str = "" kind: str = "" + metadata: str = "" + video: Optional[VideoGrants] = None + sip: Optional[SIPGrants] = None + attributes: Optional[dict[str, str]] = None + sha256: Optional[str] = None + room_preset: Optional[str] = None + room_config: Optional[RoomConfiguration] = None + + def asdict(self) -> dict: + # in order to produce minimal JWT size, exclude None or empty values + claims = dataclasses.asdict( + self, + dict_factory=lambda items: { + snake_to_lower_camel(k): v + for k, v in items + if v is not None and v != "" + }, + ) + if self.room_config: + claims["roomConfig"] = MessageToDict(self.room_config) + return claims class AccessToken: @@ -141,16 +159,22 @@ def with_sha256(self, sha256: str) -> "AccessToken": self.claims.sha256 = sha256 return self + def with_room_preset(self, preset: str) -> "AccessToken": + self.claims.room_preset = preset + return self + + def with_room_config(self, config: RoomConfiguration) -> "AccessToken": + self.claims.room_config = config + return self + def to_jwt(self) -> str: video = self.claims.video - if video.room_join and (not self.identity or not video.room): + if video and video.room_join and (not self.identity or not video.room): raise ValueError("identity and room must be set when joining a room") - claims = dataclasses.asdict( - self.claims, - dict_factory=lambda items: {snake_to_lower_camel(k): v for k, v in items}, - ) - claims.update( + # we want to exclude None values from the token + jwt_claims = self.claims.asdict() + jwt_claims.update( { "sub": self.identity, "iss": self.api_key, @@ -164,7 +188,7 @@ def to_jwt(self) -> str: ), } ) - return jwt.encode(claims, self.api_secret, algorithm="HS256") + return jwt.encode(jwt_claims, self.api_secret, algorithm="HS256") class TokenVerifier: @@ -208,7 +232,7 @@ def verify(self, token: str) -> Claims: } sip = SIPGrants(**sip_dict) - return Claims( + grant_claims = Claims( identity=claims.get("sub", ""), name=claims.get("name", ""), video=video, @@ -218,6 +242,17 @@ def verify(self, token: str) -> Claims: sha256=claims.get("sha256", ""), ) + if claims.get("roomPreset"): + grant_claims.room_preset = claims.get("roomPreset") + if claims.get("roomConfig"): + grant_claims.room_config = ParseDict( + claims.get("roomConfig"), + RoomConfiguration(), + ignore_unknown_fields=True, + ) + + return grant_claims + def camel_to_snake(t: str): return re.sub(r"(? proto_agent_dispatch.AgentDispatch: + """Create an explicit dispatch for an agent to join a room. + + To use explicit dispatch, your agent must be registered with an `agentName`. + + Args: + req (CreateAgentDispatchRequest): Request containing dispatch creation parameters + + Returns: + AgentDispatch: The created agent dispatch object + """ + return await self._client.request( + SVC, + "CreateDispatch", + req, + self._auth_header(VideoGrants(room_admin=True, room=req.room)), + proto_agent_dispatch.AgentDispatch, + ) + + async def delete_dispatch( + self, dispatch_id: str, room_name: str + ) -> proto_agent_dispatch.AgentDispatch: + """Delete an explicit dispatch for an agent in a room. + + Args: + dispatch_id (str): ID of the dispatch to delete + room_name (str): Name of the room containing the dispatch + + Returns: + AgentDispatch: The deleted agent dispatch object + """ + return await self._client.request( + SVC, + "DeleteDispatch", + proto_agent_dispatch.DeleteAgentDispatchRequest( + dispatch_id=dispatch_id, + room=room_name, + ), + self._auth_header(VideoGrants(room_admin=True, room=room_name)), + proto_agent_dispatch.AgentDispatch, + ) + + async def list_dispatch( + self, room_name: str + ) -> list[proto_agent_dispatch.AgentDispatch]: + """List all agent dispatches in a room. + + Args: + room_name (str): Name of the room to list dispatches from + + Returns: + list[AgentDispatch]: List of agent dispatch objects in the room + """ + res = await self._client.request( + SVC, + "ListDispatch", + proto_agent_dispatch.ListAgentDispatchRequest(room=room_name), + self._auth_header(VideoGrants(room_admin=True, room=room_name)), + proto_agent_dispatch.ListAgentDispatchResponse, + ) + return list(res.agent_dispatches) + + async def get_dispatch( + self, dispatch_id: str, room_name: str + ) -> Optional[proto_agent_dispatch.AgentDispatch]: + """Get an Agent dispatch by ID + + Args: + dispatch_id (str): ID of the dispatch to retrieve + room_name (str): Name of the room containing the dispatch + + Returns: + Optional[AgentDispatch]: The requested agent dispatch object if found, None otherwise + """ + res = await self._client.request( + SVC, + "ListDispatch", + proto_agent_dispatch.ListAgentDispatchRequest( + dispatch_id=dispatch_id, room=room_name + ), + self._auth_header(VideoGrants(room_admin=True, room=room_name)), + proto_agent_dispatch.ListAgentDispatchResponse, + ) + if len(res.agent_dispatches) > 0: + return res.agent_dispatches[0] + return None diff --git a/livekit-api/livekit/api/livekit_api.py b/livekit-api/livekit/api/livekit_api.py index efe00ff8..29834842 100644 --- a/livekit-api/livekit/api/livekit_api.py +++ b/livekit-api/livekit/api/livekit_api.py @@ -4,6 +4,7 @@ from .egress_service import EgressService from .ingress_service import IngressService from .sip_service import SipService +from .agent_dispatch_service import AgentDispatchService from typing import Optional @@ -31,6 +32,13 @@ def __init__( self._ingress = IngressService(self._session, url, api_key, api_secret) self._egress = EgressService(self._session, url, api_key, api_secret) self._sip = SipService(self._session, url, api_key, api_secret) + self._agent_dispatch = AgentDispatchService( + self._session, url, api_key, api_secret + ) + + @property + def agent_dispatch(self): + return self._agent_dispatch @property def room(self): diff --git a/livekit-api/livekit/api/sip_service.py b/livekit-api/livekit/api/sip_service.py index 80810528..6d3f122e 100644 --- a/livekit-api/livekit/api/sip_service.py +++ b/livekit-api/livekit/api/sip_service.py @@ -132,3 +132,20 @@ async def create_sip_participant( self._auth_header(VideoGrants(), sip=SIPGrants(call=True)), proto_sip.SIPParticipantInfo, ) + + async def transfer_sip_participant( + self, transfer: proto_sip.TransferSIPParticipantRequest + ) -> proto_sip.SIPParticipantInfo: + return await self._client.request( + SVC, + "TransferSIPParticipant", + transfer, + self._auth_header( + VideoGrants( + room_admin=True, + room=transfer.room_name, + ), + sip=SIPGrants(call=True), + ), + proto_sip.SIPParticipantInfo, + ) diff --git a/livekit-api/livekit/api/webhook.py b/livekit-api/livekit/api/webhook.py index 760c9a90..5dedf048 100644 --- a/livekit-api/livekit/api/webhook.py +++ b/livekit-api/livekit/api/webhook.py @@ -11,6 +11,8 @@ def __init__(self, token_verifier: TokenVerifier): def receive(self, body: str, auth_token: str) -> proto_webhook.WebhookEvent: claims = self._verifier.verify(auth_token) + if claims.sha256 is None: + raise Exception("sha256 was not found in the token") body_hash = hashlib.sha256(body.encode()).digest() claims_hash = base64.b64decode(claims.sha256) diff --git a/livekit-api/setup.py b/livekit-api/setup.py index e9e3f06b..5a441d68 100644 --- a/livekit-api/setup.py +++ b/livekit-api/setup.py @@ -53,7 +53,7 @@ "aiohttp>=3.9.0", "protobuf>=3", "types-protobuf>=4,<5", - "livekit-protocol>=0.6.0,<2", + "livekit-protocol>=0.7.0,<2", ], package_data={ "livekit.api": ["py.typed", "*.pyi", "**/*.pyi"], diff --git a/livekit-api/tests/test_access_token.py b/livekit-api/tests/test_access_token.py index 7fd26b39..245e2eaa 100644 --- a/livekit-api/tests/test_access_token.py +++ b/livekit-api/tests/test_access_token.py @@ -2,6 +2,8 @@ import pytest # type: ignore from livekit.api import AccessToken, TokenVerifier, VideoGrants, SIPGrants +from livekit.protocol.room import RoomConfiguration +from livekit.protocol.agent_dispatch import RoomAgentDispatch TEST_API_KEY = "myapikey" TEST_API_SECRET = "thiskeyistotallyunsafe" @@ -32,6 +34,46 @@ def test_verify_token(): assert claims.attributes["key2"] == "value2" +def test_agent_config(): + token = ( + AccessToken(TEST_API_KEY, TEST_API_SECRET) + .with_identity("test_identity") + .with_grants(VideoGrants(room_join=True, room="test_room")) + .with_room_config( + RoomConfiguration( + agents=[RoomAgentDispatch(agent_name="test-agent")], + ), + ) + .to_jwt() + ) + + token_verifier = TokenVerifier(TEST_API_KEY, TEST_API_SECRET) + claims = token_verifier.verify(token) + # Verify the decoded claims match + assert claims.room_config.agents[0].agent_name == "test-agent" + + # Split token into header.payload.signature + parts = token.split(".") + import base64 + import json + + # Decode the payload (middle part) + payload = parts[1] + # Add padding if needed + padding = len(payload) % 4 + if padding: + payload += "=" * (4 - padding) + decoded = base64.b64decode(payload) + payload_json = json.loads(decoded) + print(decoded) + + # Verify the room_config and agents were encoded correctly + assert "roomConfig" in payload_json + assert "agents" in payload_json["roomConfig"] + assert len(payload_json["roomConfig"]["agents"]) == 1 + assert payload_json["roomConfig"]["agents"][0]["agentName"] == "test-agent" + + def test_verify_token_invalid(): token = ( AccessToken(TEST_API_KEY, TEST_API_SECRET) diff --git a/livekit-protocol/generate_proto.sh b/livekit-protocol/generate_proto.sh index 8781ec22..374601ca 100755 --- a/livekit-protocol/generate_proto.sh +++ b/livekit-protocol/generate_proto.sh @@ -32,6 +32,7 @@ protoc \ $API_PROTOCOL/livekit_models.proto \ $API_PROTOCOL/livekit_agent.proto \ $API_PROTOCOL/livekit_agent_dispatch.proto \ + $API_PROTOCOL/livekit_metrics.proto \ $API_PROTOCOL/livekit_sip.proto \ $API_PROTOCOL/livekit_analytics.proto @@ -65,7 +66,9 @@ mv "$API_OUT_PYTHON/livekit_analytics_pb2.py" "$API_OUT_PYTHON/analytics.py" mv "$API_OUT_PYTHON/livekit_analytics_pb2.pyi" "$API_OUT_PYTHON/analytics.pyi" mv "$API_OUT_PYTHON/livekit_sip_pb2.py" "$API_OUT_PYTHON/sip.py" mv "$API_OUT_PYTHON/livekit_sip_pb2.pyi" "$API_OUT_PYTHON/sip.pyi" +mv "$API_OUT_PYTHON/livekit_metrics_pb2.py" "$API_OUT_PYTHON/metrics.py" +mv "$API_OUT_PYTHON/livekit_metrics_pb2.pyi" "$API_OUT_PYTHON/metrics.pyi" -perl -i -pe 's|^(import (livekit_egress_pb2\|livekit_room_pb2\|livekit_webhook_pb2\|livekit_ingress_pb2\|livekit_models_pb2\|livekit_agent_pb2\|livekit_agent_dispatch_pb2\|livekit_analytics_pb2\|livekit_sip_pb2))|from . $1|g' "$API_OUT_PYTHON"/*.py "$API_OUT_PYTHON"/*.pyi +perl -i -pe 's|^(import (livekit_egress_pb2\|livekit_room_pb2\|livekit_webhook_pb2\|livekit_ingress_pb2\|livekit_models_pb2\|livekit_agent_pb2\|livekit_agent_dispatch_pb2\|livekit_analytics_pb2\|livekit_sip_pb2\|livekit_metrics_pb2))|from . $1|g' "$API_OUT_PYTHON"/*.py "$API_OUT_PYTHON"/*.pyi perl -i -pe 's|livekit_(\w+)_pb2|${1}|g' "$API_OUT_PYTHON"/*.py "$API_OUT_PYTHON"/*.pyi diff --git a/livekit-protocol/livekit/protocol/__init__.py b/livekit-protocol/livekit/protocol/__init__.py index b6e0b419..4b4ebcdc 100644 --- a/livekit-protocol/livekit/protocol/__init__.py +++ b/livekit-protocol/livekit/protocol/__init__.py @@ -1,7 +1,9 @@ from . import agent +from . import agent_dispatch from . import analytics from . import egress from . import ingress +from . import metrics from . import models from . import room from . import webhook diff --git a/livekit-protocol/livekit/protocol/agent.py b/livekit-protocol/livekit/protocol/agent.py index 7a2fc5bb..1b8b0696 100644 --- a/livekit-protocol/livekit/protocol/agent.py +++ b/livekit-protocol/livekit/protocol/agent.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: livekit_agent.proto -# Protobuf Python Version: 4.25.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -15,7 +15,7 @@ from . import models as _models_ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13livekit_agent.proto\x12\x07livekit\x1a\x14livekit_models.proto\"\x86\x02\n\x03Job\x12\n\n\x02id\x18\x01 \x01(\t\x12\x13\n\x0b\x64ispatch_id\x18\t \x01(\t\x12\x1e\n\x04type\x18\x02 \x01(\x0e\x32\x10.livekit.JobType\x12\x1b\n\x04room\x18\x03 \x01(\x0b\x32\r.livekit.Room\x12\x32\n\x0bparticipant\x18\x04 \x01(\x0b\x32\x18.livekit.ParticipantInfoH\x00\x88\x01\x01\x12\x15\n\tnamespace\x18\x05 \x01(\tB\x02\x18\x01\x12\x10\n\x08metadata\x18\x06 \x01(\t\x12\x12\n\nagent_name\x18\x07 \x01(\t\x12 \n\x05state\x18\x08 \x01(\x0b\x32\x11.livekit.JobStateB\x0e\n\x0c_participant\"\x95\x01\n\x08JobState\x12\"\n\x06status\x18\x01 \x01(\x0e\x32\x12.livekit.JobStatus\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12\x12\n\nstarted_at\x18\x03 \x01(\x03\x12\x10\n\x08\x65nded_at\x18\x04 \x01(\x03\x12\x12\n\nupdated_at\x18\x05 \x01(\x03\x12\x1c\n\x14participant_identity\x18\x06 \x01(\t\"\xf8\x02\n\rWorkerMessage\x12\x32\n\x08register\x18\x01 \x01(\x0b\x32\x1e.livekit.RegisterWorkerRequestH\x00\x12\x35\n\x0c\x61vailability\x18\x02 \x01(\x0b\x32\x1d.livekit.AvailabilityResponseH\x00\x12\x34\n\rupdate_worker\x18\x03 \x01(\x0b\x32\x1b.livekit.UpdateWorkerStatusH\x00\x12.\n\nupdate_job\x18\x04 \x01(\x0b\x32\x18.livekit.UpdateJobStatusH\x00\x12#\n\x04ping\x18\x05 \x01(\x0b\x32\x13.livekit.WorkerPingH\x00\x12\x33\n\x0csimulate_job\x18\x06 \x01(\x0b\x32\x1b.livekit.SimulateJobRequestH\x00\x12\x31\n\x0bmigrate_job\x18\x07 \x01(\x0b\x32\x1a.livekit.MigrateJobRequestH\x00\x42\t\n\x07message\"\x88\x02\n\rServerMessage\x12\x33\n\x08register\x18\x01 \x01(\x0b\x32\x1f.livekit.RegisterWorkerResponseH\x00\x12\x34\n\x0c\x61vailability\x18\x02 \x01(\x0b\x32\x1c.livekit.AvailabilityRequestH\x00\x12,\n\nassignment\x18\x03 \x01(\x0b\x32\x16.livekit.JobAssignmentH\x00\x12.\n\x0btermination\x18\x05 \x01(\x0b\x32\x17.livekit.JobTerminationH\x00\x12#\n\x04pong\x18\x04 \x01(\x0b\x32\x13.livekit.WorkerPongH\x00\x42\t\n\x07message\"\x80\x01\n\x12SimulateJobRequest\x12\x1e\n\x04type\x18\x01 \x01(\x0e\x32\x10.livekit.JobType\x12\x1b\n\x04room\x18\x02 \x01(\x0b\x32\r.livekit.Room\x12-\n\x0bparticipant\x18\x03 \x01(\x0b\x32\x18.livekit.ParticipantInfo\"\x1f\n\nWorkerPing\x12\x11\n\ttimestamp\x18\x01 \x01(\x03\"7\n\nWorkerPong\x12\x16\n\x0elast_timestamp\x18\x01 \x01(\x03\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\"\xd6\x01\n\x15RegisterWorkerRequest\x12\x1e\n\x04type\x18\x01 \x01(\x0e\x32\x10.livekit.JobType\x12\x12\n\nagent_name\x18\x08 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x15\n\rping_interval\x18\x05 \x01(\r\x12\x16\n\tnamespace\x18\x06 \x01(\tH\x00\x88\x01\x01\x12;\n\x13\x61llowed_permissions\x18\x07 \x01(\x0b\x32\x1e.livekit.ParticipantPermissionB\x0c\n\n_namespace\"U\n\x16RegisterWorkerResponse\x12\x11\n\tworker_id\x18\x01 \x01(\t\x12(\n\x0bserver_info\x18\x03 \x01(\x0b\x32\x13.livekit.ServerInfo\"$\n\x11MigrateJobRequest\x12\x0f\n\x07job_ids\x18\x02 \x03(\t\"B\n\x13\x41vailabilityRequest\x12\x19\n\x03job\x18\x01 \x01(\x0b\x32\x0c.livekit.Job\x12\x10\n\x08resuming\x18\x02 \x01(\x08\"\xc0\x02\n\x14\x41vailabilityResponse\x12\x0e\n\x06job_id\x18\x01 \x01(\t\x12\x11\n\tavailable\x18\x02 \x01(\x08\x12\x17\n\x0fsupports_resume\x18\x03 \x01(\x08\x12\x18\n\x10participant_name\x18\x04 \x01(\t\x12\x1c\n\x14participant_identity\x18\x05 \x01(\t\x12\x1c\n\x14participant_metadata\x18\x06 \x01(\t\x12X\n\x16participant_attributes\x18\x07 \x03(\x0b\x32\x38.livekit.AvailabilityResponse.ParticipantAttributesEntry\x1a<\n\x1aParticipantAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"T\n\x0fUpdateJobStatus\x12\x0e\n\x06job_id\x18\x01 \x01(\t\x12\"\n\x06status\x18\x02 \x01(\x0e\x32\x12.livekit.JobStatus\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"l\n\x12UpdateWorkerStatus\x12*\n\x06status\x18\x01 \x01(\x0e\x32\x15.livekit.WorkerStatusH\x00\x88\x01\x01\x12\x0c\n\x04load\x18\x03 \x01(\x02\x12\x11\n\tjob_count\x18\x04 \x01(\x05\x42\t\n\x07_status\"S\n\rJobAssignment\x12\x19\n\x03job\x18\x01 \x01(\x0b\x32\x0c.livekit.Job\x12\x10\n\x03url\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\r\n\x05token\x18\x03 \x01(\tB\x06\n\x04_url\" \n\x0eJobTermination\x12\x0e\n\x06job_id\x18\x01 \x01(\t*(\n\x07JobType\x12\x0b\n\x07JT_ROOM\x10\x00\x12\x10\n\x0cJT_PUBLISHER\x10\x01*-\n\x0cWorkerStatus\x12\x10\n\x0cWS_AVAILABLE\x10\x00\x12\x0b\n\x07WS_FULL\x10\x01*J\n\tJobStatus\x12\x0e\n\nJS_PENDING\x10\x00\x12\x0e\n\nJS_RUNNING\x10\x01\x12\x0e\n\nJS_SUCCESS\x10\x02\x12\r\n\tJS_FAILED\x10\x03\x42\x46Z#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13livekit_agent.proto\x12\x07livekit\x1a\x14livekit_models.proto\"\x86\x02\n\x03Job\x12\n\n\x02id\x18\x01 \x01(\t\x12\x13\n\x0b\x64ispatch_id\x18\t \x01(\t\x12\x1e\n\x04type\x18\x02 \x01(\x0e\x32\x10.livekit.JobType\x12\x1b\n\x04room\x18\x03 \x01(\x0b\x32\r.livekit.Room\x12\x32\n\x0bparticipant\x18\x04 \x01(\x0b\x32\x18.livekit.ParticipantInfoH\x00\x88\x01\x01\x12\x15\n\tnamespace\x18\x05 \x01(\tB\x02\x18\x01\x12\x10\n\x08metadata\x18\x06 \x01(\t\x12\x12\n\nagent_name\x18\x07 \x01(\t\x12 \n\x05state\x18\x08 \x01(\x0b\x32\x11.livekit.JobStateB\x0e\n\x0c_participant\"\x95\x01\n\x08JobState\x12\"\n\x06status\x18\x01 \x01(\x0e\x32\x12.livekit.JobStatus\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12\x12\n\nstarted_at\x18\x03 \x01(\x03\x12\x10\n\x08\x65nded_at\x18\x04 \x01(\x03\x12\x12\n\nupdated_at\x18\x05 \x01(\x03\x12\x1c\n\x14participant_identity\x18\x06 \x01(\t\"\xf8\x02\n\rWorkerMessage\x12\x32\n\x08register\x18\x01 \x01(\x0b\x32\x1e.livekit.RegisterWorkerRequestH\x00\x12\x35\n\x0c\x61vailability\x18\x02 \x01(\x0b\x32\x1d.livekit.AvailabilityResponseH\x00\x12\x34\n\rupdate_worker\x18\x03 \x01(\x0b\x32\x1b.livekit.UpdateWorkerStatusH\x00\x12.\n\nupdate_job\x18\x04 \x01(\x0b\x32\x18.livekit.UpdateJobStatusH\x00\x12#\n\x04ping\x18\x05 \x01(\x0b\x32\x13.livekit.WorkerPingH\x00\x12\x33\n\x0csimulate_job\x18\x06 \x01(\x0b\x32\x1b.livekit.SimulateJobRequestH\x00\x12\x31\n\x0bmigrate_job\x18\x07 \x01(\x0b\x32\x1a.livekit.MigrateJobRequestH\x00\x42\t\n\x07message\"\x88\x02\n\rServerMessage\x12\x33\n\x08register\x18\x01 \x01(\x0b\x32\x1f.livekit.RegisterWorkerResponseH\x00\x12\x34\n\x0c\x61vailability\x18\x02 \x01(\x0b\x32\x1c.livekit.AvailabilityRequestH\x00\x12,\n\nassignment\x18\x03 \x01(\x0b\x32\x16.livekit.JobAssignmentH\x00\x12.\n\x0btermination\x18\x05 \x01(\x0b\x32\x17.livekit.JobTerminationH\x00\x12#\n\x04pong\x18\x04 \x01(\x0b\x32\x13.livekit.WorkerPongH\x00\x42\t\n\x07message\"\x80\x01\n\x12SimulateJobRequest\x12\x1e\n\x04type\x18\x01 \x01(\x0e\x32\x10.livekit.JobType\x12\x1b\n\x04room\x18\x02 \x01(\x0b\x32\r.livekit.Room\x12-\n\x0bparticipant\x18\x03 \x01(\x0b\x32\x18.livekit.ParticipantInfo\"\x1f\n\nWorkerPing\x12\x11\n\ttimestamp\x18\x01 \x01(\x03\"7\n\nWorkerPong\x12\x16\n\x0elast_timestamp\x18\x01 \x01(\x03\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\"\xd6\x01\n\x15RegisterWorkerRequest\x12\x1e\n\x04type\x18\x01 \x01(\x0e\x32\x10.livekit.JobType\x12\x12\n\nagent_name\x18\x08 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x15\n\rping_interval\x18\x05 \x01(\r\x12\x16\n\tnamespace\x18\x06 \x01(\tH\x00\x88\x01\x01\x12;\n\x13\x61llowed_permissions\x18\x07 \x01(\x0b\x32\x1e.livekit.ParticipantPermissionB\x0c\n\n_namespace\"U\n\x16RegisterWorkerResponse\x12\x11\n\tworker_id\x18\x01 \x01(\t\x12(\n\x0bserver_info\x18\x03 \x01(\x0b\x32\x13.livekit.ServerInfo\"$\n\x11MigrateJobRequest\x12\x0f\n\x07job_ids\x18\x02 \x03(\t\"B\n\x13\x41vailabilityRequest\x12\x19\n\x03job\x18\x01 \x01(\x0b\x32\x0c.livekit.Job\x12\x10\n\x08resuming\x18\x02 \x01(\x08\"\xc0\x02\n\x14\x41vailabilityResponse\x12\x0e\n\x06job_id\x18\x01 \x01(\t\x12\x11\n\tavailable\x18\x02 \x01(\x08\x12\x17\n\x0fsupports_resume\x18\x03 \x01(\x08\x12\x18\n\x10participant_name\x18\x04 \x01(\t\x12\x1c\n\x14participant_identity\x18\x05 \x01(\t\x12\x1c\n\x14participant_metadata\x18\x06 \x01(\t\x12X\n\x16participant_attributes\x18\x07 \x03(\x0b\x32\x38.livekit.AvailabilityResponse.ParticipantAttributesEntry\x1a<\n\x1aParticipantAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"T\n\x0fUpdateJobStatus\x12\x0e\n\x06job_id\x18\x01 \x01(\t\x12\"\n\x06status\x18\x02 \x01(\x0e\x32\x12.livekit.JobStatus\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"l\n\x12UpdateWorkerStatus\x12*\n\x06status\x18\x01 \x01(\x0e\x32\x15.livekit.WorkerStatusH\x00\x88\x01\x01\x12\x0c\n\x04load\x18\x03 \x01(\x02\x12\x11\n\tjob_count\x18\x04 \x01(\rB\t\n\x07_status\"S\n\rJobAssignment\x12\x19\n\x03job\x18\x01 \x01(\x0b\x32\x0c.livekit.Job\x12\x10\n\x03url\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\r\n\x05token\x18\x03 \x01(\tB\x06\n\x04_url\" \n\x0eJobTermination\x12\x0e\n\x06job_id\x18\x01 \x01(\t*(\n\x07JobType\x12\x0b\n\x07JT_ROOM\x10\x00\x12\x10\n\x0cJT_PUBLISHER\x10\x01*-\n\x0cWorkerStatus\x12\x10\n\x0cWS_AVAILABLE\x10\x00\x12\x0b\n\x07WS_FULL\x10\x01*J\n\tJobStatus\x12\x0e\n\nJS_PENDING\x10\x00\x12\x0e\n\nJS_RUNNING\x10\x01\x12\x0e\n\nJS_SUCCESS\x10\x02\x12\r\n\tJS_FAILED\x10\x03\x42\x46Z#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) diff --git a/livekit-protocol/livekit/protocol/agent_dispatch.py b/livekit-protocol/livekit/protocol/agent_dispatch.py index 7bdf63f9..be2384c3 100644 --- a/livekit-protocol/livekit/protocol/agent_dispatch.py +++ b/livekit-protocol/livekit/protocol/agent_dispatch.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: livekit_agent_dispatch.proto -# Protobuf Python Version: 4.25.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool diff --git a/livekit-protocol/livekit/protocol/analytics.py b/livekit-protocol/livekit/protocol/analytics.py index 15fef1ba..f21bc953 100644 --- a/livekit-protocol/livekit/protocol/analytics.py +++ b/livekit-protocol/livekit/protocol/analytics.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: livekit_analytics.proto -# Protobuf Python Version: 4.25.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -16,9 +16,10 @@ from . import models as _models_ from . import egress as _egress_ from . import ingress as _ingress_ +from . import sip as _sip_ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17livekit_analytics.proto\x12\x07livekit\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x14livekit_models.proto\x1a\x14livekit_egress.proto\x1a\x15livekit_ingress.proto\"T\n\x13\x41nalyticsVideoLayer\x12\r\n\x05layer\x18\x01 \x01(\x05\x12\x0f\n\x07packets\x18\x02 \x01(\r\x12\r\n\x05\x62ytes\x18\x03 \x01(\x04\x12\x0e\n\x06\x66rames\x18\x04 \x01(\r\"\xb5\x03\n\x0f\x41nalyticsStream\x12\x0c\n\x04ssrc\x18\x01 \x01(\r\x12\x17\n\x0fprimary_packets\x18\x02 \x01(\r\x12\x15\n\rprimary_bytes\x18\x03 \x01(\x04\x12\x1a\n\x12retransmit_packets\x18\x04 \x01(\r\x12\x18\n\x10retransmit_bytes\x18\x05 \x01(\x04\x12\x17\n\x0fpadding_packets\x18\x06 \x01(\r\x12\x15\n\rpadding_bytes\x18\x07 \x01(\x04\x12\x14\n\x0cpackets_lost\x18\x08 \x01(\r\x12\x0e\n\x06\x66rames\x18\t \x01(\r\x12\x0b\n\x03rtt\x18\n \x01(\r\x12\x0e\n\x06jitter\x18\x0b \x01(\r\x12\r\n\x05nacks\x18\x0c \x01(\r\x12\x0c\n\x04plis\x18\r \x01(\r\x12\x0c\n\x04\x66irs\x18\x0e \x01(\r\x12\x32\n\x0cvideo_layers\x18\x0f \x03(\x0b\x32\x1c.livekit.AnalyticsVideoLayer\x12.\n\nstart_time\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xd2\x02\n\rAnalyticsStat\x12\n\n\x02id\x18\x0e \x01(\t\x12\x15\n\ranalytics_key\x18\x01 \x01(\t\x12!\n\x04kind\x18\x02 \x01(\x0e\x32\x13.livekit.StreamType\x12.\n\ntime_stamp\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0c\n\x04node\x18\x04 \x01(\t\x12\x0f\n\x07room_id\x18\x05 \x01(\t\x12\x11\n\troom_name\x18\x06 \x01(\t\x12\x16\n\x0eparticipant_id\x18\x07 \x01(\t\x12\x10\n\x08track_id\x18\x08 \x01(\t\x12\r\n\x05score\x18\t \x01(\x02\x12)\n\x07streams\x18\n \x03(\x0b\x32\x18.livekit.AnalyticsStream\x12\x0c\n\x04mime\x18\x0b \x01(\t\x12\x11\n\tmin_score\x18\x0c \x01(\x02\x12\x14\n\x0cmedian_score\x18\r \x01(\x02\"7\n\x0e\x41nalyticsStats\x12%\n\x05stats\x18\x01 \x03(\x0b\x32\x16.livekit.AnalyticsStat\"\x9a\x02\n\x13\x41nalyticsClientMeta\x12\x0e\n\x06region\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\t\x12\x13\n\x0b\x63lient_addr\x18\x03 \x01(\t\x12\x1b\n\x13\x63lient_connect_time\x18\x04 \x01(\r\x12\x17\n\x0f\x63onnection_type\x18\x05 \x01(\t\x12\x32\n\x10reconnect_reason\x18\x06 \x01(\x0e\x32\x18.livekit.ReconnectReason\x12\x15\n\x08geo_hash\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x63ountry\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x07isp_asn\x18\t \x01(\rH\x02\x88\x01\x01\x42\x0b\n\t_geo_hashB\n\n\x08_countryB\n\n\x08_isp_asn\"\xda\x05\n\x0e\x41nalyticsEvent\x12\n\n\x02id\x18\x19 \x01(\t\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.livekit.AnalyticsEventType\x12-\n\ttimestamp\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07room_id\x18\x03 \x01(\t\x12\x1b\n\x04room\x18\x04 \x01(\x0b\x32\r.livekit.Room\x12\x16\n\x0eparticipant_id\x18\x05 \x01(\t\x12-\n\x0bparticipant\x18\x06 \x01(\x0b\x32\x18.livekit.ParticipantInfo\x12\x10\n\x08track_id\x18\x07 \x01(\t\x12!\n\x05track\x18\x08 \x01(\x0b\x32\x12.livekit.TrackInfo\x12\x15\n\ranalytics_key\x18\n \x01(\t\x12(\n\x0b\x63lient_info\x18\x0b \x01(\x0b\x32\x13.livekit.ClientInfo\x12\x31\n\x0b\x63lient_meta\x18\x0c \x01(\x0b\x32\x1c.livekit.AnalyticsClientMeta\x12\x11\n\tegress_id\x18\r \x01(\t\x12\x12\n\ningress_id\x18\x13 \x01(\t\x12;\n\x1cmax_subscribed_video_quality\x18\x0e \x01(\x0e\x32\x15.livekit.VideoQuality\x12+\n\tpublisher\x18\x0f \x01(\x0b\x32\x18.livekit.ParticipantInfo\x12\x0c\n\x04mime\x18\x10 \x01(\t\x12#\n\x06\x65gress\x18\x11 \x01(\x0b\x32\x13.livekit.EgressInfo\x12%\n\x07ingress\x18\x12 \x01(\x0b\x32\x14.livekit.IngressInfo\x12\r\n\x05\x65rror\x18\x14 \x01(\t\x12$\n\trtp_stats\x18\x15 \x01(\x0b\x32\x11.livekit.RTPStats\x12\x13\n\x0bvideo_layer\x18\x16 \x01(\x05\x12\x0f\n\x07node_id\x18\x18 \x01(\t\":\n\x0f\x41nalyticsEvents\x12\'\n\x06\x65vents\x18\x01 \x03(\x0b\x32\x17.livekit.AnalyticsEvent\"\xa4\x01\n\x18\x41nalyticsRoomParticipant\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12-\n\x05state\x18\x04 \x01(\x0e\x32\x1e.livekit.ParticipantInfo.State\x12-\n\tjoined_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xa6\x01\n\rAnalyticsRoom\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x12\n\nproject_id\x18\x05 \x01(\t\x12.\n\ncreated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x37\n\x0cparticipants\x18\x04 \x03(\x0b\x32!.livekit.AnalyticsRoomParticipant\"\x94\x01\n\x12\x41nalyticsNodeRooms\x12\x0f\n\x07node_id\x18\x01 \x01(\t\x12\x17\n\x0fsequence_number\x18\x02 \x01(\x04\x12-\n\ttimestamp\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12%\n\x05rooms\x18\x04 \x03(\x0b\x32\x16.livekit.AnalyticsRoom**\n\nStreamType\x12\x0c\n\x08UPSTREAM\x10\x00\x12\x0e\n\nDOWNSTREAM\x10\x01*\x95\x05\n\x12\x41nalyticsEventType\x12\x10\n\x0cROOM_CREATED\x10\x00\x12\x0e\n\nROOM_ENDED\x10\x01\x12\x16\n\x12PARTICIPANT_JOINED\x10\x02\x12\x14\n\x10PARTICIPANT_LEFT\x10\x03\x12\x13\n\x0fTRACK_PUBLISHED\x10\x04\x12\x1b\n\x17TRACK_PUBLISH_REQUESTED\x10\x14\x12\x15\n\x11TRACK_UNPUBLISHED\x10\x05\x12\x14\n\x10TRACK_SUBSCRIBED\x10\x06\x12\x1d\n\x19TRACK_SUBSCRIBE_REQUESTED\x10\x15\x12\x1a\n\x16TRACK_SUBSCRIBE_FAILED\x10\x19\x12\x16\n\x12TRACK_UNSUBSCRIBED\x10\x07\x12\x1a\n\x16TRACK_PUBLISHED_UPDATE\x10\n\x12\x0f\n\x0bTRACK_MUTED\x10\x17\x12\x11\n\rTRACK_UNMUTED\x10\x18\x12\x17\n\x13TRACK_PUBLISH_STATS\x10\x1a\x12\x19\n\x15TRACK_SUBSCRIBE_STATS\x10\x1b\x12\x16\n\x12PARTICIPANT_ACTIVE\x10\x0b\x12\x17\n\x13PARTICIPANT_RESUMED\x10\x16\x12\x12\n\x0e\x45GRESS_STARTED\x10\x0c\x12\x10\n\x0c\x45GRESS_ENDED\x10\r\x12\x12\n\x0e\x45GRESS_UPDATED\x10\x1c\x12&\n\"TRACK_MAX_SUBSCRIBED_VIDEO_QUALITY\x10\x0e\x12\x0f\n\x0bRECONNECTED\x10\x0f\x12\x13\n\x0fINGRESS_CREATED\x10\x12\x12\x13\n\x0fINGRESS_DELETED\x10\x13\x12\x13\n\x0fINGRESS_STARTED\x10\x10\x12\x11\n\rINGRESS_ENDED\x10\x11\x12\x13\n\x0fINGRESS_UPDATED\x10\x1d\x42\x46Z#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17livekit_analytics.proto\x12\x07livekit\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x14livekit_models.proto\x1a\x14livekit_egress.proto\x1a\x15livekit_ingress.proto\x1a\x11livekit_sip.proto\"T\n\x13\x41nalyticsVideoLayer\x12\r\n\x05layer\x18\x01 \x01(\x05\x12\x0f\n\x07packets\x18\x02 \x01(\r\x12\r\n\x05\x62ytes\x18\x03 \x01(\x04\x12\x0e\n\x06\x66rames\x18\x04 \x01(\r\"\xd3\x03\n\x0f\x41nalyticsStream\x12\x0c\n\x04ssrc\x18\x01 \x01(\r\x12\x17\n\x0fprimary_packets\x18\x02 \x01(\r\x12\x15\n\rprimary_bytes\x18\x03 \x01(\x04\x12\x1a\n\x12retransmit_packets\x18\x04 \x01(\r\x12\x18\n\x10retransmit_bytes\x18\x05 \x01(\x04\x12\x17\n\x0fpadding_packets\x18\x06 \x01(\r\x12\x15\n\rpadding_bytes\x18\x07 \x01(\x04\x12\x14\n\x0cpackets_lost\x18\x08 \x01(\r\x12\x0e\n\x06\x66rames\x18\t \x01(\r\x12\x0b\n\x03rtt\x18\n \x01(\r\x12\x0e\n\x06jitter\x18\x0b \x01(\r\x12\r\n\x05nacks\x18\x0c \x01(\r\x12\x0c\n\x04plis\x18\r \x01(\r\x12\x0c\n\x04\x66irs\x18\x0e \x01(\r\x12\x32\n\x0cvideo_layers\x18\x0f \x03(\x0b\x32\x1c.livekit.AnalyticsVideoLayer\x12.\n\nstart_time\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x1c\n\x14packets_out_of_order\x18\x13 \x01(\r\"\xd2\x02\n\rAnalyticsStat\x12\n\n\x02id\x18\x0e \x01(\t\x12\x15\n\ranalytics_key\x18\x01 \x01(\t\x12!\n\x04kind\x18\x02 \x01(\x0e\x32\x13.livekit.StreamType\x12.\n\ntime_stamp\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0c\n\x04node\x18\x04 \x01(\t\x12\x0f\n\x07room_id\x18\x05 \x01(\t\x12\x11\n\troom_name\x18\x06 \x01(\t\x12\x16\n\x0eparticipant_id\x18\x07 \x01(\t\x12\x10\n\x08track_id\x18\x08 \x01(\t\x12\r\n\x05score\x18\t \x01(\x02\x12)\n\x07streams\x18\n \x03(\x0b\x32\x18.livekit.AnalyticsStream\x12\x0c\n\x04mime\x18\x0b \x01(\t\x12\x11\n\tmin_score\x18\x0c \x01(\x02\x12\x14\n\x0cmedian_score\x18\r \x01(\x02\"7\n\x0e\x41nalyticsStats\x12%\n\x05stats\x18\x01 \x03(\x0b\x32\x16.livekit.AnalyticsStat\"\x9a\x02\n\x13\x41nalyticsClientMeta\x12\x0e\n\x06region\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\t\x12\x13\n\x0b\x63lient_addr\x18\x03 \x01(\t\x12\x1b\n\x13\x63lient_connect_time\x18\x04 \x01(\r\x12\x17\n\x0f\x63onnection_type\x18\x05 \x01(\t\x12\x32\n\x10reconnect_reason\x18\x06 \x01(\x0e\x32\x18.livekit.ReconnectReason\x12\x15\n\x08geo_hash\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x63ountry\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x07isp_asn\x18\t \x01(\rH\x02\x88\x01\x01\x42\x0b\n\t_geo_hashB\n\n\x08_countryB\n\n\x08_isp_asn\"\xf8\x07\n\x0e\x41nalyticsEvent\x12\n\n\x02id\x18\x19 \x01(\t\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.livekit.AnalyticsEventType\x12-\n\ttimestamp\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07room_id\x18\x03 \x01(\t\x12\x1b\n\x04room\x18\x04 \x01(\x0b\x32\r.livekit.Room\x12\x16\n\x0eparticipant_id\x18\x05 \x01(\t\x12-\n\x0bparticipant\x18\x06 \x01(\x0b\x32\x18.livekit.ParticipantInfo\x12\x10\n\x08track_id\x18\x07 \x01(\t\x12!\n\x05track\x18\x08 \x01(\x0b\x32\x12.livekit.TrackInfo\x12\x15\n\ranalytics_key\x18\n \x01(\t\x12(\n\x0b\x63lient_info\x18\x0b \x01(\x0b\x32\x13.livekit.ClientInfo\x12\x31\n\x0b\x63lient_meta\x18\x0c \x01(\x0b\x32\x1c.livekit.AnalyticsClientMeta\x12\x11\n\tegress_id\x18\r \x01(\t\x12\x12\n\ningress_id\x18\x13 \x01(\t\x12;\n\x1cmax_subscribed_video_quality\x18\x0e \x01(\x0e\x32\x15.livekit.VideoQuality\x12+\n\tpublisher\x18\x0f \x01(\x0b\x32\x18.livekit.ParticipantInfo\x12\x0c\n\x04mime\x18\x10 \x01(\t\x12#\n\x06\x65gress\x18\x11 \x01(\x0b\x32\x13.livekit.EgressInfo\x12%\n\x07ingress\x18\x12 \x01(\x0b\x32\x14.livekit.IngressInfo\x12\r\n\x05\x65rror\x18\x14 \x01(\t\x12$\n\trtp_stats\x18\x15 \x01(\x0b\x32\x11.livekit.RTPStats\x12\x13\n\x0bvideo_layer\x18\x16 \x01(\x05\x12\x0f\n\x07node_id\x18\x18 \x01(\t\x12\x13\n\x0bsip_call_id\x18\x1a \x01(\t\x12&\n\x08sip_call\x18\x1b \x01(\x0b\x32\x14.livekit.SIPCallInfo\x12\x14\n\x0csip_trunk_id\x18\x1c \x01(\t\x12\x37\n\x11sip_inbound_trunk\x18\x1d \x01(\x0b\x32\x1c.livekit.SIPInboundTrunkInfo\x12\x39\n\x12sip_outbound_trunk\x18\x1e \x01(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfo\x12\x1c\n\x14sip_dispatch_rule_id\x18\x1f \x01(\t\x12\x37\n\x11sip_dispatch_rule\x18 \x01(\x0b\x32\x1c.livekit.SIPDispatchRuleInfo\":\n\x0f\x41nalyticsEvents\x12\'\n\x06\x65vents\x18\x01 \x03(\x0b\x32\x17.livekit.AnalyticsEvent\"\xa4\x01\n\x18\x41nalyticsRoomParticipant\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12-\n\x05state\x18\x04 \x01(\x0e\x32\x1e.livekit.ParticipantInfo.State\x12-\n\tjoined_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xa6\x01\n\rAnalyticsRoom\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x12\n\nproject_id\x18\x05 \x01(\t\x12.\n\ncreated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x37\n\x0cparticipants\x18\x04 \x03(\x0b\x32!.livekit.AnalyticsRoomParticipant\"\x94\x01\n\x12\x41nalyticsNodeRooms\x12\x0f\n\x07node_id\x18\x01 \x01(\t\x12\x17\n\x0fsequence_number\x18\x02 \x01(\x04\x12-\n\ttimestamp\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12%\n\x05rooms\x18\x04 \x03(\x0b\x32\x16.livekit.AnalyticsRoom**\n\nStreamType\x12\x0c\n\x08UPSTREAM\x10\x00\x12\x0e\n\nDOWNSTREAM\x10\x01*\xaf\x07\n\x12\x41nalyticsEventType\x12\x10\n\x0cROOM_CREATED\x10\x00\x12\x0e\n\nROOM_ENDED\x10\x01\x12\x16\n\x12PARTICIPANT_JOINED\x10\x02\x12\x14\n\x10PARTICIPANT_LEFT\x10\x03\x12\x13\n\x0fTRACK_PUBLISHED\x10\x04\x12\x1b\n\x17TRACK_PUBLISH_REQUESTED\x10\x14\x12\x15\n\x11TRACK_UNPUBLISHED\x10\x05\x12\x14\n\x10TRACK_SUBSCRIBED\x10\x06\x12\x1d\n\x19TRACK_SUBSCRIBE_REQUESTED\x10\x15\x12\x1a\n\x16TRACK_SUBSCRIBE_FAILED\x10\x19\x12\x16\n\x12TRACK_UNSUBSCRIBED\x10\x07\x12\x1a\n\x16TRACK_PUBLISHED_UPDATE\x10\n\x12\x0f\n\x0bTRACK_MUTED\x10\x17\x12\x11\n\rTRACK_UNMUTED\x10\x18\x12\x17\n\x13TRACK_PUBLISH_STATS\x10\x1a\x12\x19\n\x15TRACK_SUBSCRIBE_STATS\x10\x1b\x12\x16\n\x12PARTICIPANT_ACTIVE\x10\x0b\x12\x17\n\x13PARTICIPANT_RESUMED\x10\x16\x12\x12\n\x0e\x45GRESS_STARTED\x10\x0c\x12\x10\n\x0c\x45GRESS_ENDED\x10\r\x12\x12\n\x0e\x45GRESS_UPDATED\x10\x1c\x12&\n\"TRACK_MAX_SUBSCRIBED_VIDEO_QUALITY\x10\x0e\x12\x0f\n\x0bRECONNECTED\x10\x0f\x12\x13\n\x0fINGRESS_CREATED\x10\x12\x12\x13\n\x0fINGRESS_DELETED\x10\x13\x12\x13\n\x0fINGRESS_STARTED\x10\x10\x12\x11\n\rINGRESS_ENDED\x10\x11\x12\x13\n\x0fINGRESS_UPDATED\x10\x1d\x12\x1d\n\x19SIP_INBOUND_TRUNK_CREATED\x10\x1e\x12\x1d\n\x19SIP_INBOUND_TRUNK_DELETED\x10\x1f\x12\x1e\n\x1aSIP_OUTBOUND_TRUNK_CREATED\x10 \x12\x1e\n\x1aSIP_OUTBOUND_TRUNK_DELETED\x10!\x12\x1d\n\x19SIP_DISPATCH_RULE_CREATED\x10\"\x12\x1d\n\x19SIP_DISPATCH_RULE_DELETED\x10#\x12\x1b\n\x17SIP_PARTICIPANT_CREATED\x10$\x12\x15\n\x11SIP_CALL_INCOMING\x10%\x12\x14\n\x10SIP_CALL_STARTED\x10&\x12\x12\n\x0eSIP_CALL_ENDED\x10\'BFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -26,28 +27,28 @@ if _descriptor._USE_C_DESCRIPTORS == False: _globals['DESCRIPTOR']._options = None _globals['DESCRIPTOR']._serialized_options = b'Z#github.com/livekit/protocol/livekit\252\002\rLiveKit.Proto\352\002\016LiveKit::Proto' - _globals['_STREAMTYPE']._serialized_start=2625 - _globals['_STREAMTYPE']._serialized_end=2667 - _globals['_ANALYTICSEVENTTYPE']._serialized_start=2670 - _globals['_ANALYTICSEVENTTYPE']._serialized_end=3331 - _globals['_ANALYTICSVIDEOLAYER']._serialized_start=136 - _globals['_ANALYTICSVIDEOLAYER']._serialized_end=220 - _globals['_ANALYTICSSTREAM']._serialized_start=223 - _globals['_ANALYTICSSTREAM']._serialized_end=660 - _globals['_ANALYTICSSTAT']._serialized_start=663 - _globals['_ANALYTICSSTAT']._serialized_end=1001 - _globals['_ANALYTICSSTATS']._serialized_start=1003 - _globals['_ANALYTICSSTATS']._serialized_end=1058 - _globals['_ANALYTICSCLIENTMETA']._serialized_start=1061 - _globals['_ANALYTICSCLIENTMETA']._serialized_end=1343 - _globals['_ANALYTICSEVENT']._serialized_start=1346 - _globals['_ANALYTICSEVENT']._serialized_end=2076 - _globals['_ANALYTICSEVENTS']._serialized_start=2078 - _globals['_ANALYTICSEVENTS']._serialized_end=2136 - _globals['_ANALYTICSROOMPARTICIPANT']._serialized_start=2139 - _globals['_ANALYTICSROOMPARTICIPANT']._serialized_end=2303 - _globals['_ANALYTICSROOM']._serialized_start=2306 - _globals['_ANALYTICSROOM']._serialized_end=2472 - _globals['_ANALYTICSNODEROOMS']._serialized_start=2475 - _globals['_ANALYTICSNODEROOMS']._serialized_end=2623 + _globals['_STREAMTYPE']._serialized_start=2960 + _globals['_STREAMTYPE']._serialized_end=3002 + _globals['_ANALYTICSEVENTTYPE']._serialized_start=3005 + _globals['_ANALYTICSEVENTTYPE']._serialized_end=3948 + _globals['_ANALYTICSVIDEOLAYER']._serialized_start=155 + _globals['_ANALYTICSVIDEOLAYER']._serialized_end=239 + _globals['_ANALYTICSSTREAM']._serialized_start=242 + _globals['_ANALYTICSSTREAM']._serialized_end=709 + _globals['_ANALYTICSSTAT']._serialized_start=712 + _globals['_ANALYTICSSTAT']._serialized_end=1050 + _globals['_ANALYTICSSTATS']._serialized_start=1052 + _globals['_ANALYTICSSTATS']._serialized_end=1107 + _globals['_ANALYTICSCLIENTMETA']._serialized_start=1110 + _globals['_ANALYTICSCLIENTMETA']._serialized_end=1392 + _globals['_ANALYTICSEVENT']._serialized_start=1395 + _globals['_ANALYTICSEVENT']._serialized_end=2411 + _globals['_ANALYTICSEVENTS']._serialized_start=2413 + _globals['_ANALYTICSEVENTS']._serialized_end=2471 + _globals['_ANALYTICSROOMPARTICIPANT']._serialized_start=2474 + _globals['_ANALYTICSROOMPARTICIPANT']._serialized_end=2638 + _globals['_ANALYTICSROOM']._serialized_start=2641 + _globals['_ANALYTICSROOM']._serialized_end=2807 + _globals['_ANALYTICSNODEROOMS']._serialized_start=2810 + _globals['_ANALYTICSNODEROOMS']._serialized_end=2958 # @@protoc_insertion_point(module_scope) diff --git a/livekit-protocol/livekit/protocol/analytics.pyi b/livekit-protocol/livekit/protocol/analytics.pyi index 30cfbd50..a98bcb3f 100644 --- a/livekit-protocol/livekit/protocol/analytics.pyi +++ b/livekit-protocol/livekit/protocol/analytics.pyi @@ -2,6 +2,7 @@ from google.protobuf import timestamp_pb2 as _timestamp_pb2 from . import models as _models from . import egress as _egress from . import ingress as _ingress +from . import sip as _sip from google.protobuf.internal import containers as _containers from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper from google.protobuf import descriptor as _descriptor @@ -45,6 +46,16 @@ class AnalyticsEventType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): INGRESS_STARTED: _ClassVar[AnalyticsEventType] INGRESS_ENDED: _ClassVar[AnalyticsEventType] INGRESS_UPDATED: _ClassVar[AnalyticsEventType] + SIP_INBOUND_TRUNK_CREATED: _ClassVar[AnalyticsEventType] + SIP_INBOUND_TRUNK_DELETED: _ClassVar[AnalyticsEventType] + SIP_OUTBOUND_TRUNK_CREATED: _ClassVar[AnalyticsEventType] + SIP_OUTBOUND_TRUNK_DELETED: _ClassVar[AnalyticsEventType] + SIP_DISPATCH_RULE_CREATED: _ClassVar[AnalyticsEventType] + SIP_DISPATCH_RULE_DELETED: _ClassVar[AnalyticsEventType] + SIP_PARTICIPANT_CREATED: _ClassVar[AnalyticsEventType] + SIP_CALL_INCOMING: _ClassVar[AnalyticsEventType] + SIP_CALL_STARTED: _ClassVar[AnalyticsEventType] + SIP_CALL_ENDED: _ClassVar[AnalyticsEventType] UPSTREAM: StreamType DOWNSTREAM: StreamType ROOM_CREATED: AnalyticsEventType @@ -75,6 +86,16 @@ INGRESS_DELETED: AnalyticsEventType INGRESS_STARTED: AnalyticsEventType INGRESS_ENDED: AnalyticsEventType INGRESS_UPDATED: AnalyticsEventType +SIP_INBOUND_TRUNK_CREATED: AnalyticsEventType +SIP_INBOUND_TRUNK_DELETED: AnalyticsEventType +SIP_OUTBOUND_TRUNK_CREATED: AnalyticsEventType +SIP_OUTBOUND_TRUNK_DELETED: AnalyticsEventType +SIP_DISPATCH_RULE_CREATED: AnalyticsEventType +SIP_DISPATCH_RULE_DELETED: AnalyticsEventType +SIP_PARTICIPANT_CREATED: AnalyticsEventType +SIP_CALL_INCOMING: AnalyticsEventType +SIP_CALL_STARTED: AnalyticsEventType +SIP_CALL_ENDED: AnalyticsEventType class AnalyticsVideoLayer(_message.Message): __slots__ = ("layer", "packets", "bytes", "frames") @@ -89,7 +110,7 @@ class AnalyticsVideoLayer(_message.Message): def __init__(self, layer: _Optional[int] = ..., packets: _Optional[int] = ..., bytes: _Optional[int] = ..., frames: _Optional[int] = ...) -> None: ... class AnalyticsStream(_message.Message): - __slots__ = ("ssrc", "primary_packets", "primary_bytes", "retransmit_packets", "retransmit_bytes", "padding_packets", "padding_bytes", "packets_lost", "frames", "rtt", "jitter", "nacks", "plis", "firs", "video_layers", "start_time", "end_time") + __slots__ = ("ssrc", "primary_packets", "primary_bytes", "retransmit_packets", "retransmit_bytes", "padding_packets", "padding_bytes", "packets_lost", "frames", "rtt", "jitter", "nacks", "plis", "firs", "video_layers", "start_time", "end_time", "packets_out_of_order") SSRC_FIELD_NUMBER: _ClassVar[int] PRIMARY_PACKETS_FIELD_NUMBER: _ClassVar[int] PRIMARY_BYTES_FIELD_NUMBER: _ClassVar[int] @@ -107,6 +128,7 @@ class AnalyticsStream(_message.Message): VIDEO_LAYERS_FIELD_NUMBER: _ClassVar[int] START_TIME_FIELD_NUMBER: _ClassVar[int] END_TIME_FIELD_NUMBER: _ClassVar[int] + PACKETS_OUT_OF_ORDER_FIELD_NUMBER: _ClassVar[int] ssrc: int primary_packets: int primary_bytes: int @@ -124,7 +146,8 @@ class AnalyticsStream(_message.Message): video_layers: _containers.RepeatedCompositeFieldContainer[AnalyticsVideoLayer] start_time: _timestamp_pb2.Timestamp end_time: _timestamp_pb2.Timestamp - def __init__(self, ssrc: _Optional[int] = ..., primary_packets: _Optional[int] = ..., primary_bytes: _Optional[int] = ..., retransmit_packets: _Optional[int] = ..., retransmit_bytes: _Optional[int] = ..., padding_packets: _Optional[int] = ..., padding_bytes: _Optional[int] = ..., packets_lost: _Optional[int] = ..., frames: _Optional[int] = ..., rtt: _Optional[int] = ..., jitter: _Optional[int] = ..., nacks: _Optional[int] = ..., plis: _Optional[int] = ..., firs: _Optional[int] = ..., video_layers: _Optional[_Iterable[_Union[AnalyticsVideoLayer, _Mapping]]] = ..., start_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., end_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... + packets_out_of_order: int + def __init__(self, ssrc: _Optional[int] = ..., primary_packets: _Optional[int] = ..., primary_bytes: _Optional[int] = ..., retransmit_packets: _Optional[int] = ..., retransmit_bytes: _Optional[int] = ..., padding_packets: _Optional[int] = ..., padding_bytes: _Optional[int] = ..., packets_lost: _Optional[int] = ..., frames: _Optional[int] = ..., rtt: _Optional[int] = ..., jitter: _Optional[int] = ..., nacks: _Optional[int] = ..., plis: _Optional[int] = ..., firs: _Optional[int] = ..., video_layers: _Optional[_Iterable[_Union[AnalyticsVideoLayer, _Mapping]]] = ..., start_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., end_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., packets_out_of_order: _Optional[int] = ...) -> None: ... class AnalyticsStat(_message.Message): __slots__ = ("id", "analytics_key", "kind", "time_stamp", "node", "room_id", "room_name", "participant_id", "track_id", "score", "streams", "mime", "min_score", "median_score") @@ -187,7 +210,7 @@ class AnalyticsClientMeta(_message.Message): def __init__(self, region: _Optional[str] = ..., node: _Optional[str] = ..., client_addr: _Optional[str] = ..., client_connect_time: _Optional[int] = ..., connection_type: _Optional[str] = ..., reconnect_reason: _Optional[_Union[_models.ReconnectReason, str]] = ..., geo_hash: _Optional[str] = ..., country: _Optional[str] = ..., isp_asn: _Optional[int] = ...) -> None: ... class AnalyticsEvent(_message.Message): - __slots__ = ("id", "type", "timestamp", "room_id", "room", "participant_id", "participant", "track_id", "track", "analytics_key", "client_info", "client_meta", "egress_id", "ingress_id", "max_subscribed_video_quality", "publisher", "mime", "egress", "ingress", "error", "rtp_stats", "video_layer", "node_id") + __slots__ = ("id", "type", "timestamp", "room_id", "room", "participant_id", "participant", "track_id", "track", "analytics_key", "client_info", "client_meta", "egress_id", "ingress_id", "max_subscribed_video_quality", "publisher", "mime", "egress", "ingress", "error", "rtp_stats", "video_layer", "node_id", "sip_call_id", "sip_call", "sip_trunk_id", "sip_inbound_trunk", "sip_outbound_trunk", "sip_dispatch_rule_id", "sip_dispatch_rule") ID_FIELD_NUMBER: _ClassVar[int] TYPE_FIELD_NUMBER: _ClassVar[int] TIMESTAMP_FIELD_NUMBER: _ClassVar[int] @@ -211,6 +234,13 @@ class AnalyticsEvent(_message.Message): RTP_STATS_FIELD_NUMBER: _ClassVar[int] VIDEO_LAYER_FIELD_NUMBER: _ClassVar[int] NODE_ID_FIELD_NUMBER: _ClassVar[int] + SIP_CALL_ID_FIELD_NUMBER: _ClassVar[int] + SIP_CALL_FIELD_NUMBER: _ClassVar[int] + SIP_TRUNK_ID_FIELD_NUMBER: _ClassVar[int] + SIP_INBOUND_TRUNK_FIELD_NUMBER: _ClassVar[int] + SIP_OUTBOUND_TRUNK_FIELD_NUMBER: _ClassVar[int] + SIP_DISPATCH_RULE_ID_FIELD_NUMBER: _ClassVar[int] + SIP_DISPATCH_RULE_FIELD_NUMBER: _ClassVar[int] id: str type: AnalyticsEventType timestamp: _timestamp_pb2.Timestamp @@ -234,7 +264,14 @@ class AnalyticsEvent(_message.Message): rtp_stats: _models.RTPStats video_layer: int node_id: str - def __init__(self, id: _Optional[str] = ..., type: _Optional[_Union[AnalyticsEventType, str]] = ..., timestamp: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., room_id: _Optional[str] = ..., room: _Optional[_Union[_models.Room, _Mapping]] = ..., participant_id: _Optional[str] = ..., participant: _Optional[_Union[_models.ParticipantInfo, _Mapping]] = ..., track_id: _Optional[str] = ..., track: _Optional[_Union[_models.TrackInfo, _Mapping]] = ..., analytics_key: _Optional[str] = ..., client_info: _Optional[_Union[_models.ClientInfo, _Mapping]] = ..., client_meta: _Optional[_Union[AnalyticsClientMeta, _Mapping]] = ..., egress_id: _Optional[str] = ..., ingress_id: _Optional[str] = ..., max_subscribed_video_quality: _Optional[_Union[_models.VideoQuality, str]] = ..., publisher: _Optional[_Union[_models.ParticipantInfo, _Mapping]] = ..., mime: _Optional[str] = ..., egress: _Optional[_Union[_egress.EgressInfo, _Mapping]] = ..., ingress: _Optional[_Union[_ingress.IngressInfo, _Mapping]] = ..., error: _Optional[str] = ..., rtp_stats: _Optional[_Union[_models.RTPStats, _Mapping]] = ..., video_layer: _Optional[int] = ..., node_id: _Optional[str] = ...) -> None: ... + sip_call_id: str + sip_call: _sip.SIPCallInfo + sip_trunk_id: str + sip_inbound_trunk: _sip.SIPInboundTrunkInfo + sip_outbound_trunk: _sip.SIPOutboundTrunkInfo + sip_dispatch_rule_id: str + sip_dispatch_rule: _sip.SIPDispatchRuleInfo + def __init__(self, id: _Optional[str] = ..., type: _Optional[_Union[AnalyticsEventType, str]] = ..., timestamp: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., room_id: _Optional[str] = ..., room: _Optional[_Union[_models.Room, _Mapping]] = ..., participant_id: _Optional[str] = ..., participant: _Optional[_Union[_models.ParticipantInfo, _Mapping]] = ..., track_id: _Optional[str] = ..., track: _Optional[_Union[_models.TrackInfo, _Mapping]] = ..., analytics_key: _Optional[str] = ..., client_info: _Optional[_Union[_models.ClientInfo, _Mapping]] = ..., client_meta: _Optional[_Union[AnalyticsClientMeta, _Mapping]] = ..., egress_id: _Optional[str] = ..., ingress_id: _Optional[str] = ..., max_subscribed_video_quality: _Optional[_Union[_models.VideoQuality, str]] = ..., publisher: _Optional[_Union[_models.ParticipantInfo, _Mapping]] = ..., mime: _Optional[str] = ..., egress: _Optional[_Union[_egress.EgressInfo, _Mapping]] = ..., ingress: _Optional[_Union[_ingress.IngressInfo, _Mapping]] = ..., error: _Optional[str] = ..., rtp_stats: _Optional[_Union[_models.RTPStats, _Mapping]] = ..., video_layer: _Optional[int] = ..., node_id: _Optional[str] = ..., sip_call_id: _Optional[str] = ..., sip_call: _Optional[_Union[_sip.SIPCallInfo, _Mapping]] = ..., sip_trunk_id: _Optional[str] = ..., sip_inbound_trunk: _Optional[_Union[_sip.SIPInboundTrunkInfo, _Mapping]] = ..., sip_outbound_trunk: _Optional[_Union[_sip.SIPOutboundTrunkInfo, _Mapping]] = ..., sip_dispatch_rule_id: _Optional[str] = ..., sip_dispatch_rule: _Optional[_Union[_sip.SIPDispatchRuleInfo, _Mapping]] = ...) -> None: ... class AnalyticsEvents(_message.Message): __slots__ = ("events",) diff --git a/livekit-protocol/livekit/protocol/egress.py b/livekit-protocol/livekit/protocol/egress.py index 33cc66d1..e52ad1a9 100644 --- a/livekit-protocol/livekit/protocol/egress.py +++ b/livekit-protocol/livekit/protocol/egress.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: livekit_egress.proto -# Protobuf Python Version: 4.25.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -15,7 +15,7 @@ from . import models as _models_ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14livekit_egress.proto\x12\x07livekit\x1a\x14livekit_models.proto\"\xcd\x04\n\x1aRoomCompositeEgressRequest\x12\x11\n\troom_name\x18\x01 \x01(\t\x12\x0e\n\x06layout\x18\x02 \x01(\t\x12\x12\n\naudio_only\x18\x03 \x01(\x08\x12\x12\n\nvideo_only\x18\x04 \x01(\x08\x12\x17\n\x0f\x63ustom_base_url\x18\x05 \x01(\t\x12.\n\x04\x66ile\x18\x06 \x01(\x0b\x32\x1a.livekit.EncodedFileOutputB\x02\x18\x01H\x00\x12+\n\x06stream\x18\x07 \x01(\x0b\x32\x15.livekit.StreamOutputB\x02\x18\x01H\x00\x12\x34\n\x08segments\x18\n \x01(\x0b\x32\x1c.livekit.SegmentedFileOutputB\x02\x18\x01H\x00\x12\x30\n\x06preset\x18\x08 \x01(\x0e\x32\x1e.livekit.EncodingOptionsPresetH\x01\x12,\n\x08\x61\x64vanced\x18\t \x01(\x0b\x32\x18.livekit.EncodingOptionsH\x01\x12\x30\n\x0c\x66ile_outputs\x18\x0b \x03(\x0b\x32\x1a.livekit.EncodedFileOutput\x12-\n\x0estream_outputs\x18\x0c \x03(\x0b\x32\x15.livekit.StreamOutput\x12\x35\n\x0fsegment_outputs\x18\r \x03(\x0b\x32\x1c.livekit.SegmentedFileOutput\x12+\n\rimage_outputs\x18\x0e \x03(\x0b\x32\x14.livekit.ImageOutputB\x08\n\x06outputB\t\n\x07options\"\xb0\x04\n\x10WebEgressRequest\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x12\n\naudio_only\x18\x02 \x01(\x08\x12\x12\n\nvideo_only\x18\x03 \x01(\x08\x12\x1a\n\x12\x61wait_start_signal\x18\x0c \x01(\x08\x12.\n\x04\x66ile\x18\x04 \x01(\x0b\x32\x1a.livekit.EncodedFileOutputB\x02\x18\x01H\x00\x12+\n\x06stream\x18\x05 \x01(\x0b\x32\x15.livekit.StreamOutputB\x02\x18\x01H\x00\x12\x34\n\x08segments\x18\x06 \x01(\x0b\x32\x1c.livekit.SegmentedFileOutputB\x02\x18\x01H\x00\x12\x30\n\x06preset\x18\x07 \x01(\x0e\x32\x1e.livekit.EncodingOptionsPresetH\x01\x12,\n\x08\x61\x64vanced\x18\x08 \x01(\x0b\x32\x18.livekit.EncodingOptionsH\x01\x12\x30\n\x0c\x66ile_outputs\x18\t \x03(\x0b\x32\x1a.livekit.EncodedFileOutput\x12-\n\x0estream_outputs\x18\n \x03(\x0b\x32\x15.livekit.StreamOutput\x12\x35\n\x0fsegment_outputs\x18\x0b \x03(\x0b\x32\x1c.livekit.SegmentedFileOutput\x12+\n\rimage_outputs\x18\r \x03(\x0b\x32\x14.livekit.ImageOutputB\x08\n\x06outputB\t\n\x07options\"\x85\x03\n\x18ParticipantEgressRequest\x12\x11\n\troom_name\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12\x14\n\x0cscreen_share\x18\x03 \x01(\x08\x12\x30\n\x06preset\x18\x04 \x01(\x0e\x32\x1e.livekit.EncodingOptionsPresetH\x00\x12,\n\x08\x61\x64vanced\x18\x05 \x01(\x0b\x32\x18.livekit.EncodingOptionsH\x00\x12\x30\n\x0c\x66ile_outputs\x18\x06 \x03(\x0b\x32\x1a.livekit.EncodedFileOutput\x12-\n\x0estream_outputs\x18\x07 \x03(\x0b\x32\x15.livekit.StreamOutput\x12\x35\n\x0fsegment_outputs\x18\x08 \x03(\x0b\x32\x1c.livekit.SegmentedFileOutput\x12+\n\rimage_outputs\x18\t \x03(\x0b\x32\x14.livekit.ImageOutputB\t\n\x07options\"\xad\x04\n\x1bTrackCompositeEgressRequest\x12\x11\n\troom_name\x18\x01 \x01(\t\x12\x16\n\x0e\x61udio_track_id\x18\x02 \x01(\t\x12\x16\n\x0evideo_track_id\x18\x03 \x01(\t\x12.\n\x04\x66ile\x18\x04 \x01(\x0b\x32\x1a.livekit.EncodedFileOutputB\x02\x18\x01H\x00\x12+\n\x06stream\x18\x05 \x01(\x0b\x32\x15.livekit.StreamOutputB\x02\x18\x01H\x00\x12\x34\n\x08segments\x18\x08 \x01(\x0b\x32\x1c.livekit.SegmentedFileOutputB\x02\x18\x01H\x00\x12\x30\n\x06preset\x18\x06 \x01(\x0e\x32\x1e.livekit.EncodingOptionsPresetH\x01\x12,\n\x08\x61\x64vanced\x18\x07 \x01(\x0b\x32\x18.livekit.EncodingOptionsH\x01\x12\x30\n\x0c\x66ile_outputs\x18\x0b \x03(\x0b\x32\x1a.livekit.EncodedFileOutput\x12-\n\x0estream_outputs\x18\x0c \x03(\x0b\x32\x15.livekit.StreamOutput\x12\x35\n\x0fsegment_outputs\x18\r \x03(\x0b\x32\x1c.livekit.SegmentedFileOutput\x12+\n\rimage_outputs\x18\x0e \x03(\x0b\x32\x14.livekit.ImageOutputB\x08\n\x06outputB\t\n\x07options\"\x87\x01\n\x12TrackEgressRequest\x12\x11\n\troom_name\x18\x01 \x01(\t\x12\x10\n\x08track_id\x18\x02 \x01(\t\x12)\n\x04\x66ile\x18\x03 \x01(\x0b\x32\x19.livekit.DirectFileOutputH\x00\x12\x17\n\rwebsocket_url\x18\x04 \x01(\tH\x00\x42\x08\n\x06output\"\x8e\x02\n\x11\x45ncodedFileOutput\x12+\n\tfile_type\x18\x01 \x01(\x0e\x32\x18.livekit.EncodedFileType\x12\x10\n\x08\x66ilepath\x18\x02 \x01(\t\x12\x18\n\x10\x64isable_manifest\x18\x06 \x01(\x08\x12\x1f\n\x02s3\x18\x03 \x01(\x0b\x32\x11.livekit.S3UploadH\x00\x12!\n\x03gcp\x18\x04 \x01(\x0b\x32\x12.livekit.GCPUploadH\x00\x12)\n\x05\x61zure\x18\x05 \x01(\x0b\x32\x18.livekit.AzureBlobUploadH\x00\x12\'\n\x06\x61liOSS\x18\x07 \x01(\x0b\x32\x15.livekit.AliOSSUploadH\x00\x42\x08\n\x06output\"\xa0\x03\n\x13SegmentedFileOutput\x12\x30\n\x08protocol\x18\x01 \x01(\x0e\x32\x1e.livekit.SegmentedFileProtocol\x12\x17\n\x0f\x66ilename_prefix\x18\x02 \x01(\t\x12\x15\n\rplaylist_name\x18\x03 \x01(\t\x12\x1a\n\x12live_playlist_name\x18\x0b \x01(\t\x12\x18\n\x10segment_duration\x18\x04 \x01(\r\x12\x35\n\x0f\x66ilename_suffix\x18\n \x01(\x0e\x32\x1c.livekit.SegmentedFileSuffix\x12\x18\n\x10\x64isable_manifest\x18\x08 \x01(\x08\x12\x1f\n\x02s3\x18\x05 \x01(\x0b\x32\x11.livekit.S3UploadH\x00\x12!\n\x03gcp\x18\x06 \x01(\x0b\x32\x12.livekit.GCPUploadH\x00\x12)\n\x05\x61zure\x18\x07 \x01(\x0b\x32\x18.livekit.AzureBlobUploadH\x00\x12\'\n\x06\x61liOSS\x18\t \x01(\x0b\x32\x15.livekit.AliOSSUploadH\x00\x42\x08\n\x06output\"\xe0\x01\n\x10\x44irectFileOutput\x12\x10\n\x08\x66ilepath\x18\x01 \x01(\t\x12\x18\n\x10\x64isable_manifest\x18\x05 \x01(\x08\x12\x1f\n\x02s3\x18\x02 \x01(\x0b\x32\x11.livekit.S3UploadH\x00\x12!\n\x03gcp\x18\x03 \x01(\x0b\x32\x12.livekit.GCPUploadH\x00\x12)\n\x05\x61zure\x18\x04 \x01(\x0b\x32\x18.livekit.AzureBlobUploadH\x00\x12\'\n\x06\x61liOSS\x18\x06 \x01(\x0b\x32\x15.livekit.AliOSSUploadH\x00\x42\x08\n\x06output\"\xf8\x02\n\x0bImageOutput\x12\x18\n\x10\x63\x61pture_interval\x18\x01 \x01(\r\x12\r\n\x05width\x18\x02 \x01(\x05\x12\x0e\n\x06height\x18\x03 \x01(\x05\x12\x17\n\x0f\x66ilename_prefix\x18\x04 \x01(\t\x12\x31\n\x0f\x66ilename_suffix\x18\x05 \x01(\x0e\x32\x18.livekit.ImageFileSuffix\x12(\n\x0bimage_codec\x18\x06 \x01(\x0e\x32\x13.livekit.ImageCodec\x12\x18\n\x10\x64isable_manifest\x18\x07 \x01(\x08\x12\x1f\n\x02s3\x18\x08 \x01(\x0b\x32\x11.livekit.S3UploadH\x00\x12!\n\x03gcp\x18\t \x01(\x0b\x32\x12.livekit.GCPUploadH\x00\x12)\n\x05\x61zure\x18\n \x01(\x0b\x32\x18.livekit.AzureBlobUploadH\x00\x12\'\n\x06\x61liOSS\x18\x0b \x01(\x0b\x32\x15.livekit.AliOSSUploadH\x00\x42\x08\n\x06output\"\xc8\x02\n\x08S3Upload\x12\x12\n\naccess_key\x18\x01 \x01(\t\x12\x0e\n\x06secret\x18\x02 \x01(\t\x12\x15\n\rsession_token\x18\x0b \x01(\t\x12\x0e\n\x06region\x18\x03 \x01(\t\x12\x10\n\x08\x65ndpoint\x18\x04 \x01(\t\x12\x0e\n\x06\x62ucket\x18\x05 \x01(\t\x12\x18\n\x10\x66orce_path_style\x18\x06 \x01(\x08\x12\x31\n\x08metadata\x18\x07 \x03(\x0b\x32\x1f.livekit.S3Upload.MetadataEntry\x12\x0f\n\x07tagging\x18\x08 \x01(\t\x12\x1b\n\x13\x63ontent_disposition\x18\t \x01(\t\x12#\n\x05proxy\x18\n \x01(\x0b\x32\x14.livekit.ProxyConfig\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"U\n\tGCPUpload\x12\x13\n\x0b\x63redentials\x18\x01 \x01(\t\x12\x0e\n\x06\x62ucket\x18\x02 \x01(\t\x12#\n\x05proxy\x18\x03 \x01(\x0b\x32\x14.livekit.ProxyConfig\"T\n\x0f\x41zureBlobUpload\x12\x14\n\x0c\x61\x63\x63ount_name\x18\x01 \x01(\t\x12\x13\n\x0b\x61\x63\x63ount_key\x18\x02 \x01(\t\x12\x16\n\x0e\x63ontainer_name\x18\x03 \x01(\t\"d\n\x0c\x41liOSSUpload\x12\x12\n\naccess_key\x18\x01 \x01(\t\x12\x0e\n\x06secret\x18\x02 \x01(\t\x12\x0e\n\x06region\x18\x03 \x01(\t\x12\x10\n\x08\x65ndpoint\x18\x04 \x01(\t\x12\x0e\n\x06\x62ucket\x18\x05 \x01(\t\">\n\x0bProxyConfig\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x10\n\x08password\x18\x03 \x01(\t\"G\n\x0cStreamOutput\x12)\n\x08protocol\x18\x01 \x01(\x0e\x32\x17.livekit.StreamProtocol\x12\x0c\n\x04urls\x18\x02 \x03(\t\"\xb7\x02\n\x0f\x45ncodingOptions\x12\r\n\x05width\x18\x01 \x01(\x05\x12\x0e\n\x06height\x18\x02 \x01(\x05\x12\r\n\x05\x64\x65pth\x18\x03 \x01(\x05\x12\x11\n\tframerate\x18\x04 \x01(\x05\x12(\n\x0b\x61udio_codec\x18\x05 \x01(\x0e\x32\x13.livekit.AudioCodec\x12\x15\n\raudio_bitrate\x18\x06 \x01(\x05\x12\x15\n\raudio_quality\x18\x0b \x01(\x05\x12\x17\n\x0f\x61udio_frequency\x18\x07 \x01(\x05\x12(\n\x0bvideo_codec\x18\x08 \x01(\x0e\x32\x13.livekit.VideoCodec\x12\x15\n\rvideo_bitrate\x18\t \x01(\x05\x12\x15\n\rvideo_quality\x18\x0c \x01(\x05\x12\x1a\n\x12key_frame_interval\x18\n \x01(\x01\"8\n\x13UpdateLayoutRequest\x12\x11\n\tegress_id\x18\x01 \x01(\t\x12\x0e\n\x06layout\x18\x02 \x01(\t\"]\n\x13UpdateStreamRequest\x12\x11\n\tegress_id\x18\x01 \x01(\t\x12\x17\n\x0f\x61\x64\x64_output_urls\x18\x02 \x03(\t\x12\x1a\n\x12remove_output_urls\x18\x03 \x03(\t\"I\n\x11ListEgressRequest\x12\x11\n\troom_name\x18\x01 \x01(\t\x12\x11\n\tegress_id\x18\x02 \x01(\t\x12\x0e\n\x06\x61\x63tive\x18\x03 \x01(\x08\"8\n\x12ListEgressResponse\x12\"\n\x05items\x18\x01 \x03(\x0b\x32\x13.livekit.EgressInfo\"&\n\x11StopEgressRequest\x12\x11\n\tegress_id\x18\x01 \x01(\t\"\xb6\x06\n\nEgressInfo\x12\x11\n\tegress_id\x18\x01 \x01(\t\x12\x0f\n\x07room_id\x18\x02 \x01(\t\x12\x11\n\troom_name\x18\r \x01(\t\x12%\n\x06status\x18\x03 \x01(\x0e\x32\x15.livekit.EgressStatus\x12\x12\n\nstarted_at\x18\n \x01(\x03\x12\x10\n\x08\x65nded_at\x18\x0b \x01(\x03\x12\x12\n\nupdated_at\x18\x12 \x01(\x03\x12\x0f\n\x07\x64\x65tails\x18\x15 \x01(\t\x12\r\n\x05\x65rror\x18\t \x01(\t\x12\x12\n\nerror_code\x18\x16 \x01(\x05\x12=\n\x0eroom_composite\x18\x04 \x01(\x0b\x32#.livekit.RoomCompositeEgressRequestH\x00\x12(\n\x03web\x18\x0e \x01(\x0b\x32\x19.livekit.WebEgressRequestH\x00\x12\x38\n\x0bparticipant\x18\x13 \x01(\x0b\x32!.livekit.ParticipantEgressRequestH\x00\x12?\n\x0ftrack_composite\x18\x05 \x01(\x0b\x32$.livekit.TrackCompositeEgressRequestH\x00\x12,\n\x05track\x18\x06 \x01(\x0b\x32\x1b.livekit.TrackEgressRequestH\x00\x12-\n\x06stream\x18\x07 \x01(\x0b\x32\x17.livekit.StreamInfoListB\x02\x18\x01H\x01\x12%\n\x04\x66ile\x18\x08 \x01(\x0b\x32\x11.livekit.FileInfoB\x02\x18\x01H\x01\x12-\n\x08segments\x18\x0c \x01(\x0b\x32\x15.livekit.SegmentsInfoB\x02\x18\x01H\x01\x12+\n\x0estream_results\x18\x0f \x03(\x0b\x32\x13.livekit.StreamInfo\x12\'\n\x0c\x66ile_results\x18\x10 \x03(\x0b\x32\x11.livekit.FileInfo\x12.\n\x0fsegment_results\x18\x11 \x03(\x0b\x32\x15.livekit.SegmentsInfo\x12*\n\rimage_results\x18\x14 \x03(\x0b\x32\x13.livekit.ImagesInfoB\t\n\x07requestB\x08\n\x06result\"7\n\x0eStreamInfoList\x12!\n\x04info\x18\x01 \x03(\x0b\x32\x13.livekit.StreamInfo:\x02\x18\x01\"\xbc\x01\n\nStreamInfo\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x12\n\nstarted_at\x18\x02 \x01(\x03\x12\x10\n\x08\x65nded_at\x18\x03 \x01(\x03\x12\x10\n\x08\x64uration\x18\x04 \x01(\x03\x12*\n\x06status\x18\x05 \x01(\x0e\x32\x1a.livekit.StreamInfo.Status\x12\r\n\x05\x65rror\x18\x06 \x01(\t\".\n\x06Status\x12\n\n\x06\x41\x43TIVE\x10\x00\x12\x0c\n\x08\x46INISHED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\"t\n\x08\x46ileInfo\x12\x10\n\x08\x66ilename\x18\x01 \x01(\t\x12\x12\n\nstarted_at\x18\x02 \x01(\x03\x12\x10\n\x08\x65nded_at\x18\x03 \x01(\x03\x12\x10\n\x08\x64uration\x18\x06 \x01(\x03\x12\x0c\n\x04size\x18\x04 \x01(\x03\x12\x10\n\x08location\x18\x05 \x01(\t\"\xd9\x01\n\x0cSegmentsInfo\x12\x15\n\rplaylist_name\x18\x01 \x01(\t\x12\x1a\n\x12live_playlist_name\x18\x08 \x01(\t\x12\x10\n\x08\x64uration\x18\x02 \x01(\x03\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x19\n\x11playlist_location\x18\x04 \x01(\t\x12\x1e\n\x16live_playlist_location\x18\t \x01(\t\x12\x15\n\rsegment_count\x18\x05 \x01(\x03\x12\x12\n\nstarted_at\x18\x06 \x01(\x03\x12\x10\n\x08\x65nded_at\x18\x07 \x01(\x03\"`\n\nImagesInfo\x12\x17\n\x0f\x66ilename_prefix\x18\x04 \x01(\t\x12\x13\n\x0bimage_count\x18\x01 \x01(\x03\x12\x12\n\nstarted_at\x18\x02 \x01(\x03\x12\x10\n\x08\x65nded_at\x18\x03 \x01(\x03\"\xeb\x01\n\x15\x41utoParticipantEgress\x12\x30\n\x06preset\x18\x01 \x01(\x0e\x32\x1e.livekit.EncodingOptionsPresetH\x00\x12,\n\x08\x61\x64vanced\x18\x02 \x01(\x0b\x32\x18.livekit.EncodingOptionsH\x00\x12\x30\n\x0c\x66ile_outputs\x18\x03 \x03(\x0b\x32\x1a.livekit.EncodedFileOutput\x12\x35\n\x0fsegment_outputs\x18\x04 \x03(\x0b\x32\x1c.livekit.SegmentedFileOutputB\t\n\x07options\"\xdf\x01\n\x0f\x41utoTrackEgress\x12\x10\n\x08\x66ilepath\x18\x01 \x01(\t\x12\x18\n\x10\x64isable_manifest\x18\x05 \x01(\x08\x12\x1f\n\x02s3\x18\x02 \x01(\x0b\x32\x11.livekit.S3UploadH\x00\x12!\n\x03gcp\x18\x03 \x01(\x0b\x32\x12.livekit.GCPUploadH\x00\x12)\n\x05\x61zure\x18\x04 \x01(\x0b\x32\x18.livekit.AzureBlobUploadH\x00\x12\'\n\x06\x61liOSS\x18\x06 \x01(\x0b\x32\x15.livekit.AliOSSUploadH\x00\x42\x08\n\x06output*9\n\x0f\x45ncodedFileType\x12\x14\n\x10\x44\x45\x46\x41ULT_FILETYPE\x10\x00\x12\x07\n\x03MP4\x10\x01\x12\x07\n\x03OGG\x10\x02*N\n\x15SegmentedFileProtocol\x12#\n\x1f\x44\x45\x46\x41ULT_SEGMENTED_FILE_PROTOCOL\x10\x00\x12\x10\n\x0cHLS_PROTOCOL\x10\x01*/\n\x13SegmentedFileSuffix\x12\t\n\x05INDEX\x10\x00\x12\r\n\tTIMESTAMP\x10\x01*E\n\x0fImageFileSuffix\x12\x16\n\x12IMAGE_SUFFIX_INDEX\x10\x00\x12\x1a\n\x16IMAGE_SUFFIX_TIMESTAMP\x10\x01*9\n\x0eStreamProtocol\x12\x14\n\x10\x44\x45\x46\x41ULT_PROTOCOL\x10\x00\x12\x08\n\x04RTMP\x10\x01\x12\x07\n\x03SRT\x10\x02*\xcf\x01\n\x15\x45ncodingOptionsPreset\x12\x10\n\x0cH264_720P_30\x10\x00\x12\x10\n\x0cH264_720P_60\x10\x01\x12\x11\n\rH264_1080P_30\x10\x02\x12\x11\n\rH264_1080P_60\x10\x03\x12\x19\n\x15PORTRAIT_H264_720P_30\x10\x04\x12\x19\n\x15PORTRAIT_H264_720P_60\x10\x05\x12\x1a\n\x16PORTRAIT_H264_1080P_30\x10\x06\x12\x1a\n\x16PORTRAIT_H264_1080P_60\x10\x07*\x9f\x01\n\x0c\x45gressStatus\x12\x13\n\x0f\x45GRESS_STARTING\x10\x00\x12\x11\n\rEGRESS_ACTIVE\x10\x01\x12\x11\n\rEGRESS_ENDING\x10\x02\x12\x13\n\x0f\x45GRESS_COMPLETE\x10\x03\x12\x11\n\rEGRESS_FAILED\x10\x04\x12\x12\n\x0e\x45GRESS_ABORTED\x10\x05\x12\x18\n\x14\x45GRESS_LIMIT_REACHED\x10\x06\x32\x9c\x05\n\x06\x45gress\x12T\n\x18StartRoomCompositeEgress\x12#.livekit.RoomCompositeEgressRequest\x1a\x13.livekit.EgressInfo\x12@\n\x0eStartWebEgress\x12\x19.livekit.WebEgressRequest\x1a\x13.livekit.EgressInfo\x12P\n\x16StartParticipantEgress\x12!.livekit.ParticipantEgressRequest\x1a\x13.livekit.EgressInfo\x12V\n\x19StartTrackCompositeEgress\x12$.livekit.TrackCompositeEgressRequest\x1a\x13.livekit.EgressInfo\x12\x44\n\x10StartTrackEgress\x12\x1b.livekit.TrackEgressRequest\x1a\x13.livekit.EgressInfo\x12\x41\n\x0cUpdateLayout\x12\x1c.livekit.UpdateLayoutRequest\x1a\x13.livekit.EgressInfo\x12\x41\n\x0cUpdateStream\x12\x1c.livekit.UpdateStreamRequest\x1a\x13.livekit.EgressInfo\x12\x45\n\nListEgress\x12\x1a.livekit.ListEgressRequest\x1a\x1b.livekit.ListEgressResponse\x12=\n\nStopEgress\x12\x1a.livekit.StopEgressRequest\x1a\x13.livekit.EgressInfoBFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14livekit_egress.proto\x12\x07livekit\x1a\x14livekit_models.proto\"\xcd\x04\n\x1aRoomCompositeEgressRequest\x12\x11\n\troom_name\x18\x01 \x01(\t\x12\x0e\n\x06layout\x18\x02 \x01(\t\x12\x12\n\naudio_only\x18\x03 \x01(\x08\x12\x12\n\nvideo_only\x18\x04 \x01(\x08\x12\x17\n\x0f\x63ustom_base_url\x18\x05 \x01(\t\x12.\n\x04\x66ile\x18\x06 \x01(\x0b\x32\x1a.livekit.EncodedFileOutputB\x02\x18\x01H\x00\x12+\n\x06stream\x18\x07 \x01(\x0b\x32\x15.livekit.StreamOutputB\x02\x18\x01H\x00\x12\x34\n\x08segments\x18\n \x01(\x0b\x32\x1c.livekit.SegmentedFileOutputB\x02\x18\x01H\x00\x12\x30\n\x06preset\x18\x08 \x01(\x0e\x32\x1e.livekit.EncodingOptionsPresetH\x01\x12,\n\x08\x61\x64vanced\x18\t \x01(\x0b\x32\x18.livekit.EncodingOptionsH\x01\x12\x30\n\x0c\x66ile_outputs\x18\x0b \x03(\x0b\x32\x1a.livekit.EncodedFileOutput\x12-\n\x0estream_outputs\x18\x0c \x03(\x0b\x32\x15.livekit.StreamOutput\x12\x35\n\x0fsegment_outputs\x18\r \x03(\x0b\x32\x1c.livekit.SegmentedFileOutput\x12+\n\rimage_outputs\x18\x0e \x03(\x0b\x32\x14.livekit.ImageOutputB\x08\n\x06outputB\t\n\x07options\"\xb0\x04\n\x10WebEgressRequest\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x12\n\naudio_only\x18\x02 \x01(\x08\x12\x12\n\nvideo_only\x18\x03 \x01(\x08\x12\x1a\n\x12\x61wait_start_signal\x18\x0c \x01(\x08\x12.\n\x04\x66ile\x18\x04 \x01(\x0b\x32\x1a.livekit.EncodedFileOutputB\x02\x18\x01H\x00\x12+\n\x06stream\x18\x05 \x01(\x0b\x32\x15.livekit.StreamOutputB\x02\x18\x01H\x00\x12\x34\n\x08segments\x18\x06 \x01(\x0b\x32\x1c.livekit.SegmentedFileOutputB\x02\x18\x01H\x00\x12\x30\n\x06preset\x18\x07 \x01(\x0e\x32\x1e.livekit.EncodingOptionsPresetH\x01\x12,\n\x08\x61\x64vanced\x18\x08 \x01(\x0b\x32\x18.livekit.EncodingOptionsH\x01\x12\x30\n\x0c\x66ile_outputs\x18\t \x03(\x0b\x32\x1a.livekit.EncodedFileOutput\x12-\n\x0estream_outputs\x18\n \x03(\x0b\x32\x15.livekit.StreamOutput\x12\x35\n\x0fsegment_outputs\x18\x0b \x03(\x0b\x32\x1c.livekit.SegmentedFileOutput\x12+\n\rimage_outputs\x18\r \x03(\x0b\x32\x14.livekit.ImageOutputB\x08\n\x06outputB\t\n\x07options\"\x85\x03\n\x18ParticipantEgressRequest\x12\x11\n\troom_name\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12\x14\n\x0cscreen_share\x18\x03 \x01(\x08\x12\x30\n\x06preset\x18\x04 \x01(\x0e\x32\x1e.livekit.EncodingOptionsPresetH\x00\x12,\n\x08\x61\x64vanced\x18\x05 \x01(\x0b\x32\x18.livekit.EncodingOptionsH\x00\x12\x30\n\x0c\x66ile_outputs\x18\x06 \x03(\x0b\x32\x1a.livekit.EncodedFileOutput\x12-\n\x0estream_outputs\x18\x07 \x03(\x0b\x32\x15.livekit.StreamOutput\x12\x35\n\x0fsegment_outputs\x18\x08 \x03(\x0b\x32\x1c.livekit.SegmentedFileOutput\x12+\n\rimage_outputs\x18\t \x03(\x0b\x32\x14.livekit.ImageOutputB\t\n\x07options\"\xad\x04\n\x1bTrackCompositeEgressRequest\x12\x11\n\troom_name\x18\x01 \x01(\t\x12\x16\n\x0e\x61udio_track_id\x18\x02 \x01(\t\x12\x16\n\x0evideo_track_id\x18\x03 \x01(\t\x12.\n\x04\x66ile\x18\x04 \x01(\x0b\x32\x1a.livekit.EncodedFileOutputB\x02\x18\x01H\x00\x12+\n\x06stream\x18\x05 \x01(\x0b\x32\x15.livekit.StreamOutputB\x02\x18\x01H\x00\x12\x34\n\x08segments\x18\x08 \x01(\x0b\x32\x1c.livekit.SegmentedFileOutputB\x02\x18\x01H\x00\x12\x30\n\x06preset\x18\x06 \x01(\x0e\x32\x1e.livekit.EncodingOptionsPresetH\x01\x12,\n\x08\x61\x64vanced\x18\x07 \x01(\x0b\x32\x18.livekit.EncodingOptionsH\x01\x12\x30\n\x0c\x66ile_outputs\x18\x0b \x03(\x0b\x32\x1a.livekit.EncodedFileOutput\x12-\n\x0estream_outputs\x18\x0c \x03(\x0b\x32\x15.livekit.StreamOutput\x12\x35\n\x0fsegment_outputs\x18\r \x03(\x0b\x32\x1c.livekit.SegmentedFileOutput\x12+\n\rimage_outputs\x18\x0e \x03(\x0b\x32\x14.livekit.ImageOutputB\x08\n\x06outputB\t\n\x07options\"\x87\x01\n\x12TrackEgressRequest\x12\x11\n\troom_name\x18\x01 \x01(\t\x12\x10\n\x08track_id\x18\x02 \x01(\t\x12)\n\x04\x66ile\x18\x03 \x01(\x0b\x32\x19.livekit.DirectFileOutputH\x00\x12\x17\n\rwebsocket_url\x18\x04 \x01(\tH\x00\x42\x08\n\x06output\"\x8e\x02\n\x11\x45ncodedFileOutput\x12+\n\tfile_type\x18\x01 \x01(\x0e\x32\x18.livekit.EncodedFileType\x12\x10\n\x08\x66ilepath\x18\x02 \x01(\t\x12\x18\n\x10\x64isable_manifest\x18\x06 \x01(\x08\x12\x1f\n\x02s3\x18\x03 \x01(\x0b\x32\x11.livekit.S3UploadH\x00\x12!\n\x03gcp\x18\x04 \x01(\x0b\x32\x12.livekit.GCPUploadH\x00\x12)\n\x05\x61zure\x18\x05 \x01(\x0b\x32\x18.livekit.AzureBlobUploadH\x00\x12\'\n\x06\x61liOSS\x18\x07 \x01(\x0b\x32\x15.livekit.AliOSSUploadH\x00\x42\x08\n\x06output\"\xa0\x03\n\x13SegmentedFileOutput\x12\x30\n\x08protocol\x18\x01 \x01(\x0e\x32\x1e.livekit.SegmentedFileProtocol\x12\x17\n\x0f\x66ilename_prefix\x18\x02 \x01(\t\x12\x15\n\rplaylist_name\x18\x03 \x01(\t\x12\x1a\n\x12live_playlist_name\x18\x0b \x01(\t\x12\x18\n\x10segment_duration\x18\x04 \x01(\r\x12\x35\n\x0f\x66ilename_suffix\x18\n \x01(\x0e\x32\x1c.livekit.SegmentedFileSuffix\x12\x18\n\x10\x64isable_manifest\x18\x08 \x01(\x08\x12\x1f\n\x02s3\x18\x05 \x01(\x0b\x32\x11.livekit.S3UploadH\x00\x12!\n\x03gcp\x18\x06 \x01(\x0b\x32\x12.livekit.GCPUploadH\x00\x12)\n\x05\x61zure\x18\x07 \x01(\x0b\x32\x18.livekit.AzureBlobUploadH\x00\x12\'\n\x06\x61liOSS\x18\t \x01(\x0b\x32\x15.livekit.AliOSSUploadH\x00\x42\x08\n\x06output\"\xe0\x01\n\x10\x44irectFileOutput\x12\x10\n\x08\x66ilepath\x18\x01 \x01(\t\x12\x18\n\x10\x64isable_manifest\x18\x05 \x01(\x08\x12\x1f\n\x02s3\x18\x02 \x01(\x0b\x32\x11.livekit.S3UploadH\x00\x12!\n\x03gcp\x18\x03 \x01(\x0b\x32\x12.livekit.GCPUploadH\x00\x12)\n\x05\x61zure\x18\x04 \x01(\x0b\x32\x18.livekit.AzureBlobUploadH\x00\x12\'\n\x06\x61liOSS\x18\x06 \x01(\x0b\x32\x15.livekit.AliOSSUploadH\x00\x42\x08\n\x06output\"\xf8\x02\n\x0bImageOutput\x12\x18\n\x10\x63\x61pture_interval\x18\x01 \x01(\r\x12\r\n\x05width\x18\x02 \x01(\x05\x12\x0e\n\x06height\x18\x03 \x01(\x05\x12\x17\n\x0f\x66ilename_prefix\x18\x04 \x01(\t\x12\x31\n\x0f\x66ilename_suffix\x18\x05 \x01(\x0e\x32\x18.livekit.ImageFileSuffix\x12(\n\x0bimage_codec\x18\x06 \x01(\x0e\x32\x13.livekit.ImageCodec\x12\x18\n\x10\x64isable_manifest\x18\x07 \x01(\x08\x12\x1f\n\x02s3\x18\x08 \x01(\x0b\x32\x11.livekit.S3UploadH\x00\x12!\n\x03gcp\x18\t \x01(\x0b\x32\x12.livekit.GCPUploadH\x00\x12)\n\x05\x61zure\x18\n \x01(\x0b\x32\x18.livekit.AzureBlobUploadH\x00\x12\'\n\x06\x61liOSS\x18\x0b \x01(\x0b\x32\x15.livekit.AliOSSUploadH\x00\x42\x08\n\x06output\"\xc8\x02\n\x08S3Upload\x12\x12\n\naccess_key\x18\x01 \x01(\t\x12\x0e\n\x06secret\x18\x02 \x01(\t\x12\x15\n\rsession_token\x18\x0b \x01(\t\x12\x0e\n\x06region\x18\x03 \x01(\t\x12\x10\n\x08\x65ndpoint\x18\x04 \x01(\t\x12\x0e\n\x06\x62ucket\x18\x05 \x01(\t\x12\x18\n\x10\x66orce_path_style\x18\x06 \x01(\x08\x12\x31\n\x08metadata\x18\x07 \x03(\x0b\x32\x1f.livekit.S3Upload.MetadataEntry\x12\x0f\n\x07tagging\x18\x08 \x01(\t\x12\x1b\n\x13\x63ontent_disposition\x18\t \x01(\t\x12#\n\x05proxy\x18\n \x01(\x0b\x32\x14.livekit.ProxyConfig\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"U\n\tGCPUpload\x12\x13\n\x0b\x63redentials\x18\x01 \x01(\t\x12\x0e\n\x06\x62ucket\x18\x02 \x01(\t\x12#\n\x05proxy\x18\x03 \x01(\x0b\x32\x14.livekit.ProxyConfig\"T\n\x0f\x41zureBlobUpload\x12\x14\n\x0c\x61\x63\x63ount_name\x18\x01 \x01(\t\x12\x13\n\x0b\x61\x63\x63ount_key\x18\x02 \x01(\t\x12\x16\n\x0e\x63ontainer_name\x18\x03 \x01(\t\"d\n\x0c\x41liOSSUpload\x12\x12\n\naccess_key\x18\x01 \x01(\t\x12\x0e\n\x06secret\x18\x02 \x01(\t\x12\x0e\n\x06region\x18\x03 \x01(\t\x12\x10\n\x08\x65ndpoint\x18\x04 \x01(\t\x12\x0e\n\x06\x62ucket\x18\x05 \x01(\t\">\n\x0bProxyConfig\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x10\n\x08password\x18\x03 \x01(\t\"G\n\x0cStreamOutput\x12)\n\x08protocol\x18\x01 \x01(\x0e\x32\x17.livekit.StreamProtocol\x12\x0c\n\x04urls\x18\x02 \x03(\t\"\xb7\x02\n\x0f\x45ncodingOptions\x12\r\n\x05width\x18\x01 \x01(\x05\x12\x0e\n\x06height\x18\x02 \x01(\x05\x12\r\n\x05\x64\x65pth\x18\x03 \x01(\x05\x12\x11\n\tframerate\x18\x04 \x01(\x05\x12(\n\x0b\x61udio_codec\x18\x05 \x01(\x0e\x32\x13.livekit.AudioCodec\x12\x15\n\raudio_bitrate\x18\x06 \x01(\x05\x12\x15\n\raudio_quality\x18\x0b \x01(\x05\x12\x17\n\x0f\x61udio_frequency\x18\x07 \x01(\x05\x12(\n\x0bvideo_codec\x18\x08 \x01(\x0e\x32\x13.livekit.VideoCodec\x12\x15\n\rvideo_bitrate\x18\t \x01(\x05\x12\x15\n\rvideo_quality\x18\x0c \x01(\x05\x12\x1a\n\x12key_frame_interval\x18\n \x01(\x01\"8\n\x13UpdateLayoutRequest\x12\x11\n\tegress_id\x18\x01 \x01(\t\x12\x0e\n\x06layout\x18\x02 \x01(\t\"]\n\x13UpdateStreamRequest\x12\x11\n\tegress_id\x18\x01 \x01(\t\x12\x17\n\x0f\x61\x64\x64_output_urls\x18\x02 \x03(\t\x12\x1a\n\x12remove_output_urls\x18\x03 \x03(\t\"I\n\x11ListEgressRequest\x12\x11\n\troom_name\x18\x01 \x01(\t\x12\x11\n\tegress_id\x18\x02 \x01(\t\x12\x0e\n\x06\x61\x63tive\x18\x03 \x01(\x08\"8\n\x12ListEgressResponse\x12\"\n\x05items\x18\x01 \x03(\x0b\x32\x13.livekit.EgressInfo\"&\n\x11StopEgressRequest\x12\x11\n\tegress_id\x18\x01 \x01(\t\"\xf1\x06\n\nEgressInfo\x12\x11\n\tegress_id\x18\x01 \x01(\t\x12\x0f\n\x07room_id\x18\x02 \x01(\t\x12\x11\n\troom_name\x18\r \x01(\t\x12%\n\x06status\x18\x03 \x01(\x0e\x32\x15.livekit.EgressStatus\x12\x12\n\nstarted_at\x18\n \x01(\x03\x12\x10\n\x08\x65nded_at\x18\x0b \x01(\x03\x12\x12\n\nupdated_at\x18\x12 \x01(\x03\x12\x0f\n\x07\x64\x65tails\x18\x15 \x01(\t\x12\r\n\x05\x65rror\x18\t \x01(\t\x12\x12\n\nerror_code\x18\x16 \x01(\x05\x12=\n\x0eroom_composite\x18\x04 \x01(\x0b\x32#.livekit.RoomCompositeEgressRequestH\x00\x12(\n\x03web\x18\x0e \x01(\x0b\x32\x19.livekit.WebEgressRequestH\x00\x12\x38\n\x0bparticipant\x18\x13 \x01(\x0b\x32!.livekit.ParticipantEgressRequestH\x00\x12?\n\x0ftrack_composite\x18\x05 \x01(\x0b\x32$.livekit.TrackCompositeEgressRequestH\x00\x12,\n\x05track\x18\x06 \x01(\x0b\x32\x1b.livekit.TrackEgressRequestH\x00\x12-\n\x06stream\x18\x07 \x01(\x0b\x32\x17.livekit.StreamInfoListB\x02\x18\x01H\x01\x12%\n\x04\x66ile\x18\x08 \x01(\x0b\x32\x11.livekit.FileInfoB\x02\x18\x01H\x01\x12-\n\x08segments\x18\x0c \x01(\x0b\x32\x15.livekit.SegmentsInfoB\x02\x18\x01H\x01\x12+\n\x0estream_results\x18\x0f \x03(\x0b\x32\x13.livekit.StreamInfo\x12\'\n\x0c\x66ile_results\x18\x10 \x03(\x0b\x32\x11.livekit.FileInfo\x12.\n\x0fsegment_results\x18\x11 \x03(\x0b\x32\x15.livekit.SegmentsInfo\x12*\n\rimage_results\x18\x14 \x03(\x0b\x32\x13.livekit.ImagesInfo\x12\x19\n\x11manifest_location\x18\x17 \x01(\t\x12\x1e\n\x16manifest_presigned_url\x18\x18 \x01(\tB\t\n\x07requestB\x08\n\x06result\"7\n\x0eStreamInfoList\x12!\n\x04info\x18\x01 \x03(\x0b\x32\x13.livekit.StreamInfo:\x02\x18\x01\"\xbc\x01\n\nStreamInfo\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x12\n\nstarted_at\x18\x02 \x01(\x03\x12\x10\n\x08\x65nded_at\x18\x03 \x01(\x03\x12\x10\n\x08\x64uration\x18\x04 \x01(\x03\x12*\n\x06status\x18\x05 \x01(\x0e\x32\x1a.livekit.StreamInfo.Status\x12\r\n\x05\x65rror\x18\x06 \x01(\t\".\n\x06Status\x12\n\n\x06\x41\x43TIVE\x10\x00\x12\x0c\n\x08\x46INISHED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\"t\n\x08\x46ileInfo\x12\x10\n\x08\x66ilename\x18\x01 \x01(\t\x12\x12\n\nstarted_at\x18\x02 \x01(\x03\x12\x10\n\x08\x65nded_at\x18\x03 \x01(\x03\x12\x10\n\x08\x64uration\x18\x06 \x01(\x03\x12\x0c\n\x04size\x18\x04 \x01(\x03\x12\x10\n\x08location\x18\x05 \x01(\t\"\xd9\x01\n\x0cSegmentsInfo\x12\x15\n\rplaylist_name\x18\x01 \x01(\t\x12\x1a\n\x12live_playlist_name\x18\x08 \x01(\t\x12\x10\n\x08\x64uration\x18\x02 \x01(\x03\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x19\n\x11playlist_location\x18\x04 \x01(\t\x12\x1e\n\x16live_playlist_location\x18\t \x01(\t\x12\x15\n\rsegment_count\x18\x05 \x01(\x03\x12\x12\n\nstarted_at\x18\x06 \x01(\x03\x12\x10\n\x08\x65nded_at\x18\x07 \x01(\x03\"`\n\nImagesInfo\x12\x17\n\x0f\x66ilename_prefix\x18\x04 \x01(\t\x12\x13\n\x0bimage_count\x18\x01 \x01(\x03\x12\x12\n\nstarted_at\x18\x02 \x01(\x03\x12\x10\n\x08\x65nded_at\x18\x03 \x01(\x03\"\xeb\x01\n\x15\x41utoParticipantEgress\x12\x30\n\x06preset\x18\x01 \x01(\x0e\x32\x1e.livekit.EncodingOptionsPresetH\x00\x12,\n\x08\x61\x64vanced\x18\x02 \x01(\x0b\x32\x18.livekit.EncodingOptionsH\x00\x12\x30\n\x0c\x66ile_outputs\x18\x03 \x03(\x0b\x32\x1a.livekit.EncodedFileOutput\x12\x35\n\x0fsegment_outputs\x18\x04 \x03(\x0b\x32\x1c.livekit.SegmentedFileOutputB\t\n\x07options\"\xdf\x01\n\x0f\x41utoTrackEgress\x12\x10\n\x08\x66ilepath\x18\x01 \x01(\t\x12\x18\n\x10\x64isable_manifest\x18\x05 \x01(\x08\x12\x1f\n\x02s3\x18\x02 \x01(\x0b\x32\x11.livekit.S3UploadH\x00\x12!\n\x03gcp\x18\x03 \x01(\x0b\x32\x12.livekit.GCPUploadH\x00\x12)\n\x05\x61zure\x18\x04 \x01(\x0b\x32\x18.livekit.AzureBlobUploadH\x00\x12\'\n\x06\x61liOSS\x18\x06 \x01(\x0b\x32\x15.livekit.AliOSSUploadH\x00\x42\x08\n\x06output*9\n\x0f\x45ncodedFileType\x12\x14\n\x10\x44\x45\x46\x41ULT_FILETYPE\x10\x00\x12\x07\n\x03MP4\x10\x01\x12\x07\n\x03OGG\x10\x02*N\n\x15SegmentedFileProtocol\x12#\n\x1f\x44\x45\x46\x41ULT_SEGMENTED_FILE_PROTOCOL\x10\x00\x12\x10\n\x0cHLS_PROTOCOL\x10\x01*/\n\x13SegmentedFileSuffix\x12\t\n\x05INDEX\x10\x00\x12\r\n\tTIMESTAMP\x10\x01*E\n\x0fImageFileSuffix\x12\x16\n\x12IMAGE_SUFFIX_INDEX\x10\x00\x12\x1a\n\x16IMAGE_SUFFIX_TIMESTAMP\x10\x01*9\n\x0eStreamProtocol\x12\x14\n\x10\x44\x45\x46\x41ULT_PROTOCOL\x10\x00\x12\x08\n\x04RTMP\x10\x01\x12\x07\n\x03SRT\x10\x02*\xcf\x01\n\x15\x45ncodingOptionsPreset\x12\x10\n\x0cH264_720P_30\x10\x00\x12\x10\n\x0cH264_720P_60\x10\x01\x12\x11\n\rH264_1080P_30\x10\x02\x12\x11\n\rH264_1080P_60\x10\x03\x12\x19\n\x15PORTRAIT_H264_720P_30\x10\x04\x12\x19\n\x15PORTRAIT_H264_720P_60\x10\x05\x12\x1a\n\x16PORTRAIT_H264_1080P_30\x10\x06\x12\x1a\n\x16PORTRAIT_H264_1080P_60\x10\x07*\x9f\x01\n\x0c\x45gressStatus\x12\x13\n\x0f\x45GRESS_STARTING\x10\x00\x12\x11\n\rEGRESS_ACTIVE\x10\x01\x12\x11\n\rEGRESS_ENDING\x10\x02\x12\x13\n\x0f\x45GRESS_COMPLETE\x10\x03\x12\x11\n\rEGRESS_FAILED\x10\x04\x12\x12\n\x0e\x45GRESS_ABORTED\x10\x05\x12\x18\n\x14\x45GRESS_LIMIT_REACHED\x10\x06\x32\x9c\x05\n\x06\x45gress\x12T\n\x18StartRoomCompositeEgress\x12#.livekit.RoomCompositeEgressRequest\x1a\x13.livekit.EgressInfo\x12@\n\x0eStartWebEgress\x12\x19.livekit.WebEgressRequest\x1a\x13.livekit.EgressInfo\x12P\n\x16StartParticipantEgress\x12!.livekit.ParticipantEgressRequest\x1a\x13.livekit.EgressInfo\x12V\n\x19StartTrackCompositeEgress\x12$.livekit.TrackCompositeEgressRequest\x1a\x13.livekit.EgressInfo\x12\x44\n\x10StartTrackEgress\x12\x1b.livekit.TrackEgressRequest\x1a\x13.livekit.EgressInfo\x12\x41\n\x0cUpdateLayout\x12\x1c.livekit.UpdateLayoutRequest\x1a\x13.livekit.EgressInfo\x12\x41\n\x0cUpdateStream\x12\x1c.livekit.UpdateStreamRequest\x1a\x13.livekit.EgressInfo\x12\x45\n\nListEgress\x12\x1a.livekit.ListEgressRequest\x1a\x1b.livekit.ListEgressResponse\x12=\n\nStopEgress\x12\x1a.livekit.StopEgressRequest\x1a\x13.livekit.EgressInfoBFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -51,20 +51,20 @@ _globals['_EGRESSINFO'].fields_by_name['segments']._serialized_options = b'\030\001' _globals['_STREAMINFOLIST']._options = None _globals['_STREAMINFOLIST']._serialized_options = b'\030\001' - _globals['_ENCODEDFILETYPE']._serialized_start=6954 - _globals['_ENCODEDFILETYPE']._serialized_end=7011 - _globals['_SEGMENTEDFILEPROTOCOL']._serialized_start=7013 - _globals['_SEGMENTEDFILEPROTOCOL']._serialized_end=7091 - _globals['_SEGMENTEDFILESUFFIX']._serialized_start=7093 - _globals['_SEGMENTEDFILESUFFIX']._serialized_end=7140 - _globals['_IMAGEFILESUFFIX']._serialized_start=7142 - _globals['_IMAGEFILESUFFIX']._serialized_end=7211 - _globals['_STREAMPROTOCOL']._serialized_start=7213 - _globals['_STREAMPROTOCOL']._serialized_end=7270 - _globals['_ENCODINGOPTIONSPRESET']._serialized_start=7273 - _globals['_ENCODINGOPTIONSPRESET']._serialized_end=7480 - _globals['_EGRESSSTATUS']._serialized_start=7483 - _globals['_EGRESSSTATUS']._serialized_end=7642 + _globals['_ENCODEDFILETYPE']._serialized_start=7013 + _globals['_ENCODEDFILETYPE']._serialized_end=7070 + _globals['_SEGMENTEDFILEPROTOCOL']._serialized_start=7072 + _globals['_SEGMENTEDFILEPROTOCOL']._serialized_end=7150 + _globals['_SEGMENTEDFILESUFFIX']._serialized_start=7152 + _globals['_SEGMENTEDFILESUFFIX']._serialized_end=7199 + _globals['_IMAGEFILESUFFIX']._serialized_start=7201 + _globals['_IMAGEFILESUFFIX']._serialized_end=7270 + _globals['_STREAMPROTOCOL']._serialized_start=7272 + _globals['_STREAMPROTOCOL']._serialized_end=7329 + _globals['_ENCODINGOPTIONSPRESET']._serialized_start=7332 + _globals['_ENCODINGOPTIONSPRESET']._serialized_end=7539 + _globals['_EGRESSSTATUS']._serialized_start=7542 + _globals['_EGRESSSTATUS']._serialized_end=7701 _globals['_ROOMCOMPOSITEEGRESSREQUEST']._serialized_start=56 _globals['_ROOMCOMPOSITEEGRESSREQUEST']._serialized_end=645 _globals['_WEBEGRESSREQUEST']._serialized_start=648 @@ -110,23 +110,23 @@ _globals['_STOPEGRESSREQUEST']._serialized_start=4941 _globals['_STOPEGRESSREQUEST']._serialized_end=4979 _globals['_EGRESSINFO']._serialized_start=4982 - _globals['_EGRESSINFO']._serialized_end=5804 - _globals['_STREAMINFOLIST']._serialized_start=5806 - _globals['_STREAMINFOLIST']._serialized_end=5861 - _globals['_STREAMINFO']._serialized_start=5864 - _globals['_STREAMINFO']._serialized_end=6052 - _globals['_STREAMINFO_STATUS']._serialized_start=6006 - _globals['_STREAMINFO_STATUS']._serialized_end=6052 - _globals['_FILEINFO']._serialized_start=6054 - _globals['_FILEINFO']._serialized_end=6170 - _globals['_SEGMENTSINFO']._serialized_start=6173 - _globals['_SEGMENTSINFO']._serialized_end=6390 - _globals['_IMAGESINFO']._serialized_start=6392 - _globals['_IMAGESINFO']._serialized_end=6488 - _globals['_AUTOPARTICIPANTEGRESS']._serialized_start=6491 - _globals['_AUTOPARTICIPANTEGRESS']._serialized_end=6726 - _globals['_AUTOTRACKEGRESS']._serialized_start=6729 - _globals['_AUTOTRACKEGRESS']._serialized_end=6952 - _globals['_EGRESS']._serialized_start=7645 - _globals['_EGRESS']._serialized_end=8313 + _globals['_EGRESSINFO']._serialized_end=5863 + _globals['_STREAMINFOLIST']._serialized_start=5865 + _globals['_STREAMINFOLIST']._serialized_end=5920 + _globals['_STREAMINFO']._serialized_start=5923 + _globals['_STREAMINFO']._serialized_end=6111 + _globals['_STREAMINFO_STATUS']._serialized_start=6065 + _globals['_STREAMINFO_STATUS']._serialized_end=6111 + _globals['_FILEINFO']._serialized_start=6113 + _globals['_FILEINFO']._serialized_end=6229 + _globals['_SEGMENTSINFO']._serialized_start=6232 + _globals['_SEGMENTSINFO']._serialized_end=6449 + _globals['_IMAGESINFO']._serialized_start=6451 + _globals['_IMAGESINFO']._serialized_end=6547 + _globals['_AUTOPARTICIPANTEGRESS']._serialized_start=6550 + _globals['_AUTOPARTICIPANTEGRESS']._serialized_end=6785 + _globals['_AUTOTRACKEGRESS']._serialized_start=6788 + _globals['_AUTOTRACKEGRESS']._serialized_end=7011 + _globals['_EGRESS']._serialized_start=7704 + _globals['_EGRESS']._serialized_end=8372 # @@protoc_insertion_point(module_scope) diff --git a/livekit-protocol/livekit/protocol/egress.pyi b/livekit-protocol/livekit/protocol/egress.pyi index ef4aa14f..bacd7abb 100644 --- a/livekit-protocol/livekit/protocol/egress.pyi +++ b/livekit-protocol/livekit/protocol/egress.pyi @@ -446,7 +446,7 @@ class StopEgressRequest(_message.Message): def __init__(self, egress_id: _Optional[str] = ...) -> None: ... class EgressInfo(_message.Message): - __slots__ = ("egress_id", "room_id", "room_name", "status", "started_at", "ended_at", "updated_at", "details", "error", "error_code", "room_composite", "web", "participant", "track_composite", "track", "stream", "file", "segments", "stream_results", "file_results", "segment_results", "image_results") + __slots__ = ("egress_id", "room_id", "room_name", "status", "started_at", "ended_at", "updated_at", "details", "error", "error_code", "room_composite", "web", "participant", "track_composite", "track", "stream", "file", "segments", "stream_results", "file_results", "segment_results", "image_results", "manifest_location", "manifest_presigned_url") EGRESS_ID_FIELD_NUMBER: _ClassVar[int] ROOM_ID_FIELD_NUMBER: _ClassVar[int] ROOM_NAME_FIELD_NUMBER: _ClassVar[int] @@ -469,6 +469,8 @@ class EgressInfo(_message.Message): FILE_RESULTS_FIELD_NUMBER: _ClassVar[int] SEGMENT_RESULTS_FIELD_NUMBER: _ClassVar[int] IMAGE_RESULTS_FIELD_NUMBER: _ClassVar[int] + MANIFEST_LOCATION_FIELD_NUMBER: _ClassVar[int] + MANIFEST_PRESIGNED_URL_FIELD_NUMBER: _ClassVar[int] egress_id: str room_id: str room_name: str @@ -491,7 +493,9 @@ class EgressInfo(_message.Message): file_results: _containers.RepeatedCompositeFieldContainer[FileInfo] segment_results: _containers.RepeatedCompositeFieldContainer[SegmentsInfo] image_results: _containers.RepeatedCompositeFieldContainer[ImagesInfo] - def __init__(self, egress_id: _Optional[str] = ..., room_id: _Optional[str] = ..., room_name: _Optional[str] = ..., status: _Optional[_Union[EgressStatus, str]] = ..., started_at: _Optional[int] = ..., ended_at: _Optional[int] = ..., updated_at: _Optional[int] = ..., details: _Optional[str] = ..., error: _Optional[str] = ..., error_code: _Optional[int] = ..., room_composite: _Optional[_Union[RoomCompositeEgressRequest, _Mapping]] = ..., web: _Optional[_Union[WebEgressRequest, _Mapping]] = ..., participant: _Optional[_Union[ParticipantEgressRequest, _Mapping]] = ..., track_composite: _Optional[_Union[TrackCompositeEgressRequest, _Mapping]] = ..., track: _Optional[_Union[TrackEgressRequest, _Mapping]] = ..., stream: _Optional[_Union[StreamInfoList, _Mapping]] = ..., file: _Optional[_Union[FileInfo, _Mapping]] = ..., segments: _Optional[_Union[SegmentsInfo, _Mapping]] = ..., stream_results: _Optional[_Iterable[_Union[StreamInfo, _Mapping]]] = ..., file_results: _Optional[_Iterable[_Union[FileInfo, _Mapping]]] = ..., segment_results: _Optional[_Iterable[_Union[SegmentsInfo, _Mapping]]] = ..., image_results: _Optional[_Iterable[_Union[ImagesInfo, _Mapping]]] = ...) -> None: ... + manifest_location: str + manifest_presigned_url: str + def __init__(self, egress_id: _Optional[str] = ..., room_id: _Optional[str] = ..., room_name: _Optional[str] = ..., status: _Optional[_Union[EgressStatus, str]] = ..., started_at: _Optional[int] = ..., ended_at: _Optional[int] = ..., updated_at: _Optional[int] = ..., details: _Optional[str] = ..., error: _Optional[str] = ..., error_code: _Optional[int] = ..., room_composite: _Optional[_Union[RoomCompositeEgressRequest, _Mapping]] = ..., web: _Optional[_Union[WebEgressRequest, _Mapping]] = ..., participant: _Optional[_Union[ParticipantEgressRequest, _Mapping]] = ..., track_composite: _Optional[_Union[TrackCompositeEgressRequest, _Mapping]] = ..., track: _Optional[_Union[TrackEgressRequest, _Mapping]] = ..., stream: _Optional[_Union[StreamInfoList, _Mapping]] = ..., file: _Optional[_Union[FileInfo, _Mapping]] = ..., segments: _Optional[_Union[SegmentsInfo, _Mapping]] = ..., stream_results: _Optional[_Iterable[_Union[StreamInfo, _Mapping]]] = ..., file_results: _Optional[_Iterable[_Union[FileInfo, _Mapping]]] = ..., segment_results: _Optional[_Iterable[_Union[SegmentsInfo, _Mapping]]] = ..., image_results: _Optional[_Iterable[_Union[ImagesInfo, _Mapping]]] = ..., manifest_location: _Optional[str] = ..., manifest_presigned_url: _Optional[str] = ...) -> None: ... class StreamInfoList(_message.Message): __slots__ = ("info",) diff --git a/livekit-protocol/livekit/protocol/ingress.py b/livekit-protocol/livekit/protocol/ingress.py index 7e29ad86..39b41713 100644 --- a/livekit-protocol/livekit/protocol/ingress.py +++ b/livekit-protocol/livekit/protocol/ingress.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: livekit_ingress.proto -# Protobuf Python Version: 4.25.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool diff --git a/livekit-protocol/livekit/protocol/metrics.py b/livekit-protocol/livekit/protocol/metrics.py new file mode 100644 index 00000000..9807cd2c --- /dev/null +++ b/livekit-protocol/livekit/protocol/metrics.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: livekit_metrics.proto +# Protobuf Python Version: 4.25.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15livekit_metrics.proto\x12\x07livekit\x1a\x1fgoogle/protobuf/timestamp.proto\"\xc6\x01\n\x0cMetricsBatch\x12\x14\n\x0ctimestamp_ms\x18\x01 \x01(\x03\x12\x38\n\x14normalized_timestamp\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x10\n\x08str_data\x18\x03 \x03(\t\x12.\n\x0btime_series\x18\x04 \x03(\x0b\x32\x19.livekit.TimeSeriesMetric\x12$\n\x06\x65vents\x18\x05 \x03(\x0b\x32\x14.livekit.EventMetric\"\x87\x01\n\x10TimeSeriesMetric\x12\r\n\x05label\x18\x01 \x01(\r\x12\x1c\n\x14participant_identity\x18\x02 \x01(\r\x12\x11\n\ttrack_sid\x18\x03 \x01(\r\x12&\n\x07samples\x18\x04 \x03(\x0b\x32\x15.livekit.MetricSample\x12\x0b\n\x03rid\x18\x05 \x01(\r\"m\n\x0cMetricSample\x12\x14\n\x0ctimestamp_ms\x18\x01 \x01(\x03\x12\x38\n\x14normalized_timestamp\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\r\n\x05value\x18\x03 \x01(\x02\"\xdc\x02\n\x0b\x45ventMetric\x12\r\n\x05label\x18\x01 \x01(\r\x12\x1c\n\x14participant_identity\x18\x02 \x01(\r\x12\x11\n\ttrack_sid\x18\x03 \x01(\r\x12\x1a\n\x12start_timestamp_ms\x18\x04 \x01(\x03\x12\x1d\n\x10\x65nd_timestamp_ms\x18\x05 \x01(\x03H\x00\x88\x01\x01\x12>\n\x1anormalized_start_timestamp\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x41\n\x18normalized_end_timestamp\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01\x88\x01\x01\x12\x10\n\x08metadata\x18\x08 \x01(\t\x12\x0b\n\x03rid\x18\t \x01(\rB\x13\n\x11_end_timestamp_msB\x1b\n\x19_normalized_end_timestamp*\xc5\x06\n\x0bMetricLabel\x12\x13\n\x0f\x41GENTS_LLM_TTFT\x10\x00\x12\x13\n\x0f\x41GENTS_STT_TTFT\x10\x01\x12\x13\n\x0f\x41GENTS_TTS_TTFB\x10\x02\x12(\n$CLIENT_VIDEO_SUBSCRIBER_FREEZE_COUNT\x10\x03\x12\x31\n-CLIENT_VIDEO_SUBSCRIBER_TOTAL_FREEZE_DURATION\x10\x04\x12\'\n#CLIENT_VIDEO_SUBSCRIBER_PAUSE_COUNT\x10\x05\x12\x31\n-CLIENT_VIDEO_SUBSCRIBER_TOTAL_PAUSES_DURATION\x10\x06\x12-\n)CLIENT_AUDIO_SUBSCRIBER_CONCEALED_SAMPLES\x10\x07\x12\x34\n0CLIENT_AUDIO_SUBSCRIBER_SILENT_CONCEALED_SAMPLES\x10\x08\x12.\n*CLIENT_AUDIO_SUBSCRIBER_CONCEALMENT_EVENTS\x10\t\x12.\n*CLIENT_AUDIO_SUBSCRIBER_INTERRUPTION_COUNT\x10\n\x12\x37\n3CLIENT_AUDIO_SUBSCRIBER_TOTAL_INTERRUPTION_DURATION\x10\x0b\x12)\n%CLIENT_SUBSCRIBER_JITTER_BUFFER_DELAY\x10\x0c\x12\x31\n-CLIENT_SUBSCRIBER_JITTER_BUFFER_EMITTED_COUNT\x10\r\x12@\n None: ... + +class TimeSeriesMetric(_message.Message): + __slots__ = ("label", "participant_identity", "track_sid", "samples", "rid") + LABEL_FIELD_NUMBER: _ClassVar[int] + PARTICIPANT_IDENTITY_FIELD_NUMBER: _ClassVar[int] + TRACK_SID_FIELD_NUMBER: _ClassVar[int] + SAMPLES_FIELD_NUMBER: _ClassVar[int] + RID_FIELD_NUMBER: _ClassVar[int] + label: int + participant_identity: int + track_sid: int + samples: _containers.RepeatedCompositeFieldContainer[MetricSample] + rid: int + def __init__(self, label: _Optional[int] = ..., participant_identity: _Optional[int] = ..., track_sid: _Optional[int] = ..., samples: _Optional[_Iterable[_Union[MetricSample, _Mapping]]] = ..., rid: _Optional[int] = ...) -> None: ... + +class MetricSample(_message.Message): + __slots__ = ("timestamp_ms", "normalized_timestamp", "value") + TIMESTAMP_MS_FIELD_NUMBER: _ClassVar[int] + NORMALIZED_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + timestamp_ms: int + normalized_timestamp: _timestamp_pb2.Timestamp + value: float + def __init__(self, timestamp_ms: _Optional[int] = ..., normalized_timestamp: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., value: _Optional[float] = ...) -> None: ... + +class EventMetric(_message.Message): + __slots__ = ("label", "participant_identity", "track_sid", "start_timestamp_ms", "end_timestamp_ms", "normalized_start_timestamp", "normalized_end_timestamp", "metadata", "rid") + LABEL_FIELD_NUMBER: _ClassVar[int] + PARTICIPANT_IDENTITY_FIELD_NUMBER: _ClassVar[int] + TRACK_SID_FIELD_NUMBER: _ClassVar[int] + START_TIMESTAMP_MS_FIELD_NUMBER: _ClassVar[int] + END_TIMESTAMP_MS_FIELD_NUMBER: _ClassVar[int] + NORMALIZED_START_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + NORMALIZED_END_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + METADATA_FIELD_NUMBER: _ClassVar[int] + RID_FIELD_NUMBER: _ClassVar[int] + label: int + participant_identity: int + track_sid: int + start_timestamp_ms: int + end_timestamp_ms: int + normalized_start_timestamp: _timestamp_pb2.Timestamp + normalized_end_timestamp: _timestamp_pb2.Timestamp + metadata: str + rid: int + def __init__(self, label: _Optional[int] = ..., participant_identity: _Optional[int] = ..., track_sid: _Optional[int] = ..., start_timestamp_ms: _Optional[int] = ..., end_timestamp_ms: _Optional[int] = ..., normalized_start_timestamp: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., normalized_end_timestamp: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., metadata: _Optional[str] = ..., rid: _Optional[int] = ...) -> None: ... diff --git a/livekit-protocol/livekit/protocol/models.py b/livekit-protocol/livekit/protocol/models.py index 5c46fcb6..8c370fea 100644 --- a/livekit-protocol/livekit/protocol/models.py +++ b/livekit-protocol/livekit/protocol/models.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: livekit_models.proto -# Protobuf Python Version: 4.25.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -13,9 +13,10 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from . import metrics as _metrics_ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14livekit_models.proto\x12\x07livekit\x1a\x1fgoogle/protobuf/timestamp.proto\"\xc9\x02\n\x04Room\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x15\n\rempty_timeout\x18\x03 \x01(\r\x12\x19\n\x11\x64\x65parture_timeout\x18\x0e \x01(\r\x12\x18\n\x10max_participants\x18\x04 \x01(\r\x12\x15\n\rcreation_time\x18\x05 \x01(\x03\x12\x15\n\rturn_password\x18\x06 \x01(\t\x12&\n\x0e\x65nabled_codecs\x18\x07 \x03(\x0b\x32\x0e.livekit.Codec\x12\x10\n\x08metadata\x18\x08 \x01(\t\x12\x18\n\x10num_participants\x18\t \x01(\r\x12\x16\n\x0enum_publishers\x18\x0b \x01(\r\x12\x18\n\x10\x61\x63tive_recording\x18\n \x01(\x08\x12&\n\x07version\x18\r \x01(\x0b\x32\x15.livekit.TimedVersion\"(\n\x05\x43odec\x12\x0c\n\x04mime\x18\x01 \x01(\t\x12\x11\n\tfmtp_line\x18\x02 \x01(\t\"9\n\x0cPlayoutDelay\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0b\n\x03min\x18\x02 \x01(\r\x12\x0b\n\x03max\x18\x03 \x01(\r\"\xe6\x01\n\x15ParticipantPermission\x12\x15\n\rcan_subscribe\x18\x01 \x01(\x08\x12\x13\n\x0b\x63\x61n_publish\x18\x02 \x01(\x08\x12\x18\n\x10\x63\x61n_publish_data\x18\x03 \x01(\x08\x12\x31\n\x13\x63\x61n_publish_sources\x18\t \x03(\x0e\x32\x14.livekit.TrackSource\x12\x0e\n\x06hidden\x18\x07 \x01(\x08\x12\x14\n\x08recorder\x18\x08 \x01(\x08\x42\x02\x18\x01\x12\x1b\n\x13\x63\x61n_update_metadata\x18\n \x01(\x08\x12\x11\n\x05\x61gent\x18\x0b \x01(\x08\x42\x02\x18\x01\"\xf8\x04\n\x0fParticipantInfo\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12-\n\x05state\x18\x03 \x01(\x0e\x32\x1e.livekit.ParticipantInfo.State\x12\"\n\x06tracks\x18\x04 \x03(\x0b\x32\x12.livekit.TrackInfo\x12\x10\n\x08metadata\x18\x05 \x01(\t\x12\x11\n\tjoined_at\x18\x06 \x01(\x03\x12\x0c\n\x04name\x18\t \x01(\t\x12\x0f\n\x07version\x18\n \x01(\r\x12\x32\n\npermission\x18\x0b \x01(\x0b\x32\x1e.livekit.ParticipantPermission\x12\x0e\n\x06region\x18\x0c \x01(\t\x12\x14\n\x0cis_publisher\x18\r \x01(\x08\x12+\n\x04kind\x18\x0e \x01(\x0e\x32\x1d.livekit.ParticipantInfo.Kind\x12<\n\nattributes\x18\x0f \x03(\x0b\x32(.livekit.ParticipantInfo.AttributesEntry\x12\x34\n\x11\x64isconnect_reason\x18\x10 \x01(\x0e\x32\x19.livekit.DisconnectReason\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\">\n\x05State\x12\x0b\n\x07JOINING\x10\x00\x12\n\n\x06JOINED\x10\x01\x12\n\n\x06\x41\x43TIVE\x10\x02\x12\x10\n\x0c\x44ISCONNECTED\x10\x03\"A\n\x04Kind\x12\x0c\n\x08STANDARD\x10\x00\x12\x0b\n\x07INGRESS\x10\x01\x12\n\n\x06\x45GRESS\x10\x02\x12\x07\n\x03SIP\x10\x03\x12\t\n\x05\x41GENT\x10\x04\"3\n\nEncryption\"%\n\x04Type\x12\x08\n\x04NONE\x10\x00\x12\x07\n\x03GCM\x10\x01\x12\n\n\x06\x43USTOM\x10\x02\"f\n\x12SimulcastCodecInfo\x12\x11\n\tmime_type\x18\x01 \x01(\t\x12\x0b\n\x03mid\x18\x02 \x01(\t\x12\x0b\n\x03\x63id\x18\x03 \x01(\t\x12#\n\x06layers\x18\x04 \x03(\x0b\x32\x13.livekit.VideoLayer\"\xf5\x03\n\tTrackInfo\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12 \n\x04type\x18\x02 \x01(\x0e\x32\x12.livekit.TrackType\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\r\n\x05muted\x18\x04 \x01(\x08\x12\r\n\x05width\x18\x05 \x01(\r\x12\x0e\n\x06height\x18\x06 \x01(\r\x12\x11\n\tsimulcast\x18\x07 \x01(\x08\x12\x13\n\x0b\x64isable_dtx\x18\x08 \x01(\x08\x12$\n\x06source\x18\t \x01(\x0e\x32\x14.livekit.TrackSource\x12#\n\x06layers\x18\n \x03(\x0b\x32\x13.livekit.VideoLayer\x12\x11\n\tmime_type\x18\x0b \x01(\t\x12\x0b\n\x03mid\x18\x0c \x01(\t\x12+\n\x06\x63odecs\x18\r \x03(\x0b\x32\x1b.livekit.SimulcastCodecInfo\x12\x0e\n\x06stereo\x18\x0e \x01(\x08\x12\x13\n\x0b\x64isable_red\x18\x0f \x01(\x08\x12,\n\nencryption\x18\x10 \x01(\x0e\x32\x18.livekit.Encryption.Type\x12\x0e\n\x06stream\x18\x11 \x01(\t\x12&\n\x07version\x18\x12 \x01(\x0b\x32\x15.livekit.TimedVersion\x12\x32\n\x0e\x61udio_features\x18\x13 \x03(\x0e\x32\x1a.livekit.AudioTrackFeature\"r\n\nVideoLayer\x12&\n\x07quality\x18\x01 \x01(\x0e\x32\x15.livekit.VideoQuality\x12\r\n\x05width\x18\x02 \x01(\r\x12\x0e\n\x06height\x18\x03 \x01(\r\x12\x0f\n\x07\x62itrate\x18\x04 \x01(\r\x12\x0c\n\x04ssrc\x18\x05 \x01(\r\"\xd1\x02\n\nDataPacket\x12*\n\x04kind\x18\x01 \x01(\x0e\x32\x18.livekit.DataPacket.KindB\x02\x18\x01\x12\x1c\n\x14participant_identity\x18\x04 \x01(\t\x12\x1e\n\x16\x64\x65stination_identities\x18\x05 \x03(\t\x12#\n\x04user\x18\x02 \x01(\x0b\x32\x13.livekit.UserPacketH\x00\x12\x33\n\x07speaker\x18\x03 \x01(\x0b\x32\x1c.livekit.ActiveSpeakerUpdateB\x02\x18\x01H\x00\x12$\n\x08sip_dtmf\x18\x06 \x01(\x0b\x32\x10.livekit.SipDTMFH\x00\x12/\n\rtranscription\x18\x07 \x01(\x0b\x32\x16.livekit.TranscriptionH\x00\"\x1f\n\x04Kind\x12\x0c\n\x08RELIABLE\x10\x00\x12\t\n\x05LOSSY\x10\x01\x42\x07\n\x05value\"=\n\x13\x41\x63tiveSpeakerUpdate\x12&\n\x08speakers\x18\x01 \x03(\x0b\x32\x14.livekit.SpeakerInfo\"9\n\x0bSpeakerInfo\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12\r\n\x05level\x18\x02 \x01(\x02\x12\x0e\n\x06\x61\x63tive\x18\x03 \x01(\x08\"\xa0\x02\n\nUserPacket\x12\x1b\n\x0fparticipant_sid\x18\x01 \x01(\tB\x02\x18\x01\x12 \n\x14participant_identity\x18\x05 \x01(\tB\x02\x18\x01\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12\x1c\n\x10\x64\x65stination_sids\x18\x03 \x03(\tB\x02\x18\x01\x12\"\n\x16\x64\x65stination_identities\x18\x06 \x03(\tB\x02\x18\x01\x12\x12\n\x05topic\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02id\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nstart_time\x18\t \x01(\x04H\x02\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\n \x01(\x04H\x03\x88\x01\x01\x42\x08\n\x06_topicB\x05\n\x03_idB\r\n\x0b_start_timeB\x0b\n\t_end_time\"&\n\x07SipDTMF\x12\x0c\n\x04\x63ode\x18\x03 \x01(\r\x12\r\n\x05\x64igit\x18\x04 \x01(\t\"|\n\rTranscription\x12(\n transcribed_participant_identity\x18\x02 \x01(\t\x12\x10\n\x08track_id\x18\x03 \x01(\t\x12/\n\x08segments\x18\x04 \x03(\x0b\x32\x1d.livekit.TranscriptionSegment\"w\n\x14TranscriptionSegment\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\x12\n\nstart_time\x18\x03 \x01(\x04\x12\x10\n\x08\x65nd_time\x18\x04 \x01(\x04\x12\r\n\x05\x66inal\x18\x05 \x01(\x08\x12\x10\n\x08language\x18\x06 \x01(\t\"@\n\x11ParticipantTracks\x12\x17\n\x0fparticipant_sid\x18\x01 \x01(\t\x12\x12\n\ntrack_sids\x18\x02 \x03(\t\"\xce\x01\n\nServerInfo\x12,\n\x07\x65\x64ition\x18\x01 \x01(\x0e\x32\x1b.livekit.ServerInfo.Edition\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x10\n\x08protocol\x18\x03 \x01(\x05\x12\x0e\n\x06region\x18\x04 \x01(\t\x12\x0f\n\x07node_id\x18\x05 \x01(\t\x12\x12\n\ndebug_info\x18\x06 \x01(\t\x12\x16\n\x0e\x61gent_protocol\x18\x07 \x01(\x05\"\"\n\x07\x45\x64ition\x12\x0c\n\x08Standard\x10\x00\x12\t\n\x05\x43loud\x10\x01\"\xdd\x02\n\nClientInfo\x12$\n\x03sdk\x18\x01 \x01(\x0e\x32\x17.livekit.ClientInfo.SDK\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x10\n\x08protocol\x18\x03 \x01(\x05\x12\n\n\x02os\x18\x04 \x01(\t\x12\x12\n\nos_version\x18\x05 \x01(\t\x12\x14\n\x0c\x64\x65vice_model\x18\x06 \x01(\t\x12\x0f\n\x07\x62rowser\x18\x07 \x01(\t\x12\x17\n\x0f\x62rowser_version\x18\x08 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\t \x01(\t\x12\x0f\n\x07network\x18\n \x01(\t\"\x83\x01\n\x03SDK\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x06\n\x02JS\x10\x01\x12\t\n\x05SWIFT\x10\x02\x12\x0b\n\x07\x41NDROID\x10\x03\x12\x0b\n\x07\x46LUTTER\x10\x04\x12\x06\n\x02GO\x10\x05\x12\t\n\x05UNITY\x10\x06\x12\x10\n\x0cREACT_NATIVE\x10\x07\x12\x08\n\x04RUST\x10\x08\x12\n\n\x06PYTHON\x10\t\x12\x07\n\x03\x43PP\x10\n\"\x8c\x02\n\x13\x43lientConfiguration\x12*\n\x05video\x18\x01 \x01(\x0b\x32\x1b.livekit.VideoConfiguration\x12+\n\x06screen\x18\x02 \x01(\x0b\x32\x1b.livekit.VideoConfiguration\x12\x37\n\x11resume_connection\x18\x03 \x01(\x0e\x32\x1c.livekit.ClientConfigSetting\x12\x30\n\x0f\x64isabled_codecs\x18\x04 \x01(\x0b\x32\x17.livekit.DisabledCodecs\x12\x31\n\x0b\x66orce_relay\x18\x05 \x01(\x0e\x32\x1c.livekit.ClientConfigSetting\"L\n\x12VideoConfiguration\x12\x36\n\x10hardware_encoder\x18\x01 \x01(\x0e\x32\x1c.livekit.ClientConfigSetting\"Q\n\x0e\x44isabledCodecs\x12\x1e\n\x06\x63odecs\x18\x01 \x03(\x0b\x32\x0e.livekit.Codec\x12\x1f\n\x07publish\x18\x02 \x03(\x0b\x32\x0e.livekit.Codec\"\x80\x02\n\x08RTPDrift\x12.\n\nstart_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x10\n\x08\x64uration\x18\x03 \x01(\x01\x12\x17\n\x0fstart_timestamp\x18\x04 \x01(\x04\x12\x15\n\rend_timestamp\x18\x05 \x01(\x04\x12\x17\n\x0frtp_clock_ticks\x18\x06 \x01(\x04\x12\x15\n\rdrift_samples\x18\x07 \x01(\x03\x12\x10\n\x08\x64rift_ms\x18\x08 \x01(\x01\x12\x12\n\nclock_rate\x18\t \x01(\x01\"\xa0\n\n\x08RTPStats\x12.\n\nstart_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x10\n\x08\x64uration\x18\x03 \x01(\x01\x12\x0f\n\x07packets\x18\x04 \x01(\r\x12\x13\n\x0bpacket_rate\x18\x05 \x01(\x01\x12\r\n\x05\x62ytes\x18\x06 \x01(\x04\x12\x14\n\x0cheader_bytes\x18\' \x01(\x04\x12\x0f\n\x07\x62itrate\x18\x07 \x01(\x01\x12\x14\n\x0cpackets_lost\x18\x08 \x01(\r\x12\x18\n\x10packet_loss_rate\x18\t \x01(\x01\x12\x1e\n\x16packet_loss_percentage\x18\n \x01(\x02\x12\x19\n\x11packets_duplicate\x18\x0b \x01(\r\x12\x1d\n\x15packet_duplicate_rate\x18\x0c \x01(\x01\x12\x17\n\x0f\x62ytes_duplicate\x18\r \x01(\x04\x12\x1e\n\x16header_bytes_duplicate\x18( \x01(\x04\x12\x19\n\x11\x62itrate_duplicate\x18\x0e \x01(\x01\x12\x17\n\x0fpackets_padding\x18\x0f \x01(\r\x12\x1b\n\x13packet_padding_rate\x18\x10 \x01(\x01\x12\x15\n\rbytes_padding\x18\x11 \x01(\x04\x12\x1c\n\x14header_bytes_padding\x18) \x01(\x04\x12\x17\n\x0f\x62itrate_padding\x18\x12 \x01(\x01\x12\x1c\n\x14packets_out_of_order\x18\x13 \x01(\r\x12\x0e\n\x06\x66rames\x18\x14 \x01(\r\x12\x12\n\nframe_rate\x18\x15 \x01(\x01\x12\x16\n\x0ejitter_current\x18\x16 \x01(\x01\x12\x12\n\njitter_max\x18\x17 \x01(\x01\x12:\n\rgap_histogram\x18\x18 \x03(\x0b\x32#.livekit.RTPStats.GapHistogramEntry\x12\r\n\x05nacks\x18\x19 \x01(\r\x12\x11\n\tnack_acks\x18% \x01(\r\x12\x13\n\x0bnack_misses\x18\x1a \x01(\r\x12\x15\n\rnack_repeated\x18& \x01(\r\x12\x0c\n\x04plis\x18\x1b \x01(\r\x12,\n\x08last_pli\x18\x1c \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0c\n\x04\x66irs\x18\x1d \x01(\r\x12,\n\x08last_fir\x18\x1e \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x13\n\x0brtt_current\x18\x1f \x01(\r\x12\x0f\n\x07rtt_max\x18 \x01(\r\x12\x12\n\nkey_frames\x18! \x01(\r\x12\x32\n\x0elast_key_frame\x18\" \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x17\n\x0flayer_lock_plis\x18# \x01(\r\x12\x37\n\x13last_layer_lock_pli\x18$ \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\'\n\x0cpacket_drift\x18, \x01(\x0b\x32\x11.livekit.RTPDrift\x12\'\n\x0creport_drift\x18- \x01(\x0b\x32\x11.livekit.RTPDrift\x12/\n\x14rebased_report_drift\x18. \x01(\x0b\x32\x11.livekit.RTPDrift\x1a\x33\n\x11GapHistogramEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"\x8c\x02\n\x11RTPForwarderState\x12\x0f\n\x07started\x18\x01 \x01(\x08\x12\x1f\n\x17reference_layer_spatial\x18\x02 \x01(\x05\x12\x16\n\x0epre_start_time\x18\x03 \x01(\x03\x12\x1b\n\x13\x65xt_first_timestamp\x18\x04 \x01(\x04\x12$\n\x1c\x64ummy_start_timestamp_offset\x18\x05 \x01(\x04\x12+\n\nrtp_munger\x18\x06 \x01(\x0b\x32\x17.livekit.RTPMungerState\x12-\n\nvp8_munger\x18\x07 \x01(\x0b\x32\x17.livekit.VP8MungerStateH\x00\x42\x0e\n\x0c\x63odec_munger\"\xcb\x01\n\x0eRTPMungerState\x12 \n\x18\x65xt_last_sequence_number\x18\x01 \x01(\x04\x12\'\n\x1f\x65xt_second_last_sequence_number\x18\x02 \x01(\x04\x12\x1a\n\x12\x65xt_last_timestamp\x18\x03 \x01(\x04\x12!\n\x19\x65xt_second_last_timestamp\x18\x04 \x01(\x04\x12\x13\n\x0blast_marker\x18\x05 \x01(\x08\x12\x1a\n\x12second_last_marker\x18\x06 \x01(\x08\"\xb8\x01\n\x0eVP8MungerState\x12\x1b\n\x13\x65xt_last_picture_id\x18\x01 \x01(\x05\x12\x17\n\x0fpicture_id_used\x18\x02 \x01(\x08\x12\x18\n\x10last_tl0_pic_idx\x18\x03 \x01(\r\x12\x18\n\x10tl0_pic_idx_used\x18\x04 \x01(\x08\x12\x10\n\x08tid_used\x18\x05 \x01(\x08\x12\x14\n\x0clast_key_idx\x18\x06 \x01(\r\x12\x14\n\x0ckey_idx_used\x18\x07 \x01(\x08\"1\n\x0cTimedVersion\x12\x12\n\nunix_micro\x18\x01 \x01(\x03\x12\r\n\x05ticks\x18\x02 \x01(\x05*/\n\nAudioCodec\x12\x0e\n\nDEFAULT_AC\x10\x00\x12\x08\n\x04OPUS\x10\x01\x12\x07\n\x03\x41\x41\x43\x10\x02*V\n\nVideoCodec\x12\x0e\n\nDEFAULT_VC\x10\x00\x12\x11\n\rH264_BASELINE\x10\x01\x12\r\n\tH264_MAIN\x10\x02\x12\r\n\tH264_HIGH\x10\x03\x12\x07\n\x03VP8\x10\x04*)\n\nImageCodec\x12\x0e\n\nIC_DEFAULT\x10\x00\x12\x0b\n\x07IC_JPEG\x10\x01*+\n\tTrackType\x12\t\n\x05\x41UDIO\x10\x00\x12\t\n\x05VIDEO\x10\x01\x12\x08\n\x04\x44\x41TA\x10\x02*`\n\x0bTrackSource\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06\x43\x41MERA\x10\x01\x12\x0e\n\nMICROPHONE\x10\x02\x12\x10\n\x0cSCREEN_SHARE\x10\x03\x12\x16\n\x12SCREEN_SHARE_AUDIO\x10\x04*6\n\x0cVideoQuality\x12\x07\n\x03LOW\x10\x00\x12\n\n\x06MEDIUM\x10\x01\x12\x08\n\x04HIGH\x10\x02\x12\x07\n\x03OFF\x10\x03*@\n\x11\x43onnectionQuality\x12\x08\n\x04POOR\x10\x00\x12\x08\n\x04GOOD\x10\x01\x12\r\n\tEXCELLENT\x10\x02\x12\x08\n\x04LOST\x10\x03*;\n\x13\x43lientConfigSetting\x12\t\n\x05UNSET\x10\x00\x12\x0c\n\x08\x44ISABLED\x10\x01\x12\x0b\n\x07\x45NABLED\x10\x02*\xec\x01\n\x10\x44isconnectReason\x12\x12\n\x0eUNKNOWN_REASON\x10\x00\x12\x14\n\x10\x43LIENT_INITIATED\x10\x01\x12\x16\n\x12\x44UPLICATE_IDENTITY\x10\x02\x12\x13\n\x0fSERVER_SHUTDOWN\x10\x03\x12\x17\n\x13PARTICIPANT_REMOVED\x10\x04\x12\x10\n\x0cROOM_DELETED\x10\x05\x12\x12\n\x0eSTATE_MISMATCH\x10\x06\x12\x10\n\x0cJOIN_FAILURE\x10\x07\x12\r\n\tMIGRATION\x10\x08\x12\x10\n\x0cSIGNAL_CLOSE\x10\t\x12\x0f\n\x0bROOM_CLOSED\x10\n*\x89\x01\n\x0fReconnectReason\x12\x0e\n\nRR_UNKNOWN\x10\x00\x12\x1a\n\x16RR_SIGNAL_DISCONNECTED\x10\x01\x12\x17\n\x13RR_PUBLISHER_FAILED\x10\x02\x12\x18\n\x14RR_SUBSCRIBER_FAILED\x10\x03\x12\x17\n\x13RR_SWITCH_CANDIDATE\x10\x04*T\n\x11SubscriptionError\x12\x0e\n\nSE_UNKNOWN\x10\x00\x12\x18\n\x14SE_CODEC_UNSUPPORTED\x10\x01\x12\x15\n\x11SE_TRACK_NOTFOUND\x10\x02*\xa3\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\x42\x46Z#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14livekit_models.proto\x12\x07livekit\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x15livekit_metrics.proto\"\xc9\x02\n\x04Room\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x15\n\rempty_timeout\x18\x03 \x01(\r\x12\x19\n\x11\x64\x65parture_timeout\x18\x0e \x01(\r\x12\x18\n\x10max_participants\x18\x04 \x01(\r\x12\x15\n\rcreation_time\x18\x05 \x01(\x03\x12\x15\n\rturn_password\x18\x06 \x01(\t\x12&\n\x0e\x65nabled_codecs\x18\x07 \x03(\x0b\x32\x0e.livekit.Codec\x12\x10\n\x08metadata\x18\x08 \x01(\t\x12\x18\n\x10num_participants\x18\t \x01(\r\x12\x16\n\x0enum_publishers\x18\x0b \x01(\r\x12\x18\n\x10\x61\x63tive_recording\x18\n \x01(\x08\x12&\n\x07version\x18\r \x01(\x0b\x32\x15.livekit.TimedVersion\"(\n\x05\x43odec\x12\x0c\n\x04mime\x18\x01 \x01(\t\x12\x11\n\tfmtp_line\x18\x02 \x01(\t\"9\n\x0cPlayoutDelay\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0b\n\x03min\x18\x02 \x01(\r\x12\x0b\n\x03max\x18\x03 \x01(\r\"\x85\x02\n\x15ParticipantPermission\x12\x15\n\rcan_subscribe\x18\x01 \x01(\x08\x12\x13\n\x0b\x63\x61n_publish\x18\x02 \x01(\x08\x12\x18\n\x10\x63\x61n_publish_data\x18\x03 \x01(\x08\x12\x31\n\x13\x63\x61n_publish_sources\x18\t \x03(\x0e\x32\x14.livekit.TrackSource\x12\x0e\n\x06hidden\x18\x07 \x01(\x08\x12\x14\n\x08recorder\x18\x08 \x01(\x08\x42\x02\x18\x01\x12\x1b\n\x13\x63\x61n_update_metadata\x18\n \x01(\x08\x12\x11\n\x05\x61gent\x18\x0b \x01(\x08\x42\x02\x18\x01\x12\x1d\n\x15\x63\x61n_subscribe_metrics\x18\x0c \x01(\x08\"\xf8\x04\n\x0fParticipantInfo\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12-\n\x05state\x18\x03 \x01(\x0e\x32\x1e.livekit.ParticipantInfo.State\x12\"\n\x06tracks\x18\x04 \x03(\x0b\x32\x12.livekit.TrackInfo\x12\x10\n\x08metadata\x18\x05 \x01(\t\x12\x11\n\tjoined_at\x18\x06 \x01(\x03\x12\x0c\n\x04name\x18\t \x01(\t\x12\x0f\n\x07version\x18\n \x01(\r\x12\x32\n\npermission\x18\x0b \x01(\x0b\x32\x1e.livekit.ParticipantPermission\x12\x0e\n\x06region\x18\x0c \x01(\t\x12\x14\n\x0cis_publisher\x18\r \x01(\x08\x12+\n\x04kind\x18\x0e \x01(\x0e\x32\x1d.livekit.ParticipantInfo.Kind\x12<\n\nattributes\x18\x0f \x03(\x0b\x32(.livekit.ParticipantInfo.AttributesEntry\x12\x34\n\x11\x64isconnect_reason\x18\x10 \x01(\x0e\x32\x19.livekit.DisconnectReason\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\">\n\x05State\x12\x0b\n\x07JOINING\x10\x00\x12\n\n\x06JOINED\x10\x01\x12\n\n\x06\x41\x43TIVE\x10\x02\x12\x10\n\x0c\x44ISCONNECTED\x10\x03\"A\n\x04Kind\x12\x0c\n\x08STANDARD\x10\x00\x12\x0b\n\x07INGRESS\x10\x01\x12\n\n\x06\x45GRESS\x10\x02\x12\x07\n\x03SIP\x10\x03\x12\t\n\x05\x41GENT\x10\x04\"3\n\nEncryption\"%\n\x04Type\x12\x08\n\x04NONE\x10\x00\x12\x07\n\x03GCM\x10\x01\x12\n\n\x06\x43USTOM\x10\x02\"f\n\x12SimulcastCodecInfo\x12\x11\n\tmime_type\x18\x01 \x01(\t\x12\x0b\n\x03mid\x18\x02 \x01(\t\x12\x0b\n\x03\x63id\x18\x03 \x01(\t\x12#\n\x06layers\x18\x04 \x03(\x0b\x32\x13.livekit.VideoLayer\"\xf5\x03\n\tTrackInfo\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12 \n\x04type\x18\x02 \x01(\x0e\x32\x12.livekit.TrackType\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\r\n\x05muted\x18\x04 \x01(\x08\x12\r\n\x05width\x18\x05 \x01(\r\x12\x0e\n\x06height\x18\x06 \x01(\r\x12\x11\n\tsimulcast\x18\x07 \x01(\x08\x12\x13\n\x0b\x64isable_dtx\x18\x08 \x01(\x08\x12$\n\x06source\x18\t \x01(\x0e\x32\x14.livekit.TrackSource\x12#\n\x06layers\x18\n \x03(\x0b\x32\x13.livekit.VideoLayer\x12\x11\n\tmime_type\x18\x0b \x01(\t\x12\x0b\n\x03mid\x18\x0c \x01(\t\x12+\n\x06\x63odecs\x18\r \x03(\x0b\x32\x1b.livekit.SimulcastCodecInfo\x12\x0e\n\x06stereo\x18\x0e \x01(\x08\x12\x13\n\x0b\x64isable_red\x18\x0f \x01(\x08\x12,\n\nencryption\x18\x10 \x01(\x0e\x32\x18.livekit.Encryption.Type\x12\x0e\n\x06stream\x18\x11 \x01(\t\x12&\n\x07version\x18\x12 \x01(\x0b\x32\x15.livekit.TimedVersion\x12\x32\n\x0e\x61udio_features\x18\x13 \x03(\x0e\x32\x1a.livekit.AudioTrackFeature\"r\n\nVideoLayer\x12&\n\x07quality\x18\x01 \x01(\x0e\x32\x15.livekit.VideoQuality\x12\r\n\x05width\x18\x02 \x01(\r\x12\x0e\n\x06height\x18\x03 \x01(\r\x12\x0f\n\x07\x62itrate\x18\x04 \x01(\r\x12\x0c\n\x04ssrc\x18\x05 \x01(\r\"\xa7\x04\n\nDataPacket\x12*\n\x04kind\x18\x01 \x01(\x0e\x32\x18.livekit.DataPacket.KindB\x02\x18\x01\x12\x1c\n\x14participant_identity\x18\x04 \x01(\t\x12\x1e\n\x16\x64\x65stination_identities\x18\x05 \x03(\t\x12#\n\x04user\x18\x02 \x01(\x0b\x32\x13.livekit.UserPacketH\x00\x12\x33\n\x07speaker\x18\x03 \x01(\x0b\x32\x1c.livekit.ActiveSpeakerUpdateB\x02\x18\x01H\x00\x12$\n\x08sip_dtmf\x18\x06 \x01(\x0b\x32\x10.livekit.SipDTMFH\x00\x12/\n\rtranscription\x18\x07 \x01(\x0b\x32\x16.livekit.TranscriptionH\x00\x12(\n\x07metrics\x18\x08 \x01(\x0b\x32\x15.livekit.MetricsBatchH\x00\x12,\n\x0c\x63hat_message\x18\t \x01(\x0b\x32\x14.livekit.ChatMessageH\x00\x12*\n\x0brpc_request\x18\n \x01(\x0b\x32\x13.livekit.RpcRequestH\x00\x12\"\n\x07rpc_ack\x18\x0b \x01(\x0b\x32\x0f.livekit.RpcAckH\x00\x12,\n\x0crpc_response\x18\x0c \x01(\x0b\x32\x14.livekit.RpcResponseH\x00\"\x1f\n\x04Kind\x12\x0c\n\x08RELIABLE\x10\x00\x12\t\n\x05LOSSY\x10\x01\x42\x07\n\x05value\"=\n\x13\x41\x63tiveSpeakerUpdate\x12&\n\x08speakers\x18\x01 \x03(\x0b\x32\x14.livekit.SpeakerInfo\"9\n\x0bSpeakerInfo\x12\x0b\n\x03sid\x18\x01 \x01(\t\x12\r\n\x05level\x18\x02 \x01(\x02\x12\x0e\n\x06\x61\x63tive\x18\x03 \x01(\x08\"\xa0\x02\n\nUserPacket\x12\x1b\n\x0fparticipant_sid\x18\x01 \x01(\tB\x02\x18\x01\x12 \n\x14participant_identity\x18\x05 \x01(\tB\x02\x18\x01\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12\x1c\n\x10\x64\x65stination_sids\x18\x03 \x03(\tB\x02\x18\x01\x12\"\n\x16\x64\x65stination_identities\x18\x06 \x03(\tB\x02\x18\x01\x12\x12\n\x05topic\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02id\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nstart_time\x18\t \x01(\x04H\x02\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\n \x01(\x04H\x03\x88\x01\x01\x42\x08\n\x06_topicB\x05\n\x03_idB\r\n\x0b_start_timeB\x0b\n\t_end_time\"&\n\x07SipDTMF\x12\x0c\n\x04\x63ode\x18\x03 \x01(\r\x12\r\n\x05\x64igit\x18\x04 \x01(\t\"|\n\rTranscription\x12(\n transcribed_participant_identity\x18\x02 \x01(\t\x12\x10\n\x08track_id\x18\x03 \x01(\t\x12/\n\x08segments\x18\x04 \x03(\x0b\x32\x1d.livekit.TranscriptionSegment\"w\n\x14TranscriptionSegment\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\x12\n\nstart_time\x18\x03 \x01(\x04\x12\x10\n\x08\x65nd_time\x18\x04 \x01(\x04\x12\r\n\x05\x66inal\x18\x05 \x01(\x08\x12\x10\n\x08language\x18\x06 \x01(\t\"\x91\x01\n\x0b\x43hatMessage\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\x12\x1b\n\x0e\x65\x64it_timestamp\x18\x03 \x01(\x03H\x00\x88\x01\x01\x12\x0f\n\x07message\x18\x04 \x01(\t\x12\x0f\n\x07\x64\x65leted\x18\x05 \x01(\x08\x12\x11\n\tgenerated\x18\x06 \x01(\x08\x42\x11\n\x0f_edit_timestamp\"g\n\nRpcRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0e\n\x06method\x18\x02 \x01(\t\x12\x0f\n\x07payload\x18\x03 \x01(\t\x12\x1b\n\x13response_timeout_ms\x18\x04 \x01(\r\x12\x0f\n\x07version\x18\x05 \x01(\r\"\x1c\n\x06RpcAck\x12\x12\n\nrequest_id\x18\x01 \x01(\t\"a\n\x0bRpcResponse\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x11\n\x07payload\x18\x02 \x01(\tH\x00\x12\"\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x11.livekit.RpcErrorH\x00\x42\x07\n\x05value\"7\n\x08RpcError\x12\x0c\n\x04\x63ode\x18\x01 \x01(\r\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\t\"@\n\x11ParticipantTracks\x12\x17\n\x0fparticipant_sid\x18\x01 \x01(\t\x12\x12\n\ntrack_sids\x18\x02 \x03(\t\"\xce\x01\n\nServerInfo\x12,\n\x07\x65\x64ition\x18\x01 \x01(\x0e\x32\x1b.livekit.ServerInfo.Edition\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x10\n\x08protocol\x18\x03 \x01(\x05\x12\x0e\n\x06region\x18\x04 \x01(\t\x12\x0f\n\x07node_id\x18\x05 \x01(\t\x12\x12\n\ndebug_info\x18\x06 \x01(\t\x12\x16\n\x0e\x61gent_protocol\x18\x07 \x01(\x05\"\"\n\x07\x45\x64ition\x12\x0c\n\x08Standard\x10\x00\x12\t\n\x05\x43loud\x10\x01\"\x8a\x03\n\nClientInfo\x12$\n\x03sdk\x18\x01 \x01(\x0e\x32\x17.livekit.ClientInfo.SDK\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x10\n\x08protocol\x18\x03 \x01(\x05\x12\n\n\x02os\x18\x04 \x01(\t\x12\x12\n\nos_version\x18\x05 \x01(\t\x12\x14\n\x0c\x64\x65vice_model\x18\x06 \x01(\t\x12\x0f\n\x07\x62rowser\x18\x07 \x01(\t\x12\x17\n\x0f\x62rowser_version\x18\x08 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\t \x01(\t\x12\x0f\n\x07network\x18\n \x01(\t\x12\x12\n\nother_sdks\x18\x0b \x01(\t\"\x9c\x01\n\x03SDK\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x06\n\x02JS\x10\x01\x12\t\n\x05SWIFT\x10\x02\x12\x0b\n\x07\x41NDROID\x10\x03\x12\x0b\n\x07\x46LUTTER\x10\x04\x12\x06\n\x02GO\x10\x05\x12\t\n\x05UNITY\x10\x06\x12\x10\n\x0cREACT_NATIVE\x10\x07\x12\x08\n\x04RUST\x10\x08\x12\n\n\x06PYTHON\x10\t\x12\x07\n\x03\x43PP\x10\n\x12\r\n\tUNITY_WEB\x10\x0b\x12\x08\n\x04NODE\x10\x0c\"\x8c\x02\n\x13\x43lientConfiguration\x12*\n\x05video\x18\x01 \x01(\x0b\x32\x1b.livekit.VideoConfiguration\x12+\n\x06screen\x18\x02 \x01(\x0b\x32\x1b.livekit.VideoConfiguration\x12\x37\n\x11resume_connection\x18\x03 \x01(\x0e\x32\x1c.livekit.ClientConfigSetting\x12\x30\n\x0f\x64isabled_codecs\x18\x04 \x01(\x0b\x32\x17.livekit.DisabledCodecs\x12\x31\n\x0b\x66orce_relay\x18\x05 \x01(\x0e\x32\x1c.livekit.ClientConfigSetting\"L\n\x12VideoConfiguration\x12\x36\n\x10hardware_encoder\x18\x01 \x01(\x0e\x32\x1c.livekit.ClientConfigSetting\"Q\n\x0e\x44isabledCodecs\x12\x1e\n\x06\x63odecs\x18\x01 \x03(\x0b\x32\x0e.livekit.Codec\x12\x1f\n\x07publish\x18\x02 \x03(\x0b\x32\x0e.livekit.Codec\"\x80\x02\n\x08RTPDrift\x12.\n\nstart_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x10\n\x08\x64uration\x18\x03 \x01(\x01\x12\x17\n\x0fstart_timestamp\x18\x04 \x01(\x04\x12\x15\n\rend_timestamp\x18\x05 \x01(\x04\x12\x17\n\x0frtp_clock_ticks\x18\x06 \x01(\x04\x12\x15\n\rdrift_samples\x18\x07 \x01(\x03\x12\x10\n\x08\x64rift_ms\x18\x08 \x01(\x01\x12\x12\n\nclock_rate\x18\t \x01(\x01\"\xd6\n\n\x08RTPStats\x12.\n\nstart_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x10\n\x08\x64uration\x18\x03 \x01(\x01\x12\x0f\n\x07packets\x18\x04 \x01(\r\x12\x13\n\x0bpacket_rate\x18\x05 \x01(\x01\x12\r\n\x05\x62ytes\x18\x06 \x01(\x04\x12\x14\n\x0cheader_bytes\x18\' \x01(\x04\x12\x0f\n\x07\x62itrate\x18\x07 \x01(\x01\x12\x14\n\x0cpackets_lost\x18\x08 \x01(\r\x12\x18\n\x10packet_loss_rate\x18\t \x01(\x01\x12\x1e\n\x16packet_loss_percentage\x18\n \x01(\x02\x12\x19\n\x11packets_duplicate\x18\x0b \x01(\r\x12\x1d\n\x15packet_duplicate_rate\x18\x0c \x01(\x01\x12\x17\n\x0f\x62ytes_duplicate\x18\r \x01(\x04\x12\x1e\n\x16header_bytes_duplicate\x18( \x01(\x04\x12\x19\n\x11\x62itrate_duplicate\x18\x0e \x01(\x01\x12\x17\n\x0fpackets_padding\x18\x0f \x01(\r\x12\x1b\n\x13packet_padding_rate\x18\x10 \x01(\x01\x12\x15\n\rbytes_padding\x18\x11 \x01(\x04\x12\x1c\n\x14header_bytes_padding\x18) \x01(\x04\x12\x17\n\x0f\x62itrate_padding\x18\x12 \x01(\x01\x12\x1c\n\x14packets_out_of_order\x18\x13 \x01(\r\x12\x0e\n\x06\x66rames\x18\x14 \x01(\r\x12\x12\n\nframe_rate\x18\x15 \x01(\x01\x12\x16\n\x0ejitter_current\x18\x16 \x01(\x01\x12\x12\n\njitter_max\x18\x17 \x01(\x01\x12:\n\rgap_histogram\x18\x18 \x03(\x0b\x32#.livekit.RTPStats.GapHistogramEntry\x12\r\n\x05nacks\x18\x19 \x01(\r\x12\x11\n\tnack_acks\x18% \x01(\r\x12\x13\n\x0bnack_misses\x18\x1a \x01(\r\x12\x15\n\rnack_repeated\x18& \x01(\r\x12\x0c\n\x04plis\x18\x1b \x01(\r\x12,\n\x08last_pli\x18\x1c \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0c\n\x04\x66irs\x18\x1d \x01(\r\x12,\n\x08last_fir\x18\x1e \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x13\n\x0brtt_current\x18\x1f \x01(\r\x12\x0f\n\x07rtt_max\x18 \x01(\r\x12\x12\n\nkey_frames\x18! \x01(\r\x12\x32\n\x0elast_key_frame\x18\" \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x17\n\x0flayer_lock_plis\x18# \x01(\r\x12\x37\n\x13last_layer_lock_pli\x18$ \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\'\n\x0cpacket_drift\x18, \x01(\x0b\x32\x11.livekit.RTPDrift\x12+\n\x10ntp_report_drift\x18- \x01(\x0b\x32\x11.livekit.RTPDrift\x12/\n\x14rebased_report_drift\x18. \x01(\x0b\x32\x11.livekit.RTPDrift\x12\x30\n\x15received_report_drift\x18/ \x01(\x0b\x32\x11.livekit.RTPDrift\x1a\x33\n\x11GapHistogramEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"\xa2\x01\n\x15RTCPSenderReportState\x12\x15\n\rrtp_timestamp\x18\x01 \x01(\r\x12\x19\n\x11rtp_timestamp_ext\x18\x02 \x01(\x04\x12\x15\n\rntp_timestamp\x18\x03 \x01(\x04\x12\n\n\x02\x61t\x18\x04 \x01(\x03\x12\x13\n\x0b\x61t_adjusted\x18\x05 \x01(\x03\x12\x0f\n\x07packets\x18\x06 \x01(\r\x12\x0e\n\x06octets\x18\x07 \x01(\x04\"\xc9\x02\n\x11RTPForwarderState\x12\x0f\n\x07started\x18\x01 \x01(\x08\x12\x1f\n\x17reference_layer_spatial\x18\x02 \x01(\x05\x12\x16\n\x0epre_start_time\x18\x03 \x01(\x03\x12\x1b\n\x13\x65xt_first_timestamp\x18\x04 \x01(\x04\x12$\n\x1c\x64ummy_start_timestamp_offset\x18\x05 \x01(\x04\x12+\n\nrtp_munger\x18\x06 \x01(\x0b\x32\x17.livekit.RTPMungerState\x12-\n\nvp8_munger\x18\x07 \x01(\x0b\x32\x17.livekit.VP8MungerStateH\x00\x12;\n\x13sender_report_state\x18\x08 \x03(\x0b\x32\x1e.livekit.RTCPSenderReportStateB\x0e\n\x0c\x63odec_munger\"\xcb\x01\n\x0eRTPMungerState\x12 \n\x18\x65xt_last_sequence_number\x18\x01 \x01(\x04\x12\'\n\x1f\x65xt_second_last_sequence_number\x18\x02 \x01(\x04\x12\x1a\n\x12\x65xt_last_timestamp\x18\x03 \x01(\x04\x12!\n\x19\x65xt_second_last_timestamp\x18\x04 \x01(\x04\x12\x13\n\x0blast_marker\x18\x05 \x01(\x08\x12\x1a\n\x12second_last_marker\x18\x06 \x01(\x08\"\xb8\x01\n\x0eVP8MungerState\x12\x1b\n\x13\x65xt_last_picture_id\x18\x01 \x01(\x05\x12\x17\n\x0fpicture_id_used\x18\x02 \x01(\x08\x12\x18\n\x10last_tl0_pic_idx\x18\x03 \x01(\r\x12\x18\n\x10tl0_pic_idx_used\x18\x04 \x01(\x08\x12\x10\n\x08tid_used\x18\x05 \x01(\x08\x12\x14\n\x0clast_key_idx\x18\x06 \x01(\r\x12\x14\n\x0ckey_idx_used\x18\x07 \x01(\x08\"1\n\x0cTimedVersion\x12\x12\n\nunix_micro\x18\x01 \x01(\x03\x12\r\n\x05ticks\x18\x02 \x01(\x05*/\n\nAudioCodec\x12\x0e\n\nDEFAULT_AC\x10\x00\x12\x08\n\x04OPUS\x10\x01\x12\x07\n\x03\x41\x41\x43\x10\x02*V\n\nVideoCodec\x12\x0e\n\nDEFAULT_VC\x10\x00\x12\x11\n\rH264_BASELINE\x10\x01\x12\r\n\tH264_MAIN\x10\x02\x12\r\n\tH264_HIGH\x10\x03\x12\x07\n\x03VP8\x10\x04*)\n\nImageCodec\x12\x0e\n\nIC_DEFAULT\x10\x00\x12\x0b\n\x07IC_JPEG\x10\x01*+\n\tTrackType\x12\t\n\x05\x41UDIO\x10\x00\x12\t\n\x05VIDEO\x10\x01\x12\x08\n\x04\x44\x41TA\x10\x02*`\n\x0bTrackSource\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06\x43\x41MERA\x10\x01\x12\x0e\n\nMICROPHONE\x10\x02\x12\x10\n\x0cSCREEN_SHARE\x10\x03\x12\x16\n\x12SCREEN_SHARE_AUDIO\x10\x04*6\n\x0cVideoQuality\x12\x07\n\x03LOW\x10\x00\x12\n\n\x06MEDIUM\x10\x01\x12\x08\n\x04HIGH\x10\x02\x12\x07\n\x03OFF\x10\x03*@\n\x11\x43onnectionQuality\x12\x08\n\x04POOR\x10\x00\x12\x08\n\x04GOOD\x10\x01\x12\r\n\tEXCELLENT\x10\x02\x12\x08\n\x04LOST\x10\x03*;\n\x13\x43lientConfigSetting\x12\t\n\x05UNSET\x10\x00\x12\x0c\n\x08\x44ISABLED\x10\x01\x12\x0b\n\x07\x45NABLED\x10\x02*\x95\x02\n\x10\x44isconnectReason\x12\x12\n\x0eUNKNOWN_REASON\x10\x00\x12\x14\n\x10\x43LIENT_INITIATED\x10\x01\x12\x16\n\x12\x44UPLICATE_IDENTITY\x10\x02\x12\x13\n\x0fSERVER_SHUTDOWN\x10\x03\x12\x17\n\x13PARTICIPANT_REMOVED\x10\x04\x12\x10\n\x0cROOM_DELETED\x10\x05\x12\x12\n\x0eSTATE_MISMATCH\x10\x06\x12\x10\n\x0cJOIN_FAILURE\x10\x07\x12\r\n\tMIGRATION\x10\x08\x12\x10\n\x0cSIGNAL_CLOSE\x10\t\x12\x0f\n\x0bROOM_CLOSED\x10\n\x12\x14\n\x10USER_UNAVAILABLE\x10\x0b\x12\x11\n\rUSER_REJECTED\x10\x0c*\x89\x01\n\x0fReconnectReason\x12\x0e\n\nRR_UNKNOWN\x10\x00\x12\x1a\n\x16RR_SIGNAL_DISCONNECTED\x10\x01\x12\x17\n\x13RR_PUBLISHER_FAILED\x10\x02\x12\x18\n\x14RR_SUBSCRIBER_FAILED\x10\x03\x12\x17\n\x13RR_SWITCH_CANDIDATE\x10\x04*T\n\x11SubscriptionError\x12\x0e\n\nSE_UNKNOWN\x10\x00\x12\x18\n\x14SE_CODEC_UNSUPPORTED\x10\x01\x12\x15\n\x11SE_TRACK_NOTFOUND\x10\x02*\xa3\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\x42\x46Z#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -43,100 +44,112 @@ _globals['_USERPACKET'].fields_by_name['destination_identities']._serialized_options = b'\030\001' _globals['_RTPSTATS_GAPHISTOGRAMENTRY']._options = None _globals['_RTPSTATS_GAPHISTOGRAMENTRY']._serialized_options = b'8\001' - _globals['_AUDIOCODEC']._serialized_start=6532 - _globals['_AUDIOCODEC']._serialized_end=6579 - _globals['_VIDEOCODEC']._serialized_start=6581 - _globals['_VIDEOCODEC']._serialized_end=6667 - _globals['_IMAGECODEC']._serialized_start=6669 - _globals['_IMAGECODEC']._serialized_end=6710 - _globals['_TRACKTYPE']._serialized_start=6712 - _globals['_TRACKTYPE']._serialized_end=6755 - _globals['_TRACKSOURCE']._serialized_start=6757 - _globals['_TRACKSOURCE']._serialized_end=6853 - _globals['_VIDEOQUALITY']._serialized_start=6855 - _globals['_VIDEOQUALITY']._serialized_end=6909 - _globals['_CONNECTIONQUALITY']._serialized_start=6911 - _globals['_CONNECTIONQUALITY']._serialized_end=6975 - _globals['_CLIENTCONFIGSETTING']._serialized_start=6977 - _globals['_CLIENTCONFIGSETTING']._serialized_end=7036 - _globals['_DISCONNECTREASON']._serialized_start=7039 - _globals['_DISCONNECTREASON']._serialized_end=7275 - _globals['_RECONNECTREASON']._serialized_start=7278 - _globals['_RECONNECTREASON']._serialized_end=7415 - _globals['_SUBSCRIPTIONERROR']._serialized_start=7417 - _globals['_SUBSCRIPTIONERROR']._serialized_end=7501 - _globals['_AUDIOTRACKFEATURE']._serialized_start=7504 - _globals['_AUDIOTRACKFEATURE']._serialized_end=7667 - _globals['_ROOM']._serialized_start=67 - _globals['_ROOM']._serialized_end=396 - _globals['_CODEC']._serialized_start=398 - _globals['_CODEC']._serialized_end=438 - _globals['_PLAYOUTDELAY']._serialized_start=440 - _globals['_PLAYOUTDELAY']._serialized_end=497 - _globals['_PARTICIPANTPERMISSION']._serialized_start=500 - _globals['_PARTICIPANTPERMISSION']._serialized_end=730 - _globals['_PARTICIPANTINFO']._serialized_start=733 - _globals['_PARTICIPANTINFO']._serialized_end=1365 - _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_start=1185 - _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_end=1234 - _globals['_PARTICIPANTINFO_STATE']._serialized_start=1236 - _globals['_PARTICIPANTINFO_STATE']._serialized_end=1298 - _globals['_PARTICIPANTINFO_KIND']._serialized_start=1300 - _globals['_PARTICIPANTINFO_KIND']._serialized_end=1365 - _globals['_ENCRYPTION']._serialized_start=1367 - _globals['_ENCRYPTION']._serialized_end=1418 - _globals['_ENCRYPTION_TYPE']._serialized_start=1381 - _globals['_ENCRYPTION_TYPE']._serialized_end=1418 - _globals['_SIMULCASTCODECINFO']._serialized_start=1420 - _globals['_SIMULCASTCODECINFO']._serialized_end=1522 - _globals['_TRACKINFO']._serialized_start=1525 - _globals['_TRACKINFO']._serialized_end=2026 - _globals['_VIDEOLAYER']._serialized_start=2028 - _globals['_VIDEOLAYER']._serialized_end=2142 - _globals['_DATAPACKET']._serialized_start=2145 - _globals['_DATAPACKET']._serialized_end=2482 - _globals['_DATAPACKET_KIND']._serialized_start=2442 - _globals['_DATAPACKET_KIND']._serialized_end=2473 - _globals['_ACTIVESPEAKERUPDATE']._serialized_start=2484 - _globals['_ACTIVESPEAKERUPDATE']._serialized_end=2545 - _globals['_SPEAKERINFO']._serialized_start=2547 - _globals['_SPEAKERINFO']._serialized_end=2604 - _globals['_USERPACKET']._serialized_start=2607 - _globals['_USERPACKET']._serialized_end=2895 - _globals['_SIPDTMF']._serialized_start=2897 - _globals['_SIPDTMF']._serialized_end=2935 - _globals['_TRANSCRIPTION']._serialized_start=2937 - _globals['_TRANSCRIPTION']._serialized_end=3061 - _globals['_TRANSCRIPTIONSEGMENT']._serialized_start=3063 - _globals['_TRANSCRIPTIONSEGMENT']._serialized_end=3182 - _globals['_PARTICIPANTTRACKS']._serialized_start=3184 - _globals['_PARTICIPANTTRACKS']._serialized_end=3248 - _globals['_SERVERINFO']._serialized_start=3251 - _globals['_SERVERINFO']._serialized_end=3457 - _globals['_SERVERINFO_EDITION']._serialized_start=3423 - _globals['_SERVERINFO_EDITION']._serialized_end=3457 - _globals['_CLIENTINFO']._serialized_start=3460 - _globals['_CLIENTINFO']._serialized_end=3809 - _globals['_CLIENTINFO_SDK']._serialized_start=3678 - _globals['_CLIENTINFO_SDK']._serialized_end=3809 - _globals['_CLIENTCONFIGURATION']._serialized_start=3812 - _globals['_CLIENTCONFIGURATION']._serialized_end=4080 - _globals['_VIDEOCONFIGURATION']._serialized_start=4082 - _globals['_VIDEOCONFIGURATION']._serialized_end=4158 - _globals['_DISABLEDCODECS']._serialized_start=4160 - _globals['_DISABLEDCODECS']._serialized_end=4241 - _globals['_RTPDRIFT']._serialized_start=4244 - _globals['_RTPDRIFT']._serialized_end=4500 - _globals['_RTPSTATS']._serialized_start=4503 - _globals['_RTPSTATS']._serialized_end=5815 - _globals['_RTPSTATS_GAPHISTOGRAMENTRY']._serialized_start=5764 - _globals['_RTPSTATS_GAPHISTOGRAMENTRY']._serialized_end=5815 - _globals['_RTPFORWARDERSTATE']._serialized_start=5818 - _globals['_RTPFORWARDERSTATE']._serialized_end=6086 - _globals['_RTPMUNGERSTATE']._serialized_start=6089 - _globals['_RTPMUNGERSTATE']._serialized_end=6292 - _globals['_VP8MUNGERSTATE']._serialized_start=6295 - _globals['_VP8MUNGERSTATE']._serialized_end=6479 - _globals['_TIMEDVERSION']._serialized_start=6481 - _globals['_TIMEDVERSION']._serialized_end=6530 + _globals['_AUDIOCODEC']._serialized_start=7564 + _globals['_AUDIOCODEC']._serialized_end=7611 + _globals['_VIDEOCODEC']._serialized_start=7613 + _globals['_VIDEOCODEC']._serialized_end=7699 + _globals['_IMAGECODEC']._serialized_start=7701 + _globals['_IMAGECODEC']._serialized_end=7742 + _globals['_TRACKTYPE']._serialized_start=7744 + _globals['_TRACKTYPE']._serialized_end=7787 + _globals['_TRACKSOURCE']._serialized_start=7789 + _globals['_TRACKSOURCE']._serialized_end=7885 + _globals['_VIDEOQUALITY']._serialized_start=7887 + _globals['_VIDEOQUALITY']._serialized_end=7941 + _globals['_CONNECTIONQUALITY']._serialized_start=7943 + _globals['_CONNECTIONQUALITY']._serialized_end=8007 + _globals['_CLIENTCONFIGSETTING']._serialized_start=8009 + _globals['_CLIENTCONFIGSETTING']._serialized_end=8068 + _globals['_DISCONNECTREASON']._serialized_start=8071 + _globals['_DISCONNECTREASON']._serialized_end=8348 + _globals['_RECONNECTREASON']._serialized_start=8351 + _globals['_RECONNECTREASON']._serialized_end=8488 + _globals['_SUBSCRIPTIONERROR']._serialized_start=8490 + _globals['_SUBSCRIPTIONERROR']._serialized_end=8574 + _globals['_AUDIOTRACKFEATURE']._serialized_start=8577 + _globals['_AUDIOTRACKFEATURE']._serialized_end=8740 + _globals['_ROOM']._serialized_start=90 + _globals['_ROOM']._serialized_end=419 + _globals['_CODEC']._serialized_start=421 + _globals['_CODEC']._serialized_end=461 + _globals['_PLAYOUTDELAY']._serialized_start=463 + _globals['_PLAYOUTDELAY']._serialized_end=520 + _globals['_PARTICIPANTPERMISSION']._serialized_start=523 + _globals['_PARTICIPANTPERMISSION']._serialized_end=784 + _globals['_PARTICIPANTINFO']._serialized_start=787 + _globals['_PARTICIPANTINFO']._serialized_end=1419 + _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_start=1239 + _globals['_PARTICIPANTINFO_ATTRIBUTESENTRY']._serialized_end=1288 + _globals['_PARTICIPANTINFO_STATE']._serialized_start=1290 + _globals['_PARTICIPANTINFO_STATE']._serialized_end=1352 + _globals['_PARTICIPANTINFO_KIND']._serialized_start=1354 + _globals['_PARTICIPANTINFO_KIND']._serialized_end=1419 + _globals['_ENCRYPTION']._serialized_start=1421 + _globals['_ENCRYPTION']._serialized_end=1472 + _globals['_ENCRYPTION_TYPE']._serialized_start=1435 + _globals['_ENCRYPTION_TYPE']._serialized_end=1472 + _globals['_SIMULCASTCODECINFO']._serialized_start=1474 + _globals['_SIMULCASTCODECINFO']._serialized_end=1576 + _globals['_TRACKINFO']._serialized_start=1579 + _globals['_TRACKINFO']._serialized_end=2080 + _globals['_VIDEOLAYER']._serialized_start=2082 + _globals['_VIDEOLAYER']._serialized_end=2196 + _globals['_DATAPACKET']._serialized_start=2199 + _globals['_DATAPACKET']._serialized_end=2750 + _globals['_DATAPACKET_KIND']._serialized_start=2710 + _globals['_DATAPACKET_KIND']._serialized_end=2741 + _globals['_ACTIVESPEAKERUPDATE']._serialized_start=2752 + _globals['_ACTIVESPEAKERUPDATE']._serialized_end=2813 + _globals['_SPEAKERINFO']._serialized_start=2815 + _globals['_SPEAKERINFO']._serialized_end=2872 + _globals['_USERPACKET']._serialized_start=2875 + _globals['_USERPACKET']._serialized_end=3163 + _globals['_SIPDTMF']._serialized_start=3165 + _globals['_SIPDTMF']._serialized_end=3203 + _globals['_TRANSCRIPTION']._serialized_start=3205 + _globals['_TRANSCRIPTION']._serialized_end=3329 + _globals['_TRANSCRIPTIONSEGMENT']._serialized_start=3331 + _globals['_TRANSCRIPTIONSEGMENT']._serialized_end=3450 + _globals['_CHATMESSAGE']._serialized_start=3453 + _globals['_CHATMESSAGE']._serialized_end=3598 + _globals['_RPCREQUEST']._serialized_start=3600 + _globals['_RPCREQUEST']._serialized_end=3703 + _globals['_RPCACK']._serialized_start=3705 + _globals['_RPCACK']._serialized_end=3733 + _globals['_RPCRESPONSE']._serialized_start=3735 + _globals['_RPCRESPONSE']._serialized_end=3832 + _globals['_RPCERROR']._serialized_start=3834 + _globals['_RPCERROR']._serialized_end=3889 + _globals['_PARTICIPANTTRACKS']._serialized_start=3891 + _globals['_PARTICIPANTTRACKS']._serialized_end=3955 + _globals['_SERVERINFO']._serialized_start=3958 + _globals['_SERVERINFO']._serialized_end=4164 + _globals['_SERVERINFO_EDITION']._serialized_start=4130 + _globals['_SERVERINFO_EDITION']._serialized_end=4164 + _globals['_CLIENTINFO']._serialized_start=4167 + _globals['_CLIENTINFO']._serialized_end=4561 + _globals['_CLIENTINFO_SDK']._serialized_start=4405 + _globals['_CLIENTINFO_SDK']._serialized_end=4561 + _globals['_CLIENTCONFIGURATION']._serialized_start=4564 + _globals['_CLIENTCONFIGURATION']._serialized_end=4832 + _globals['_VIDEOCONFIGURATION']._serialized_start=4834 + _globals['_VIDEOCONFIGURATION']._serialized_end=4910 + _globals['_DISABLEDCODECS']._serialized_start=4912 + _globals['_DISABLEDCODECS']._serialized_end=4993 + _globals['_RTPDRIFT']._serialized_start=4996 + _globals['_RTPDRIFT']._serialized_end=5252 + _globals['_RTPSTATS']._serialized_start=5255 + _globals['_RTPSTATS']._serialized_end=6621 + _globals['_RTPSTATS_GAPHISTOGRAMENTRY']._serialized_start=6570 + _globals['_RTPSTATS_GAPHISTOGRAMENTRY']._serialized_end=6621 + _globals['_RTCPSENDERREPORTSTATE']._serialized_start=6624 + _globals['_RTCPSENDERREPORTSTATE']._serialized_end=6786 + _globals['_RTPFORWARDERSTATE']._serialized_start=6789 + _globals['_RTPFORWARDERSTATE']._serialized_end=7118 + _globals['_RTPMUNGERSTATE']._serialized_start=7121 + _globals['_RTPMUNGERSTATE']._serialized_end=7324 + _globals['_VP8MUNGERSTATE']._serialized_start=7327 + _globals['_VP8MUNGERSTATE']._serialized_end=7511 + _globals['_TIMEDVERSION']._serialized_start=7513 + _globals['_TIMEDVERSION']._serialized_end=7562 # @@protoc_insertion_point(module_scope) diff --git a/livekit-protocol/livekit/protocol/models.pyi b/livekit-protocol/livekit/protocol/models.pyi index 77182347..e67082ea 100644 --- a/livekit-protocol/livekit/protocol/models.pyi +++ b/livekit-protocol/livekit/protocol/models.pyi @@ -1,4 +1,5 @@ from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from . import metrics as _metrics from google.protobuf.internal import containers as _containers from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper from google.protobuf import descriptor as _descriptor @@ -73,6 +74,8 @@ class DisconnectReason(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): MIGRATION: _ClassVar[DisconnectReason] SIGNAL_CLOSE: _ClassVar[DisconnectReason] ROOM_CLOSED: _ClassVar[DisconnectReason] + USER_UNAVAILABLE: _ClassVar[DisconnectReason] + USER_REJECTED: _ClassVar[DisconnectReason] class ReconnectReason(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () @@ -136,6 +139,8 @@ JOIN_FAILURE: DisconnectReason MIGRATION: DisconnectReason SIGNAL_CLOSE: DisconnectReason ROOM_CLOSED: DisconnectReason +USER_UNAVAILABLE: DisconnectReason +USER_REJECTED: DisconnectReason RR_UNKNOWN: ReconnectReason RR_SIGNAL_DISCONNECTED: ReconnectReason RR_PUBLISHER_FAILED: ReconnectReason @@ -200,7 +205,7 @@ class PlayoutDelay(_message.Message): def __init__(self, enabled: bool = ..., min: _Optional[int] = ..., max: _Optional[int] = ...) -> None: ... class ParticipantPermission(_message.Message): - __slots__ = ("can_subscribe", "can_publish", "can_publish_data", "can_publish_sources", "hidden", "recorder", "can_update_metadata", "agent") + __slots__ = ("can_subscribe", "can_publish", "can_publish_data", "can_publish_sources", "hidden", "recorder", "can_update_metadata", "agent", "can_subscribe_metrics") CAN_SUBSCRIBE_FIELD_NUMBER: _ClassVar[int] CAN_PUBLISH_FIELD_NUMBER: _ClassVar[int] CAN_PUBLISH_DATA_FIELD_NUMBER: _ClassVar[int] @@ -209,6 +214,7 @@ class ParticipantPermission(_message.Message): RECORDER_FIELD_NUMBER: _ClassVar[int] CAN_UPDATE_METADATA_FIELD_NUMBER: _ClassVar[int] AGENT_FIELD_NUMBER: _ClassVar[int] + CAN_SUBSCRIBE_METRICS_FIELD_NUMBER: _ClassVar[int] can_subscribe: bool can_publish: bool can_publish_data: bool @@ -217,7 +223,8 @@ class ParticipantPermission(_message.Message): recorder: bool can_update_metadata: bool agent: bool - def __init__(self, can_subscribe: bool = ..., can_publish: bool = ..., can_publish_data: bool = ..., can_publish_sources: _Optional[_Iterable[_Union[TrackSource, str]]] = ..., hidden: bool = ..., recorder: bool = ..., can_update_metadata: bool = ..., agent: bool = ...) -> None: ... + can_subscribe_metrics: bool + def __init__(self, can_subscribe: bool = ..., can_publish: bool = ..., can_publish_data: bool = ..., can_publish_sources: _Optional[_Iterable[_Union[TrackSource, str]]] = ..., hidden: bool = ..., recorder: bool = ..., can_update_metadata: bool = ..., agent: bool = ..., can_subscribe_metrics: bool = ...) -> None: ... class ParticipantInfo(_message.Message): __slots__ = ("sid", "identity", "state", "tracks", "metadata", "joined_at", "name", "version", "permission", "region", "is_publisher", "kind", "attributes", "disconnect_reason") @@ -361,7 +368,7 @@ class VideoLayer(_message.Message): def __init__(self, quality: _Optional[_Union[VideoQuality, str]] = ..., width: _Optional[int] = ..., height: _Optional[int] = ..., bitrate: _Optional[int] = ..., ssrc: _Optional[int] = ...) -> None: ... class DataPacket(_message.Message): - __slots__ = ("kind", "participant_identity", "destination_identities", "user", "speaker", "sip_dtmf", "transcription") + __slots__ = ("kind", "participant_identity", "destination_identities", "user", "speaker", "sip_dtmf", "transcription", "metrics", "chat_message", "rpc_request", "rpc_ack", "rpc_response") class Kind(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () RELIABLE: _ClassVar[DataPacket.Kind] @@ -375,6 +382,11 @@ class DataPacket(_message.Message): SPEAKER_FIELD_NUMBER: _ClassVar[int] SIP_DTMF_FIELD_NUMBER: _ClassVar[int] TRANSCRIPTION_FIELD_NUMBER: _ClassVar[int] + METRICS_FIELD_NUMBER: _ClassVar[int] + CHAT_MESSAGE_FIELD_NUMBER: _ClassVar[int] + RPC_REQUEST_FIELD_NUMBER: _ClassVar[int] + RPC_ACK_FIELD_NUMBER: _ClassVar[int] + RPC_RESPONSE_FIELD_NUMBER: _ClassVar[int] kind: DataPacket.Kind participant_identity: str destination_identities: _containers.RepeatedScalarFieldContainer[str] @@ -382,7 +394,12 @@ class DataPacket(_message.Message): speaker: ActiveSpeakerUpdate sip_dtmf: SipDTMF transcription: Transcription - def __init__(self, kind: _Optional[_Union[DataPacket.Kind, str]] = ..., participant_identity: _Optional[str] = ..., destination_identities: _Optional[_Iterable[str]] = ..., user: _Optional[_Union[UserPacket, _Mapping]] = ..., speaker: _Optional[_Union[ActiveSpeakerUpdate, _Mapping]] = ..., sip_dtmf: _Optional[_Union[SipDTMF, _Mapping]] = ..., transcription: _Optional[_Union[Transcription, _Mapping]] = ...) -> None: ... + metrics: _metrics.MetricsBatch + chat_message: ChatMessage + rpc_request: RpcRequest + rpc_ack: RpcAck + rpc_response: RpcResponse + def __init__(self, kind: _Optional[_Union[DataPacket.Kind, str]] = ..., participant_identity: _Optional[str] = ..., destination_identities: _Optional[_Iterable[str]] = ..., user: _Optional[_Union[UserPacket, _Mapping]] = ..., speaker: _Optional[_Union[ActiveSpeakerUpdate, _Mapping]] = ..., sip_dtmf: _Optional[_Union[SipDTMF, _Mapping]] = ..., transcription: _Optional[_Union[Transcription, _Mapping]] = ..., metrics: _Optional[_Union[_metrics.MetricsBatch, _Mapping]] = ..., chat_message: _Optional[_Union[ChatMessage, _Mapping]] = ..., rpc_request: _Optional[_Union[RpcRequest, _Mapping]] = ..., rpc_ack: _Optional[_Union[RpcAck, _Mapping]] = ..., rpc_response: _Optional[_Union[RpcResponse, _Mapping]] = ...) -> None: ... class ActiveSpeakerUpdate(_message.Message): __slots__ = ("speakers",) @@ -456,6 +473,62 @@ class TranscriptionSegment(_message.Message): language: str def __init__(self, id: _Optional[str] = ..., text: _Optional[str] = ..., start_time: _Optional[int] = ..., end_time: _Optional[int] = ..., final: bool = ..., language: _Optional[str] = ...) -> None: ... +class ChatMessage(_message.Message): + __slots__ = ("id", "timestamp", "edit_timestamp", "message", "deleted", "generated") + ID_FIELD_NUMBER: _ClassVar[int] + TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + EDIT_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + MESSAGE_FIELD_NUMBER: _ClassVar[int] + DELETED_FIELD_NUMBER: _ClassVar[int] + GENERATED_FIELD_NUMBER: _ClassVar[int] + id: str + timestamp: int + edit_timestamp: int + message: str + deleted: bool + generated: bool + def __init__(self, id: _Optional[str] = ..., timestamp: _Optional[int] = ..., edit_timestamp: _Optional[int] = ..., message: _Optional[str] = ..., deleted: bool = ..., generated: bool = ...) -> None: ... + +class RpcRequest(_message.Message): + __slots__ = ("id", "method", "payload", "response_timeout_ms", "version") + ID_FIELD_NUMBER: _ClassVar[int] + METHOD_FIELD_NUMBER: _ClassVar[int] + PAYLOAD_FIELD_NUMBER: _ClassVar[int] + RESPONSE_TIMEOUT_MS_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + id: str + method: str + payload: str + response_timeout_ms: int + version: int + def __init__(self, id: _Optional[str] = ..., method: _Optional[str] = ..., payload: _Optional[str] = ..., response_timeout_ms: _Optional[int] = ..., version: _Optional[int] = ...) -> None: ... + +class RpcAck(_message.Message): + __slots__ = ("request_id",) + REQUEST_ID_FIELD_NUMBER: _ClassVar[int] + request_id: str + def __init__(self, request_id: _Optional[str] = ...) -> None: ... + +class RpcResponse(_message.Message): + __slots__ = ("request_id", "payload", "error") + REQUEST_ID_FIELD_NUMBER: _ClassVar[int] + PAYLOAD_FIELD_NUMBER: _ClassVar[int] + ERROR_FIELD_NUMBER: _ClassVar[int] + request_id: str + payload: str + error: RpcError + def __init__(self, request_id: _Optional[str] = ..., payload: _Optional[str] = ..., error: _Optional[_Union[RpcError, _Mapping]] = ...) -> None: ... + +class RpcError(_message.Message): + __slots__ = ("code", "message", "data") + CODE_FIELD_NUMBER: _ClassVar[int] + MESSAGE_FIELD_NUMBER: _ClassVar[int] + DATA_FIELD_NUMBER: _ClassVar[int] + code: int + message: str + data: str + def __init__(self, code: _Optional[int] = ..., message: _Optional[str] = ..., data: _Optional[str] = ...) -> None: ... + class ParticipantTracks(_message.Message): __slots__ = ("participant_sid", "track_sids") PARTICIPANT_SID_FIELD_NUMBER: _ClassVar[int] @@ -489,7 +562,7 @@ class ServerInfo(_message.Message): def __init__(self, edition: _Optional[_Union[ServerInfo.Edition, str]] = ..., version: _Optional[str] = ..., protocol: _Optional[int] = ..., region: _Optional[str] = ..., node_id: _Optional[str] = ..., debug_info: _Optional[str] = ..., agent_protocol: _Optional[int] = ...) -> None: ... class ClientInfo(_message.Message): - __slots__ = ("sdk", "version", "protocol", "os", "os_version", "device_model", "browser", "browser_version", "address", "network") + __slots__ = ("sdk", "version", "protocol", "os", "os_version", "device_model", "browser", "browser_version", "address", "network", "other_sdks") class SDK(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () UNKNOWN: _ClassVar[ClientInfo.SDK] @@ -503,6 +576,8 @@ class ClientInfo(_message.Message): RUST: _ClassVar[ClientInfo.SDK] PYTHON: _ClassVar[ClientInfo.SDK] CPP: _ClassVar[ClientInfo.SDK] + UNITY_WEB: _ClassVar[ClientInfo.SDK] + NODE: _ClassVar[ClientInfo.SDK] UNKNOWN: ClientInfo.SDK JS: ClientInfo.SDK SWIFT: ClientInfo.SDK @@ -514,6 +589,8 @@ class ClientInfo(_message.Message): RUST: ClientInfo.SDK PYTHON: ClientInfo.SDK CPP: ClientInfo.SDK + UNITY_WEB: ClientInfo.SDK + NODE: ClientInfo.SDK SDK_FIELD_NUMBER: _ClassVar[int] VERSION_FIELD_NUMBER: _ClassVar[int] PROTOCOL_FIELD_NUMBER: _ClassVar[int] @@ -524,6 +601,7 @@ class ClientInfo(_message.Message): BROWSER_VERSION_FIELD_NUMBER: _ClassVar[int] ADDRESS_FIELD_NUMBER: _ClassVar[int] NETWORK_FIELD_NUMBER: _ClassVar[int] + OTHER_SDKS_FIELD_NUMBER: _ClassVar[int] sdk: ClientInfo.SDK version: str protocol: int @@ -534,7 +612,8 @@ class ClientInfo(_message.Message): browser_version: str address: str network: str - def __init__(self, sdk: _Optional[_Union[ClientInfo.SDK, str]] = ..., version: _Optional[str] = ..., protocol: _Optional[int] = ..., os: _Optional[str] = ..., os_version: _Optional[str] = ..., device_model: _Optional[str] = ..., browser: _Optional[str] = ..., browser_version: _Optional[str] = ..., address: _Optional[str] = ..., network: _Optional[str] = ...) -> None: ... + other_sdks: str + def __init__(self, sdk: _Optional[_Union[ClientInfo.SDK, str]] = ..., version: _Optional[str] = ..., protocol: _Optional[int] = ..., os: _Optional[str] = ..., os_version: _Optional[str] = ..., device_model: _Optional[str] = ..., browser: _Optional[str] = ..., browser_version: _Optional[str] = ..., address: _Optional[str] = ..., network: _Optional[str] = ..., other_sdks: _Optional[str] = ...) -> None: ... class ClientConfiguration(_message.Message): __slots__ = ("video", "screen", "resume_connection", "disabled_codecs", "force_relay") @@ -587,7 +666,7 @@ class RTPDrift(_message.Message): def __init__(self, start_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., end_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., duration: _Optional[float] = ..., start_timestamp: _Optional[int] = ..., end_timestamp: _Optional[int] = ..., rtp_clock_ticks: _Optional[int] = ..., drift_samples: _Optional[int] = ..., drift_ms: _Optional[float] = ..., clock_rate: _Optional[float] = ...) -> None: ... class RTPStats(_message.Message): - __slots__ = ("start_time", "end_time", "duration", "packets", "packet_rate", "bytes", "header_bytes", "bitrate", "packets_lost", "packet_loss_rate", "packet_loss_percentage", "packets_duplicate", "packet_duplicate_rate", "bytes_duplicate", "header_bytes_duplicate", "bitrate_duplicate", "packets_padding", "packet_padding_rate", "bytes_padding", "header_bytes_padding", "bitrate_padding", "packets_out_of_order", "frames", "frame_rate", "jitter_current", "jitter_max", "gap_histogram", "nacks", "nack_acks", "nack_misses", "nack_repeated", "plis", "last_pli", "firs", "last_fir", "rtt_current", "rtt_max", "key_frames", "last_key_frame", "layer_lock_plis", "last_layer_lock_pli", "packet_drift", "report_drift", "rebased_report_drift") + __slots__ = ("start_time", "end_time", "duration", "packets", "packet_rate", "bytes", "header_bytes", "bitrate", "packets_lost", "packet_loss_rate", "packet_loss_percentage", "packets_duplicate", "packet_duplicate_rate", "bytes_duplicate", "header_bytes_duplicate", "bitrate_duplicate", "packets_padding", "packet_padding_rate", "bytes_padding", "header_bytes_padding", "bitrate_padding", "packets_out_of_order", "frames", "frame_rate", "jitter_current", "jitter_max", "gap_histogram", "nacks", "nack_acks", "nack_misses", "nack_repeated", "plis", "last_pli", "firs", "last_fir", "rtt_current", "rtt_max", "key_frames", "last_key_frame", "layer_lock_plis", "last_layer_lock_pli", "packet_drift", "ntp_report_drift", "rebased_report_drift", "received_report_drift") class GapHistogramEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -637,8 +716,9 @@ class RTPStats(_message.Message): LAYER_LOCK_PLIS_FIELD_NUMBER: _ClassVar[int] LAST_LAYER_LOCK_PLI_FIELD_NUMBER: _ClassVar[int] PACKET_DRIFT_FIELD_NUMBER: _ClassVar[int] - REPORT_DRIFT_FIELD_NUMBER: _ClassVar[int] + NTP_REPORT_DRIFT_FIELD_NUMBER: _ClassVar[int] REBASED_REPORT_DRIFT_FIELD_NUMBER: _ClassVar[int] + RECEIVED_REPORT_DRIFT_FIELD_NUMBER: _ClassVar[int] start_time: _timestamp_pb2.Timestamp end_time: _timestamp_pb2.Timestamp duration: float @@ -681,12 +761,31 @@ class RTPStats(_message.Message): layer_lock_plis: int last_layer_lock_pli: _timestamp_pb2.Timestamp packet_drift: RTPDrift - report_drift: RTPDrift + ntp_report_drift: RTPDrift rebased_report_drift: RTPDrift - def __init__(self, start_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., end_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., duration: _Optional[float] = ..., packets: _Optional[int] = ..., packet_rate: _Optional[float] = ..., bytes: _Optional[int] = ..., header_bytes: _Optional[int] = ..., bitrate: _Optional[float] = ..., packets_lost: _Optional[int] = ..., packet_loss_rate: _Optional[float] = ..., packet_loss_percentage: _Optional[float] = ..., packets_duplicate: _Optional[int] = ..., packet_duplicate_rate: _Optional[float] = ..., bytes_duplicate: _Optional[int] = ..., header_bytes_duplicate: _Optional[int] = ..., bitrate_duplicate: _Optional[float] = ..., packets_padding: _Optional[int] = ..., packet_padding_rate: _Optional[float] = ..., bytes_padding: _Optional[int] = ..., header_bytes_padding: _Optional[int] = ..., bitrate_padding: _Optional[float] = ..., packets_out_of_order: _Optional[int] = ..., frames: _Optional[int] = ..., frame_rate: _Optional[float] = ..., jitter_current: _Optional[float] = ..., jitter_max: _Optional[float] = ..., gap_histogram: _Optional[_Mapping[int, int]] = ..., nacks: _Optional[int] = ..., nack_acks: _Optional[int] = ..., nack_misses: _Optional[int] = ..., nack_repeated: _Optional[int] = ..., plis: _Optional[int] = ..., last_pli: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., firs: _Optional[int] = ..., last_fir: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., rtt_current: _Optional[int] = ..., rtt_max: _Optional[int] = ..., key_frames: _Optional[int] = ..., last_key_frame: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., layer_lock_plis: _Optional[int] = ..., last_layer_lock_pli: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., packet_drift: _Optional[_Union[RTPDrift, _Mapping]] = ..., report_drift: _Optional[_Union[RTPDrift, _Mapping]] = ..., rebased_report_drift: _Optional[_Union[RTPDrift, _Mapping]] = ...) -> None: ... + received_report_drift: RTPDrift + def __init__(self, start_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., end_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., duration: _Optional[float] = ..., packets: _Optional[int] = ..., packet_rate: _Optional[float] = ..., bytes: _Optional[int] = ..., header_bytes: _Optional[int] = ..., bitrate: _Optional[float] = ..., packets_lost: _Optional[int] = ..., packet_loss_rate: _Optional[float] = ..., packet_loss_percentage: _Optional[float] = ..., packets_duplicate: _Optional[int] = ..., packet_duplicate_rate: _Optional[float] = ..., bytes_duplicate: _Optional[int] = ..., header_bytes_duplicate: _Optional[int] = ..., bitrate_duplicate: _Optional[float] = ..., packets_padding: _Optional[int] = ..., packet_padding_rate: _Optional[float] = ..., bytes_padding: _Optional[int] = ..., header_bytes_padding: _Optional[int] = ..., bitrate_padding: _Optional[float] = ..., packets_out_of_order: _Optional[int] = ..., frames: _Optional[int] = ..., frame_rate: _Optional[float] = ..., jitter_current: _Optional[float] = ..., jitter_max: _Optional[float] = ..., gap_histogram: _Optional[_Mapping[int, int]] = ..., nacks: _Optional[int] = ..., nack_acks: _Optional[int] = ..., nack_misses: _Optional[int] = ..., nack_repeated: _Optional[int] = ..., plis: _Optional[int] = ..., last_pli: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., firs: _Optional[int] = ..., last_fir: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., rtt_current: _Optional[int] = ..., rtt_max: _Optional[int] = ..., key_frames: _Optional[int] = ..., last_key_frame: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., layer_lock_plis: _Optional[int] = ..., last_layer_lock_pli: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., packet_drift: _Optional[_Union[RTPDrift, _Mapping]] = ..., ntp_report_drift: _Optional[_Union[RTPDrift, _Mapping]] = ..., rebased_report_drift: _Optional[_Union[RTPDrift, _Mapping]] = ..., received_report_drift: _Optional[_Union[RTPDrift, _Mapping]] = ...) -> None: ... + +class RTCPSenderReportState(_message.Message): + __slots__ = ("rtp_timestamp", "rtp_timestamp_ext", "ntp_timestamp", "at", "at_adjusted", "packets", "octets") + RTP_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + RTP_TIMESTAMP_EXT_FIELD_NUMBER: _ClassVar[int] + NTP_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + AT_FIELD_NUMBER: _ClassVar[int] + AT_ADJUSTED_FIELD_NUMBER: _ClassVar[int] + PACKETS_FIELD_NUMBER: _ClassVar[int] + OCTETS_FIELD_NUMBER: _ClassVar[int] + rtp_timestamp: int + rtp_timestamp_ext: int + ntp_timestamp: int + at: int + at_adjusted: int + packets: int + octets: int + def __init__(self, rtp_timestamp: _Optional[int] = ..., rtp_timestamp_ext: _Optional[int] = ..., ntp_timestamp: _Optional[int] = ..., at: _Optional[int] = ..., at_adjusted: _Optional[int] = ..., packets: _Optional[int] = ..., octets: _Optional[int] = ...) -> None: ... class RTPForwarderState(_message.Message): - __slots__ = ("started", "reference_layer_spatial", "pre_start_time", "ext_first_timestamp", "dummy_start_timestamp_offset", "rtp_munger", "vp8_munger") + __slots__ = ("started", "reference_layer_spatial", "pre_start_time", "ext_first_timestamp", "dummy_start_timestamp_offset", "rtp_munger", "vp8_munger", "sender_report_state") STARTED_FIELD_NUMBER: _ClassVar[int] REFERENCE_LAYER_SPATIAL_FIELD_NUMBER: _ClassVar[int] PRE_START_TIME_FIELD_NUMBER: _ClassVar[int] @@ -694,6 +793,7 @@ class RTPForwarderState(_message.Message): DUMMY_START_TIMESTAMP_OFFSET_FIELD_NUMBER: _ClassVar[int] RTP_MUNGER_FIELD_NUMBER: _ClassVar[int] VP8_MUNGER_FIELD_NUMBER: _ClassVar[int] + SENDER_REPORT_STATE_FIELD_NUMBER: _ClassVar[int] started: bool reference_layer_spatial: int pre_start_time: int @@ -701,7 +801,8 @@ class RTPForwarderState(_message.Message): dummy_start_timestamp_offset: int rtp_munger: RTPMungerState vp8_munger: VP8MungerState - def __init__(self, started: bool = ..., reference_layer_spatial: _Optional[int] = ..., pre_start_time: _Optional[int] = ..., ext_first_timestamp: _Optional[int] = ..., dummy_start_timestamp_offset: _Optional[int] = ..., rtp_munger: _Optional[_Union[RTPMungerState, _Mapping]] = ..., vp8_munger: _Optional[_Union[VP8MungerState, _Mapping]] = ...) -> None: ... + sender_report_state: _containers.RepeatedCompositeFieldContainer[RTCPSenderReportState] + def __init__(self, started: bool = ..., reference_layer_spatial: _Optional[int] = ..., pre_start_time: _Optional[int] = ..., ext_first_timestamp: _Optional[int] = ..., dummy_start_timestamp_offset: _Optional[int] = ..., rtp_munger: _Optional[_Union[RTPMungerState, _Mapping]] = ..., vp8_munger: _Optional[_Union[VP8MungerState, _Mapping]] = ..., sender_report_state: _Optional[_Iterable[_Union[RTCPSenderReportState, _Mapping]]] = ...) -> None: ... class RTPMungerState(_message.Message): __slots__ = ("ext_last_sequence_number", "ext_second_last_sequence_number", "ext_last_timestamp", "ext_second_last_timestamp", "last_marker", "second_last_marker") diff --git a/livekit-protocol/livekit/protocol/room.py b/livekit-protocol/livekit/protocol/room.py index dcb52b33..637c5386 100644 --- a/livekit-protocol/livekit/protocol/room.py +++ b/livekit-protocol/livekit/protocol/room.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: livekit_room.proto -# Protobuf Python Version: 4.25.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -17,7 +17,7 @@ from . import agent_dispatch as _agent__dispatch_ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12livekit_room.proto\x12\x07livekit\x1a\x14livekit_models.proto\x1a\x14livekit_egress.proto\x1a\x1clivekit_agent_dispatch.proto\"\xd1\x02\n\x11\x43reateRoomRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x63onfig_name\x18\x0c \x01(\t\x12\x15\n\rempty_timeout\x18\x02 \x01(\r\x12\x19\n\x11\x64\x65parture_timeout\x18\n \x01(\r\x12\x18\n\x10max_participants\x18\x03 \x01(\r\x12\x0f\n\x07node_id\x18\x04 \x01(\t\x12\x10\n\x08metadata\x18\x05 \x01(\t\x12#\n\x06\x65gress\x18\x06 \x01(\x0b\x32\x13.livekit.RoomEgress\x12!\n\x05\x61gent\x18\x0b \x01(\x0b\x32\x12.livekit.RoomAgent\x12\x19\n\x11min_playout_delay\x18\x07 \x01(\r\x12\x19\n\x11max_playout_delay\x18\x08 \x01(\r\x12\x14\n\x0csync_streams\x18\t \x01(\x08\x12\x16\n\x0ereplay_enabled\x18\r \x01(\x08\"\x9e\x01\n\nRoomEgress\x12\x31\n\x04room\x18\x01 \x01(\x0b\x32#.livekit.RoomCompositeEgressRequest\x12\x33\n\x0bparticipant\x18\x03 \x01(\x0b\x32\x1e.livekit.AutoParticipantEgress\x12(\n\x06tracks\x18\x02 \x01(\x0b\x32\x18.livekit.AutoTrackEgress\";\n\tRoomAgent\x12.\n\ndispatches\x18\x01 \x03(\x0b\x32\x1a.livekit.RoomAgentDispatch\"!\n\x10ListRoomsRequest\x12\r\n\x05names\x18\x01 \x03(\t\"1\n\x11ListRoomsResponse\x12\x1c\n\x05rooms\x18\x01 \x03(\x0b\x32\r.livekit.Room\"!\n\x11\x44\x65leteRoomRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\"\x14\n\x12\x44\x65leteRoomResponse\"\'\n\x17ListParticipantsRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\"J\n\x18ListParticipantsResponse\x12.\n\x0cparticipants\x18\x01 \x03(\x0b\x32\x18.livekit.ParticipantInfo\"9\n\x17RoomParticipantIdentity\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\"\x1b\n\x19RemoveParticipantResponse\"X\n\x14MuteRoomTrackRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12\x11\n\ttrack_sid\x18\x03 \x01(\t\x12\r\n\x05muted\x18\x04 \x01(\x08\":\n\x15MuteRoomTrackResponse\x12!\n\x05track\x18\x01 \x01(\x0b\x32\x12.livekit.TrackInfo\"\x88\x02\n\x18UpdateParticipantRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12\x10\n\x08metadata\x18\x03 \x01(\t\x12\x32\n\npermission\x18\x04 \x01(\x0b\x32\x1e.livekit.ParticipantPermission\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x45\n\nattributes\x18\x06 \x03(\x0b\x32\x31.livekit.UpdateParticipantRequest.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\"\x9b\x01\n\x1aUpdateSubscriptionsRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12\x12\n\ntrack_sids\x18\x03 \x03(\t\x12\x11\n\tsubscribe\x18\x04 \x01(\x08\x12\x36\n\x12participant_tracks\x18\x05 \x03(\x0b\x32\x1a.livekit.ParticipantTracks\"\x1d\n\x1bUpdateSubscriptionsResponse\"\xb1\x01\n\x0fSendDataRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12&\n\x04kind\x18\x03 \x01(\x0e\x32\x18.livekit.DataPacket.Kind\x12\x1c\n\x10\x64\x65stination_sids\x18\x04 \x03(\tB\x02\x18\x01\x12\x1e\n\x16\x64\x65stination_identities\x18\x06 \x03(\t\x12\x12\n\x05topic\x18\x05 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_topic\"\x12\n\x10SendDataResponse\";\n\x19UpdateRoomMetadataRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08metadata\x18\x02 \x01(\t\"\x81\x02\n\x11RoomConfiguration\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x15\n\rempty_timeout\x18\x02 \x01(\r\x12\x19\n\x11\x64\x65parture_timeout\x18\x03 \x01(\r\x12\x18\n\x10max_participants\x18\x04 \x01(\r\x12#\n\x06\x65gress\x18\x05 \x01(\x0b\x32\x13.livekit.RoomEgress\x12!\n\x05\x61gent\x18\x06 \x01(\x0b\x32\x12.livekit.RoomAgent\x12\x19\n\x11min_playout_delay\x18\x07 \x01(\r\x12\x19\n\x11max_playout_delay\x18\x08 \x01(\r\x12\x14\n\x0csync_streams\x18\t \x01(\x08\x32\xe6\x06\n\x0bRoomService\x12\x37\n\nCreateRoom\x12\x1a.livekit.CreateRoomRequest\x1a\r.livekit.Room\x12\x42\n\tListRooms\x12\x19.livekit.ListRoomsRequest\x1a\x1a.livekit.ListRoomsResponse\x12\x45\n\nDeleteRoom\x12\x1a.livekit.DeleteRoomRequest\x1a\x1b.livekit.DeleteRoomResponse\x12W\n\x10ListParticipants\x12 .livekit.ListParticipantsRequest\x1a!.livekit.ListParticipantsResponse\x12L\n\x0eGetParticipant\x12 .livekit.RoomParticipantIdentity\x1a\x18.livekit.ParticipantInfo\x12Y\n\x11RemoveParticipant\x12 .livekit.RoomParticipantIdentity\x1a\".livekit.RemoveParticipantResponse\x12S\n\x12MutePublishedTrack\x12\x1d.livekit.MuteRoomTrackRequest\x1a\x1e.livekit.MuteRoomTrackResponse\x12P\n\x11UpdateParticipant\x12!.livekit.UpdateParticipantRequest\x1a\x18.livekit.ParticipantInfo\x12`\n\x13UpdateSubscriptions\x12#.livekit.UpdateSubscriptionsRequest\x1a$.livekit.UpdateSubscriptionsResponse\x12?\n\x08SendData\x12\x18.livekit.SendDataRequest\x1a\x19.livekit.SendDataResponse\x12G\n\x12UpdateRoomMetadata\x12\".livekit.UpdateRoomMetadataRequest\x1a\r.livekit.RoomBFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12livekit_room.proto\x12\x07livekit\x1a\x14livekit_models.proto\x1a\x14livekit_egress.proto\x1a\x1clivekit_agent_dispatch.proto\"\xda\x02\n\x11\x43reateRoomRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0broom_preset\x18\x0c \x01(\t\x12\x15\n\rempty_timeout\x18\x02 \x01(\r\x12\x19\n\x11\x64\x65parture_timeout\x18\n \x01(\r\x12\x18\n\x10max_participants\x18\x03 \x01(\r\x12\x0f\n\x07node_id\x18\x04 \x01(\t\x12\x10\n\x08metadata\x18\x05 \x01(\t\x12#\n\x06\x65gress\x18\x06 \x01(\x0b\x32\x13.livekit.RoomEgress\x12\x19\n\x11min_playout_delay\x18\x07 \x01(\r\x12\x19\n\x11max_playout_delay\x18\x08 \x01(\r\x12\x14\n\x0csync_streams\x18\t \x01(\x08\x12\x16\n\x0ereplay_enabled\x18\r \x01(\x08\x12*\n\x06\x61gents\x18\x0e \x03(\x0b\x32\x1a.livekit.RoomAgentDispatch\"\x9e\x01\n\nRoomEgress\x12\x31\n\x04room\x18\x01 \x01(\x0b\x32#.livekit.RoomCompositeEgressRequest\x12\x33\n\x0bparticipant\x18\x03 \x01(\x0b\x32\x1e.livekit.AutoParticipantEgress\x12(\n\x06tracks\x18\x02 \x01(\x0b\x32\x18.livekit.AutoTrackEgress\";\n\tRoomAgent\x12.\n\ndispatches\x18\x01 \x03(\x0b\x32\x1a.livekit.RoomAgentDispatch\"!\n\x10ListRoomsRequest\x12\r\n\x05names\x18\x01 \x03(\t\"1\n\x11ListRoomsResponse\x12\x1c\n\x05rooms\x18\x01 \x03(\x0b\x32\r.livekit.Room\"!\n\x11\x44\x65leteRoomRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\"\x14\n\x12\x44\x65leteRoomResponse\"\'\n\x17ListParticipantsRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\"J\n\x18ListParticipantsResponse\x12.\n\x0cparticipants\x18\x01 \x03(\x0b\x32\x18.livekit.ParticipantInfo\"9\n\x17RoomParticipantIdentity\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\"\x1b\n\x19RemoveParticipantResponse\"X\n\x14MuteRoomTrackRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12\x11\n\ttrack_sid\x18\x03 \x01(\t\x12\r\n\x05muted\x18\x04 \x01(\x08\":\n\x15MuteRoomTrackResponse\x12!\n\x05track\x18\x01 \x01(\x0b\x32\x12.livekit.TrackInfo\"\x88\x02\n\x18UpdateParticipantRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12\x10\n\x08metadata\x18\x03 \x01(\t\x12\x32\n\npermission\x18\x04 \x01(\x0b\x32\x1e.livekit.ParticipantPermission\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x45\n\nattributes\x18\x06 \x03(\x0b\x32\x31.livekit.UpdateParticipantRequest.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\"\x9b\x01\n\x1aUpdateSubscriptionsRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08identity\x18\x02 \x01(\t\x12\x12\n\ntrack_sids\x18\x03 \x03(\t\x12\x11\n\tsubscribe\x18\x04 \x01(\x08\x12\x36\n\x12participant_tracks\x18\x05 \x03(\x0b\x32\x1a.livekit.ParticipantTracks\"\x1d\n\x1bUpdateSubscriptionsResponse\"\xb1\x01\n\x0fSendDataRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12&\n\x04kind\x18\x03 \x01(\x0e\x32\x18.livekit.DataPacket.Kind\x12\x1c\n\x10\x64\x65stination_sids\x18\x04 \x03(\tB\x02\x18\x01\x12\x1e\n\x16\x64\x65stination_identities\x18\x06 \x03(\t\x12\x12\n\x05topic\x18\x05 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_topic\"\x12\n\x10SendDataResponse\";\n\x19UpdateRoomMetadataRequest\x12\x0c\n\x04room\x18\x01 \x01(\t\x12\x10\n\x08metadata\x18\x02 \x01(\t\"\x8a\x02\n\x11RoomConfiguration\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x15\n\rempty_timeout\x18\x02 \x01(\r\x12\x19\n\x11\x64\x65parture_timeout\x18\x03 \x01(\r\x12\x18\n\x10max_participants\x18\x04 \x01(\r\x12#\n\x06\x65gress\x18\x05 \x01(\x0b\x32\x13.livekit.RoomEgress\x12\x19\n\x11min_playout_delay\x18\x07 \x01(\r\x12\x19\n\x11max_playout_delay\x18\x08 \x01(\r\x12\x14\n\x0csync_streams\x18\t \x01(\x08\x12*\n\x06\x61gents\x18\n \x03(\x0b\x32\x1a.livekit.RoomAgentDispatch2\xe6\x06\n\x0bRoomService\x12\x37\n\nCreateRoom\x12\x1a.livekit.CreateRoomRequest\x1a\r.livekit.Room\x12\x42\n\tListRooms\x12\x19.livekit.ListRoomsRequest\x1a\x1a.livekit.ListRoomsResponse\x12\x45\n\nDeleteRoom\x12\x1a.livekit.DeleteRoomRequest\x1a\x1b.livekit.DeleteRoomResponse\x12W\n\x10ListParticipants\x12 .livekit.ListParticipantsRequest\x1a!.livekit.ListParticipantsResponse\x12L\n\x0eGetParticipant\x12 .livekit.RoomParticipantIdentity\x1a\x18.livekit.ParticipantInfo\x12Y\n\x11RemoveParticipant\x12 .livekit.RoomParticipantIdentity\x1a\".livekit.RemoveParticipantResponse\x12S\n\x12MutePublishedTrack\x12\x1d.livekit.MuteRoomTrackRequest\x1a\x1e.livekit.MuteRoomTrackResponse\x12P\n\x11UpdateParticipant\x12!.livekit.UpdateParticipantRequest\x1a\x18.livekit.ParticipantInfo\x12`\n\x13UpdateSubscriptions\x12#.livekit.UpdateSubscriptionsRequest\x1a$.livekit.UpdateSubscriptionsResponse\x12?\n\x08SendData\x12\x18.livekit.SendDataRequest\x1a\x19.livekit.SendDataResponse\x12G\n\x12UpdateRoomMetadata\x12\".livekit.UpdateRoomMetadataRequest\x1a\r.livekit.RoomBFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -30,47 +30,47 @@ _globals['_SENDDATAREQUEST'].fields_by_name['destination_sids']._options = None _globals['_SENDDATAREQUEST'].fields_by_name['destination_sids']._serialized_options = b'\030\001' _globals['_CREATEROOMREQUEST']._serialized_start=106 - _globals['_CREATEROOMREQUEST']._serialized_end=443 - _globals['_ROOMEGRESS']._serialized_start=446 - _globals['_ROOMEGRESS']._serialized_end=604 - _globals['_ROOMAGENT']._serialized_start=606 - _globals['_ROOMAGENT']._serialized_end=665 - _globals['_LISTROOMSREQUEST']._serialized_start=667 - _globals['_LISTROOMSREQUEST']._serialized_end=700 - _globals['_LISTROOMSRESPONSE']._serialized_start=702 - _globals['_LISTROOMSRESPONSE']._serialized_end=751 - _globals['_DELETEROOMREQUEST']._serialized_start=753 - _globals['_DELETEROOMREQUEST']._serialized_end=786 - _globals['_DELETEROOMRESPONSE']._serialized_start=788 - _globals['_DELETEROOMRESPONSE']._serialized_end=808 - _globals['_LISTPARTICIPANTSREQUEST']._serialized_start=810 - _globals['_LISTPARTICIPANTSREQUEST']._serialized_end=849 - _globals['_LISTPARTICIPANTSRESPONSE']._serialized_start=851 - _globals['_LISTPARTICIPANTSRESPONSE']._serialized_end=925 - _globals['_ROOMPARTICIPANTIDENTITY']._serialized_start=927 - _globals['_ROOMPARTICIPANTIDENTITY']._serialized_end=984 - _globals['_REMOVEPARTICIPANTRESPONSE']._serialized_start=986 - _globals['_REMOVEPARTICIPANTRESPONSE']._serialized_end=1013 - _globals['_MUTEROOMTRACKREQUEST']._serialized_start=1015 - _globals['_MUTEROOMTRACKREQUEST']._serialized_end=1103 - _globals['_MUTEROOMTRACKRESPONSE']._serialized_start=1105 - _globals['_MUTEROOMTRACKRESPONSE']._serialized_end=1163 - _globals['_UPDATEPARTICIPANTREQUEST']._serialized_start=1166 - _globals['_UPDATEPARTICIPANTREQUEST']._serialized_end=1430 - _globals['_UPDATEPARTICIPANTREQUEST_ATTRIBUTESENTRY']._serialized_start=1381 - _globals['_UPDATEPARTICIPANTREQUEST_ATTRIBUTESENTRY']._serialized_end=1430 - _globals['_UPDATESUBSCRIPTIONSREQUEST']._serialized_start=1433 - _globals['_UPDATESUBSCRIPTIONSREQUEST']._serialized_end=1588 - _globals['_UPDATESUBSCRIPTIONSRESPONSE']._serialized_start=1590 - _globals['_UPDATESUBSCRIPTIONSRESPONSE']._serialized_end=1619 - _globals['_SENDDATAREQUEST']._serialized_start=1622 - _globals['_SENDDATAREQUEST']._serialized_end=1799 - _globals['_SENDDATARESPONSE']._serialized_start=1801 - _globals['_SENDDATARESPONSE']._serialized_end=1819 - _globals['_UPDATEROOMMETADATAREQUEST']._serialized_start=1821 - _globals['_UPDATEROOMMETADATAREQUEST']._serialized_end=1880 - _globals['_ROOMCONFIGURATION']._serialized_start=1883 - _globals['_ROOMCONFIGURATION']._serialized_end=2140 - _globals['_ROOMSERVICE']._serialized_start=2143 - _globals['_ROOMSERVICE']._serialized_end=3013 + _globals['_CREATEROOMREQUEST']._serialized_end=452 + _globals['_ROOMEGRESS']._serialized_start=455 + _globals['_ROOMEGRESS']._serialized_end=613 + _globals['_ROOMAGENT']._serialized_start=615 + _globals['_ROOMAGENT']._serialized_end=674 + _globals['_LISTROOMSREQUEST']._serialized_start=676 + _globals['_LISTROOMSREQUEST']._serialized_end=709 + _globals['_LISTROOMSRESPONSE']._serialized_start=711 + _globals['_LISTROOMSRESPONSE']._serialized_end=760 + _globals['_DELETEROOMREQUEST']._serialized_start=762 + _globals['_DELETEROOMREQUEST']._serialized_end=795 + _globals['_DELETEROOMRESPONSE']._serialized_start=797 + _globals['_DELETEROOMRESPONSE']._serialized_end=817 + _globals['_LISTPARTICIPANTSREQUEST']._serialized_start=819 + _globals['_LISTPARTICIPANTSREQUEST']._serialized_end=858 + _globals['_LISTPARTICIPANTSRESPONSE']._serialized_start=860 + _globals['_LISTPARTICIPANTSRESPONSE']._serialized_end=934 + _globals['_ROOMPARTICIPANTIDENTITY']._serialized_start=936 + _globals['_ROOMPARTICIPANTIDENTITY']._serialized_end=993 + _globals['_REMOVEPARTICIPANTRESPONSE']._serialized_start=995 + _globals['_REMOVEPARTICIPANTRESPONSE']._serialized_end=1022 + _globals['_MUTEROOMTRACKREQUEST']._serialized_start=1024 + _globals['_MUTEROOMTRACKREQUEST']._serialized_end=1112 + _globals['_MUTEROOMTRACKRESPONSE']._serialized_start=1114 + _globals['_MUTEROOMTRACKRESPONSE']._serialized_end=1172 + _globals['_UPDATEPARTICIPANTREQUEST']._serialized_start=1175 + _globals['_UPDATEPARTICIPANTREQUEST']._serialized_end=1439 + _globals['_UPDATEPARTICIPANTREQUEST_ATTRIBUTESENTRY']._serialized_start=1390 + _globals['_UPDATEPARTICIPANTREQUEST_ATTRIBUTESENTRY']._serialized_end=1439 + _globals['_UPDATESUBSCRIPTIONSREQUEST']._serialized_start=1442 + _globals['_UPDATESUBSCRIPTIONSREQUEST']._serialized_end=1597 + _globals['_UPDATESUBSCRIPTIONSRESPONSE']._serialized_start=1599 + _globals['_UPDATESUBSCRIPTIONSRESPONSE']._serialized_end=1628 + _globals['_SENDDATAREQUEST']._serialized_start=1631 + _globals['_SENDDATAREQUEST']._serialized_end=1808 + _globals['_SENDDATARESPONSE']._serialized_start=1810 + _globals['_SENDDATARESPONSE']._serialized_end=1828 + _globals['_UPDATEROOMMETADATAREQUEST']._serialized_start=1830 + _globals['_UPDATEROOMMETADATAREQUEST']._serialized_end=1889 + _globals['_ROOMCONFIGURATION']._serialized_start=1892 + _globals['_ROOMCONFIGURATION']._serialized_end=2158 + _globals['_ROOMSERVICE']._serialized_start=2161 + _globals['_ROOMSERVICE']._serialized_end=3031 # @@protoc_insertion_point(module_scope) diff --git a/livekit-protocol/livekit/protocol/room.pyi b/livekit-protocol/livekit/protocol/room.pyi index a3962f4b..75e12ea0 100644 --- a/livekit-protocol/livekit/protocol/room.pyi +++ b/livekit-protocol/livekit/protocol/room.pyi @@ -9,34 +9,34 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map DESCRIPTOR: _descriptor.FileDescriptor class CreateRoomRequest(_message.Message): - __slots__ = ("name", "config_name", "empty_timeout", "departure_timeout", "max_participants", "node_id", "metadata", "egress", "agent", "min_playout_delay", "max_playout_delay", "sync_streams", "replay_enabled") + __slots__ = ("name", "room_preset", "empty_timeout", "departure_timeout", "max_participants", "node_id", "metadata", "egress", "min_playout_delay", "max_playout_delay", "sync_streams", "replay_enabled", "agents") NAME_FIELD_NUMBER: _ClassVar[int] - CONFIG_NAME_FIELD_NUMBER: _ClassVar[int] + ROOM_PRESET_FIELD_NUMBER: _ClassVar[int] EMPTY_TIMEOUT_FIELD_NUMBER: _ClassVar[int] DEPARTURE_TIMEOUT_FIELD_NUMBER: _ClassVar[int] MAX_PARTICIPANTS_FIELD_NUMBER: _ClassVar[int] NODE_ID_FIELD_NUMBER: _ClassVar[int] METADATA_FIELD_NUMBER: _ClassVar[int] EGRESS_FIELD_NUMBER: _ClassVar[int] - AGENT_FIELD_NUMBER: _ClassVar[int] MIN_PLAYOUT_DELAY_FIELD_NUMBER: _ClassVar[int] MAX_PLAYOUT_DELAY_FIELD_NUMBER: _ClassVar[int] SYNC_STREAMS_FIELD_NUMBER: _ClassVar[int] REPLAY_ENABLED_FIELD_NUMBER: _ClassVar[int] + AGENTS_FIELD_NUMBER: _ClassVar[int] name: str - config_name: str + room_preset: str empty_timeout: int departure_timeout: int max_participants: int node_id: str metadata: str egress: RoomEgress - agent: RoomAgent min_playout_delay: int max_playout_delay: int sync_streams: bool replay_enabled: bool - def __init__(self, name: _Optional[str] = ..., config_name: _Optional[str] = ..., empty_timeout: _Optional[int] = ..., departure_timeout: _Optional[int] = ..., max_participants: _Optional[int] = ..., node_id: _Optional[str] = ..., metadata: _Optional[str] = ..., egress: _Optional[_Union[RoomEgress, _Mapping]] = ..., agent: _Optional[_Union[RoomAgent, _Mapping]] = ..., min_playout_delay: _Optional[int] = ..., max_playout_delay: _Optional[int] = ..., sync_streams: bool = ..., replay_enabled: bool = ...) -> None: ... + agents: _containers.RepeatedCompositeFieldContainer[_agent_dispatch.RoomAgentDispatch] + def __init__(self, name: _Optional[str] = ..., room_preset: _Optional[str] = ..., empty_timeout: _Optional[int] = ..., departure_timeout: _Optional[int] = ..., max_participants: _Optional[int] = ..., node_id: _Optional[str] = ..., metadata: _Optional[str] = ..., egress: _Optional[_Union[RoomEgress, _Mapping]] = ..., min_playout_delay: _Optional[int] = ..., max_playout_delay: _Optional[int] = ..., sync_streams: bool = ..., replay_enabled: bool = ..., agents: _Optional[_Iterable[_Union[_agent_dispatch.RoomAgentDispatch, _Mapping]]] = ...) -> None: ... class RoomEgress(_message.Message): __slots__ = ("room", "participant", "tracks") @@ -188,23 +188,23 @@ class UpdateRoomMetadataRequest(_message.Message): def __init__(self, room: _Optional[str] = ..., metadata: _Optional[str] = ...) -> None: ... class RoomConfiguration(_message.Message): - __slots__ = ("name", "empty_timeout", "departure_timeout", "max_participants", "egress", "agent", "min_playout_delay", "max_playout_delay", "sync_streams") + __slots__ = ("name", "empty_timeout", "departure_timeout", "max_participants", "egress", "min_playout_delay", "max_playout_delay", "sync_streams", "agents") NAME_FIELD_NUMBER: _ClassVar[int] EMPTY_TIMEOUT_FIELD_NUMBER: _ClassVar[int] DEPARTURE_TIMEOUT_FIELD_NUMBER: _ClassVar[int] MAX_PARTICIPANTS_FIELD_NUMBER: _ClassVar[int] EGRESS_FIELD_NUMBER: _ClassVar[int] - AGENT_FIELD_NUMBER: _ClassVar[int] MIN_PLAYOUT_DELAY_FIELD_NUMBER: _ClassVar[int] MAX_PLAYOUT_DELAY_FIELD_NUMBER: _ClassVar[int] SYNC_STREAMS_FIELD_NUMBER: _ClassVar[int] + AGENTS_FIELD_NUMBER: _ClassVar[int] name: str empty_timeout: int departure_timeout: int max_participants: int egress: RoomEgress - agent: RoomAgent min_playout_delay: int max_playout_delay: int sync_streams: bool - def __init__(self, name: _Optional[str] = ..., empty_timeout: _Optional[int] = ..., departure_timeout: _Optional[int] = ..., max_participants: _Optional[int] = ..., egress: _Optional[_Union[RoomEgress, _Mapping]] = ..., agent: _Optional[_Union[RoomAgent, _Mapping]] = ..., min_playout_delay: _Optional[int] = ..., max_playout_delay: _Optional[int] = ..., sync_streams: bool = ...) -> None: ... + agents: _containers.RepeatedCompositeFieldContainer[_agent_dispatch.RoomAgentDispatch] + def __init__(self, name: _Optional[str] = ..., empty_timeout: _Optional[int] = ..., departure_timeout: _Optional[int] = ..., max_participants: _Optional[int] = ..., egress: _Optional[_Union[RoomEgress, _Mapping]] = ..., min_playout_delay: _Optional[int] = ..., max_playout_delay: _Optional[int] = ..., sync_streams: bool = ..., agents: _Optional[_Iterable[_Union[_agent_dispatch.RoomAgentDispatch, _Mapping]]] = ...) -> None: ... diff --git a/livekit-protocol/livekit/protocol/sip.py b/livekit-protocol/livekit/protocol/sip.py index 7106c3cc..cc039f95 100644 --- a/livekit-protocol/livekit/protocol/sip.py +++ b/livekit-protocol/livekit/protocol/sip.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: livekit_sip.proto -# Protobuf Python Version: 4.25.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -12,9 +12,12 @@ _sym_db = _symbol_database.Default() +from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from . import models as _models_ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11livekit_sip.proto\x12\x07livekit\"\xaf\x02\n\x15\x43reateSIPTrunkRequest\x12\x19\n\x11inbound_addresses\x18\x01 \x03(\t\x12\x18\n\x10outbound_address\x18\x02 \x01(\t\x12\x17\n\x0foutbound_number\x18\x03 \x01(\t\x12!\n\x15inbound_numbers_regex\x18\x04 \x03(\tB\x02\x18\x01\x12\x17\n\x0finbound_numbers\x18\t \x03(\t\x12\x18\n\x10inbound_username\x18\x05 \x01(\t\x12\x18\n\x10inbound_password\x18\x06 \x01(\t\x12\x19\n\x11outbound_username\x18\x07 \x01(\t\x12\x19\n\x11outbound_password\x18\x08 \x01(\t\x12\x0c\n\x04name\x18\n \x01(\t\x12\x10\n\x08metadata\x18\x0b \x01(\t:\x02\x18\x01\"\xdb\x03\n\x0cSIPTrunkInfo\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\x12-\n\x04kind\x18\x0e \x01(\x0e\x32\x1f.livekit.SIPTrunkInfo.TrunkKind\x12\x19\n\x11inbound_addresses\x18\x02 \x03(\t\x12\x18\n\x10outbound_address\x18\x03 \x01(\t\x12\x17\n\x0foutbound_number\x18\x04 \x01(\t\x12(\n\ttransport\x18\r \x01(\x0e\x32\x15.livekit.SIPTransport\x12!\n\x15inbound_numbers_regex\x18\x05 \x03(\tB\x02\x18\x01\x12\x17\n\x0finbound_numbers\x18\n \x03(\t\x12\x18\n\x10inbound_username\x18\x06 \x01(\t\x12\x18\n\x10inbound_password\x18\x07 \x01(\t\x12\x19\n\x11outbound_username\x18\x08 \x01(\t\x12\x19\n\x11outbound_password\x18\t \x01(\t\x12\x0c\n\x04name\x18\x0b \x01(\t\x12\x10\n\x08metadata\x18\x0c \x01(\t\"D\n\tTrunkKind\x12\x10\n\x0cTRUNK_LEGACY\x10\x00\x12\x11\n\rTRUNK_INBOUND\x10\x01\x12\x12\n\x0eTRUNK_OUTBOUND\x10\x02:\x02\x18\x01\"K\n\x1c\x43reateSIPInboundTrunkRequest\x12+\n\x05trunk\x18\x01 \x01(\x0b\x32\x1c.livekit.SIPInboundTrunkInfo\"\xbe\x01\n\x13SIPInboundTrunkInfo\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08metadata\x18\x03 \x01(\t\x12\x0f\n\x07numbers\x18\x04 \x03(\t\x12\x19\n\x11\x61llowed_addresses\x18\x05 \x03(\t\x12\x17\n\x0f\x61llowed_numbers\x18\x06 \x03(\t\x12\x15\n\rauth_username\x18\x07 \x01(\t\x12\x15\n\rauth_password\x18\x08 \x01(\t\"M\n\x1d\x43reateSIPOutboundTrunkRequest\x12,\n\x05trunk\x18\x01 \x01(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfo\"\xc6\x01\n\x14SIPOutboundTrunkInfo\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08metadata\x18\x03 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\x04 \x01(\t\x12(\n\ttransport\x18\x05 \x01(\x0e\x32\x15.livekit.SIPTransport\x12\x0f\n\x07numbers\x18\x06 \x03(\t\x12\x15\n\rauth_username\x18\x07 \x01(\t\x12\x15\n\rauth_password\x18\x08 \x01(\t\"\x19\n\x13ListSIPTrunkRequest:\x02\x18\x01\"@\n\x14ListSIPTrunkResponse\x12$\n\x05items\x18\x01 \x03(\x0b\x32\x15.livekit.SIPTrunkInfo:\x02\x18\x01\"\x1c\n\x1aListSIPInboundTrunkRequest\"J\n\x1bListSIPInboundTrunkResponse\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.livekit.SIPInboundTrunkInfo\"\x1d\n\x1bListSIPOutboundTrunkRequest\"L\n\x1cListSIPOutboundTrunkResponse\x12,\n\x05items\x18\x01 \x03(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfo\"-\n\x15\x44\x65leteSIPTrunkRequest\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\"7\n\x15SIPDispatchRuleDirect\x12\x11\n\troom_name\x18\x01 \x01(\t\x12\x0b\n\x03pin\x18\x02 \x01(\t\"=\n\x19SIPDispatchRuleIndividual\x12\x13\n\x0broom_prefix\x18\x01 \x01(\t\x12\x0b\n\x03pin\x18\x02 \x01(\t\"\xa1\x01\n\x0fSIPDispatchRule\x12>\n\x14\x64ispatch_rule_direct\x18\x01 \x01(\x0b\x32\x1e.livekit.SIPDispatchRuleDirectH\x00\x12\x46\n\x18\x64ispatch_rule_individual\x18\x02 \x01(\x0b\x32\".livekit.SIPDispatchRuleIndividualH\x00\x42\x06\n\x04rule\"\xab\x02\n\x1c\x43reateSIPDispatchRuleRequest\x12&\n\x04rule\x18\x01 \x01(\x0b\x32\x18.livekit.SIPDispatchRule\x12\x11\n\ttrunk_ids\x18\x02 \x03(\t\x12\x19\n\x11hide_phone_number\x18\x03 \x01(\x08\x12\x17\n\x0finbound_numbers\x18\x06 \x03(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x10\n\x08metadata\x18\x05 \x01(\t\x12I\n\nattributes\x18\x07 \x03(\x0b\x32\x35.livekit.CreateSIPDispatchRuleRequest.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\"\xb7\x02\n\x13SIPDispatchRuleInfo\x12\x1c\n\x14sip_dispatch_rule_id\x18\x01 \x01(\t\x12&\n\x04rule\x18\x02 \x01(\x0b\x32\x18.livekit.SIPDispatchRule\x12\x11\n\ttrunk_ids\x18\x03 \x03(\t\x12\x19\n\x11hide_phone_number\x18\x04 \x01(\x08\x12\x17\n\x0finbound_numbers\x18\x07 \x03(\t\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x10\n\x08metadata\x18\x06 \x01(\t\x12@\n\nattributes\x18\x08 \x03(\x0b\x32,.livekit.SIPDispatchRuleInfo.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\"\x1c\n\x1aListSIPDispatchRuleRequest\"J\n\x1bListSIPDispatchRuleResponse\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.livekit.SIPDispatchRuleInfo\"<\n\x1c\x44\x65leteSIPDispatchRuleRequest\x12\x1c\n\x14sip_dispatch_rule_id\x18\x01 \x01(\t\"\x90\x03\n\x1b\x43reateSIPParticipantRequest\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\x12\x13\n\x0bsip_call_to\x18\x02 \x01(\t\x12\x11\n\troom_name\x18\x03 \x01(\t\x12\x1c\n\x14participant_identity\x18\x04 \x01(\t\x12\x18\n\x10participant_name\x18\x07 \x01(\t\x12\x1c\n\x14participant_metadata\x18\x08 \x01(\t\x12_\n\x16participant_attributes\x18\t \x03(\x0b\x32?.livekit.CreateSIPParticipantRequest.ParticipantAttributesEntry\x12\x0c\n\x04\x64tmf\x18\x05 \x01(\t\x12\x15\n\rplay_ringtone\x18\x06 \x01(\x08\x12\x19\n\x11hide_phone_number\x18\n \x01(\x08\x1a<\n\x1aParticipantAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"r\n\x12SIPParticipantInfo\x12\x16\n\x0eparticipant_id\x18\x01 \x01(\t\x12\x1c\n\x14participant_identity\x18\x02 \x01(\t\x12\x11\n\troom_name\x18\x03 \x01(\t\x12\x13\n\x0bsip_call_id\x18\x04 \x01(\t*k\n\x0cSIPTransport\x12\x16\n\x12SIP_TRANSPORT_AUTO\x10\x00\x12\x15\n\x11SIP_TRANSPORT_UDP\x10\x01\x12\x15\n\x11SIP_TRANSPORT_TCP\x10\x02\x12\x15\n\x11SIP_TRANSPORT_TLS\x10\x03\x32\xed\x07\n\x03SIP\x12L\n\x0e\x43reateSIPTrunk\x12\x1e.livekit.CreateSIPTrunkRequest\x1a\x15.livekit.SIPTrunkInfo\"\x03\x88\x02\x01\x12P\n\x0cListSIPTrunk\x12\x1c.livekit.ListSIPTrunkRequest\x1a\x1d.livekit.ListSIPTrunkResponse\"\x03\x88\x02\x01\x12\\\n\x15\x43reateSIPInboundTrunk\x12%.livekit.CreateSIPInboundTrunkRequest\x1a\x1c.livekit.SIPInboundTrunkInfo\x12_\n\x16\x43reateSIPOutboundTrunk\x12&.livekit.CreateSIPOutboundTrunkRequest\x1a\x1d.livekit.SIPOutboundTrunkInfo\x12`\n\x13ListSIPInboundTrunk\x12#.livekit.ListSIPInboundTrunkRequest\x1a$.livekit.ListSIPInboundTrunkResponse\x12\x63\n\x14ListSIPOutboundTrunk\x12$.livekit.ListSIPOutboundTrunkRequest\x1a%.livekit.ListSIPOutboundTrunkResponse\x12G\n\x0e\x44\x65leteSIPTrunk\x12\x1e.livekit.DeleteSIPTrunkRequest\x1a\x15.livekit.SIPTrunkInfo\x12\\\n\x15\x43reateSIPDispatchRule\x12%.livekit.CreateSIPDispatchRuleRequest\x1a\x1c.livekit.SIPDispatchRuleInfo\x12`\n\x13ListSIPDispatchRule\x12#.livekit.ListSIPDispatchRuleRequest\x1a$.livekit.ListSIPDispatchRuleResponse\x12\\\n\x15\x44\x65leteSIPDispatchRule\x12%.livekit.DeleteSIPDispatchRuleRequest\x1a\x1c.livekit.SIPDispatchRuleInfo\x12Y\n\x14\x43reateSIPParticipant\x12$.livekit.CreateSIPParticipantRequest\x1a\x1b.livekit.SIPParticipantInfoBFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11livekit_sip.proto\x12\x07livekit\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x14livekit_models.proto\"\xaf\x02\n\x15\x43reateSIPTrunkRequest\x12\x19\n\x11inbound_addresses\x18\x01 \x03(\t\x12\x18\n\x10outbound_address\x18\x02 \x01(\t\x12\x17\n\x0foutbound_number\x18\x03 \x01(\t\x12!\n\x15inbound_numbers_regex\x18\x04 \x03(\tB\x02\x18\x01\x12\x17\n\x0finbound_numbers\x18\t \x03(\t\x12\x18\n\x10inbound_username\x18\x05 \x01(\t\x12\x18\n\x10inbound_password\x18\x06 \x01(\t\x12\x19\n\x11outbound_username\x18\x07 \x01(\t\x12\x19\n\x11outbound_password\x18\x08 \x01(\t\x12\x0c\n\x04name\x18\n \x01(\t\x12\x10\n\x08metadata\x18\x0b \x01(\t:\x02\x18\x01\"\xdb\x03\n\x0cSIPTrunkInfo\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\x12-\n\x04kind\x18\x0e \x01(\x0e\x32\x1f.livekit.SIPTrunkInfo.TrunkKind\x12\x19\n\x11inbound_addresses\x18\x02 \x03(\t\x12\x18\n\x10outbound_address\x18\x03 \x01(\t\x12\x17\n\x0foutbound_number\x18\x04 \x01(\t\x12(\n\ttransport\x18\r \x01(\x0e\x32\x15.livekit.SIPTransport\x12!\n\x15inbound_numbers_regex\x18\x05 \x03(\tB\x02\x18\x01\x12\x17\n\x0finbound_numbers\x18\n \x03(\t\x12\x18\n\x10inbound_username\x18\x06 \x01(\t\x12\x18\n\x10inbound_password\x18\x07 \x01(\t\x12\x19\n\x11outbound_username\x18\x08 \x01(\t\x12\x19\n\x11outbound_password\x18\t \x01(\t\x12\x0c\n\x04name\x18\x0b \x01(\t\x12\x10\n\x08metadata\x18\x0c \x01(\t\"D\n\tTrunkKind\x12\x10\n\x0cTRUNK_LEGACY\x10\x00\x12\x11\n\rTRUNK_INBOUND\x10\x01\x12\x12\n\x0eTRUNK_OUTBOUND\x10\x02:\x02\x18\x01\"K\n\x1c\x43reateSIPInboundTrunkRequest\x12+\n\x05trunk\x18\x01 \x01(\x0b\x32\x1c.livekit.SIPInboundTrunkInfo\"\xbd\x04\n\x13SIPInboundTrunkInfo\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08metadata\x18\x03 \x01(\t\x12\x0f\n\x07numbers\x18\x04 \x03(\t\x12\x19\n\x11\x61llowed_addresses\x18\x05 \x03(\t\x12\x17\n\x0f\x61llowed_numbers\x18\x06 \x03(\t\x12\x15\n\rauth_username\x18\x07 \x01(\t\x12\x15\n\rauth_password\x18\x08 \x01(\t\x12:\n\x07headers\x18\t \x03(\x0b\x32).livekit.SIPInboundTrunkInfo.HeadersEntry\x12T\n\x15headers_to_attributes\x18\n \x03(\x0b\x32\x35.livekit.SIPInboundTrunkInfo.HeadersToAttributesEntry\x12\x32\n\x0fringing_timeout\x18\x0b \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x34\n\x11max_call_duration\x18\x0c \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x15\n\rkrisp_enabled\x18\r \x01(\x08\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18HeadersToAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"M\n\x1d\x43reateSIPOutboundTrunkRequest\x12,\n\x05trunk\x18\x01 \x01(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfo\"\xc6\x03\n\x14SIPOutboundTrunkInfo\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08metadata\x18\x03 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\x04 \x01(\t\x12(\n\ttransport\x18\x05 \x01(\x0e\x32\x15.livekit.SIPTransport\x12\x0f\n\x07numbers\x18\x06 \x03(\t\x12\x15\n\rauth_username\x18\x07 \x01(\t\x12\x15\n\rauth_password\x18\x08 \x01(\t\x12;\n\x07headers\x18\t \x03(\x0b\x32*.livekit.SIPOutboundTrunkInfo.HeadersEntry\x12U\n\x15headers_to_attributes\x18\n \x03(\x0b\x32\x36.livekit.SIPOutboundTrunkInfo.HeadersToAttributesEntry\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18HeadersToAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"1\n\x19GetSIPInboundTrunkRequest\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\"I\n\x1aGetSIPInboundTrunkResponse\x12+\n\x05trunk\x18\x01 \x01(\x0b\x32\x1c.livekit.SIPInboundTrunkInfo\"2\n\x1aGetSIPOutboundTrunkRequest\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\"K\n\x1bGetSIPOutboundTrunkResponse\x12,\n\x05trunk\x18\x01 \x01(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfo\"\x19\n\x13ListSIPTrunkRequest:\x02\x18\x01\"@\n\x14ListSIPTrunkResponse\x12$\n\x05items\x18\x01 \x03(\x0b\x32\x15.livekit.SIPTrunkInfo:\x02\x18\x01\"\x1c\n\x1aListSIPInboundTrunkRequest\"J\n\x1bListSIPInboundTrunkResponse\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.livekit.SIPInboundTrunkInfo\"\x1d\n\x1bListSIPOutboundTrunkRequest\"L\n\x1cListSIPOutboundTrunkResponse\x12,\n\x05items\x18\x01 \x03(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfo\"-\n\x15\x44\x65leteSIPTrunkRequest\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\"7\n\x15SIPDispatchRuleDirect\x12\x11\n\troom_name\x18\x01 \x01(\t\x12\x0b\n\x03pin\x18\x02 \x01(\t\"=\n\x19SIPDispatchRuleIndividual\x12\x13\n\x0broom_prefix\x18\x01 \x01(\t\x12\x0b\n\x03pin\x18\x02 \x01(\t\"L\n\x15SIPDispatchRuleCallee\x12\x13\n\x0broom_prefix\x18\x01 \x01(\t\x12\x0b\n\x03pin\x18\x02 \x01(\t\x12\x11\n\trandomize\x18\x03 \x01(\x08\"\xe1\x01\n\x0fSIPDispatchRule\x12>\n\x14\x64ispatch_rule_direct\x18\x01 \x01(\x0b\x32\x1e.livekit.SIPDispatchRuleDirectH\x00\x12\x46\n\x18\x64ispatch_rule_individual\x18\x02 \x01(\x0b\x32\".livekit.SIPDispatchRuleIndividualH\x00\x12>\n\x14\x64ispatch_rule_callee\x18\x03 \x01(\x0b\x32\x1e.livekit.SIPDispatchRuleCalleeH\x00\x42\x06\n\x04rule\"\xab\x02\n\x1c\x43reateSIPDispatchRuleRequest\x12&\n\x04rule\x18\x01 \x01(\x0b\x32\x18.livekit.SIPDispatchRule\x12\x11\n\ttrunk_ids\x18\x02 \x03(\t\x12\x19\n\x11hide_phone_number\x18\x03 \x01(\x08\x12\x17\n\x0finbound_numbers\x18\x06 \x03(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x10\n\x08metadata\x18\x05 \x01(\t\x12I\n\nattributes\x18\x07 \x03(\x0b\x32\x35.livekit.CreateSIPDispatchRuleRequest.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\"\xb7\x02\n\x13SIPDispatchRuleInfo\x12\x1c\n\x14sip_dispatch_rule_id\x18\x01 \x01(\t\x12&\n\x04rule\x18\x02 \x01(\x0b\x32\x18.livekit.SIPDispatchRule\x12\x11\n\ttrunk_ids\x18\x03 \x03(\t\x12\x19\n\x11hide_phone_number\x18\x04 \x01(\x08\x12\x17\n\x0finbound_numbers\x18\x07 \x03(\t\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x10\n\x08metadata\x18\x06 \x01(\t\x12@\n\nattributes\x18\x08 \x03(\x0b\x32,.livekit.SIPDispatchRuleInfo.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\"\x1c\n\x1aListSIPDispatchRuleRequest\"J\n\x1bListSIPDispatchRuleResponse\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.livekit.SIPDispatchRuleInfo\"<\n\x1c\x44\x65leteSIPDispatchRuleRequest\x12\x1c\n\x14sip_dispatch_rule_id\x18\x01 \x01(\t\"\xab\x04\n\x1b\x43reateSIPParticipantRequest\x12\x14\n\x0csip_trunk_id\x18\x01 \x01(\t\x12\x13\n\x0bsip_call_to\x18\x02 \x01(\t\x12\x11\n\troom_name\x18\x03 \x01(\t\x12\x1c\n\x14participant_identity\x18\x04 \x01(\t\x12\x18\n\x10participant_name\x18\x07 \x01(\t\x12\x1c\n\x14participant_metadata\x18\x08 \x01(\t\x12_\n\x16participant_attributes\x18\t \x03(\x0b\x32?.livekit.CreateSIPParticipantRequest.ParticipantAttributesEntry\x12\x0c\n\x04\x64tmf\x18\x05 \x01(\t\x12\x19\n\rplay_ringtone\x18\x06 \x01(\x08\x42\x02\x18\x01\x12\x15\n\rplay_dialtone\x18\r \x01(\x08\x12\x19\n\x11hide_phone_number\x18\n \x01(\x08\x12\x32\n\x0fringing_timeout\x18\x0b \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x34\n\x11max_call_duration\x18\x0c \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x14\n\x0c\x65nable_krisp\x18\x0e \x01(\x08\x1a<\n\x1aParticipantAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"r\n\x12SIPParticipantInfo\x12\x16\n\x0eparticipant_id\x18\x01 \x01(\t\x12\x1c\n\x14participant_identity\x18\x02 \x01(\t\x12\x11\n\troom_name\x18\x03 \x01(\t\x12\x13\n\x0bsip_call_id\x18\x04 \x01(\t\"|\n\x1dTransferSIPParticipantRequest\x12\x1c\n\x14participant_identity\x18\x01 \x01(\t\x12\x11\n\troom_name\x18\x02 \x01(\t\x12\x13\n\x0btransfer_to\x18\x03 \x01(\t\x12\x15\n\rplay_dialtone\x18\x04 \x01(\x08\"\xe2\x02\n\x0bSIPCallInfo\x12\x0f\n\x07\x63\x61ll_id\x18\x01 \x01(\t\x12\x10\n\x08trunk_id\x18\x02 \x01(\t\x12\x11\n\troom_name\x18\x03 \x01(\t\x12\x0f\n\x07room_id\x18\x04 \x01(\t\x12\x1c\n\x14participant_identity\x18\x05 \x01(\t\x12!\n\x08\x66rom_uri\x18\x06 \x01(\x0b\x32\x0f.livekit.SIPUri\x12\x1f\n\x06to_uri\x18\x07 \x01(\x0b\x32\x0f.livekit.SIPUri\x12+\n\x0b\x63\x61ll_status\x18\x08 \x01(\x0e\x32\x16.livekit.SIPCallStatus\x12\x12\n\ncreated_at\x18\t \x01(\x03\x12\x12\n\nstarted_at\x18\n \x01(\x03\x12\x10\n\x08\x65nded_at\x18\x0b \x01(\x03\x12\x34\n\x11\x64isconnect_reason\x18\x0c \x01(\x0e\x32\x19.livekit.DisconnectReason\x12\r\n\x05\x65rror\x18\r \x01(\t\"h\n\x06SIPUri\x12\x0c\n\x04user\x18\x01 \x01(\t\x12\x0c\n\x04host\x18\x02 \x01(\t\x12\n\n\x02ip\x18\x03 \x01(\t\x12\x0c\n\x04port\x18\x04 \x01(\t\x12(\n\ttransport\x18\x05 \x01(\x0e\x32\x15.livekit.SIPTransport*k\n\x0cSIPTransport\x12\x16\n\x12SIP_TRANSPORT_AUTO\x10\x00\x12\x15\n\x11SIP_TRANSPORT_UDP\x10\x01\x12\x15\n\x11SIP_TRANSPORT_TCP\x10\x02\x12\x15\n\x11SIP_TRANSPORT_TLS\x10\x03*w\n\rSIPCallStatus\x12\x15\n\x11SCS_CALL_INCOMING\x10\x00\x12\x1a\n\x16SCS_PARTICIPANT_JOINED\x10\x01\x12\x0e\n\nSCS_ACTIVE\x10\x02\x12\x14\n\x10SCS_DISCONNECTED\x10\x03\x12\r\n\tSCS_ERROR\x10\x04\x32\xba\t\n\x03SIP\x12P\n\x0cListSIPTrunk\x12\x1c.livekit.ListSIPTrunkRequest\x1a\x1d.livekit.ListSIPTrunkResponse\"\x03\x88\x02\x01\x12\\\n\x15\x43reateSIPInboundTrunk\x12%.livekit.CreateSIPInboundTrunkRequest\x1a\x1c.livekit.SIPInboundTrunkInfo\x12_\n\x16\x43reateSIPOutboundTrunk\x12&.livekit.CreateSIPOutboundTrunkRequest\x1a\x1d.livekit.SIPOutboundTrunkInfo\x12]\n\x12GetSIPInboundTrunk\x12\".livekit.GetSIPInboundTrunkRequest\x1a#.livekit.GetSIPInboundTrunkResponse\x12`\n\x13GetSIPOutboundTrunk\x12#.livekit.GetSIPOutboundTrunkRequest\x1a$.livekit.GetSIPOutboundTrunkResponse\x12`\n\x13ListSIPInboundTrunk\x12#.livekit.ListSIPInboundTrunkRequest\x1a$.livekit.ListSIPInboundTrunkResponse\x12\x63\n\x14ListSIPOutboundTrunk\x12$.livekit.ListSIPOutboundTrunkRequest\x1a%.livekit.ListSIPOutboundTrunkResponse\x12G\n\x0e\x44\x65leteSIPTrunk\x12\x1e.livekit.DeleteSIPTrunkRequest\x1a\x15.livekit.SIPTrunkInfo\x12\\\n\x15\x43reateSIPDispatchRule\x12%.livekit.CreateSIPDispatchRuleRequest\x1a\x1c.livekit.SIPDispatchRuleInfo\x12`\n\x13ListSIPDispatchRule\x12#.livekit.ListSIPDispatchRuleRequest\x1a$.livekit.ListSIPDispatchRuleResponse\x12\\\n\x15\x44\x65leteSIPDispatchRule\x12%.livekit.DeleteSIPDispatchRuleRequest\x1a\x1c.livekit.SIPDispatchRuleInfo\x12Y\n\x14\x43reateSIPParticipant\x12$.livekit.CreateSIPParticipantRequest\x1a\x1b.livekit.SIPParticipantInfo\x12X\n\x16TransferSIPParticipant\x12&.livekit.TransferSIPParticipantRequest\x1a\x16.google.protobuf.EmptyBFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -30,6 +33,14 @@ _globals['_SIPTRUNKINFO'].fields_by_name['inbound_numbers_regex']._serialized_options = b'\030\001' _globals['_SIPTRUNKINFO']._options = None _globals['_SIPTRUNKINFO']._serialized_options = b'\030\001' + _globals['_SIPINBOUNDTRUNKINFO_HEADERSENTRY']._options = None + _globals['_SIPINBOUNDTRUNKINFO_HEADERSENTRY']._serialized_options = b'8\001' + _globals['_SIPINBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._options = None + _globals['_SIPINBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._serialized_options = b'8\001' + _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSENTRY']._options = None + _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSENTRY']._serialized_options = b'8\001' + _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._options = None + _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._serialized_options = b'8\001' _globals['_LISTSIPTRUNKREQUEST']._options = None _globals['_LISTSIPTRUNKREQUEST']._serialized_options = b'\030\001' _globals['_LISTSIPTRUNKRESPONSE']._options = None @@ -40,66 +51,92 @@ _globals['_SIPDISPATCHRULEINFO_ATTRIBUTESENTRY']._serialized_options = b'8\001' _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._options = None _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._serialized_options = b'8\001' - _globals['_SIP'].methods_by_name['CreateSIPTrunk']._options = None - _globals['_SIP'].methods_by_name['CreateSIPTrunk']._serialized_options = b'\210\002\001' + _globals['_CREATESIPPARTICIPANTREQUEST'].fields_by_name['play_ringtone']._options = None + _globals['_CREATESIPPARTICIPANTREQUEST'].fields_by_name['play_ringtone']._serialized_options = b'\030\001' _globals['_SIP'].methods_by_name['ListSIPTrunk']._options = None _globals['_SIP'].methods_by_name['ListSIPTrunk']._serialized_options = b'\210\002\001' - _globals['_SIPTRANSPORT']._serialized_start=3306 - _globals['_SIPTRANSPORT']._serialized_end=3413 - _globals['_CREATESIPTRUNKREQUEST']._serialized_start=31 - _globals['_CREATESIPTRUNKREQUEST']._serialized_end=334 - _globals['_SIPTRUNKINFO']._serialized_start=337 - _globals['_SIPTRUNKINFO']._serialized_end=812 - _globals['_SIPTRUNKINFO_TRUNKKIND']._serialized_start=740 - _globals['_SIPTRUNKINFO_TRUNKKIND']._serialized_end=808 - _globals['_CREATESIPINBOUNDTRUNKREQUEST']._serialized_start=814 - _globals['_CREATESIPINBOUNDTRUNKREQUEST']._serialized_end=889 - _globals['_SIPINBOUNDTRUNKINFO']._serialized_start=892 - _globals['_SIPINBOUNDTRUNKINFO']._serialized_end=1082 - _globals['_CREATESIPOUTBOUNDTRUNKREQUEST']._serialized_start=1084 - _globals['_CREATESIPOUTBOUNDTRUNKREQUEST']._serialized_end=1161 - _globals['_SIPOUTBOUNDTRUNKINFO']._serialized_start=1164 - _globals['_SIPOUTBOUNDTRUNKINFO']._serialized_end=1362 - _globals['_LISTSIPTRUNKREQUEST']._serialized_start=1364 - _globals['_LISTSIPTRUNKREQUEST']._serialized_end=1389 - _globals['_LISTSIPTRUNKRESPONSE']._serialized_start=1391 - _globals['_LISTSIPTRUNKRESPONSE']._serialized_end=1455 - _globals['_LISTSIPINBOUNDTRUNKREQUEST']._serialized_start=1457 - _globals['_LISTSIPINBOUNDTRUNKREQUEST']._serialized_end=1485 - _globals['_LISTSIPINBOUNDTRUNKRESPONSE']._serialized_start=1487 - _globals['_LISTSIPINBOUNDTRUNKRESPONSE']._serialized_end=1561 - _globals['_LISTSIPOUTBOUNDTRUNKREQUEST']._serialized_start=1563 - _globals['_LISTSIPOUTBOUNDTRUNKREQUEST']._serialized_end=1592 - _globals['_LISTSIPOUTBOUNDTRUNKRESPONSE']._serialized_start=1594 - _globals['_LISTSIPOUTBOUNDTRUNKRESPONSE']._serialized_end=1670 - _globals['_DELETESIPTRUNKREQUEST']._serialized_start=1672 - _globals['_DELETESIPTRUNKREQUEST']._serialized_end=1717 - _globals['_SIPDISPATCHRULEDIRECT']._serialized_start=1719 - _globals['_SIPDISPATCHRULEDIRECT']._serialized_end=1774 - _globals['_SIPDISPATCHRULEINDIVIDUAL']._serialized_start=1776 - _globals['_SIPDISPATCHRULEINDIVIDUAL']._serialized_end=1837 - _globals['_SIPDISPATCHRULE']._serialized_start=1840 - _globals['_SIPDISPATCHRULE']._serialized_end=2001 - _globals['_CREATESIPDISPATCHRULEREQUEST']._serialized_start=2004 - _globals['_CREATESIPDISPATCHRULEREQUEST']._serialized_end=2303 - _globals['_CREATESIPDISPATCHRULEREQUEST_ATTRIBUTESENTRY']._serialized_start=2254 - _globals['_CREATESIPDISPATCHRULEREQUEST_ATTRIBUTESENTRY']._serialized_end=2303 - _globals['_SIPDISPATCHRULEINFO']._serialized_start=2306 - _globals['_SIPDISPATCHRULEINFO']._serialized_end=2617 - _globals['_SIPDISPATCHRULEINFO_ATTRIBUTESENTRY']._serialized_start=2254 - _globals['_SIPDISPATCHRULEINFO_ATTRIBUTESENTRY']._serialized_end=2303 - _globals['_LISTSIPDISPATCHRULEREQUEST']._serialized_start=2619 - _globals['_LISTSIPDISPATCHRULEREQUEST']._serialized_end=2647 - _globals['_LISTSIPDISPATCHRULERESPONSE']._serialized_start=2649 - _globals['_LISTSIPDISPATCHRULERESPONSE']._serialized_end=2723 - _globals['_DELETESIPDISPATCHRULEREQUEST']._serialized_start=2725 - _globals['_DELETESIPDISPATCHRULEREQUEST']._serialized_end=2785 - _globals['_CREATESIPPARTICIPANTREQUEST']._serialized_start=2788 - _globals['_CREATESIPPARTICIPANTREQUEST']._serialized_end=3188 - _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._serialized_start=3128 - _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._serialized_end=3188 - _globals['_SIPPARTICIPANTINFO']._serialized_start=3190 - _globals['_SIPPARTICIPANTINFO']._serialized_end=3304 - _globals['_SIP']._serialized_start=3416 - _globals['_SIP']._serialized_end=4421 + _globals['_SIPTRANSPORT']._serialized_start=5169 + _globals['_SIPTRANSPORT']._serialized_end=5276 + _globals['_SIPCALLSTATUS']._serialized_start=5278 + _globals['_SIPCALLSTATUS']._serialized_end=5397 + _globals['_CREATESIPTRUNKREQUEST']._serialized_start=114 + _globals['_CREATESIPTRUNKREQUEST']._serialized_end=417 + _globals['_SIPTRUNKINFO']._serialized_start=420 + _globals['_SIPTRUNKINFO']._serialized_end=895 + _globals['_SIPTRUNKINFO_TRUNKKIND']._serialized_start=823 + _globals['_SIPTRUNKINFO_TRUNKKIND']._serialized_end=891 + _globals['_CREATESIPINBOUNDTRUNKREQUEST']._serialized_start=897 + _globals['_CREATESIPINBOUNDTRUNKREQUEST']._serialized_end=972 + _globals['_SIPINBOUNDTRUNKINFO']._serialized_start=975 + _globals['_SIPINBOUNDTRUNKINFO']._serialized_end=1548 + _globals['_SIPINBOUNDTRUNKINFO_HEADERSENTRY']._serialized_start=1442 + _globals['_SIPINBOUNDTRUNKINFO_HEADERSENTRY']._serialized_end=1488 + _globals['_SIPINBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._serialized_start=1490 + _globals['_SIPINBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._serialized_end=1548 + _globals['_CREATESIPOUTBOUNDTRUNKREQUEST']._serialized_start=1550 + _globals['_CREATESIPOUTBOUNDTRUNKREQUEST']._serialized_end=1627 + _globals['_SIPOUTBOUNDTRUNKINFO']._serialized_start=1630 + _globals['_SIPOUTBOUNDTRUNKINFO']._serialized_end=2084 + _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSENTRY']._serialized_start=1442 + _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSENTRY']._serialized_end=1488 + _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._serialized_start=1490 + _globals['_SIPOUTBOUNDTRUNKINFO_HEADERSTOATTRIBUTESENTRY']._serialized_end=1548 + _globals['_GETSIPINBOUNDTRUNKREQUEST']._serialized_start=2086 + _globals['_GETSIPINBOUNDTRUNKREQUEST']._serialized_end=2135 + _globals['_GETSIPINBOUNDTRUNKRESPONSE']._serialized_start=2137 + _globals['_GETSIPINBOUNDTRUNKRESPONSE']._serialized_end=2210 + _globals['_GETSIPOUTBOUNDTRUNKREQUEST']._serialized_start=2212 + _globals['_GETSIPOUTBOUNDTRUNKREQUEST']._serialized_end=2262 + _globals['_GETSIPOUTBOUNDTRUNKRESPONSE']._serialized_start=2264 + _globals['_GETSIPOUTBOUNDTRUNKRESPONSE']._serialized_end=2339 + _globals['_LISTSIPTRUNKREQUEST']._serialized_start=2341 + _globals['_LISTSIPTRUNKREQUEST']._serialized_end=2366 + _globals['_LISTSIPTRUNKRESPONSE']._serialized_start=2368 + _globals['_LISTSIPTRUNKRESPONSE']._serialized_end=2432 + _globals['_LISTSIPINBOUNDTRUNKREQUEST']._serialized_start=2434 + _globals['_LISTSIPINBOUNDTRUNKREQUEST']._serialized_end=2462 + _globals['_LISTSIPINBOUNDTRUNKRESPONSE']._serialized_start=2464 + _globals['_LISTSIPINBOUNDTRUNKRESPONSE']._serialized_end=2538 + _globals['_LISTSIPOUTBOUNDTRUNKREQUEST']._serialized_start=2540 + _globals['_LISTSIPOUTBOUNDTRUNKREQUEST']._serialized_end=2569 + _globals['_LISTSIPOUTBOUNDTRUNKRESPONSE']._serialized_start=2571 + _globals['_LISTSIPOUTBOUNDTRUNKRESPONSE']._serialized_end=2647 + _globals['_DELETESIPTRUNKREQUEST']._serialized_start=2649 + _globals['_DELETESIPTRUNKREQUEST']._serialized_end=2694 + _globals['_SIPDISPATCHRULEDIRECT']._serialized_start=2696 + _globals['_SIPDISPATCHRULEDIRECT']._serialized_end=2751 + _globals['_SIPDISPATCHRULEINDIVIDUAL']._serialized_start=2753 + _globals['_SIPDISPATCHRULEINDIVIDUAL']._serialized_end=2814 + _globals['_SIPDISPATCHRULECALLEE']._serialized_start=2816 + _globals['_SIPDISPATCHRULECALLEE']._serialized_end=2892 + _globals['_SIPDISPATCHRULE']._serialized_start=2895 + _globals['_SIPDISPATCHRULE']._serialized_end=3120 + _globals['_CREATESIPDISPATCHRULEREQUEST']._serialized_start=3123 + _globals['_CREATESIPDISPATCHRULEREQUEST']._serialized_end=3422 + _globals['_CREATESIPDISPATCHRULEREQUEST_ATTRIBUTESENTRY']._serialized_start=3373 + _globals['_CREATESIPDISPATCHRULEREQUEST_ATTRIBUTESENTRY']._serialized_end=3422 + _globals['_SIPDISPATCHRULEINFO']._serialized_start=3425 + _globals['_SIPDISPATCHRULEINFO']._serialized_end=3736 + _globals['_SIPDISPATCHRULEINFO_ATTRIBUTESENTRY']._serialized_start=3373 + _globals['_SIPDISPATCHRULEINFO_ATTRIBUTESENTRY']._serialized_end=3422 + _globals['_LISTSIPDISPATCHRULEREQUEST']._serialized_start=3738 + _globals['_LISTSIPDISPATCHRULEREQUEST']._serialized_end=3766 + _globals['_LISTSIPDISPATCHRULERESPONSE']._serialized_start=3768 + _globals['_LISTSIPDISPATCHRULERESPONSE']._serialized_end=3842 + _globals['_DELETESIPDISPATCHRULEREQUEST']._serialized_start=3844 + _globals['_DELETESIPDISPATCHRULEREQUEST']._serialized_end=3904 + _globals['_CREATESIPPARTICIPANTREQUEST']._serialized_start=3907 + _globals['_CREATESIPPARTICIPANTREQUEST']._serialized_end=4462 + _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._serialized_start=4402 + _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._serialized_end=4462 + _globals['_SIPPARTICIPANTINFO']._serialized_start=4464 + _globals['_SIPPARTICIPANTINFO']._serialized_end=4578 + _globals['_TRANSFERSIPPARTICIPANTREQUEST']._serialized_start=4580 + _globals['_TRANSFERSIPPARTICIPANTREQUEST']._serialized_end=4704 + _globals['_SIPCALLINFO']._serialized_start=4707 + _globals['_SIPCALLINFO']._serialized_end=5061 + _globals['_SIPURI']._serialized_start=5063 + _globals['_SIPURI']._serialized_end=5167 + _globals['_SIP']._serialized_start=5400 + _globals['_SIP']._serialized_end=6610 # @@protoc_insertion_point(module_scope) diff --git a/livekit-protocol/livekit/protocol/sip.pyi b/livekit-protocol/livekit/protocol/sip.pyi index 770b8e30..47e5249c 100644 --- a/livekit-protocol/livekit/protocol/sip.pyi +++ b/livekit-protocol/livekit/protocol/sip.pyi @@ -1,3 +1,6 @@ +from google.protobuf import duration_pb2 as _duration_pb2 +from google.protobuf import empty_pb2 as _empty_pb2 +from . import models as _models from google.protobuf.internal import containers as _containers from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper from google.protobuf import descriptor as _descriptor @@ -12,10 +15,23 @@ class SIPTransport(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): SIP_TRANSPORT_UDP: _ClassVar[SIPTransport] SIP_TRANSPORT_TCP: _ClassVar[SIPTransport] SIP_TRANSPORT_TLS: _ClassVar[SIPTransport] + +class SIPCallStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + SCS_CALL_INCOMING: _ClassVar[SIPCallStatus] + SCS_PARTICIPANT_JOINED: _ClassVar[SIPCallStatus] + SCS_ACTIVE: _ClassVar[SIPCallStatus] + SCS_DISCONNECTED: _ClassVar[SIPCallStatus] + SCS_ERROR: _ClassVar[SIPCallStatus] SIP_TRANSPORT_AUTO: SIPTransport SIP_TRANSPORT_UDP: SIPTransport SIP_TRANSPORT_TCP: SIPTransport SIP_TRANSPORT_TLS: SIPTransport +SCS_CALL_INCOMING: SIPCallStatus +SCS_PARTICIPANT_JOINED: SIPCallStatus +SCS_ACTIVE: SIPCallStatus +SCS_DISCONNECTED: SIPCallStatus +SCS_ERROR: SIPCallStatus class CreateSIPTrunkRequest(_message.Message): __slots__ = ("inbound_addresses", "outbound_address", "outbound_number", "inbound_numbers_regex", "inbound_numbers", "inbound_username", "inbound_password", "outbound_username", "outbound_password", "name", "metadata") @@ -90,7 +106,21 @@ class CreateSIPInboundTrunkRequest(_message.Message): def __init__(self, trunk: _Optional[_Union[SIPInboundTrunkInfo, _Mapping]] = ...) -> None: ... class SIPInboundTrunkInfo(_message.Message): - __slots__ = ("sip_trunk_id", "name", "metadata", "numbers", "allowed_addresses", "allowed_numbers", "auth_username", "auth_password") + __slots__ = ("sip_trunk_id", "name", "metadata", "numbers", "allowed_addresses", "allowed_numbers", "auth_username", "auth_password", "headers", "headers_to_attributes", "ringing_timeout", "max_call_duration", "krisp_enabled") + class HeadersEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + class HeadersToAttributesEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... SIP_TRUNK_ID_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int] METADATA_FIELD_NUMBER: _ClassVar[int] @@ -99,6 +129,11 @@ class SIPInboundTrunkInfo(_message.Message): ALLOWED_NUMBERS_FIELD_NUMBER: _ClassVar[int] AUTH_USERNAME_FIELD_NUMBER: _ClassVar[int] AUTH_PASSWORD_FIELD_NUMBER: _ClassVar[int] + HEADERS_FIELD_NUMBER: _ClassVar[int] + HEADERS_TO_ATTRIBUTES_FIELD_NUMBER: _ClassVar[int] + RINGING_TIMEOUT_FIELD_NUMBER: _ClassVar[int] + MAX_CALL_DURATION_FIELD_NUMBER: _ClassVar[int] + KRISP_ENABLED_FIELD_NUMBER: _ClassVar[int] sip_trunk_id: str name: str metadata: str @@ -107,7 +142,12 @@ class SIPInboundTrunkInfo(_message.Message): allowed_numbers: _containers.RepeatedScalarFieldContainer[str] auth_username: str auth_password: str - def __init__(self, sip_trunk_id: _Optional[str] = ..., name: _Optional[str] = ..., metadata: _Optional[str] = ..., numbers: _Optional[_Iterable[str]] = ..., allowed_addresses: _Optional[_Iterable[str]] = ..., allowed_numbers: _Optional[_Iterable[str]] = ..., auth_username: _Optional[str] = ..., auth_password: _Optional[str] = ...) -> None: ... + headers: _containers.ScalarMap[str, str] + headers_to_attributes: _containers.ScalarMap[str, str] + ringing_timeout: _duration_pb2.Duration + max_call_duration: _duration_pb2.Duration + krisp_enabled: bool + def __init__(self, sip_trunk_id: _Optional[str] = ..., name: _Optional[str] = ..., metadata: _Optional[str] = ..., numbers: _Optional[_Iterable[str]] = ..., allowed_addresses: _Optional[_Iterable[str]] = ..., allowed_numbers: _Optional[_Iterable[str]] = ..., auth_username: _Optional[str] = ..., auth_password: _Optional[str] = ..., headers: _Optional[_Mapping[str, str]] = ..., headers_to_attributes: _Optional[_Mapping[str, str]] = ..., ringing_timeout: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., max_call_duration: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., krisp_enabled: bool = ...) -> None: ... class CreateSIPOutboundTrunkRequest(_message.Message): __slots__ = ("trunk",) @@ -116,7 +156,21 @@ class CreateSIPOutboundTrunkRequest(_message.Message): def __init__(self, trunk: _Optional[_Union[SIPOutboundTrunkInfo, _Mapping]] = ...) -> None: ... class SIPOutboundTrunkInfo(_message.Message): - __slots__ = ("sip_trunk_id", "name", "metadata", "address", "transport", "numbers", "auth_username", "auth_password") + __slots__ = ("sip_trunk_id", "name", "metadata", "address", "transport", "numbers", "auth_username", "auth_password", "headers", "headers_to_attributes") + class HeadersEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + class HeadersToAttributesEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... SIP_TRUNK_ID_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int] METADATA_FIELD_NUMBER: _ClassVar[int] @@ -125,6 +179,8 @@ class SIPOutboundTrunkInfo(_message.Message): NUMBERS_FIELD_NUMBER: _ClassVar[int] AUTH_USERNAME_FIELD_NUMBER: _ClassVar[int] AUTH_PASSWORD_FIELD_NUMBER: _ClassVar[int] + HEADERS_FIELD_NUMBER: _ClassVar[int] + HEADERS_TO_ATTRIBUTES_FIELD_NUMBER: _ClassVar[int] sip_trunk_id: str name: str metadata: str @@ -133,7 +189,33 @@ class SIPOutboundTrunkInfo(_message.Message): numbers: _containers.RepeatedScalarFieldContainer[str] auth_username: str auth_password: str - def __init__(self, sip_trunk_id: _Optional[str] = ..., name: _Optional[str] = ..., metadata: _Optional[str] = ..., address: _Optional[str] = ..., transport: _Optional[_Union[SIPTransport, str]] = ..., numbers: _Optional[_Iterable[str]] = ..., auth_username: _Optional[str] = ..., auth_password: _Optional[str] = ...) -> None: ... + headers: _containers.ScalarMap[str, str] + headers_to_attributes: _containers.ScalarMap[str, str] + def __init__(self, sip_trunk_id: _Optional[str] = ..., name: _Optional[str] = ..., metadata: _Optional[str] = ..., address: _Optional[str] = ..., transport: _Optional[_Union[SIPTransport, str]] = ..., numbers: _Optional[_Iterable[str]] = ..., auth_username: _Optional[str] = ..., auth_password: _Optional[str] = ..., headers: _Optional[_Mapping[str, str]] = ..., headers_to_attributes: _Optional[_Mapping[str, str]] = ...) -> None: ... + +class GetSIPInboundTrunkRequest(_message.Message): + __slots__ = ("sip_trunk_id",) + SIP_TRUNK_ID_FIELD_NUMBER: _ClassVar[int] + sip_trunk_id: str + def __init__(self, sip_trunk_id: _Optional[str] = ...) -> None: ... + +class GetSIPInboundTrunkResponse(_message.Message): + __slots__ = ("trunk",) + TRUNK_FIELD_NUMBER: _ClassVar[int] + trunk: SIPInboundTrunkInfo + def __init__(self, trunk: _Optional[_Union[SIPInboundTrunkInfo, _Mapping]] = ...) -> None: ... + +class GetSIPOutboundTrunkRequest(_message.Message): + __slots__ = ("sip_trunk_id",) + SIP_TRUNK_ID_FIELD_NUMBER: _ClassVar[int] + sip_trunk_id: str + def __init__(self, sip_trunk_id: _Optional[str] = ...) -> None: ... + +class GetSIPOutboundTrunkResponse(_message.Message): + __slots__ = ("trunk",) + TRUNK_FIELD_NUMBER: _ClassVar[int] + trunk: SIPOutboundTrunkInfo + def __init__(self, trunk: _Optional[_Union[SIPOutboundTrunkInfo, _Mapping]] = ...) -> None: ... class ListSIPTrunkRequest(_message.Message): __slots__ = () @@ -187,13 +269,25 @@ class SIPDispatchRuleIndividual(_message.Message): pin: str def __init__(self, room_prefix: _Optional[str] = ..., pin: _Optional[str] = ...) -> None: ... +class SIPDispatchRuleCallee(_message.Message): + __slots__ = ("room_prefix", "pin", "randomize") + ROOM_PREFIX_FIELD_NUMBER: _ClassVar[int] + PIN_FIELD_NUMBER: _ClassVar[int] + RANDOMIZE_FIELD_NUMBER: _ClassVar[int] + room_prefix: str + pin: str + randomize: bool + def __init__(self, room_prefix: _Optional[str] = ..., pin: _Optional[str] = ..., randomize: bool = ...) -> None: ... + class SIPDispatchRule(_message.Message): - __slots__ = ("dispatch_rule_direct", "dispatch_rule_individual") + __slots__ = ("dispatch_rule_direct", "dispatch_rule_individual", "dispatch_rule_callee") DISPATCH_RULE_DIRECT_FIELD_NUMBER: _ClassVar[int] DISPATCH_RULE_INDIVIDUAL_FIELD_NUMBER: _ClassVar[int] + DISPATCH_RULE_CALLEE_FIELD_NUMBER: _ClassVar[int] dispatch_rule_direct: SIPDispatchRuleDirect dispatch_rule_individual: SIPDispatchRuleIndividual - def __init__(self, dispatch_rule_direct: _Optional[_Union[SIPDispatchRuleDirect, _Mapping]] = ..., dispatch_rule_individual: _Optional[_Union[SIPDispatchRuleIndividual, _Mapping]] = ...) -> None: ... + dispatch_rule_callee: SIPDispatchRuleCallee + def __init__(self, dispatch_rule_direct: _Optional[_Union[SIPDispatchRuleDirect, _Mapping]] = ..., dispatch_rule_individual: _Optional[_Union[SIPDispatchRuleIndividual, _Mapping]] = ..., dispatch_rule_callee: _Optional[_Union[SIPDispatchRuleCallee, _Mapping]] = ...) -> None: ... class CreateSIPDispatchRuleRequest(_message.Message): __slots__ = ("rule", "trunk_ids", "hide_phone_number", "inbound_numbers", "name", "metadata", "attributes") @@ -264,7 +358,7 @@ class DeleteSIPDispatchRuleRequest(_message.Message): def __init__(self, sip_dispatch_rule_id: _Optional[str] = ...) -> None: ... class CreateSIPParticipantRequest(_message.Message): - __slots__ = ("sip_trunk_id", "sip_call_to", "room_name", "participant_identity", "participant_name", "participant_metadata", "participant_attributes", "dtmf", "play_ringtone", "hide_phone_number") + __slots__ = ("sip_trunk_id", "sip_call_to", "room_name", "participant_identity", "participant_name", "participant_metadata", "participant_attributes", "dtmf", "play_ringtone", "play_dialtone", "hide_phone_number", "ringing_timeout", "max_call_duration", "enable_krisp") class ParticipantAttributesEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -281,7 +375,11 @@ class CreateSIPParticipantRequest(_message.Message): PARTICIPANT_ATTRIBUTES_FIELD_NUMBER: _ClassVar[int] DTMF_FIELD_NUMBER: _ClassVar[int] PLAY_RINGTONE_FIELD_NUMBER: _ClassVar[int] + PLAY_DIALTONE_FIELD_NUMBER: _ClassVar[int] HIDE_PHONE_NUMBER_FIELD_NUMBER: _ClassVar[int] + RINGING_TIMEOUT_FIELD_NUMBER: _ClassVar[int] + MAX_CALL_DURATION_FIELD_NUMBER: _ClassVar[int] + ENABLE_KRISP_FIELD_NUMBER: _ClassVar[int] sip_trunk_id: str sip_call_to: str room_name: str @@ -291,8 +389,12 @@ class CreateSIPParticipantRequest(_message.Message): participant_attributes: _containers.ScalarMap[str, str] dtmf: str play_ringtone: bool + play_dialtone: bool hide_phone_number: bool - def __init__(self, sip_trunk_id: _Optional[str] = ..., sip_call_to: _Optional[str] = ..., room_name: _Optional[str] = ..., participant_identity: _Optional[str] = ..., participant_name: _Optional[str] = ..., participant_metadata: _Optional[str] = ..., participant_attributes: _Optional[_Mapping[str, str]] = ..., dtmf: _Optional[str] = ..., play_ringtone: bool = ..., hide_phone_number: bool = ...) -> None: ... + ringing_timeout: _duration_pb2.Duration + max_call_duration: _duration_pb2.Duration + enable_krisp: bool + def __init__(self, sip_trunk_id: _Optional[str] = ..., sip_call_to: _Optional[str] = ..., room_name: _Optional[str] = ..., participant_identity: _Optional[str] = ..., participant_name: _Optional[str] = ..., participant_metadata: _Optional[str] = ..., participant_attributes: _Optional[_Mapping[str, str]] = ..., dtmf: _Optional[str] = ..., play_ringtone: bool = ..., play_dialtone: bool = ..., hide_phone_number: bool = ..., ringing_timeout: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., max_call_duration: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., enable_krisp: bool = ...) -> None: ... class SIPParticipantInfo(_message.Message): __slots__ = ("participant_id", "participant_identity", "room_name", "sip_call_id") @@ -305,3 +407,59 @@ class SIPParticipantInfo(_message.Message): room_name: str sip_call_id: str def __init__(self, participant_id: _Optional[str] = ..., participant_identity: _Optional[str] = ..., room_name: _Optional[str] = ..., sip_call_id: _Optional[str] = ...) -> None: ... + +class TransferSIPParticipantRequest(_message.Message): + __slots__ = ("participant_identity", "room_name", "transfer_to", "play_dialtone") + PARTICIPANT_IDENTITY_FIELD_NUMBER: _ClassVar[int] + ROOM_NAME_FIELD_NUMBER: _ClassVar[int] + TRANSFER_TO_FIELD_NUMBER: _ClassVar[int] + PLAY_DIALTONE_FIELD_NUMBER: _ClassVar[int] + participant_identity: str + room_name: str + transfer_to: str + play_dialtone: bool + def __init__(self, participant_identity: _Optional[str] = ..., room_name: _Optional[str] = ..., transfer_to: _Optional[str] = ..., play_dialtone: bool = ...) -> None: ... + +class SIPCallInfo(_message.Message): + __slots__ = ("call_id", "trunk_id", "room_name", "room_id", "participant_identity", "from_uri", "to_uri", "call_status", "created_at", "started_at", "ended_at", "disconnect_reason", "error") + CALL_ID_FIELD_NUMBER: _ClassVar[int] + TRUNK_ID_FIELD_NUMBER: _ClassVar[int] + ROOM_NAME_FIELD_NUMBER: _ClassVar[int] + ROOM_ID_FIELD_NUMBER: _ClassVar[int] + PARTICIPANT_IDENTITY_FIELD_NUMBER: _ClassVar[int] + FROM_URI_FIELD_NUMBER: _ClassVar[int] + TO_URI_FIELD_NUMBER: _ClassVar[int] + CALL_STATUS_FIELD_NUMBER: _ClassVar[int] + CREATED_AT_FIELD_NUMBER: _ClassVar[int] + STARTED_AT_FIELD_NUMBER: _ClassVar[int] + ENDED_AT_FIELD_NUMBER: _ClassVar[int] + DISCONNECT_REASON_FIELD_NUMBER: _ClassVar[int] + ERROR_FIELD_NUMBER: _ClassVar[int] + call_id: str + trunk_id: str + room_name: str + room_id: str + participant_identity: str + from_uri: SIPUri + to_uri: SIPUri + call_status: SIPCallStatus + created_at: int + started_at: int + ended_at: int + disconnect_reason: _models.DisconnectReason + error: str + def __init__(self, call_id: _Optional[str] = ..., trunk_id: _Optional[str] = ..., room_name: _Optional[str] = ..., room_id: _Optional[str] = ..., participant_identity: _Optional[str] = ..., from_uri: _Optional[_Union[SIPUri, _Mapping]] = ..., to_uri: _Optional[_Union[SIPUri, _Mapping]] = ..., call_status: _Optional[_Union[SIPCallStatus, str]] = ..., created_at: _Optional[int] = ..., started_at: _Optional[int] = ..., ended_at: _Optional[int] = ..., disconnect_reason: _Optional[_Union[_models.DisconnectReason, str]] = ..., error: _Optional[str] = ...) -> None: ... + +class SIPUri(_message.Message): + __slots__ = ("user", "host", "ip", "port", "transport") + USER_FIELD_NUMBER: _ClassVar[int] + HOST_FIELD_NUMBER: _ClassVar[int] + IP_FIELD_NUMBER: _ClassVar[int] + PORT_FIELD_NUMBER: _ClassVar[int] + TRANSPORT_FIELD_NUMBER: _ClassVar[int] + user: str + host: str + ip: str + port: str + transport: SIPTransport + def __init__(self, user: _Optional[str] = ..., host: _Optional[str] = ..., ip: _Optional[str] = ..., port: _Optional[str] = ..., transport: _Optional[_Union[SIPTransport, str]] = ...) -> None: ... diff --git a/livekit-protocol/livekit/protocol/version.py b/livekit-protocol/livekit/protocol/version.py index 906d362f..49e0fc1e 100644 --- a/livekit-protocol/livekit/protocol/version.py +++ b/livekit-protocol/livekit/protocol/version.py @@ -1 +1 @@ -__version__ = "0.6.0" +__version__ = "0.7.0" diff --git a/livekit-protocol/livekit/protocol/webhook.py b/livekit-protocol/livekit/protocol/webhook.py index 7c9f12c4..127a70fb 100644 --- a/livekit-protocol/livekit/protocol/webhook.py +++ b/livekit-protocol/livekit/protocol/webhook.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: livekit_webhook.proto -# Protobuf Python Version: 4.25.3 +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool diff --git a/livekit-protocol/protocol b/livekit-protocol/protocol index 5c7350d2..3aee320b 160000 --- a/livekit-protocol/protocol +++ b/livekit-protocol/protocol @@ -1 +1 @@ -Subproject commit 5c7350d25904ed8fd8163e91ff47f0577ca6afad +Subproject commit 3aee320bc87c9ce02d0f51a9155b5817647b287d From 256763673d8701ee8d2b2fd509d6e96c3ca46525 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Wed, 13 Nov 2024 01:34:19 -0600 Subject: [PATCH 2/3] version bump api to 0.8.0 (#305) --- livekit-api/livekit/api/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/livekit-api/livekit/api/version.py b/livekit-api/livekit/api/version.py index a5f830a2..777f190d 100644 --- a/livekit-api/livekit/api/version.py +++ b/livekit-api/livekit/api/version.py @@ -1 +1 @@ -__version__ = "0.7.1" +__version__ = "0.8.0" From bc48e910c1d0e096ce9b163149f013a096204cd7 Mon Sep 17 00:00:00 2001 From: Ben Cherry Date: Thu, 14 Nov 2024 09:20:17 -0800 Subject: [PATCH 3/3] Improve reference docs for Server APIs (#306) --- .gitignore | 4 +- livekit-api/livekit/api/__init__.py | 25 +- .../livekit/api/agent_dispatch_service.py | 47 ++-- livekit-api/livekit/api/egress_service.py | 82 +++--- livekit-api/livekit/api/ingress_service.py | 47 ++-- livekit-api/livekit/api/livekit_api.py | 51 +++- livekit-api/livekit/api/room_service.py | 241 +++++++++++++++--- livekit-api/livekit/api/sip_service.py | 108 +++++--- livekit-api/livekit/api/webhook.py | 6 +- 9 files changed, 449 insertions(+), 162 deletions(-) diff --git a/.gitignore b/.gitignore index 1756b987..ea0eda1f 100644 --- a/.gitignore +++ b/.gitignore @@ -162,4 +162,6 @@ cython_debug/ # vscode project settings .vscode -.DS_Store \ No newline at end of file +.DS_Store + +docs \ No newline at end of file diff --git a/livekit-api/livekit/api/__init__.py b/livekit-api/livekit/api/__init__.py index 0355cbb4..6debf821 100644 --- a/livekit-api/livekit/api/__init__.py +++ b/livekit-api/livekit/api/__init__.py @@ -12,7 +12,16 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""LiveKit API SDK""" +"""LiveKit Server APIs for Python + +`pip install livekit-api` + +Manage rooms, participants, egress, ingress, SIP, and Agent dispatch. + +Primary entry point is `LiveKitAPI`. + +See https://docs.livekit.io/reference/server/server-apis for more information. +""" # flake8: noqa # re-export packages from protocol @@ -30,3 +39,17 @@ from .access_token import VideoGrants, SIPGrants, AccessToken, TokenVerifier from .webhook import WebhookReceiver from .version import __version__ + +__all__ = [ + "LiveKitAPI", + "room_service", + "egress_service", + "ingress_service", + "sip_service", + "agent_dispatch_service", + "VideoGrants", + "SIPGrants", + "AccessToken", + "TokenVerifier", + "WebhookReceiver", +] diff --git a/livekit-api/livekit/api/agent_dispatch_service.py b/livekit-api/livekit/api/agent_dispatch_service.py index 769bf200..5cdfc1e7 100644 --- a/livekit-api/livekit/api/agent_dispatch_service.py +++ b/livekit-api/livekit/api/agent_dispatch_service.py @@ -1,16 +1,29 @@ import aiohttp from typing import Optional -from livekit.protocol import agent_dispatch as proto_agent_dispatch +from livekit.protocol.agent_dispatch import ( + CreateAgentDispatchRequest, + AgentDispatch, + DeleteAgentDispatchRequest, + ListAgentDispatchRequest, + ListAgentDispatchResponse, +) from ._service import Service from .access_token import VideoGrants SVC = "AgentDispatchService" +"""@private""" class AgentDispatchService(Service): """Manage agent dispatches. Service APIs require roomAdmin permissions. - An easier way to construct this service is via LiveKitAPI.agent_dispatch. + Recommended way to use this service is via `livekit.api.LiveKitAPI`: + + ```python + from livekit import api + lkapi = api.LiveKitAPI() + agent_dispatch = lkapi.agent_dispatch + ``` """ def __init__( @@ -18,9 +31,7 @@ def __init__( ): super().__init__(session, url, api_key, api_secret) - async def create_dispatch( - self, req: proto_agent_dispatch.CreateAgentDispatchRequest - ) -> proto_agent_dispatch.AgentDispatch: + async def create_dispatch(self, req: CreateAgentDispatchRequest) -> AgentDispatch: """Create an explicit dispatch for an agent to join a room. To use explicit dispatch, your agent must be registered with an `agentName`. @@ -36,12 +47,10 @@ async def create_dispatch( "CreateDispatch", req, self._auth_header(VideoGrants(room_admin=True, room=req.room)), - proto_agent_dispatch.AgentDispatch, + AgentDispatch, ) - async def delete_dispatch( - self, dispatch_id: str, room_name: str - ) -> proto_agent_dispatch.AgentDispatch: + async def delete_dispatch(self, dispatch_id: str, room_name: str) -> AgentDispatch: """Delete an explicit dispatch for an agent in a room. Args: @@ -54,17 +63,15 @@ async def delete_dispatch( return await self._client.request( SVC, "DeleteDispatch", - proto_agent_dispatch.DeleteAgentDispatchRequest( + DeleteAgentDispatchRequest( dispatch_id=dispatch_id, room=room_name, ), self._auth_header(VideoGrants(room_admin=True, room=room_name)), - proto_agent_dispatch.AgentDispatch, + AgentDispatch, ) - async def list_dispatch( - self, room_name: str - ) -> list[proto_agent_dispatch.AgentDispatch]: + async def list_dispatch(self, room_name: str) -> list[AgentDispatch]: """List all agent dispatches in a room. Args: @@ -76,15 +83,15 @@ async def list_dispatch( res = await self._client.request( SVC, "ListDispatch", - proto_agent_dispatch.ListAgentDispatchRequest(room=room_name), + ListAgentDispatchRequest(room=room_name), self._auth_header(VideoGrants(room_admin=True, room=room_name)), - proto_agent_dispatch.ListAgentDispatchResponse, + ListAgentDispatchResponse, ) return list(res.agent_dispatches) async def get_dispatch( self, dispatch_id: str, room_name: str - ) -> Optional[proto_agent_dispatch.AgentDispatch]: + ) -> Optional[AgentDispatch]: """Get an Agent dispatch by ID Args: @@ -97,11 +104,9 @@ async def get_dispatch( res = await self._client.request( SVC, "ListDispatch", - proto_agent_dispatch.ListAgentDispatchRequest( - dispatch_id=dispatch_id, room=room_name - ), + ListAgentDispatchRequest(dispatch_id=dispatch_id, room=room_name), self._auth_header(VideoGrants(room_admin=True, room=room_name)), - proto_agent_dispatch.ListAgentDispatchResponse, + ListAgentDispatchResponse, ) if len(res.agent_dispatches) > 0: return res.agent_dispatches[0] diff --git a/livekit-api/livekit/api/egress_service.py b/livekit-api/livekit/api/egress_service.py index a875459b..b5d4984e 100644 --- a/livekit-api/livekit/api/egress_service.py +++ b/livekit-api/livekit/api/egress_service.py @@ -1,112 +1,126 @@ import aiohttp -from livekit.protocol import egress as proto_egress +from livekit.protocol.egress import ( + RoomCompositeEgressRequest, + WebEgressRequest, + ParticipantEgressRequest, + TrackCompositeEgressRequest, + TrackEgressRequest, + UpdateLayoutRequest, + UpdateStreamRequest, + ListEgressRequest, + StopEgressRequest, + EgressInfo, + ListEgressResponse, +) from ._service import Service from .access_token import VideoGrants SVC = "Egress" +"""@private""" class EgressService(Service): + """Client for LiveKit Egress Service API + + Recommended way to use this service is via `livekit.api.LiveKitAPI`: + + ```python + from livekit import api + lkapi = api.LiveKitAPI() + egress = lkapi.egress + ``` + + Also see https://docs.livekit.io/home/egress/overview/ + """ + def __init__( self, session: aiohttp.ClientSession, url: str, api_key: str, api_secret: str ): super().__init__(session, url, api_key, api_secret) async def start_room_composite_egress( - self, start: proto_egress.RoomCompositeEgressRequest - ) -> proto_egress.EgressInfo: + self, start: RoomCompositeEgressRequest + ) -> EgressInfo: return await self._client.request( SVC, "StartRoomCompositeEgress", start, self._auth_header(VideoGrants(room_record=True)), - proto_egress.EgressInfo, + EgressInfo, ) - async def start_web_egress( - self, start: proto_egress.WebEgressRequest - ) -> proto_egress.EgressInfo: + async def start_web_egress(self, start: WebEgressRequest) -> EgressInfo: return await self._client.request( SVC, "StartWebEgress", start, self._auth_header(VideoGrants(room_record=True)), - proto_egress.EgressInfo, + EgressInfo, ) async def start_participant_egress( - self, start: proto_egress.ParticipantEgressRequest - ) -> proto_egress.EgressInfo: + self, start: ParticipantEgressRequest + ) -> EgressInfo: return await self._client.request( SVC, "StartParticipantEgress", start, self._auth_header(VideoGrants(room_record=True)), - proto_egress.EgressInfo, + EgressInfo, ) async def start_track_composite_egress( - self, start: proto_egress.TrackCompositeEgressRequest - ) -> proto_egress.EgressInfo: + self, start: TrackCompositeEgressRequest + ) -> EgressInfo: return await self._client.request( SVC, "StartTrackCompositeEgress", start, self._auth_header(VideoGrants(room_record=True)), - proto_egress.EgressInfo, + EgressInfo, ) - async def start_track_egress( - self, start: proto_egress.TrackEgressRequest - ) -> proto_egress.EgressInfo: + async def start_track_egress(self, start: TrackEgressRequest) -> EgressInfo: return await self._client.request( SVC, "StartTrackEgress", start, self._auth_header(VideoGrants(room_record=True)), - proto_egress.EgressInfo, + EgressInfo, ) - async def update_layout( - self, update: proto_egress.UpdateLayoutRequest - ) -> proto_egress.EgressInfo: + async def update_layout(self, update: UpdateLayoutRequest) -> EgressInfo: return await self._client.request( SVC, "UpdateLayout", update, self._auth_header(VideoGrants(room_record=True)), - proto_egress.EgressInfo, + EgressInfo, ) - async def update_stream( - self, update: proto_egress.UpdateStreamRequest - ) -> proto_egress.EgressInfo: + async def update_stream(self, update: UpdateStreamRequest) -> EgressInfo: return await self._client.request( SVC, "UpdateStream", update, self._auth_header(VideoGrants(room_record=True)), - proto_egress.EgressInfo, + EgressInfo, ) - async def list_egress( - self, list: proto_egress.ListEgressRequest - ) -> proto_egress.ListEgressResponse: + async def list_egress(self, list: ListEgressRequest) -> ListEgressResponse: return await self._client.request( SVC, "ListEgress", list, self._auth_header(VideoGrants(room_record=True)), - proto_egress.ListEgressResponse, + ListEgressResponse, ) - async def stop_egress( - self, stop: proto_egress.StopEgressRequest - ) -> proto_egress.EgressInfo: + async def stop_egress(self, stop: StopEgressRequest) -> EgressInfo: return await self._client.request( SVC, "StopEgress", stop, self._auth_header(VideoGrants(room_record=True)), - proto_egress.EgressInfo, + EgressInfo, ) diff --git a/livekit-api/livekit/api/ingress_service.py b/livekit-api/livekit/api/ingress_service.py index abf691ef..7b658bb8 100644 --- a/livekit-api/livekit/api/ingress_service.py +++ b/livekit-api/livekit/api/ingress_service.py @@ -1,57 +1,70 @@ import aiohttp -from livekit.protocol import ingress as proto_ingress +from livekit.protocol.ingress import ( + CreateIngressRequest, + IngressInfo, + UpdateIngressRequest, + ListIngressRequest, + DeleteIngressRequest, + ListIngressResponse, +) from ._service import Service from .access_token import VideoGrants SVC = "Ingress" +"""@private""" class IngressService(Service): + """Client for LiveKit Ingress Service API + + Recommended way to use this service is via `livekit.api.LiveKitAPI`: + + ```python + from livekit import api + lkapi = api.LiveKitAPI() + ingress = lkapi.ingress + ``` + + Also see https://docs.livekit.io/home/ingress/overview/ + """ + def __init__( self, session: aiohttp.ClientSession, url: str, api_key: str, api_secret: str ): super().__init__(session, url, api_key, api_secret) - async def create_ingress( - self, create: proto_ingress.CreateIngressRequest - ) -> proto_ingress.IngressInfo: + async def create_ingress(self, create: CreateIngressRequest) -> IngressInfo: return await self._client.request( SVC, "CreateIngress", create, self._auth_header(VideoGrants(ingress_admin=True)), - proto_ingress.IngressInfo, + IngressInfo, ) - async def update_ingress( - self, update: proto_ingress.UpdateIngressRequest - ) -> proto_ingress.IngressInfo: + async def update_ingress(self, update: UpdateIngressRequest) -> IngressInfo: return await self._client.request( SVC, "UpdateIngress", update, self._auth_header(VideoGrants(ingress_admin=True)), - proto_ingress.IngressInfo, + IngressInfo, ) - async def list_ingress( - self, list: proto_ingress.ListIngressRequest - ) -> proto_ingress.ListIngressResponse: + async def list_ingress(self, list: ListIngressRequest) -> ListIngressResponse: return await self._client.request( SVC, "ListIngress", list, self._auth_header(VideoGrants(ingress_admin=True)), - proto_ingress.ListIngressResponse, + ListIngressResponse, ) - async def delete_ingress( - self, delete: proto_ingress.DeleteIngressRequest - ) -> proto_ingress.IngressInfo: + async def delete_ingress(self, delete: DeleteIngressRequest) -> IngressInfo: return await self._client.request( SVC, "DeleteIngress", delete, self._auth_header(VideoGrants(ingress_admin=True)), - proto_ingress.IngressInfo, + IngressInfo, ) diff --git a/livekit-api/livekit/api/livekit_api.py b/livekit-api/livekit/api/livekit_api.py index 29834842..63efda02 100644 --- a/livekit-api/livekit/api/livekit_api.py +++ b/livekit-api/livekit/api/livekit_api.py @@ -9,6 +9,19 @@ class LiveKitAPI: + """LiveKit Server API Client + + This class is the main entrypoint, which exposes all services. + + Usage: + + ```python + from livekit import api + lkapi = api.LiveKitAPI() + rooms = await lkapi.room.list_rooms(api.proto_room.ListRoomsRequest(names=['test-room'])) + ``` + """ + def __init__( self, url: Optional[str] = None, @@ -17,6 +30,14 @@ def __init__( *, timeout: aiohttp.ClientTimeout = aiohttp.ClientTimeout(total=60), # 60 seconds ): + """Create a new LiveKitAPI instance. + + Args: + url: LiveKit server URL (read from `LIVEKIT_URL` environment variable if not provided) + api_key: API key (read from `LIVEKIT_API_KEY` environment variable if not provided) + api_secret: API secret (read from `LIVEKIT_API_SECRET` environment variable if not provided) + timeout: Request timeout (default: 60 seconds) + """ url = url or os.getenv("LIVEKIT_URL") api_key = api_key or os.getenv("LIVEKIT_API_KEY") api_secret = api_secret or os.getenv("LIVEKIT_API_SECRET") @@ -37,24 +58,44 @@ def __init__( ) @property - def agent_dispatch(self): + def agent_dispatch(self) -> AgentDispatchService: + """Instance of the AgentDispatchService""" return self._agent_dispatch @property - def room(self): + def room(self) -> RoomService: + """Instance of the RoomService""" return self._room @property - def ingress(self): + def ingress(self) -> IngressService: + """Instance of the IngressService""" return self._ingress @property - def egress(self): + def egress(self) -> EgressService: + """Instance of the EgressService""" return self._egress @property - def sip(self): + def sip(self) -> SipService: + """Instance of the SipService""" return self._sip async def aclose(self): + """Close the API client + + Call this before your application exits or when the API client is no longer needed.""" await self._session.close() + + async def __aenter__(self): + """@private + + Support for `async with`""" + return self + + async def __aexit__(self, exc_type, exc_val, exc_tb): + """@private + + Support for `async with`""" + await self.aclose() diff --git a/livekit-api/livekit/api/room_service.py b/livekit-api/livekit/api/room_service.py index 9c1b197a..353a5ec8 100644 --- a/livekit-api/livekit/api/room_service.py +++ b/livekit-api/livekit/api/room_service.py @@ -1,136 +1,297 @@ import aiohttp -from livekit.protocol import room as proto_room -from livekit.protocol import models as proto_models +from livekit.protocol.room import ( + CreateRoomRequest, + ListRoomsRequest, + DeleteRoomRequest, + ListRoomsResponse, + DeleteRoomResponse, + ListParticipantsRequest, + ListParticipantsResponse, + RoomParticipantIdentity, + MuteRoomTrackRequest, + MuteRoomTrackResponse, + UpdateParticipantRequest, + UpdateSubscriptionsRequest, + SendDataRequest, + SendDataResponse, + UpdateRoomMetadataRequest, + RemoveParticipantResponse, + UpdateSubscriptionsResponse, +) +from livekit.protocol.models import Room, ParticipantInfo from ._service import Service from .access_token import VideoGrants SVC = "RoomService" +"""@private""" class RoomService(Service): + """Client for LiveKit RoomService API + + Recommended way to use this service is via `livekit.api.LiveKitAPI`: + + ```python + from livekit import api + lkapi = api.LiveKitAPI() + room_service = lkapi.room + ``` + + Also see https://docs.livekit.io/home/server/managing-rooms/ and https://docs.livekit.io/home/server/managing-participants/ + """ + def __init__( self, session: aiohttp.ClientSession, url: str, api_key: str, api_secret: str ): super().__init__(session, url, api_key, api_secret) async def create_room( - self, create: proto_room.CreateRoomRequest - ) -> proto_models.Room: + self, + create: CreateRoomRequest, + ) -> Room: + """Creates a new room with specified configuration. + + Args: + create (CreateRoomRequest): arg containing: + - name: str - Unique room name + - empty_timeout: int - Seconds to keep room open if empty + - max_participants: int - Max allowed participants + - metadata: str - Custom room metadata + - egress: RoomEgress - Egress configuration + - min_playout_delay: int - Minimum playout delay in ms + - max_playout_delay: int - Maximum playout delay in ms + - sync_streams: bool - Enable A/V sync for playout delays >200ms + + Returns: + Room: The created room object + """ return await self._client.request( SVC, "CreateRoom", create, self._auth_header(VideoGrants(room_create=True)), - proto_models.Room, + Room, ) - async def list_rooms( - self, list: proto_room.ListRoomsRequest - ) -> proto_room.ListRoomsResponse: + async def list_rooms(self, list: ListRoomsRequest) -> ListRoomsResponse: + """Lists active rooms. + + Args: + list (ListRoomsRequest): arg containing: + - names: list[str] - Optional list of room names to filter by + + Returns: + ListRoomsResponse: + - rooms: list[Room] - List of active Room objects + """ return await self._client.request( SVC, "ListRooms", list, self._auth_header(VideoGrants(room_list=True)), - proto_room.ListRoomsResponse, + ListRoomsResponse, ) - async def delete_room( - self, delete: proto_room.DeleteRoomRequest - ) -> proto_room.DeleteRoomResponse: + async def delete_room(self, delete: DeleteRoomRequest) -> DeleteRoomResponse: + """Deletes a room and disconnects all participants. + + Args: + delete (DeleteRoomRequest): arg containing: + - room: str - Name of room to delete + + Returns: + DeleteRoomResponse: Empty response object + """ return await self._client.request( SVC, "DeleteRoom", delete, self._auth_header(VideoGrants(room_create=True)), - proto_room.DeleteRoomResponse, + DeleteRoomResponse, ) - async def update_room_metadata( - self, update: proto_room.UpdateRoomMetadataRequest - ) -> proto_models.Room: + async def update_room_metadata(self, update: UpdateRoomMetadataRequest) -> Room: + """Updates a room's [metadata](https://docs.livekit.io/home/client/data/room-metadata/). + + Args: + update (UpdateRoomMetadataRequest): arg containing: + - room: str - Name of room to update + - metadata: str - New metadata to set + + Returns: + Room: Updated Room object + """ return await self._client.request( SVC, "UpdateRoomMetadata", update, self._auth_header(VideoGrants(room_admin=True, room=update.room)), - proto_models.Room, + Room, ) async def list_participants( - self, list: proto_room.ListParticipantsRequest - ) -> proto_room.ListParticipantsResponse: + self, list: ListParticipantsRequest + ) -> ListParticipantsResponse: + """Lists all participants in a room. + + Args: + list (ListParticipantsRequest): arg containing: + - room: str - Name of room to list participants from + + Returns: + ListParticipantsResponse: + - participants: list[ParticipantInfo] - List of participant details + """ return await self._client.request( SVC, "ListParticipants", list, self._auth_header(VideoGrants(room_admin=True, room=list.room)), - proto_room.ListParticipantsResponse, + ListParticipantsResponse, ) - async def get_participant( - self, get: proto_room.RoomParticipantIdentity - ) -> proto_models.ParticipantInfo: + async def get_participant(self, get: RoomParticipantIdentity) -> ParticipantInfo: + """Gets details about a specific participant. + + Args: + get (RoomParticipantIdentity): arg containing: + - room: str - Room name + - identity: str - Participant identity to look up + + Returns: + ParticipantInfo: + - sid: str - Participant session ID + - identity: str - Participant identity + - state: int - Connection state + - tracks: list[TrackInfo] - Published tracks + - metadata: str - Participant metadata + - joined_at: int - Join timestamp + - name: str - Display name + - version: int - Protocol version + - permission: ParticipantPermission - Granted permissions + - region: str - Connected region + """ return await self._client.request( SVC, "GetParticipant", get, self._auth_header(VideoGrants(room_admin=True, room=get.room)), - proto_models.ParticipantInfo, + ParticipantInfo, ) async def remove_participant( - self, remove: proto_room.RoomParticipantIdentity - ) -> proto_room.RemoveParticipantResponse: + self, remove: RoomParticipantIdentity + ) -> RemoveParticipantResponse: + """Removes a participant from a room. + + Args: + remove (RoomParticipantIdentity): arg containing: + - room: str - Room name + - identity: str - Identity of participant to remove + + Returns: + RemoveParticipantResponse: Empty response object + """ return await self._client.request( SVC, "RemoveParticipant", remove, self._auth_header(VideoGrants(room_admin=True, room=remove.room)), - proto_room.RemoveParticipantResponse, + RemoveParticipantResponse, ) async def mute_published_track( self, - update: proto_room.MuteRoomTrackRequest, - ) -> proto_room.MuteRoomTrackResponse: + update: MuteRoomTrackRequest, + ) -> MuteRoomTrackResponse: + """Mutes or unmutes a participant's published track. + + Args: + update (MuteRoomTrackRequest): arg containing: + - room: str - Room name + - identity: str - Participant identity + - track_sid: str - Track session ID to mute + - muted: bool - True to mute, False to unmute + + Returns: + MuteRoomTrackResponse containing: + - track: TrackInfo - Updated track information + """ return await self._client.request( SVC, "MutePublishedTrack", update, self._auth_header(VideoGrants(room_admin=True, room=update.room)), - proto_room.MuteRoomTrackResponse, + MuteRoomTrackResponse, ) async def update_participant( - self, update: proto_room.UpdateParticipantRequest - ) -> proto_models.ParticipantInfo: + self, update: UpdateParticipantRequest + ) -> ParticipantInfo: + """Updates a participant's metadata or permissions. + + Args: + update (UpdateParticipantRequest): arg containing: + - room: str - Room name + - identity: str - Participant identity + - metadata: str - New metadata + - permission: ParticipantPermission - New permissions + - name: str - New display name + - attributes: dict[str, str] - Key-value attributes + + Returns: + ParticipantInfo: Updated participant information + """ return await self._client.request( SVC, "UpdateParticipant", update, self._auth_header(VideoGrants(room_admin=True, room=update.room)), - proto_models.ParticipantInfo, + ParticipantInfo, ) async def update_subscriptions( - self, update: proto_room.UpdateSubscriptionsRequest - ) -> proto_room.UpdateSubscriptionsResponse: + self, update: UpdateSubscriptionsRequest + ) -> UpdateSubscriptionsResponse: + """Updates a participant's track subscriptions. + + Args: + update (UpdateSubscriptionsRequest): arg containing: + - room: str - Room name + - identity: str - Participant identity + - track_sids: list[str] - Track session IDs + - subscribe: bool - True to subscribe, False to unsubscribe + - participant_tracks: list[ParticipantTracks] - Participant track mappings + + Returns: + UpdateSubscriptionsResponse: Empty response object + """ return await self._client.request( SVC, "UpdateSubscriptions", update, self._auth_header(VideoGrants(room_admin=True, room=update.room)), - proto_room.UpdateSubscriptionsResponse, + UpdateSubscriptionsResponse, ) - async def send_data( - self, send: proto_room.SendDataRequest - ) -> proto_room.SendDataResponse: + async def send_data(self, send: SendDataRequest) -> SendDataResponse: + """Sends data to participants in a room. + + Args: + send (SendDataRequest): arg containing: + - room: str - Room name + - data: bytes - Data payload to send + - kind: DataPacket.Kind - RELIABLE or LOSSY delivery + - destination_identities: list[str] - Target participant identities + - topic: str - Optional topic for the message + + Returns: + SendDataResponse: Empty response object + """ return await self._client.request( SVC, "SendData", send, self._auth_header(VideoGrants(room_admin=True, room=send.room)), - proto_room.SendDataResponse, + SendDataResponse, ) diff --git a/livekit-api/livekit/api/sip_service.py b/livekit-api/livekit/api/sip_service.py index 6d3f122e..eee8bcff 100644 --- a/livekit-api/livekit/api/sip_service.py +++ b/livekit-api/livekit/api/sip_service.py @@ -1,141 +1,169 @@ import aiohttp -from livekit.protocol import sip as proto_sip +from livekit.protocol.sip import ( + CreateSIPTrunkRequest, + SIPTrunkInfo, + CreateSIPInboundTrunkRequest, + SIPInboundTrunkInfo, + CreateSIPOutboundTrunkRequest, + SIPOutboundTrunkInfo, + ListSIPTrunkRequest, + ListSIPTrunkResponse, + ListSIPInboundTrunkRequest, + ListSIPInboundTrunkResponse, + ListSIPOutboundTrunkRequest, + ListSIPOutboundTrunkResponse, + DeleteSIPTrunkRequest, + SIPDispatchRuleInfo, + CreateSIPDispatchRuleRequest, + ListSIPDispatchRuleRequest, + ListSIPDispatchRuleResponse, + DeleteSIPDispatchRuleRequest, + CreateSIPParticipantRequest, + TransferSIPParticipantRequest, + SIPParticipantInfo, +) from ._service import Service from .access_token import VideoGrants, SIPGrants SVC = "SIP" +"""@private""" class SipService(Service): + """Client for LiveKit SIP Service API + + Recommended way to use this service is via `livekit.api.LiveKitAPI`: + + ```python + from livekit import api + lkapi = api.LiveKitAPI() + sip_service = lkapi.sip + ``` + """ + def __init__( self, session: aiohttp.ClientSession, url: str, api_key: str, api_secret: str ): super().__init__(session, url, api_key, api_secret) - async def create_sip_trunk( - self, create: proto_sip.CreateSIPTrunkRequest - ) -> proto_sip.SIPTrunkInfo: + async def create_sip_trunk(self, create: CreateSIPTrunkRequest) -> SIPTrunkInfo: return await self._client.request( SVC, "CreateSIPTrunk", create, self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), - proto_sip.SIPTrunkInfo, + SIPTrunkInfo, ) async def create_sip_inbound_trunk( - self, create: proto_sip.CreateSIPInboundTrunkRequest - ) -> proto_sip.SIPInboundTrunkInfo: + self, create: CreateSIPInboundTrunkRequest + ) -> SIPInboundTrunkInfo: return await self._client.request( SVC, "CreateSIPInboundTrunk", create, self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), - proto_sip.SIPInboundTrunkInfo, + SIPInboundTrunkInfo, ) async def create_sip_outbound_trunk( - self, create: proto_sip.CreateSIPOutboundTrunkRequest - ) -> proto_sip.SIPOutboundTrunkInfo: + self, create: CreateSIPOutboundTrunkRequest + ) -> SIPOutboundTrunkInfo: return await self._client.request( SVC, "CreateSIPOutboundTrunk", create, self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), - proto_sip.SIPOutboundTrunkInfo, + SIPOutboundTrunkInfo, ) - async def list_sip_trunk( - self, list: proto_sip.ListSIPTrunkRequest - ) -> proto_sip.ListSIPTrunkResponse: + async def list_sip_trunk(self, list: ListSIPTrunkRequest) -> ListSIPTrunkResponse: return await self._client.request( SVC, "ListSIPTrunk", list, self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), - proto_sip.ListSIPTrunkResponse, + ListSIPTrunkResponse, ) async def list_sip_inbound_trunk( - self, list: proto_sip.ListSIPInboundTrunkRequest - ) -> proto_sip.ListSIPInboundTrunkResponse: + self, list: ListSIPInboundTrunkRequest + ) -> ListSIPInboundTrunkResponse: return await self._client.request( SVC, "ListSIPInboundTrunk", list, self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), - proto_sip.ListSIPInboundTrunkResponse, + ListSIPInboundTrunkResponse, ) async def list_sip_outbound_trunk( - self, list: proto_sip.ListSIPOutboundTrunkRequest - ) -> proto_sip.ListSIPOutboundTrunkResponse: + self, list: ListSIPOutboundTrunkRequest + ) -> ListSIPOutboundTrunkResponse: return await self._client.request( SVC, "ListSIPOutboundTrunk", list, self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), - proto_sip.ListSIPOutboundTrunkResponse, + ListSIPOutboundTrunkResponse, ) - async def delete_sip_trunk( - self, delete: proto_sip.DeleteSIPTrunkRequest - ) -> proto_sip.SIPTrunkInfo: + async def delete_sip_trunk(self, delete: DeleteSIPTrunkRequest) -> SIPTrunkInfo: return await self._client.request( SVC, "DeleteSIPTrunk", delete, self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), - proto_sip.SIPTrunkInfo, + SIPTrunkInfo, ) async def create_sip_dispatch_rule( - self, create: proto_sip.CreateSIPDispatchRuleRequest - ) -> proto_sip.SIPDispatchRuleInfo: + self, create: CreateSIPDispatchRuleRequest + ) -> SIPDispatchRuleInfo: return await self._client.request( SVC, "CreateSIPDispatchRule", create, self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), - proto_sip.SIPDispatchRuleInfo, + SIPDispatchRuleInfo, ) async def list_sip_dispatch_rule( - self, list: proto_sip.ListSIPDispatchRuleRequest - ) -> proto_sip.ListSIPDispatchRuleResponse: + self, list: ListSIPDispatchRuleRequest + ) -> ListSIPDispatchRuleResponse: return await self._client.request( SVC, "ListSIPDispatchRule", list, self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), - proto_sip.ListSIPDispatchRuleResponse, + ListSIPDispatchRuleResponse, ) async def delete_sip_dispatch_rule( - self, delete: proto_sip.DeleteSIPDispatchRuleRequest - ) -> proto_sip.SIPDispatchRuleInfo: + self, delete: DeleteSIPDispatchRuleRequest + ) -> SIPDispatchRuleInfo: return await self._client.request( SVC, "DeleteSIPDispatchRule", delete, self._auth_header(VideoGrants(), sip=SIPGrants(admin=True)), - proto_sip.SIPDispatchRuleInfo, + SIPDispatchRuleInfo, ) async def create_sip_participant( - self, create: proto_sip.CreateSIPParticipantRequest - ) -> proto_sip.SIPParticipantInfo: + self, create: CreateSIPParticipantRequest + ) -> SIPParticipantInfo: return await self._client.request( SVC, "CreateSIPParticipant", create, self._auth_header(VideoGrants(), sip=SIPGrants(call=True)), - proto_sip.SIPParticipantInfo, + SIPParticipantInfo, ) async def transfer_sip_participant( - self, transfer: proto_sip.TransferSIPParticipantRequest - ) -> proto_sip.SIPParticipantInfo: + self, transfer: TransferSIPParticipantRequest + ) -> SIPParticipantInfo: return await self._client.request( SVC, "TransferSIPParticipant", @@ -147,5 +175,5 @@ async def transfer_sip_participant( ), sip=SIPGrants(call=True), ), - proto_sip.SIPParticipantInfo, + SIPParticipantInfo, ) diff --git a/livekit-api/livekit/api/webhook.py b/livekit-api/livekit/api/webhook.py index 5dedf048..9f500637 100644 --- a/livekit-api/livekit/api/webhook.py +++ b/livekit-api/livekit/api/webhook.py @@ -1,5 +1,5 @@ from .access_token import TokenVerifier -from livekit.protocol import webhook as proto_webhook +from livekit.protocol.webhook import WebhookEvent from google.protobuf.json_format import Parse import hashlib import base64 @@ -9,7 +9,7 @@ class WebhookReceiver: def __init__(self, token_verifier: TokenVerifier): self._verifier = token_verifier - def receive(self, body: str, auth_token: str) -> proto_webhook.WebhookEvent: + def receive(self, body: str, auth_token: str) -> WebhookEvent: claims = self._verifier.verify(auth_token) if claims.sha256 is None: raise Exception("sha256 was not found in the token") @@ -20,4 +20,4 @@ def receive(self, body: str, auth_token: str) -> proto_webhook.WebhookEvent: if body_hash != claims_hash: raise Exception("hash mismatch") - return Parse(body, proto_webhook.WebhookEvent(), ignore_unknown_fields=True) + return Parse(body, WebhookEvent(), ignore_unknown_fields=True)